Skip to main content
Glama
assetlab-canada

AssetLab MCP Server

Official

AssetLab MCP Server

npm version weekly downloads types license

Talk to your assets. Connect Claude, ChatGPT, Microsoft Copilot, or any MCP-compatible client to your AssetLab account through the Model Context Protocol - ask about work orders, PM schedules, capital plans, and infrastructure networks in plain language, and create or update records hands-free.

480+ tools across 100+ resources · scoped, tenant-bound, audited · read and write · hosted or local


Quick start

Claude.ai (hosted - easiest)

  1. Create an API key in AssetLab → Settings → API Keys

  2. In Claude.ai: Settings → Connectors → Add connector

  3. Paste the connector URL: https://mcp.assetlab.ca

  4. When prompted for auth, paste your API key (al_live_...)

ChatGPT

  1. Create an API key in AssetLab → Settings → API Keys

  2. In ChatGPT: Settings → Apps & Connectors → Add new connector

  3. Name it (e.g. AssetLab) and enter the server URL: https://mcp.assetlab.ca

  4. Set authentication to OAuth and click Create - the OAuth endpoints are auto-discovered

  5. On the AssetLab authorization page, paste your API key (al_live_...)

Microsoft Copilot (via Copilot Studio)

Copilot chat has no "add a server" field, so one person builds an agent once and publishes it; staff then use that agent inside ordinary Microsoft 365 Copilot.

  1. Create an API key in AssetLab → Settings → API Keys

  2. In Copilot Studio, open an agent with generative orchestration and choose Tools → Add a tool → New tool → Model Context Protocol

  3. Server URL: https://mcp.assetlab.ca/mcp?profile=core

  4. Authentication API key, type Header, header name Authorization; the connection value is Bearer al_live_...

  5. Publish the agent to the Microsoft 365 Copilot channel and have an admin approve it

Use the ?profile=core address here. Copilot Studio caps an agent at 128 tools and recommends 25-30; this server publishes 480+, and the core profile answers with 28 covering sites, buildings, assets, work orders, work requests, PM schedules and vendors. Claude and ChatGPT have no such cap and should use the plain URL.

Claude Desktop / Claude Code (local, stdio)

This package runs as a local MCP server over stdio - nothing is exposed on the network.

{
  "mcpServers": {
    "assetlab": {
      "command": "npx",
      "args": ["-y", "@assetlab/mcp-server"],
      "env": {
        "ASSETLAB_API_KEY": "al_live_...",
        "ASSETLAB_API_URL": "https://<your-project>.supabase.co/functions/v1/api-gateway"
      }
    }
  }
}

Your AssetLab administrator can provide the API URL for your organization.


Related MCP server: Taskade MCP Server

What can you ask?

You say

It does

"Show me all overdue work orders"

Lists them, sorted, with links back to AssetLab

"Create a work order for the broken pump in Building 3"

Looks up the building and asset, then creates it

"Which projects are at risk or delayed?"

Scans project status and risks

"What's the total cost history for Asset X?"

Aggregates every cost record

"List watermains over 500 mm in poor condition"

Filters infrastructure features by diameter and condition

"Add a crack-sealing event to the sidewalk strategy at $4 per square metre"

Maintains your lifecycle strategies

"What PM schedules are due this month?"

Checks every schedule's next due date

"Update the priority on WO-1234 to urgent"

Edits the record (with your write scope)


What's new in 2.7

A curated tool profile for Microsoft Copilot. Adding ?profile=core to the hosted server URL publishes 28 tools instead of 480+, which is what makes the server usable in clients that cap how many tools one agent may host - Microsoft Copilot Studio allows 128 and recommends 25-30. An unrecognized profile name is rejected rather than quietly serving the full catalog. Claude and ChatGPT are unaffected and keep the full tool set.


What's new in 2.5

Facility lifecycle strategies. The lifecycle strategy tools now cover buildings and equipment, not just linear infrastructure. Five new tools under the asset_lifecycle_events scope read and maintain condition-triggered interventions ("roof recoat at condition 70-85 adds five years"). Events attach to an asset type or an asset type group rather than to individual assets, so one event maintains a whole class of equipment.

Events say what work they become. Lifecycle events on both sides now carry a work_generation setting - plan only, work order, or project - so a due intervention records what it should turn into. Nothing is created on a schedule; the interventions lists remain where that decision is made.


Tool catalog

Tools follow one naming pattern throughout: list_* / get_* to read, create_* / update_* / delete_* to write. Read below means list/get; Write means create/update/delete (availability varies slightly per resource - the tool descriptions are the authority).

Resource

Read

Write

Assets

✓

✓

Asset comments · costs · documents · parts

✓

✓

Asset placements (floorplan pins)

✓

✓

Asset replacement plans

✓

✓

Asset condition assessments

✓

✓

Asset lifecycle events (strategies)

✓

✓

Asset risk history

✓

-

Asset statuses · types · type groups

✓

✓

Attachments (+ upload_file, create_upload_url)

✓

✓

Manufacturers

✓

✓

Parts · part categories

✓

✓

Resource

Read

Write

Work orders

✓

✓

Work order comments · schedules

✓

✓

Work requests

✓

✓

Work categories

✓

✓

PM schedules

✓

✓

PM templates

✓

✓

Resource

Read

Write

Sites

✓

✓

Site FCI history

✓

-

Buildings · building types

✓

✓

Locations · location types

✓

✓

Systems · system classes · system groups

✓

✓

Floorplans · floorplan regions

✓

✓

Resource

Read

Write

Feature classes

✓

✓

Networks

✓

✓

Features (segments &amp; nodes, GeoJSON geometry)

✓

✓

Feature inspections

✓

✓

Lifecycle events (strategies)

✓

✓

Zones

✓

✓

Feature comments · costs · documents · parts

✓

✓

Feature risk history

✓

-

Resource

Read

Write

Projects

✓

✓

Tasks · task dependencies · milestones

✓

✓

Phases · phase categories

✓

✓

Budget items · time entries · cost snapshots

✓

✓

Comments · updates · risks · team members

✓

✓

Documents · document folder templates

✓

✓

Project links (assets, buildings, sites, locations, systems, infrastructure)

✓

✓

Service areas (+ site and system-class links)

✓

✓

Resource

Read

Write

Budgets

✓

✓

Expenses · invoices · purchase orders

✓

✓

Change orders

✓

✓

Cost categories

✓

✓

Contracts · contract sites · contract documents

✓

✓

Vendors · vendor site assignments

✓

✓

Resource

Read

Write

Compliance items · records

✓

✓

Form templates · template items

✓

✓

Form responses

✓

✓

Form response answers

✓

-

LoS measures · measurements

✓

✓

LoS proposed targets

✓

✓

LoS targets history

✓

-

LoS system targets · infrastructure targets

✓

✓

Criticality modifiers

✓

✓

LoS consequences

✓

✓

LoS status snapshots

✓

-

Resource

Read

Write

Users

✓

-

Custom field definitions · values

✓

✓

Dashboard summary · snapshots

✓

-

Bulk operations (bulk_create, bulk_update)

-

✓


Scopes

API keys use scopes to control exactly what your assistant can touch. Configure per-resource read and write access in Settings → API Keys - scopes are grouped by category (Operations, Facilities, Projects, Finance, Infrastructure, ...) with bulk-toggle controls.

Scope pattern

Access

resource:read

List and get records (e.g. assets:read, work_orders:read)

resource:write

Create, update, and delete records (e.g. assets:write)

*:*

Full access to all resources


Security

  • OAuth 2.0 + PKCE through mcp.assetlab.ca; your API key is encrypted in transit and never stored by the MCP server

  • Tenant-bound - every key is scoped to your organization only, and the server ignores any attempt to address another tenant

  • Audited - all data access is logged in AssetLab's audit log

  • Revocable - revoke a key any time in Settings → API Keys; it dies instantly

  • Read-only by default - write operations require explicit write scopes


Support

Questions or issues? Email support@assetlab.ca.

Docs: assetlab.ca → Docs → AI & MCP

Available Tools

481 tools
bulk_createBulk createA

Create multiple records of a resource type in one API call (max 100). Each item is processed independently - one failure does not affect others. Returns per-item results. Requires {resource}:write scope. Counts as 1 request for rate limiting.

NameRequiredDescriptionDefault
itemsYesArray of objects to create (max 100). Each object uses the same fields as the single-create endpoint for that resource.
resourceYesResource type (e.g. "assets", "work-orders")

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: per-item independent processing, one failure not affecting others, per-item results returned, required {resource}:write scope, and the rate-limiting cost of 1 request. These are exactly the operational facts an agent needs before issuing a bulk write.

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

Conciseness5/5

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

Four short sentences, front-loaded with purpose, then failure semantics, return behavior, permissions and rate-limit cost. Nothing is redundant or padded.

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

Completeness4/5

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

For a mutation tool with no output schema, the description covers failure isolation, return granularity, auth scope and rate limiting. It stops short of describing the per-item result shape or how to correlate failures back to input items, which would fully close the loop.

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

Parameters3/5

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

Schema description coverage is 100% and both parameters are documented in the schema (items max 100, resource enum), so the schema carries the burden. The description's 'max 100' and 'same fields as the single-create endpoint' framing adds only marginal meaning on top of that.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 scoped as bulk creation ('Create multiple records of a resource type in one API call (max 100)'), which cleanly separates it from the many singular create_* siblings and from bulk_update. The scope constraint is stated up front.

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

Usage Guidelines4/5

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

Clearly implies when to reach for it (multiple items in one call, capped at 100) and notes the rate-limit economics ('Counts as 1 request'), but never explicitly says to prefer bulk_create over looping single create_* calls or names an alternative for >100 items.

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

bulk_updateBulk updateA
DestructiveIdempotent

Update multiple records of a resource type in one API call (max 100). Each item must include an "id" field (UUID). Each item is processed independently - one failure does not affect others. Returns per-item results. Requires {resource}:write scope. Counts as 1 request for rate limiting.

NameRequiredDescriptionDefault
itemsYesArray of objects to update (max 100). Each must include an "id" field (UUID) plus fields to change.
resourceYesResource type (e.g. "assets", "work-orders")

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already declare the safety profile (destructive, idempotent, not read-only), yet the description adds genuinely new operational facts: the 100-item cap, that each item is processed independently so one failure does not affect others, that per-item results are returned, and that {resource}:write scope is required. This is exactly the beyond-annotation disclosure that earns a top score.

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

Conciseness5/5

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

Five short, front-loaded sentences ordered from purpose to limits to failure semantics to permissions to rate limiting. Each sentence carries a distinct operational fact with 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?

With no output schema, the description usefully states that per-item results are returned, and it covers limits, auth scope, and failure isolation. The one residual gap is the shape of the per-item payload — since items use additionalProperties, the description never notes that updatable fields depend on the chosen resource type.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 both parameters, so the baseline is 3. The description repeats the item contract ("Each item must include an 'id' field (UUID)") which is already stated verbatim in the items schema, and adds no new syntax or constraint information about the resource enum.

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

Purpose5/5

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

States a specific verb and resource with scope: "Update multiple records of a resource type in one API call (max 100)." The batch nature and the resource-agnostic "resource type" framing clearly distinguish it from the single-record update_* siblings and from bulk_create.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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 context for when this tool is worthwhile: it handles up to 100 records and "Counts as 1 request for rate limiting," which implicitly motivates choosing it over repeated single-record updates. It stops short of naming the alternative (update_<resource>) or an explicit when-not condition, so it is clear but not fully routing.

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

create_assetCreate assetA

Create a new asset. Requires assets:write scope. IMPORTANT - Location hierarchy: always resolve top-down by calling list_sites first, then list_buildings filtered by site_id, then list_locations filtered by building_id. Provide all three IDs (site_id, building_id, location_id) explicitly. System hierarchy: similarly resolve via list_system_classes → list_system_groups → list_systems.

NameRequiredDescriptionDefault
nameYesAsset name (required)
modelNoModel name/number
site_idNoSite ID - resolve first via list_sites
asset_idNoCustom asset identifier (unique per tenant)
quantityNoQuantity
image_urlNoImage URL
status_idNoStatus identifier
system_idNoSystem ID - resolve last via list_systems filtered by system_group_id
meter_unitNoMeter unit (km, miles, hours, cycles)
building_idNoBuilding ID - resolve second via list_buildings filtered by site_id
descriptionNoDescription
location_idNoLocation ID - resolve last via list_locations filtered by building_id
risk_factorNoRisk factor (CRITICAL, HIGH, MEDIUM, LOW)
asset_type_idNoAsset type ID (from asset_types)
purchase_costNoPurchase cost
purchase_dateNoPurchase date (ISO 8601)
safety_impactNoSafety impact level (LOW, MEDIUM, HIGH, CRITICAL)
salvage_valueNoSalvage value
serial_numberNoSerial number
cost_per_sq_ftNoCost per square foot
service_impactNoService impact level (LOW, MEDIUM, HIGH, CRITICAL)
condition_scoreNoCondition score (0-100)
manufacturer_idNoManufacturer ID (from manufacturers)
system_class_idNoSystem class ID - resolve first via list_system_classes
system_group_idNoSystem group ID - resolve second via list_system_groups filtered by system_class_id
unit_of_measureNoUnit of measure
regulatory_impactNoRegulatory impact level (LOW, MEDIUM, HIGH, CRITICAL)
replacement_valueNoCost to replace this asset today, in current dollars. Distinct from purchase_cost, which is what was paid and is the depreciation basis.
reputation_impactNoReputation impact level (LOW, MEDIUM, HIGH, CRITICAL)
environmental_impactNoEnvironmental impact level (LOW, MEDIUM, HIGH, CRITICAL)
current_meter_readingNoCurrent meter/odometer reading
last_maintenance_dateNoLast maintenance date (ISO 8601)
unit_replacement_valueNoUnit replacement value
expected_lifetime_yearsNoExpected lifetime in years
salvage_value_percentageNoSalvage value percentage (0-100)
likelihood_of_failure_scoreNoLikelihood of failure score
consequence_of_failure_scoreNoConsequence of failure score
replacement_value_reviewed_onNoDate replacement_value was last confirmed (ISO 8601)

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false, openWorldHint=false, so the safety profile is covered. The description adds genuinely useful context beyond that: the required 'assets:write' scope and the mandatory hierarchy-ordering constraint. It does not cover failure modes or what happens with invalid IDs, 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?

Front-loads purpose and auth scope, then the operational hierarchy rules, with no filler. Given 38 parameters the length is proportionate, and each sentence conveys 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 38-param creation tool with no output schema, the description covers the two cross-cutting concerns an agent most needs: write scope and ID-resolution order. It omits that only 'name' is required and says nothing about the response, but the essential preconditions are 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%, and the schema already annotates site_id/building_id/location_id/system_id with their resolve-order hints. The description's hierarchy explanation largely restates that, adding little new per-parameter meaning. Baseline 3 is appropriate when the schema carries the detail.

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 asset'), which is clear on its own. However, it does not differentiate from the closely-named sibling create_infrastructure_asset or other create_* tools, so an agent has no textual cue for which create to pick. Clear but lacks 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?

Provides a concrete top-down resolution workflow (list_sites -> list_buildings -> list_locations, and list_system_classes -> list_system_groups -> list_systems) that tells the agent how to gather prerequisites before calling. It gives no explicit when-not or alternative-tool guidance versus sibling create tools, so it is clear context without exclusions.

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

create_asset_bettermentCreate asset bettermentA

Record capital work that ALREADY extended a facility asset's life - an elevator modernization, a boiler retube, a major component replacement. Required: asset_id, occurred_on, and at least one of capitalized_amount or added_life_years (work that adds neither changes nothing and is rejected). The asset's net book value and remaining life re-base from occurred_on, and its purchase_date is NEVER changed - if a user asks to change an in-service date to reflect an overhaul, record this instead and say why. Use asset_lifecycle_events for work expected in future; use a condition assessment for what someone observed. Call list_assets first to resolve asset_id. Requires asset_betterments:write scope.

NameRequiredDescriptionDefault
asset_idYesAsset the capital work was performed on (required)
project_idNoThe project that delivered it
descriptionNoWhat was actually done
occurred_onYesDate the work went into service, YYYY-MM-DD (required). Not the invoice date - this is the date its value begins depreciating from.
asset_cost_idNoThe asset cost row holding the spend, so the money is not double-entered
work_order_idNoThe work order that delivered it
added_life_yearsNoExtra service life the work bought, in years. Required unless capitalized_amount is given.
capitalized_amountNoAmount added to the asset value, in the organization currency (call get_organization_settings for currency_code). Required unless added_life_years is given.
asset_lifecycle_event_idNoThe lifecycle strategy event this executed, if any

TDQS

A4.9/5.0
Behavior5/5

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

Annotations cover the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false), and the description goes well beyond them: it discloses the rejection rule ('work that adds neither changes nothing and is rejected'), the side effect that net book value and remaining life re-base from occurred_on, the invariant that purchase_date is NEVER changed, and the required asset_betterments:write scope.

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

Conciseness5/5

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

The work-defining scope, required fields, and the crucial never-change-purchase_date rule are front-loaded, and every subsequent sentence carries distinct information (rejection rule, alternatives, prerequisite, scope). No filler despite the density.

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 9-parameter mutation with no output schema, the description covers what the tool does, the field requirements, the behavioral consequences, the sibling routing, and the auth scope. 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, but the description adds real constraint meaning absent from the schema: it specifies the 'at least one of capitalized_amount or added_life_years' requirement and clarifies occurred_on means the in-service date, not the invoice date. This is meaningful supplementation above 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 names a specific verb and resource ('Record capital work') and gives three concrete examples (elevator modernization, boiler retube, component replacement). It explicitly distinguishes this from sibling tools asset_lifecycle_events and condition assessments, so an agent can route correctly without opening the schema.

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

Usage Guidelines5/5

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

It states when to use this ('capital work that ALREADY extended a facility asset's life'), when not to ('work expected in future' -> lifecycle events; 'what someone observed' -> condition assessment), and a prerequisite step ('Call list_assets first to resolve asset_id'). This is explicit routing guidance with named alternatives.

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

create_asset_commentCreate asset commentB

Create a new comment on an asset. Requires asset_comments:write scope.

NameRequiredDescriptionDefault
commentYesComment text (required)
asset_idYesAsset ID (required)

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false, and openWorldHint=false, covering the safety profile. The description adds useful context by naming the auth scope required, which is not in the annotations. Beyond that, no return format, rate limit, or side-effect details are provided.

Agents need to know what a tool does to the world before 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 waste, and the purpose is front-loaded before the scope requirement. Every sentence earns its place.

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

Completeness3/5

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

For a simple 2-parameter create tool with full schema coverage and annotations covering safety, the description covers purpose and scope. However, it omits any differentiation from the many similar comment-creation siblings, which is a meaningful gap given the dense toolset.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 (comment and asset_id) are fully documented in the schema. The description adds no parameter-level meaning or format constraints beyond what the schema already provides, so the baseline of 3 is appropriate.

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

Purpose4/5

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

The description states a specific verb (Create) and resource (comment on an asset), making the core purpose clear. However, it does not distinguish this tool from similar siblings like create_infrastructure_asset_comment, create_project_comment, or create_work_order_comment, leaving the agent to infer scope from the tool 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?

The only guidance is the required scope 'asset_comments:write', which is a prerequisite rather than usage direction. There is no explicit when-to-use, when-not-to-use, or alternative sibling tool mentioned, so an agent gets no help choosing among the many create_*_comment tools.

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

create_asset_condition_assessmentCreate asset condition assessmentA

Record a point-in-time condition assessment against an asset. Requires asset_condition_assessments:write scope. Call list_assets first to resolve asset_id.

NameRequiredDescriptionDefault
notesNoFree-form notes
methodNoAssessment method
defectsNoStructured defect findings (JSON)
asset_idYesAsset ID (required)
assessed_onYesAssessment date (YYYY-MM-DD, required; today or earlier)
assessor_idNoAssessor user ID
condition_scoreNoCondition score (0-100)
replacement_costNoCurrent replacement value / CRV at assessment time
update_purchase_costNoDefault OFF - omit unless the user explicitly asks to update/overwrite the asset's purchase cost, or says their org treats purchase cost as the current replacement value. Recording an assessment does NOT by itself change purchase cost. When true, overwrites assets.purchase_cost with this replacement_cost (CRV); the prior value is preserved on the assessment as previous_purchase_cost (read-only). Create-only and not reversible via update - when unsure, leave it off and ask.

TDQS

A3.8/5.0
Behavior3/5

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

With annotations already declaring readOnly=false, destructive=false and idempotent=false, the safety profile is covered. The description adds genuine value by disclosing the required write scope (asset_condition_assessments:write) and the point-in-time nature, but it omits the notable irreversible side effect (overwriting purchase cost via update_purchase_cost), which is disclosed only inside 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?

Two tightly written sentences with the core purpose front-loaded and the prerequisite/auth details following. No filler, no restatement 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 create endpoint with 100% schema coverage and no output schema, the description covers the essential context: what it records, the required scope, and the prerequisite lookup. The one gap is that the description could flag that recording an assessment does not by itself change purchase cost, but the schema carries that detail.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 nine parameters, including the detailed update_purchase_cost semantics. The description only adds a hint about resolving asset_id, which is marginal beyond what the parameter's own description provides, so the baseline 3 holds.

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 (Record) and resource (point-in-time condition assessment against an asset), which is more precise than a generic 'create assessment'. It implicitly separates itself from sibling creates like create_asset_cost or create_asset_status by naming the condition-assessment concept, though it never calls out those siblings directly.

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

Usage Guidelines4/5

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

Gives an explicit workflow prerequisite ('Call list_assets first to resolve asset_id') that tells the agent how to obtain a required input. It stops short of stating when NOT to use it or naming update_asset_condition_assessment as the alternative for editing an existing record.

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

create_asset_costCreate asset costA

Create a new asset cost entry - the record type shown on the AssetLab "Expenses" page. Requires asset_costs:write scope.

NameRequiredDescriptionDefault
amountYesCost amount (required)
site_idNoSite ID
asset_idNoAsset ID
categoryYesCost category (required)
cost_dateYesCost date (ISO 8601, required)
po_numberNoPurchase order number (free text)
building_idNoBuilding ID
descriptionNoDescription
work_order_idNoWork order ID
invoice_numberNoInvoice number (free text)
purchase_order_idNoPurchase order that paid this cost - resolve via list_purchase_orders. Counts against the order's remaining balance unless the cost belongs to a work order.

TDQS

A3.6/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, closed-world write. The description adds the concrete auth requirement (asset_costs:write scope), which is genuinely beyond the annotations, but says nothing about duplicate handling or side effects like the purchase-order balance impact (that detail lives in the schema instead).

Agents need to know what a tool does to the world before 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 front-loaded, scope requirement second, zero filler. 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 create tool with annotations present, a rich 100%-covered schema, and no output schema, the description covers purpose and authorization adequately. It stops short of any create-vs-alternative routing, which is the 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 description coverage is 100%, so the 11 parameters including required fields, enum values, and the purchase_order_id balance semantics are already fully documented in the schema. The description contributes no additional parameter meaning, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb+resource ('Create a new asset cost entry') and disambiguates the record type by pointing at the AssetLab 'Expenses' page, which helps separate it from create_expense. It never names the closest sibling (create_infrastructure_asset_cost) explicitly, so differentiation is implied 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 only usage guidance is the prerequisite 'Requires asset_costs:write scope'. There is no statement of when to choose this over create_expense, create_infrastructure_asset_cost, or update_asset_cost, leaving 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.

create_asset_documentCreate asset documentA

Create an asset document record (after uploading the file via create_upload_url). Requires asset_documents:write scope.

NameRequiredDescriptionDefault
nameYesDocument name (required)
user_idNoUploader user ID
asset_idYesAsset ID this document belongs to (required)
categoryNoDocument category
file_pathYesStorage path from upload URL response (required)
file_sizeNoFile size in bytes
file_typeNoMIME type
descriptionNoDescription

TDQS

A4/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=false, so safety profile is covered. The description adds two pieces of behavioral context annotations cannot convey: the required asset_documents:write scope and the ordering dependency on create_upload_url. Mentioning that repeated calls are non-idempotent would be a further improvement, but the added context 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.

Conciseness5/5

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

A single tight sentence plus a scope clause. The action is front-loaded, the prerequisite is parenthesized compactly, 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 an 8-parameter mutation tool with no output schema, the description covers the two things an agent most needs that structured fields do not: the auth scope and the required upload-first workflow. Return-value behavior is not a gap since there is no output schema, but a note on non-idempotency or failure behavior 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 coverage is 100%, so all 8 parameters (name, asset_id, file_path, category, file_size, etc.) are already documented in the schema. The description only hints at file_path through the upload prerequisite and adds nothing about the enum category values or the optional fields. Baseline 3 is appropriate when the schema carries 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?

The description names a specific verb and resource ('Create an asset document record') and distinguishes it implicitly from the many sibling document tools (create_project_document, create_contract_document, create_infrastructure_asset_document) by tying it to the asset entity. It does not explicitly name which sibling to use instead, but the resource is unambiguous.

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

Usage Guidelines4/5

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

It gives an explicit prerequisite workflow: the file must be uploaded first via create_upload_url, and the file_path argument depends on that response. That is clear contextual guidance for sequencing. It stops short of naming when-not to use it or alternative document tools, 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.

create_asset_lifecycle_eventCreate asset lifecycle eventA

Create a facility lifecycle strategy event. Events attach to an asset-type SCOPE - exactly ONE of asset_type_id or asset_type_group_id - never to individual assets; an asset resolves its type's own strategy first, else its type group's. Replacement is NOT an event (it stays the renewal forecast + replacement value) - model the interventions BEFORE replacement: roof recoats, boiler retubes, overhauls. Resolve type ids with list_asset_types / list_asset_type_groups, and list existing events first to reuse a scope. Requires asset_lifecycle_events:write scope.

NameRequiredDescriptionDefault
nameYesEvent name (required, e.g. "Roof recoat")
fixed_costNoFixed cost per application (current dollars, never indexed)
sort_orderNoEvaluation order within the strategy
cost_sourceNoProvenance of the cost ("Engineering 2026", a tender reference)
event_classYesEvent type - preventative maintenance or rehabilitation
asset_type_idNoAsset type the strategy scope applies to (exactly one of the two scope ids)
impact_methodYesEffect: add years of life, or reset condition to a value
impact_reset_toNoCondition after the event (required when impact_method is reset_condition)
work_generationNoWhat a due application of this event becomes when created from the interventions list: none (plan only, default), work_order, or project. Nothing is created on a schedule.
impact_add_yearsNoYears added (required when impact_method is add_years)
max_applicationsNoHow many times the event may fire over an asset's life (default 1)
min_years_betweenNoMinimum years between firings of a recurring event (default 1)
asset_type_group_idNoAsset type group the scope applies to (exactly one of the two scope ids)
trigger_condition_maxYesUpper bound of the trigger window - the event fires when projected condition falls to this
trigger_condition_minNoLower bound of the trigger window (default 0); an asset already below it has missed the event
work_generation_priorityNoPriority for generated work orders. Ignored unless work_generation is work_order.
work_generation_category_idNoWork category for generated work orders - resolve with list_work_categories. Ignored unless work_generation is work_order.

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare non-read-only, non-destructive, non-idempotent. The description adds value beyond that: the required asset_lifecycle_events:write scope (auth), the scope-resolution precedence rule (type strategy before type group), and the semantic boundary that replacement is not an event. It does not describe idempotency or duplicate-handling behavior, which is a minor 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 scope rules, then the replacement exclusion and the id-resolution workflow. Dense but every sentence carries information; the brief intervention examples add domain grounding without bloat. Slightly long, but justified by 17 params and a subtle domain model.

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 17-parameter create tool with no output schema, the description supplies the scope model, auth requirement, precedence rule, and prerequisite lookups an agent needs before calling correctly, while the fully-covered schema handles field-level detail. Nothing essential is missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description goes further by explaining the 'exactly ONE of asset_type_id or asset_type_group_id' scope rule and its resolution order, which is the key selection decision for two otherwise-similar UUID params. It still leaves enum behaviors like work_generation to the schema.

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

Purpose5/5

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

States a specific verb+resource ('Create a facility lifecycle strategy event') and immediately disambiguates scope: events attach to an asset-type scope, never to individual assets, and names sibling-ish concepts (replacement, renewal forecast). An agent can tell this apart from create_infrastructure_lifecycle_event and update_asset_lifecycle_event.

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 what NOT to model (replacement), what TO model instead (recoats, retubes, overhauls), names the sibling tools to resolve type ids (list_asset_types / list_asset_type_groups), instructs to list existing events first to reuse a scope, and states the required write scope. When/when-not/alternatives are all present.

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

create_asset_partCreate asset partA

Link a part to an asset (creates an asset-part association). Requires asset_parts:write scope.

NameRequiredDescriptionDefault
part_idYesPart ID (required)
asset_idYesAsset ID (required)
quantityNoQuantity of this part on the asset

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare this is a write (readOnlyHint=false), non-destructive, non-idempotent, and closed-world. The description adds the auth scope requirement, which is useful beyond annotations. It does not describe duplicate-handling or error behavior, but with annotations covering the safety profile, this is adequate.

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

Conciseness5/5

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

Two sentences, front-loaded with the action and followed by the scope requirement. No wasted words; appropriately sized for the tool's simplicity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence 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 association-creation tool with full schema coverage and descriptive annotations, the description covers the core purpose and auth scope. It does not explain behavior on duplicate associations (non-idempotent) or return values, but no output schema exists and annotations hint at the mutation nature. Largely 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%, with each parameter documented in the schema. The description adds no parameter-level meaning 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.

Purpose4/5

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

States a specific verb 'Link' and the resource pair 'part to an asset', and clarifies it creates an association. Differentiates well from create_part and create_asset, but does not explicitly distinguish from the analogous create_infrastructure_asset_part sibling.

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 action description implies usage, and the required scope (asset_parts:write) provides a prerequisite. However, there is no explicit when-to-use vs alternatives (e.g., update_asset_part, create_infrastructure_asset_part) or when-not guidance, leaving usage only implied.

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

create_asset_placementCreate asset placementA

Place an asset on a floorplan at the given (x, y) coordinate (normalized 0-1, origin top-left). UPSERTS by asset_id - an asset can have at most ONE placement globally, so calling this again just moves the pin. Use bulk_create with resource="asset-placements" to place many assets at once. Requires asset_placements:write scope.

NameRequiredDescriptionDefault
xYesNormalized x coordinate (0=left, 1=right)
yYesNormalized y coordinate (0=top, 1=bottom)
sourceNo"manual" (default) or "ai" for AI-placed
asset_idYesAsset to place (resolve via list_assets)
region_idNoOptional region the pin sits inside (usually auto-inferred)
floorplan_idYesTarget floorplan (resolve via list_floorplans)

TDQS

A4.5/5.0
Behavior4/5

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

Goes well beyond annotations: discloses UPSERT-by-asset_id, the one-placement-globally constraint, and the required asset_placements:write scope. The only nuance is that this upsert/re-move behavior reads close to idempotent while idempotentHint=false, though repeated calls with differing coordinates do still mutate state, so it is not a flat 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?

Three front-loaded sentences: action first, then the critical upsert semantics, then the bulk alternative and the auth prerequisite. No filler, every sentence carries required 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 write tool with no output schema, the description covers the operation, its uniqueness semantics, the scope prerequisite, and the bulk escape hatch. Nothing needed to invoke it correctly is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so all six parameters are already documented (coordinates, source enum, region_id, uuid patterns). The description restates coordinate normalization but adds no parameter meaning beyond the schema; baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource ("Place an asset on a floorplan") plus the exact coordinate system, and the UPSERT semantics make it unmistakable from siblings like create_asset or update_asset_placement. 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 Guidelines5/5

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

Explicitly routes bulk scenarios to bulk_create with resource="asset-placements", and explains the repeat-call behavior (moves the pin rather than erroring). When-to-use and the alternative are both named.

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

create_asset_replacement_planCreate asset replacement planB

Create a new asset replacement plan. Requires asset_replacement_plans:write scope.

NameRequiredDescriptionDefault
notesNoNotes
statusNoStatus
asset_idYesAsset ID (required)
priorityNoPriority
estimated_costNoEstimated replacement cost
funding_sourceNoFunding source
planned_replacement_yearYesPlanned replacement year (required)

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false, and openWorldHint=false, covering the safety profile. The description adds the required write scope ('asset_replacement_plans:write'), which is genuinely useful auth context beyond annotations, but says nothing about what happens on duplicate creation 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?

Two short sentences, front-loaded with the action and followed by the permission requirement. Nothing is wasted or buried.

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

Completeness3/5

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

For a 7-param mutation tool with no output schema, the description covers purpose and required scope but omits any return-value expectations, duplicate-handling, or failure behavior. Adequate but with clear gaps an agent might need.

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

Parameters3/5

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

Schema description coverage is 100% and all seven parameters (asset_id, planned_replacement_year, status, priority, estimated_cost, funding_source, notes) are documented in the schema itself. The description adds no parameter-level meaning beyond that, 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 ('Create') and resource ('asset replacement plan'), clearly distinct from the sibling create_asset, update_asset_replacement_plan, and delete_asset_replacement_plan. However it does not explicitly differentiate itself from alternatives the way a 5 would, relying on the unique resource 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?

No when-to-use context, prerequisites, or pointers to related tools (e.g., use update_asset_replacement_plan to modify an existing plan). The scope requirement is a permission note, not usage guidance about when this tool applies.

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

create_asset_statusCreate asset statusB

Create a new asset status (lifecycle state for assets). Requires asset_statuses:write scope.

NameRequiredDescriptionDefault
nameYesStatus name (required)
moduleNoWorkspace the status is offered in: facilities (assets), infrastructure (features), or shared (both). Defaults to shared.
descriptionNoDescription

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false, and openWorldHint=false, so the safety and mutation profile is covered structurally. The description usefully adds the required asset_statuses:write scope, but omits meaningful behavior for a non-idempotent create, such as whether duplicate status names are rejected or silently duplicated.

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

Conciseness5/5

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

Two compact sentences, front-loaded with the purpose and followed by the prerequisite. No redundant restatement of the title and nothing that could be trimmed without losing information.

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

Completeness3/5

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

With a fully documented schema and annotations covering the safety profile, the description is adequate for calling the tool. It leaves one real gap for a create tool flagged non-idempotent: no indication of uniqueness constraints on the status name or what happens on a duplicate submission.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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%: name, module (with its enum and default), and description are all documented in the schema itself. The description adds only the conceptual framing that a status is a lifecycle state, which does not extend parameter meaning. 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?

The description pairs a specific verb ('Create') with a precise resource ('asset status') and adds a clarifying gloss, 'lifecycle state for assets', which disambiguates it from the many other create_* tools. It does not explicitly name the update/delete/list counterparts, but the entity is specific enough that an agent can identify it without opening the schema.

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

Usage Guidelines2/5

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

The only usage-relevant information is the required write scope, which is a prerequisite rather than guidance. It never states when to use this tool versus update_asset_status (modifying an existing status) or list_asset_statuses (checking existing ones), so the agent must infer that this is for net-new statuses.

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

create_asset_typeCreate asset typeB

Create a new asset type. Requires asset_types:write scope.

NameRequiredDescriptionDefault
nameYesAsset type name (required)
group_idNoGroup ID
descriptionNoDescription

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already disclose the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false, openWorldHint=false), so the bar is lower. The description usefully adds the required asset_types:write scope, which annotations do not cover. It says nothing about duplicate-name behavior or what the call returns, so it adds only modestly.

Agents need to know what a tool does to the world before 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, and the action statement is front-loaded ahead of the scope requirement. Nothing is wasted or buried.

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

Completeness3/5

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

For a simple create tool with full schema coverage and annotations that carry the safety profile, the core is covered. Missing are the duplicate-name outcome and the shape of the created resource, which the description could supply 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 100%, with all three parameters (name, group_id, description) documented in the schema itself. The description adds no parameter-level detail such as format or constraint hints beyond that, 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 ("Create a new asset type"), which is immediately clear. It does not, however, distinguish itself from the closely named sibling create_asset_type_group, so an agent must infer the boundary. Clear purpose 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 Guidelines2/5

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

No when-to-use guidance, no prerequisites beyond an implied scope, and no alternatives referenced. The agent gets no help deciding between this and create_asset_type_group or update_asset_type.

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

create_asset_type_groupCreate asset type groupA

Create a new asset type group. Groups organize asset types into logical categories. Requires asset_type_groups:write scope.

NameRequiredDescriptionDefault
nameYesGroup name (required)
colorNoColor hex code (e.g., #6366f1)
descriptionNoDescription

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false, and openWorldHint=false, so the mutation/safety profile is covered. The description adds one genuine piece of context beyond them: the required asset_type_groups:write scope. It says nothing about duplicate-name behavior, validation failure, or what the response contains.

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

Conciseness5/5

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

Three short sentences lead with the action, then the domain semantics, then the prerequisite. Every sentence earns its place and nothing is redundant with 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 3-param, no-output-schema create tool with rich annotations and full schema coverage, the description covers purpose, semantics, and the auth prerequisite. Only minor gaps remain, such as uniqueness constraints on the group name.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 name, color, and description are all documented in the schema with constraints (maxLength, hex example). The description adds no parameter-level detail beyond what the schema already provides, 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?

States a specific verb+resource ("Create a new asset type group") and adds domain meaning with "Groups organize asset types into logical categories," which distinguishes it conceptually from create_asset_type and create_system_group. It doesn't explicitly name a sibling it is not, 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 create verb, and the "Requires asset_type_groups:write scope" line gives a real precondition. However, there is no explicit when-to-use guidance, no mention of the update_asset_type_group / delete_asset_type_group alternatives, and no note about what to do when a group already exists.

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

create_attachmentCreate attachmentA

Create an attachment record linked to a work order, work request, PM schedule, or PM template. Exactly one parent ID must be provided. Requires attachments:write scope.

NameRequiredDescriptionDefault
file_urlYesFile URL / storage path (required)
file_nameYesFile name (required)
file_sizeNoFile size in bytes
file_typeNoMIME type
descriptionNoDescription
uploaded_byNoUploader user ID
work_order_idNoWork order ID (exactly one parent required)
pm_schedule_idNoPM schedule ID (exactly one parent required)
pm_template_idNoPM template ID (exactly one parent required)
work_request_idNoWork request ID (exactly one parent required)

TDQS

A4.2/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-destructive, non-idempotent write. The description adds auth context ('Requires attachments:write scope') not visible in structured fields, plus the single-parent invariant. It does not describe response shape or duplicate-handling, keeping it below a 5.

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

Conciseness5/5

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

Two sentences, zero filler, with the linking scope front-loaded and the hard constraint and auth requirement following. 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 10-parameter mutation with full schema coverage and annotations carrying the safety profile, the description covers the two things structured data cannot: the single-parent rule and the required scope. It could optionally note whether the file must first be uploaded via create_upload_url, a minor gap.

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

Parameters4/5

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

Schema coverage is 100%, so per-parameter meaning is fully documented downstream (baseline 3). The description adds a genuine cross-parameter constraint — exactly one of work_order_id, work_request_id, pm_schedule_id, pm_template_id — that no individual schema property can 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 (Create) and resource (attachment record) and enumerates the four parent entity types it can link to. An agent can distinguish it from the numerous other create_* siblings without opening the schema.

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

Usage Guidelines3/5

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

Adds the meaningful constraint that exactly one parent ID must be supplied and names the required scope, which are genuine usage rules. However, it never says when to prefer this tool over related siblings such as create_upload_url, upload_file, create_asset_document, or update_attachment.

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

create_budgetCreate budgetA

Set an annual funding budget, as the dashboard Budget tab does. Requires budgets:write scope. The tab holds one figure per year, per funding source ('O&M' or 'Capital'), per workspace (module: facilities, infrastructure, or omitted for organization-wide). Send one row per year and funding source - do not split a year across sites or buildings; the tab does not read site_id or building_id and a second row for the same slot is refused with 409. Required: year, funding_source, budgeted_amount.

NameRequiredDescriptionDefault
yearYesBudget year (required)
moduleNoWorkspace the budget belongs to. Omit for an organization-wide budget; set it when the organization budgets facilities and infrastructure separately.
site_idNoSite ID. Not read by the Budget tab.
building_idNoBuilding ID. Not read by the Budget tab.
funding_sourceYes'O&M' (operations and maintenance) or 'Capital' (required)
budgeted_amountNoBudgeted amount
allocated_amountNoAllocated amount

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 (readOnly=false, idempotent=false, destructive=false), and the description adds genuinely non-obvious behavior: the auth scope needed, the 409 refusal on duplicate slots, and the fact that site_id/building_id are silently ignored. It does not describe the response shape, but with idempotentHint=false already declared, a duplicate submission failing is consistent and well-explained.

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 comes first, then auth, then the cardinality rule and the required fields — a sensible front-loading. It is dense and runs four sentences, but each sentence carries a distinct constraint; only the trailing 'Required:' restatement is partly redundant with 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 7-parameter mutation with no output schema and partial annotation coverage, the description supplies scope, conflict behavior, and the ignored-parameter caveat, which is most of what an agent needs. The only gap is that optional-vs-required for budgeted_amount and allocated_amount is muddled relative 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 schema already documents every parameter and the baseline is 3; the description earns above baseline by explaining how module, site_id and building_id interact ('the tab does not read site_id or building_id'). Minor flaw: it lists budgeted_amount as Required while the schema requires only year and funding_source.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 concrete verb and resource ('Set an annual funding budget') and grounds it in a real-world referent ('as the dashboard Budget tab does'), which pins down the grain of the record. The specification of one figure per year, per funding source, per workspace distinguishes it from the nearby create_project_budget_item sibling without needing to name it.

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

Usage Guidelines5/5

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

It states the required scope ('budgets:write'), the exact cardinality rule ('Send one row per year and funding source'), an explicit prohibition ('do not split a year across sites or buildings'), and the failure mode if violated (409). An agent can decide whether this is the right tool and how to call it without trial and error.

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

create_buildingCreate buildingA

Create a new building. Requires buildings:write scope. latitude and longitude place the building on the map and must be sent together - one without the other is rejected.

NameRequiredDescriptionDefault
nameYesBuilding name (required)
typeNoBuilding type label
floorsNoNumber of floors
site_idYesSite ID (required)
latitudeNoWGS 84 latitude of the building, in decimal degrees. Must be sent together with longitude.
area_sqftNoArea in square feet
longitudeNoWGS 84 longitude of the building, in decimal degrees. Must be sent together with latitude.
year_builtNoYear the building was constructed
building_type_idNoBuilding type ID (from building_types)

TDQS

A3.8/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 value beyond that: the required write scope and a cross-field validation rule (paired lat/long, one without the other is rejected) that would otherwise only surface as a runtime error.

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

Conciseness5/5

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

Three short sentences, front-loaded with the action, then the prerequisite, then the one non-obvious constraint. Nothing is padded and every sentence carries information.

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

Completeness4/5

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

For a create tool with no output schema, the description covers the action, the auth scope, and the key data-integrity constraint. It omits any note on required parent entities (e.g. that site_id must reference an existing site) or failure behavior, 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.

Parameters3/5

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

Schema description coverage is 100%, so all nine parameters are documented in the schema, giving a baseline of 3. The description's lat/long pairing note duplicates what the schema already states in each parameter's description, so it adds no new semantic detail.

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

Purpose4/5

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

States a specific verb+resource ("Create a new building") which is immediately clear. However, it does no work to distinguish itself from the many sibling create_* tools, notably create_project_building and create_site, so an agent must infer which entity is which 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?

It surfaces a real precondition ("Requires buildings:write scope"), which tells the agent about an authorization gate. But it gives no guidance on when to use this versus create_project_building or create_site, and no exclusions, leaving usage largely implied.

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

create_building_typeCreate building typeB

Create a new building type. Requires building_types:write scope.

NameRequiredDescriptionDefault
nameYesBuilding type name (required)
descriptionNoDescription

TDQS

B3.4/5.0
Behavior3/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 the building_types:write scope requirement, which is genuinely useful auth context not present in any structured field, but nothing about duplicate names, failure modes, or return 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, the action first and the prerequisite second. No filler, no 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 simple two-parameter create with full schema coverage, no output schema, and annotations covering the safety profile, the description plus the scope note is close to sufficient. Only mildly short of a 5 given how little else the agent needs.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 carry their own descriptions (name required, maxLength bounds; description optional). The description adds nothing 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 (Create) and resource (building type), which distinguishes it from nearby siblings like create_building, create_location_type, and create_asset_type. No explicit routing to alternatives, but the resource itself is unambiguous.

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

Usage Guidelines2/5

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

No when-to-use guidance, no statement of when to prefer bulk_create or update_building_type instead, and no preconditions beyond the scope note. The agent must infer usage from the name alone.

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

create_change_orderCreate change orderB

Create a new change order. Requires change_orders:write scope.

NameRequiredDescriptionDefault
notesNoAdditional notes
amountYesAmount (required, negative for credits)
reasonNoReason for the change order
statusNoStatus
co_numberYesChange order number (required)
vendor_idNoVendor ID
project_idNoProject ID
category_idNoCost category ID
descriptionYesDescription (required)

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, and idempotentHint=false, so the safety profile is structured. The description adds one genuinely useful non-schema fact, the required change_orders:write scope, but says nothing about whether duplicate co_number values are rejected, what happens to existing data, or the returned object.

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

Conciseness4/5

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

Two short sentences, front-loaded with the action, and no filler. It is tight, though the extreme brevity is arguably under-specification rather than disciplined conciseness given the 9-parameter surface.

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 9 params and no output schema, the minimum viable content is present (purpose + auth). However, nothing describes the created result or idempotency behavior around co_number, which an agent would want before calling.

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

Parameters3/5

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

Schema description coverage is 100%, so all 9 parameters, the required set, and the status enum are documented in the schema itself. The description adds no parameter meaning, which is the correct baseline when the schema does the heavy lifting.

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

Purpose4/5

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

States a specific verb and resource ("Create a new change order") so the agent knows exactly what the tool does. The resource is distinct from siblings like create_work_order or create_purchase_order, but the description does no explicit sibling differentiation, relying on 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?

No when-to-use guidance, no prerequisites beyond the scope claim, and no mention of alternatives such as update_change_order or bulk_create. The agent is left to infer context entirely.

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

create_compliance_itemCreate compliance itemB

Create a new compliance item (regulatory requirement). Requires compliance:write scope.

NameRequiredDescriptionDefault
nameYesCompliance item name (required)
statusNoStatus
system_idNoAssociated system ID
descriptionNoDescription
regulation_referenceNoRegulation or code reference
compliance_period_monthsNoCompliance period in months

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare the operation is non-read-only, non-destructive, and non-idempotent. The description usefully adds the required auth scope ('compliance:write'), which is real context beyond the structured fields, but says nothing about duplicate handling or what the non-idempotent behavior means in practice.

Agents need to know what a tool does to the world before 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, action first, with the scope requirement tacked on efficiently. No filler.

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

Completeness3/5

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

For a create tool with no output schema and six fully documented parameters, the description covers the essentials (what it makes, required scope) but omits what is returned (e.g., the new item's ID) and any constraints like duplicate-name behavior, leaving 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 description coverage is 100% with all six parameters documented in the schema, so baseline 3 applies. The description adds no parameter-level meaning beyond what the schema already provides.

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

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 compliance item') and clarifies the domain with '(regulatory requirement)'. However, it does not differentiate from close siblings such as create_compliance_record or create_compliance_pm_schedule, which an agent could easily confuse it with given the large create_* family.

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

Usage Guidelines2/5

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

No guidance on when to use this versus bulk_create, create_compliance_record, or the sibling compliance tools. The agent must infer usage context from the name alone.

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

create_compliance_pm_scheduleCreate compliance PM scheduleA

Link a PM schedule to a compliance item, so completing the schedule keeps the item compliant. Requires compliance:write scope. Required: compliance_item_id, pm_schedule_id, required_frequency_days. Resolve both ids first with list_compliance_items and list_pm_schedules.

NameRequiredDescriptionDefault
weightNoRelative weight of this schedule in the item score. Default 1.
pm_schedule_idYesPM schedule ID (required)
compliance_item_idYesCompliance item ID (required)
required_frequency_daysYesHow often, in days, the schedule must be completed for the item to stay compliant (required), e.g. 365 for annual

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 (readOnlyHint=false, idempotentHint=false, destructiveHint=false), so the bar is lower. The description still adds value beyond structured data by disclosing the required auth scope (compliance:write) and the semantic effect on compliance status, though it says nothing about duplicate-link behavior or error conditions.

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

Conciseness4/5

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

Front-loaded purpose followed by scope, required params, and a resolution tip in three tight sentences. The re-listing of required parameter names is mildly redundant with the schema, keeping it short of a full 5.

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

Completeness4/5

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

For a non-idempotent mutation/link tool with annotations covering the safety hints and no output schema, the description covers auth scope, intended effect, and id resolution. It is nearly complete, though it could note what happens if the link already 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 coverage is 100%, so all four parameters including weight (default 1) are already documented in the schema. The description merely re-lists the three required ids and gives a resolution hint, adding no syntax or semantic detail beyond what the schema provides. Baseline 3 is 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 and resource with scope: 'Link a PM schedule to a compliance item, so completing the schedule keeps the item compliant.' This distinguishes it from sibling create_compliance_item and create_pm_schedule, making the junction/link semantics immediately 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?

Provides a prerequisite (compliance:write scope) and concrete setup guidance: 'Resolve both ids first with list_compliance_items and list_pm_schedules.' This tells the agent what to do before invoking, though it does not explicitly contrast this link-creation with the sibling create_* tools.

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

create_compliance_recordCreate compliance recordB

Create a new compliance record (audit trail entry). Requires compliance_records:write scope.

NameRequiredDescriptionDefault
completed_atYesCompletion date-time (ISO 8601, required)
completed_byNoUser ID who completed
work_order_idYesWork order ID (required)
pm_schedule_idYesPM schedule ID (required)
compliance_item_idYesCompliance item ID (required)
required_frequency_daysYesRequired frequency in days (required)
days_since_last_completionNoDays since last completion

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 (readOnly=false, destructive=false, idempotent=false, openWorld=false), so the bar is lower. The description adds a genuinely useful auth requirement (compliance_records:write), but says nothing about non-idempotency consequences, duplicate-record behavior, or side effects on related PM schedules.

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 with the core action front-loaded and the permission requirement second. Efficient, though the parenthetical adds only marginal value and no usage routing is included.

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 seven-parameter mutation tool with five required FK-style references and no output schema, the description is thin. Permission scope is covered, but entity-resolution prerequisites and duplicate handling, which matter for a compliance audit trail, are absent.

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

Parameters3/5

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

Schema description coverage is 100%, so all seven parameters are already documented in the schema, including the five required ones. The description contributes no additional parameter meaning, which is the expected baseline when the schema does the heavy lifting.

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

Purpose4/5

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

States a specific verb+resource ('Create a new compliance record') and clarifies scope with the parenthetical 'audit trail entry'. It stops short of distinguishing itself from close siblings like create_compliance_item or create_compliance_pm_schedule, which share almost identical naming.

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 only guidance offered is the required scope ('compliance_records:write'). There is no statement of when to use this versus create_compliance_item, create_compliance_pm_schedule, or bulk_create, nor any prerequisite about the referenced entities needing to exist first.

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

create_contractCreate contractB

Create a new contract. Requires contracts:write scope.

NameRequiredDescriptionDefault
titleYesContract title (required)
categoryYesContract category (required)
end_dateYesEnd date (ISO 8601, required)
company_idNoVendor ID
extendableNoWhether contract is extendable
start_dateYesStart date (ISO 8601, required)
annual_costNoAnnual cost
descriptionNoDescription
quality_scoreNoQuality score (1-10)
purchase_orderNoPurchase order reference

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, openWorldHint=false). The description adds one genuinely useful behavioral fact not in the structured data — the contracts:write scope requirement — but says nothing about creation side effects or failure modes, so it is adequate rather than 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?

Two short sentences with zero filler, and the core purpose is front-loaded ahead of the scope constraint. It is efficient, though extremely terse for a 10-parameter tool.

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

Completeness3/5

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

With annotations covering the safety profile, a 100%-covered schema, and no output schema, the description covers the minimum an agent needs. It is missing sibling routing (update_contract, bulk_create, create_contract_site) that would make it complete for this crowded create_* namespace.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 10 parameters (including the four required ones) are documented in the schema itself. The description adds no parameter meaning beyond that, so the baseline of 3 applies.

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

Purpose4/5

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

States a specific verb+resource ('Create a new contract'), so the agent knows the operation is a create on the contract entity. It does not differentiate from siblings like create_contract_document or create_contract_site, 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 Guidelines2/5

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

The description offers no when-to-use guidance, no prerequisites beyond the scope, and no routing to alternatives such as bulk_create or create_contract_site. The scope statement is an authorization requirement, not usage guidance.

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

create_contract_documentCreate contract documentB

Create a contract document record. Requires contract_documents:write scope.

NameRequiredDescriptionDefault
file_nameYesFile name (required)
file_pathYesStorage path from upload URL response (required)
file_sizeNoFile size in bytes
file_typeNoMIME type
contract_idYesContract ID (required)
uploaded_byNoUploader user ID

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already disclose readOnlyHint=false, destructiveHint=false, idempotentHint=false, and openWorldHint=false, covering the safety profile. The description adds the required scope, which is useful auth context beyond the annotations. It does not, however, describe side effects, what happens to related records, or any rate limits, so it adds moderate value but remains thin.

Agents need to know what a tool does to the world before 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 waste, and the core action is front-loaded before the permission note. Every sentence earns its place in this compact definition.

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

Completeness3/5

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

For a simple create operation with full schema coverage and relevant annotations, the description is minimally adequate. It states the action and the required scope, but omits the upload-first workflow context (which the schema mentions only for file_path) and any explanation of how this tool relates to create_upload_url. An agent can call it correctly from the schema, but the description does not enrich the overall context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 six parameters are already documented in the input schema, including the note that file_path comes from an upload URL response. The description adds no parameter-level meaning beyond what the schema provides. A baseline of 3 is appropriate when the schema does the heavy lifting.

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

Purpose4/5

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

The description states a specific verb and resource: 'Create a contract document record.' This clearly identifies the operation, and the agent can distinguish it from siblings like create_contract or create_project_document by resource alone. However, it does not explicitly differentiate from similar document-creation tools, so it falls short of a 5.

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

Usage Guidelines2/5

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

The only guidance is a prerequisite: 'Requires contract_documents:write scope.' There is no statement of when to use this tool versus alternatives such as update_contract_document, bulk_create, or create_upload_url. An agent gets the permission requirement but no routing logic or context for selecting this tool over siblings.

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

create_contract_siteCreate contract siteA

Assign a contract to a site. Requires contract_sites:write scope.

NameRequiredDescriptionDefault
site_idYesSite ID (required)
contract_idYesContract ID (required)

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false, and openWorldHint=false, so the agent knows this is a non-idempotent write. The description adds the OAuth scope requirement, which the annotations do not cover. It does not, however, explain what happens on a duplicate assignment, which is the key behavioral question for a non-idempotent create.

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

Conciseness5/5

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

Two short sentences, zero waste: the action is front-loaded and the prerequisite follows. Nothing could be removed without losing information.

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

Completeness4/5

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

For a simple two-parameter join-table create with no output schema and annotations covering the safety profile, the definition covers what the agent needs to invoke it, including the scope prerequisite. The only gap is duplicate-assignment behavior, which is minor but relevant given idempotentHint=false.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 only two UUID parameters, both documented with format and pattern in the schema. The description adds no format, source, or constraint detail beyond the schema, so the baseline 3 is appropriate.

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

Purpose4/5

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

States a specific verb and resource: 'Assign a contract to a site.' This clearly distinguishes it from create_contract (which creates the contract itself) and create_site. However, it does not differentiate from analogous join-table siblings such as create_service_area_site or create_project_site, which use the same assignment pattern.

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 supplies a required-privilege prerequisite ('Requires contract_sites:write scope'), which is useful context for invocation. But it gives no when-to-use guidance relative to alternatives like list_contract_sites or delete_contract_site, and no note about whether the contract/site must already exist.

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

create_cost_categoryCreate cost categoryB

Create a new cost category. Requires cost_categories:write scope.

NameRequiredDescriptionDefault
nameYesCost category name (required)
is_activeNoWhether the category is active
parent_idNoParent cost category ID

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnly=false, idempotent=false, destructive=false and openWorld=false, so safety is covered. The description adds a genuinely useful piece of information the annotations lack: the required write scope. It does not disclose whether name must be unique, whether the new category is returned, or what happens on duplicates.

Agents need to know what a tool does to the world before 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, no filler, with the action stated first and the permission requirement second. Nothing could be trimmed 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 simple three-parameter create tool with full schema coverage and no output schema, this is close to sufficient. The remaining gap is that it never says how the created category is identified in the response or how it relates to the sibling bulk_create.

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

Parameters3/5

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

Schema description coverage is 100% – name, is_active and parent_id are each documented in the schema with type, constraints and format. The description adds no parameter meaning beyond that, so the baseline of 3 applies.

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

Purpose4/5

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

Specific verb+resource ("Create a new cost category") that matches the name exactly and is unambiguous against siblings like update_cost_category or delete_cost_category. It does not, however, differentiate itself from bulk_create, which is the one sibling that could plausibly 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 Guidelines2/5

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

"Requires cost_categories:write scope" is a prerequisite, not usage guidance. There is no statement of when to use this versus bulk_create, or when to prefer update_cost_category for an existing category. The agent gets a permission note but no selection criteria.

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

create_criticality_modifierCreate criticality modifierA

Override the criticality modifier for one tier. Rows are overrides only: a tier with no row uses the built-in default (critical 0.6, high 0.8, medium 1.0, low 1.4). A modifier below 1 tightens every target held by facilities in that tier and one above 1 relaxes them. One override per tier; a duplicate returns 409, so call list_criticality_modifiers and update the existing row instead. Requires los_targets:write scope.

NameRequiredDescriptionDefault
modifierYesMultiplier from 0.1 to 1.9 (required); below 1 tightens, above 1 relaxes
criticalityYesCriticality tier (required)

TDQS

A4.9/5.0
Behavior5/5

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

Annotations cover the safety profile (readOnlyHint=false, idempotentHint=false, destructiveHint=false), and the description adds real behavioral context beyond them: the conflict behavior on duplicate tiers (409), the required write scope, and the semantic direction of the modifier (below 1 tightens, above 1 relaxes) plus the built-in defaults a missing row falls back to.

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

Conciseness5/5

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

Four sentences, each carrying distinct load: purpose, override/default semantics, effect direction, conflict handling and required scope. Purpose is front-loaded and no sentence is padding.

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

Completeness5/5

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

For a two-parameter create tool with no output schema, the description covers everything an agent needs to call it correctly: what it writes, the fallback behavior, the numeric range semantics, the duplicate-tier failure mode and its remedy, and the permission requirement.

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 a bump by supplying the built-in default values per tier (critical 0.6, high 0.8, medium 1.0, low 1.4) and restating the multiplier's directional effect, which helps interpret the numeric modifier in context. It does not add formatting or unit detail beyond that.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 ('Override the criticality modifier for one tier') and immediately clarifies that rows are overrides rather than defaults, which distinguishes it from get/list/update/delete_criticality_modifier siblings. The per-tier default table makes 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 Guidelines5/5

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

Explicitly routes the agent: 'One override per tier; a duplicate returns 409, so call list_criticality_modifiers and update the existing row instead.' It also states the prerequisite scope (los_targets:write). This is exactly the when-to-use/when-not-to-use/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.

create_custom_field_definitionCreate custom field definitionA

Create a new custom field definition. Requires custom_fields:write scope.

NameRequiredDescriptionDefault
field_nameYesField name / key (required)
field_typeYesField data type (required)
entity_typeYesEntity type this field applies to (required)
field_labelNoDisplay label
is_requiredNoWhether the field is required
display_orderNoDisplay order
field_optionsNoOptions for select-type fields

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false, and openWorldHint=false. The description adds the required auth scope ('custom_fields:write'), which is useful context beyond annotations, but it does not describe return behavior, side effects, or duplicate handling.

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

Conciseness5/5

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

Two short sentences, front-loaded with the action and followed by the prerequisite. Every sentence earns its place and there is no waste.

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

Completeness3/5

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

The description covers purpose and authorization for a create tool with rich schema coverage and useful annotations. However, it does not mention what the tool returns (no output schema exists), nor does it clarify valid entity_type values or field_options behavior, leaving some invocation context to the schema alone.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 the field_type enum. The description adds no additional parameter meaning 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 and resource: 'Create a new custom field definition.' This clearly distinguishes it from sibling tools such as create_custom_field_value (different resource) and update/delete_custom_field_definition (different verb), even without naming 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?

Implies usage by saying it creates a 'new' definition and provides a prerequisite ('Requires custom_fields:write scope'), but it does not state when to use this versus update_custom_field_definition or bulk_create, nor does it give exclusions. Guidance is present but incomplete.

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

create_custom_field_valueCreate custom field valueA

Create (upsert) a custom field value for an entity. The table stores values in typed columns - prefer setting the one that matches the field definition's field_type: value_text (text/select), value_number (number), value_date (date, ISO YYYY-MM-DD), value_boolean (boolean). Alternatively pass a single value string and the server will dispatch it to the right column based on field_type. Writes upsert on (entity_id, field_definition_id) so replaying a batch is idempotent. Requires custom_fields:write scope.

NameRequiredDescriptionDefault
valueNoLegacy single-value shim - server dispatches to the correct typed column based on the field definition's field_type. Ignored if any value_* typed column is set.
entity_idYesEntity ID - e.g. asset.id, work_order.id (required)
value_dateNoDate value, ISO YYYY-MM-DD (use for field_type=date)
value_textNoText value (use for field_type=text or select)
value_numberNoNumeric value (use for field_type=number)
value_booleanNoBoolean value (use for field_type=boolean)
field_definition_idYesCustom field definition ID - resolve via list_custom_field_definitions (required)

TDQS

A3.5/5.0
Behavior1/5

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

Annotations declare idempotentHint=false, but the description asserts 'Writes upsert on (entity_id, field_definition_id) so replaying a batch is idempotent' - a direct conflict with the structured hint. The useful side information (custom_fields:write scope required, upsert key) does not offset the contradiction, which can lead an agent to retry assumptions that the annotation forbids.

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 purpose, then typing guidance, then idempotency and scope. Dense but every sentence carries operational information; no restating 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 7-parameter mutation with no output schema, the description covers purpose, parameter strategy, idempotency intent, and required scope, which is near-complete. The only gap is routing versus the sibling update/delete tools, and the idempotency claim conflicts with the annotations rather than completing them.

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 per-column semantics are already documented; the description goes beyond that by explaining the dispatch strategy (typed columns preferred, single `value` shim dispatched by field_type) and that `value` is ignored when a typed column is set. This adds selection guidance the schema alone does not convey.

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

Purpose5/5

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

States a specific verb and resource ('Create (upsert) a custom field value for an entity') and the '(upsert)' qualifier immediately distinguishes it from the plain update/delete siblings in the custom-field family. An agent can identify the operation without opening the schema.

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

Usage Guidelines3/5

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

Gives strong guidance on which parameter shape to prefer ('prefer setting the one that matches the field definition's field_type') and explains the legacy `value` shim, which is useful. However, it never states when to call this tool versus update_custom_field_value or delete_custom_field_value, so routing against the closest 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.

create_expenseCreate expenseB

Create a new expense. Requires expenses:write scope.

NameRequiredDescriptionDefault
notesNoNotes
amountYesExpense amount (required)
project_idYesProject ID (required)
category_idNoCost category ID
descriptionYesExpense description (required)
receipt_urlNoReceipt URL
expense_dateYesExpense date (ISO 8601, required)
work_order_idNoWork order ID

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare the full safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false, openWorldHint=false), so the description is not the primary source of behavioral context. It does add a useful fact beyond the annotations: the required expenses:write scope. It does not mention that repeated calls create duplicate records, but the non-idempotent annotation 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?

Two short sentences with zero filler, and the operation is front-loaded before the scope requirement. Every clause earns its place.

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 8 parameters and no output schema, the definition is minimally adequate: the schema covers inputs and annotations cover safety. It does not describe what the call returns or confirm the created resource's handling, leaving a modest 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% across all 8 parameters, so the schema fully documents each field and its required/format constraints. The description adds no parameter-level meaning beyond what the schema already provides, making the baseline 3 appropriate.

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

Purpose4/5

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

The description names a specific verb and resource ('Create a new expense'), so the agent knows exactly what operation it performs. However, it offers no differentiation from near-identical siblings such as bulk_create or the other create_* tools, so it does not reach the top of the scale.

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 like bulk_create or update_expense. The only guidance is the required scope, which is a prerequisite rather than a when-to-use rule.

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

create_floorplanCreate floorplanA

Create a floorplan row. Provide EXACTLY ONE of building_id (per-building floor) or site_id (site-level / campus plan). Typically the web app calls this per page of an uploaded PDF; MCP clients rarely need to call this directly since they do not upload the PDF itself. Requires floorplans:write scope.

NameRequiredDescriptionDefault
statusNoDetection status (default: pending)
site_idNoSite this plan belongs to (use for site-level / campus plans; omit if building-scoped)
building_idNoBuilding this floor belongs to (omit if site-scoped)
floor_labelYesHuman-readable label (e.g. "Ground Floor", "Mezzanine", "Site Plan")
floor_orderNoSort order within the scope (lowest first)
page_numberNo1-indexed page number within the PDF
pdf_filenameYesOriginal filename for display
page_width_ptNoPage width in PDF points (discovered client-side)
page_height_ptNoPage height in PDF points
pdf_storage_pathYesSupabase Storage path to the PDF file

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare the safety profile (not read-only, not destructive, not idempotent, closed-world), so the bar is lower. The description adds a genuinely useful behavioral fact the annotations lack: it requires the 'floorplans:write' scope, and it states the exactly-one-of constraint that governs valid invocations.

Agents need to know what a tool does to the world before 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 action and the key constraint, then usage context and scope. No redundancy, 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?

For a mutation tool with full schema coverage and annotations but no output schema, the description is largely complete: it covers the action, the input constraint, auth scope, and calling context. It does not mention return behavior or idempotency implications, which would round it out.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. The description adds the mutual-exclusivity rule ('Provide EXACTLY ONE of building_id or site_id') that the schema only implies per-field, which is a real semantic gain over the structured data.

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 ('Create a floorplan row') and immediately clarifies the scoping model (per-building vs site-level). It is clearly distinguishable from siblings like create_building or create_floorplan_region, though it does not explicitly name a sibling it contrasts against.

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

Usage Guidelines4/5

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

Strong when/when-not guidance: it explains the web app calls this per PDF page and that MCP clients 'rarely need to call this directly' since they don't upload the PDF, which steers the agent away from misuse. It stops short of naming a specific alternative tool to use instead.

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

create_floorplan_regionCreate floorplan regionA

Create a region (labeled room or zone) on a floorplan. Polygon coordinates are normalized 0-1 with origin top-left. Optionally link the region to an existing Location via location_id. Requires floorplan_regions:write scope.

NameRequiredDescriptionDefault
labelYesRegion label (e.g. "Boiler Room 2B")
sourceNo"manual" (default) or "ai" for AI-detected
polygonYesPolygon outline as an array of [x, y] points in normalized 0-1 coordinates (origin top-left). At least 3 points.
reviewedNoTrue if an admin has reviewed this region (default: true for manual, false for ai)
confidenceNoAI confidence score (0-1), only set when source=ai
location_idNoLinked Location ID (resolved via list_locations)
floorplan_idYesFloorplan this region belongs to

TDQS

A4.2/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=false, so the mutation profile needs no repeating. The description adds genuinely new context: a required authorization scope (floorplan_regions:write) and the coordinate convention (normalized 0-1, origin top-left) that governs how the polygon must be authored. It does not mention that repeat calls produce duplicate regions, but that is 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.

Conciseness5/5

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

Three compact sentences with no filler; the core action is front-loaded and the coordinate constraint and linking option follow in priority order, with the scope requirement last.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence 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 create tool with full schema coverage and a clear annotation profile, the description covers the essentials an agent needs to author a valid call. It omits what is returned (e.g. the new region ID), which is acceptable given there is no output schema but would still have been useful for chaining.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 is already documented, establishing a baseline of 3. The description restates polygon normalization and clarifies that location_id must point to an existing Location, adding a little meaning but not going beyond the schema's own guidance.

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

Purpose5/5

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

States a specific verb and resource ("Create a region") and disambiguates the noun with "(labeled room or zone) on a floorplan," so the agent can distinguish it from create_floorplan or update_floorplan_region 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: regions are created against an existing floorplan and may optionally be linked to an existing Location, plus the required write scope. It does not state when not to use it or point to siblings (e.g. bulk_create, update_floorplan_region), but the usage conditions are otherwise clear.

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

create_form_responseCreate form responseA

Attach a published form to one record so it can be filled in - the direct way to put an inspection or checklist on an existing work order. The form's questions are snapshotted at attach time, so later edits to the template never change a form already in progress. To put a form on every work order a PM schedule generates, set form_template_id on the schedule instead of calling this per work order. Answering and completing the form happen in the AssetLab app, not through this API. Requires form_responses:write scope.

NameRequiredDescriptionDefault
subject_idYesID of the record - resolve via the matching list tool (list_work_orders, list_pm_schedules, list_infrastructure_assets, list_compliance_records, list_sites)
template_idYesPublished form template ID - resolve via list_form_templates. A draft or archived template is rejected; publish it first with update_form_template status="published".
subject_typeYesWhat kind of record the form is being attached to

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 important behavior: questions are snapshotted at attach time so later template edits do not affect in-progress forms. It also states the required form_responses:write scope and clarifies what this API 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.

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 the snapshot behavior, alternative, limitation, and required scope. Every sentence earns its place 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 create/attach tool with no output schema, the description is complete enough to guide correct selection and invocation. It covers the main alternative pattern, the snapshot semantics, the non-API workflow boundary, and the required scope.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all three parameters, including how to resolve template_id and subject_id. The description largely reinforces the same concepts rather than adding new parameter-specific syntax or constraints.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 action and resource: attaching a published form to one record so it can be filled in. It also distinguishes this from the PM-schedule bulk approach, which is the relevant sibling behavior in the create-family ecosystem.

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 use guidance: use this for one existing record, and instead set form_template_id on a PM schedule when the form should be generated for every work order. It also clarifies that answering and completing the form happen outside this API.

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

create_form_templateCreate form templateA

Create a form template - a reusable inspection, checklist, compliance, or survey definition. Step 1 of building a form: create it as a draft, then add questions with create_form_template_item (or bulk_create on form-template-items), then publish with update_form_template status=published (publishing is rejected if any question is malformed). Requires form_templates:write scope.

NameRequiredDescriptionDefault
nameYesForm template name (required)
moduleNoWorkspace the form is offered in: facilities, infrastructure (inspections of features), or shared (both). Defaults to shared.
statusNoPublication status - leave as draft (default) until all questions are added.
descriptionNoDescription
work_category_idNoWork category ID - the same tenant-configured categories used by work orders (e.g. Electrical, Plumbing, HVAC). Look them up with list_work_categories and pick the closest match; omit if none fits.

TDQS

A4.3/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, destructive=false, idempotent=false). The description adds real context beyond them: it requires form_templates:write scope, defaults to draft status, and warns that publishing is rejected if any question is malformed. It does not say what the response returns, which matters for chaining to step 2.

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 immediately followed by the workflow steps; no filler sentences. It is a dense single paragraph, but every clause (definition, sequencing, validation constraint, scope) 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?

Covers creation, the downstream steps needed to make a usable form, the auth requirement, and the publish validation rule, with no output schema left unexplained. The one omission is that it never states the created template id is returned, which the agent needs to call create_form_template_item next.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 is already documented in the schema, including enums and the work_category_id lookup hint. The description reinforces the draft-vs-published semantics for status but adds no new parameter-level 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 and defines what a form template is (reusable inspection/checklist/compliance/survey definition). It also positions itself in the workflow relative to create_form_template_item and update_form_template, so an agent can distinguish it from its nearest 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?

Explicit sequencing: 'Step 1 of building a form', draft first, then add questions via create_form_template_item or bulk_create on form-template-items, then publish via update_form_template status=published. It names the alternatives and the condition that selects each, which is exactly the when-to-use guidance needed.

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

create_form_template_itemCreate form template itemA

Add one question (item) to a form template. Build a form by calling this once per question in order, or use bulk_create on form-template-items. Requires form_template_items:write scope.

NameRequiredDescriptionDefault
labelYesQuestion text / prompt shown to the user
configNoPer-type settings. number: { min, max, unit, integer, decimals }. text: { multiline, maxLength, placeholder }. multi_select: { minSelections, maxSelections }. photo: { minPhotos, maxPhotos }.
optionsNoREQUIRED for single_select/multi_select: at least 2 choices as { value, label } with unique values. value is a machine slug (e.g. "fail"), label is shown to the user (e.g. "Fail"). Omit for other types.
item_keyNoOptional stable key, unique within the template. OMIT IT and the server derives one from the label (recommended). Only set it when a later item’s visible_when must reference this one - then use a short slug like "compressor_status".
requiredNoWhether an answer is required to complete the form (default false)
help_textNoOptional hint shown under the label
item_typeYesPick by the answer you want: single_select = exactly one choice (Pass/Fail, Yes/No, Yes/No/N-A, or custom - supply options); multi_select = pick several (supply options); number = a numeric reading/count (use config.min/max/unit/integer); checkbox = a single done/not-done tick; text = free comment (config.multiline for long text); photo = photo evidence (config.maxPhotos); section = a non-answerable heading that groups the questions under it.
sort_orderYesDisplay order within the template (0-based; questions render in this order)
template_idYesForm template ID - resolve via list_form_templates
visible_whenNoOptional conditional visibility { itemKey, op, value }. itemKey must reference an EARLIER item’s key (set that item’s item_key explicitly). Operators by referenced type - single_select/checkbox: equals, not_equals, in, not_in, is_answered, is_blank; number: gt, lt, gte, lte, equals, not_equals, is_answered, is_blank; text: is_answered, is_blank, equals, not_equals; multi_select: in, not_in, is_answered, is_blank. e.g. show a "Details" text item only when item "compressor_status" equals "fail".

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false, and openWorldHint=false, so safety profile is covered. The description adds the required 'form_template_items:write' scope and implies sequential ordering, which are useful behavioral details beyond annotations. It does not cover return values, but no output schema exists so that is less critical.

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

Conciseness5/5

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

Two sentences, front-loaded with the core action, and each sentence adds distinct value: the first states the purpose, the second gives the usage pattern and alternative. 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?

Given ten parameters, nested objects, full schema coverage, and annotations covering safety, the description provides enough to select and invoke the tool correctly. It misses minor details like return behavior or error cases, but these are not essential here. The scope requirement and alternative usage cover the main contextual needs.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 ten parameters are thoroughly documented in the input schema. The description only adds the notion of calling 'in order', which overlaps with the schema's sort_order description. It does not add syntax or constraints beyond what the schema already provides.

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

Purpose5/5

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

The description states a specific verb and resource: 'Add one question (item) to a form template.' It distinguishes this tool from the bulk alternative by naming 'bulk_create on form-template-items' and clarifies the one-per-call pattern. An agent can confidently select it over other create_* 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 explicitly says to use this tool once per question in order, and names the alternative bulk_create for adding multiple items. It also states the required write scope, which is a prerequisite. This gives clear when-to-use and when-to-use-alternative guidance.

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

create_infrastructure_assetCreate infrastructure assetA

Create an infrastructure asset (feature - segment or node). Geometry must be GeoJSON Point (for nodes) or LineString (for segments) in EPSG:4326; coordinates are [longitude, latitude]. length_m, slope_pct, and risk_score are computed server-side. Requires infrastructure_assets:write scope.

NameRequiredDescriptionDefault
nameNoFeature name
lanesNoLane count
modelNoModel
depth_mNoDepth (m)
qr_codeNoQR code
site_idNoSite ID
width_mNoWidth (m)
geometryYesGeoJSON geometry - Point for nodes, LineString for segments
materialNoMaterial
quantityNoQuantity
image_urlNoImage URL
status_idNoAsset status ID
system_idNoSystem ID
to_streetNoTo street (segments)
network_idYesInfrastructure network ID (required)
road_classNoO. Reg. 239/02 road class 1-6 (1-2 arterial, 3-4 collector, 5-6 local)
building_idNoBuilding ID
data_sourceNoData source
descriptionNoDescription
diameter_mmNoDiameter (mm)
from_streetNoFrom street (segments)
location_idNoLocation ID
risk_factorNoRisk factor: CRITICAL, HIGH, MEDIUM, LOW
to_invert_mNoTo-invert elevation (m)
external_idsNoFree-form external ID map
feature_codeNoFeature ID - human-readable asset identifier, unique per tenant (typically the source GIS asset id)
feature_typeYes"segment" (LineString) or "node" (Point)
install_dateNoInstall date (YYYY-MM-DD)
asset_type_idNoAsset type ID
from_invert_mNoFrom-invert elevation (m)
purchase_costNoPurchase cost
purchase_dateNoPurchase date (YYYY-MM-DD)
safety_impactNoLOW, MEDIUM, HIGH, CRITICAL
salvage_valueNoSalvage value
serial_numberNoSerial number
to_feature_idNoTo-node feature ID (segments)
flow_directionNoFlow direction
service_impactNoLOW, MEDIUM, HIGH, CRITICAL
condition_scoreNoCondition score (0-100)
from_feature_idNoFrom-node feature ID (segments)
manufacturer_idNoManufacturer ID
system_class_idNoSystem class ID
system_group_idNoSystem group ID
unit_of_measureNoUnit of measure
financial_impactNoLOW, MEDIUM, HIGH, CRITICAL
regulatory_impactNoLOW, MEDIUM, HIGH, CRITICAL
reputation_impactNoLOW, MEDIUM, HIGH, CRITICAL
environmental_impactNoLOW, MEDIUM, HIGH, CRITICAL
last_maintenance_dateNoLast maintenance date (YYYY-MM-DD)
unit_replacement_valueNoUnit replacement value
expected_lifetime_yearsNoExpected lifetime (years)
salvage_value_percentageNo
positional_accuracy_classNoPositional accuracy class
likelihood_of_failure_scoreNo
consequence_of_failure_scoreNo
purchase_cost_calculation_methodNoCost calc method

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare this is a non-destructive, non-idempotent write. The description adds genuinely useful behavior beyond that: required GeoJSON type per feature_type, EPSG:4326 with [lon, lat] ordering, server-side computation of length_m/slope_pct/risk_score, and the required infrastructure_assets:write scope.

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

Conciseness5/5

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

Three tight sentences, front-loaded with the verb and resource; the geometry/CRS constraint and the server-computed fields follow without filler. 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 56-parameter mutation with no output schema, the description covers the highest-risk details (geometry shape, coordinate convention, computed fields, auth scope). It is nearly complete; a note on what the created asset returns would close the remaining gap.

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

Parameters4/5

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

Schema coverage is already 95%, so the baseline is 3. The description nevertheless adds meaning the schema does not: coordinate order, CRS, the Point/LineString-to-feature_type mapping, and the fact that length_m, slope_pct, and risk_score are derived server-side rather than supplied.

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 an infrastructure asset") and immediately clarifies the two sub-shapes it covers ("feature - segment or node"). It is clear what the tool does, but it does not explicitly distinguish itself from close siblings like create_asset or bulk_create.

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

Usage Guidelines2/5

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

The description gives no when-to-use guidance and names no alternatives, despite a crowded sibling set (create_asset, bulk_create, create_infrastructure_network). An agent must infer from the name alone whether this is the right creation tool.

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

create_infrastructure_asset_commentCreate infrastructure asset commentA

Add a comment to an infrastructure feature. The author is attributed to the API key automatically; do not pass user_id. Requires infrastructure_asset_comments:write scope.

NameRequiredDescriptionDefault
commentYesComment text (required)
feature_idYesInfrastructure feature ID (required)

TDQS

A3.5/5.0
Behavior4/5

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

With annotations covering the safety profile (readOnly/ destructive/ idempotent hints), the description adds real context the annotations lack: the author is auto-attributed to the API key, user_id must not be passed, and the call requires infrastructure_asset_comments:write scope. This is exactly the extra behavioral disclosure that earns credit on top of annotations.

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

Conciseness4/5

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

Two tight sentences with the purpose front-loaded and the constraints second. No filler, though it stops just short of being maximally efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence 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 create tool with no output schema, the description covers purpose, auth scope, and attribution behavior adequately. An agent could invoke it correctly; the only gap is sibling disambiguation, which 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% and both parameters are already documented, so the baseline is 3. The description clarifies that authorship is implicit (do not pass user_id), which is useful but concerns a field that does not exist in the schema rather than adding meaning to comment or feature_id.

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 ("Add") and resource ("comment to an infrastructure feature"), so the operation is unambiguous. It implies the target is an infrastructure feature rather than a generic asset, but it does not name the sibling comment tools (create_asset_comment, create_project_comment, create_work_order_comment) to sharpen 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 Guidelines2/5

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

The description says what the tool does but gives no when-to-use / when-not guidance and does not point to any alternative among the closely related comment-creation siblings. The scope note is a prerequisite, not usage routing.

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

create_infrastructure_asset_costCreate infrastructure asset costA

Record a cost against an infrastructure feature. work_order_number is derived server-side from work_order_id; do not set it. Requires infrastructure_asset_costs:write scope.

NameRequiredDescriptionDefault
amountYesCost amount (required)
categoryYesCost category (required)
cost_dateYesCost date (YYYY-MM-DD, required)
po_numberNoPO number
feature_idYesInfrastructure feature ID (required)
work_order_idNoLinked work order ID
invoice_numberNoInvoice number
purchase_order_idNoPurchase order that paid this cost - resolve via list_purchase_orders. Counts against the order's remaining balance unless the cost belongs to a work order.

TDQS

A3.5/5.0
Behavior4/5

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

Annotations already declare this as a non-read-only, non-destructive, non-idempotent write, and the description usefully adds two things annotations cannot express: the required infrastructure_asset_costs:write scope and the fact that work_order_number is derived server-side from work_order_id. It does not disclose duplicate/retry behavior, which matters given idempotentHint=false, but the added auth and derivation context is real value.

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

Conciseness4/5

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

Three short sentences with the core purpose front-loaded and no filler; each sentence carries a distinct constraint. The work_order_number sentence is slightly puzzling since that field is absent from the schema, costing a point on clarity but not on length.

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 write tool with 8 parameters, 4 required, no output schema, and a full schema description, the description covers what the tool does, its scope requirement, and one derived-field caveat. It omits what happens on repeat calls (relevant given idempotentHint=false), whether feature_id must pre-exist, and any post-creation effect such as the cost counting against a purchase order balance.

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 all 8 parameters, including purchase_order_id's balance implications. The description clears that baseline by warning the agent not to set work_order_number (a server-derived field), which is a constraint the schema does not carry.

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: "Record a cost against an infrastructure feature." That is unambiguous about what gets written. It does not, however, distinguish this tool from the closely named sibling create_asset_cost, leaving the agent to infer the entity distinction 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 or when-not-to-use guidance and no named alternative, despite create_asset_cost and create_expense existing as plausible near-neighbors. The only routing-ish information is an implicit scope statement (infrastructure features), which the agent must infer rather than being told.

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

create_infrastructure_asset_documentCreate infrastructure asset documentA

Attach document metadata to an infrastructure feature. Upload the file bytes first via create_upload_url, then pass the returned file_path here. Requires infrastructure_asset_documents:write scope.

NameRequiredDescriptionDefault
nameYesDocument name (required)
categoryNoDocument category
file_pathYesStorage path from create_upload_url (required)
file_sizeNoFile size in bytes
file_typeNoMIME type
feature_idYesInfrastructure feature ID (required)
descriptionNoDescription

TDQS

A4/5.0
Behavior4/5

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

Annotations already state this is a non-read-only, non-destructive, non-idempotent write. The description adds the write scope requirement (infrastructure_asset_documents:write) and the upload dependency, which are useful auth/workflow context beyond the annotations. It does not cover failure modes or response 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 tight sentences, front-loaded with the purpose, then the workflow, then the permission requirement. Nothing is redundant or padded.

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

Completeness4/5

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

For a create tool with no output schema, the description covers purpose, prerequisite workflow, and auth scope, which is nearly all an agent needs. It stops short of describing the return value or post-create behavior, but annotations and schema carry 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 100%, so all seven parameters are already documented in the schema, including that file_path comes from create_upload_url. The description's mention of file_path merely repeats the schema rather than adding format or validation 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?

States a specific verb and resource ("Attach document metadata to an infrastructure feature"), which is enough to tell it apart from sibling document tools like create_asset_document and create_project_document by attachment target. It stops short of naming those alternatives explicitly, so it is clear but not fully sibling-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?

Provides a concrete prerequisite sequence: upload bytes via create_upload_url first, then pass the returned file_path here. That is strong when-to-use guidance, though it names no when-not conditions or alternative document tools.

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

create_infrastructure_asset_inspectionCreate infrastructure asset inspectionB

Record an inspection against an infrastructure feature. Requires infrastructure_asset_inspections:write scope.

NameRequiredDescriptionDefault
notesNoFree-form notes
methodNoInspection method (e.g. CCTV, visual)
defectsNoDefect observations (JSON)
feature_idYesInfrastructure asset (feature) ID (required)
attachmentsNoAttachment URLs/paths
inspector_idNoInspector user ID
condition_scoreNoCondition score (0-100)
inspection_dateYesInspection date (YYYY-MM-DD, required)

TDQS

B3.3/5.0
Behavior3/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 one genuinely useful behavioral fact beyond the annotations: the required infrastructure_asset_inspections:write scope for authorization. It says nothing about duplicate handling or validations.

Agents need to know what a tool does to the world before 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 operation is front-loaded and the authorization constraint follows. Nothing is redundant or padded.

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 a nested defects object and no output schema, the description is minimal but adequate given full schema coverage and explicit annotations. It omits any mention of what is returned or validation behavior, which is a gap but not a blocking one.

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

Parameters3/5

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

Schema description coverage is 100%, so every parameter is already documented in the schema, including nested defect observations and the 0-100 condition score range. The description adds no parameter-level 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?

The description states a specific verb and resource ('Record an inspection against an infrastructure feature'), which clearly identifies the operation. It does not explicitly distinguish itself from close siblings like create_infrastructure_asset_comment or update_infrastructure_asset_inspection, but the verb+resource pairing is unambiguous.

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

Usage Guidelines2/5

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

The description gives no when-to-use or when-not-to-use guidance and names no alternatives, which matters in an API with hundreds of near-identical create_* siblings. The scope requirement is a prerequisite, not usage routing.

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

create_infrastructure_asset_partCreate infrastructure asset partA

Associate a part with an infrastructure feature. The (feature_id, part_id) pair must be unique - a duplicate returns 409. Requires infrastructure_asset_parts:write scope.

NameRequiredDescriptionDefault
part_idYesPart ID (required; resolve via list_parts)
quantityNoDesign/installed quantity (default 1)
feature_idYesInfrastructure feature ID (required)

TDQS

A3.9/5.0
Behavior4/5

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

Goes beyond the annotations by disclosing the composite uniqueness rule on (feature_id, part_id), the concrete failure mode (409 on duplicate), and the required infrastructure_asset_parts:write scope. Annotations only supply the generic non-read-only, non-idempotent, non-destructive profile; the description adds the operational constraints 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?

Three short sentences, zero filler, with the core action front-loaded and the constraint and auth requirement following in decreasing order of importance. 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?

Covers action, key constraint, error behavior, and auth scope for a three-parameter write tool, with no output schema to explain. The return payload on success is unstated, a minor gap for an operation whose annotations already flag it as non-idempotent.

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 documents each field individually, so the baseline is 3. The description adds relational semantics the schema lacks: that feature_id and part_id form a unique pair, which affects how an agent should sequence calls before retrying.

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 pair ('Associate a part with an infrastructure feature'), which is unambiguous on its own. It does not distinguish itself from the near-identical sibling create_asset_part, nor from update_infrastructure_asset_part, leaving the agent to infer which entity type applies.

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

Usage Guidelines3/5

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

Usage is implied by the verb and the required identifiers, but there is no explicit when-to-use guidance, no mention of the non-infrastructure counterpart create_asset_part, and no pointer to update_/delete_/bulk_ variants for related operations. Minimum viable routing information.

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

create_infrastructure_feature_classCreate infrastructure feature classA

Create a tenant-defined infrastructure feature class. Builtin classes are managed by AssetLab and cannot be created via API (is_builtin is always forced to false). Requires infrastructure_feature_classes:write scope.

NameRequiredDescriptionDefault
codeYesAsset class code (lowercase snake_case, 1-50 chars)
iconNoIcon name
labelYesDisplay name (required)
categoryYesCategory - municipal service family (transportation, water, wastewater, stormwater, structures, electrical, telecom, gas, roadside, other)
color_hexNoDisplay colour as hex, e.g. #3B82F6
sort_orderNoSort order

TDQS

A4/5.0
Behavior4/5

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

Annotations cover the mutation safety profile (readOnly=false, destructive=false, idempotent=false). The description adds value beyond them: the write scope required for authorization and the fact that is_builtin is force-set to false — a behavioral detail not present in the schema at all.

Agents need to know what a tool does to the world before 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, zero filler. The purpose is front-loaded and the builtin caveat follows immediately after it 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 create operation with full schema coverage and annotations present, the description supplies the two things structured fields lack: the required scope and the forced is_builtin=false behavior. It does not mention non-idempotency/duplicate-code handling, a minor gap given 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% across all 6 parameters (code pattern, category enum, lengths), so the schema carries parameter semantics. The description adds no field-level detail, making the baseline 3 appropriate.

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

Purpose4/5

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

The description gives a specific verb+resource ('Create a tenant-defined infrastructure feature class') and immediately bounds scope by excluding AssetLab-managed builtins. It does not name a sibling tool to differentiate from, so it lands at clear-but-unrouted rather than 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?

It states an explicit when-not: builtin classes cannot be created via API, and names the required scope (infrastructure_feature_classes:write). It gives no guidance on adjacent sibling choices such as create_infrastructure_asset or create_system_class, but the exclusion plus scope requirement is solid context.

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

create_infrastructure_lifecycle_eventCreate infrastructure lifecycle eventA

Create a lifecycle strategy event. Events attach to a SCOPE (feature_class code, material, optional diameter band) - never to individual features; every feature resolves the most specific matching scope, like replacement rates. Replacement is NOT an event (it is priced by the rates and scheduled by the renewal forecast) - model the interventions BEFORE replacement: crack sealing, relining, resurfacing. List existing events first to reuse a scope. Requires infrastructure_lifecycle_events:write scope.

NameRequiredDescriptionDefault
nameYesEvent name (required, e.g. "Crack Sealing")
materialNoMaterial the scope applies to, exactly as features carry it (e.g. "PVC")
unit_costNoCost per unit (current dollars, never indexed)
fixed_costNoFixed cost (current dollars)
sort_orderNoEvaluation order within the strategy
cost_methodNoCosting: per unit (uses the feature's measured quantity and unit) or a fixed amount (default per_unit)
cost_sourceNoProvenance of the cost ("Engineering 2026", a tender reference)
event_classYesEvent type - preventative maintenance or rehabilitation
feature_classNoFeature class code the strategy scope applies to (omit for a material-wide scope; at least one of feature_class/material is required)
impact_methodYesEffect: add years of life, or reset condition to a value
diameter_min_mmNoLower bound of a diameter band (requires material); bands ladder like rates
impact_reset_toNoCondition after the event (required when impact_method is reset_condition)
work_generationNoWhat a due application of this event becomes when created from the interventions list: none (plan only, default), work_order, or project. Nothing is created on a schedule.
impact_add_yearsNoYears added (required when impact_method is add_years)
max_applicationsNoHow many times the event may fire over a feature's life (default 1)
min_years_betweenNoMinimum years between firings of a recurring event (default 1)
trigger_condition_maxYesUpper bound of the trigger window - the event fires when projected condition falls to this
trigger_condition_minNoLower bound of the trigger window (default 0); a feature already below it has missed the event
work_generation_priorityNoPriority for generated work orders. Ignored unless work_generation is work_order.
work_generation_category_idNoWork category for generated work orders - resolve with list_work_categories. Ignored unless work_generation is work_order.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations only provide the generic write profile (readOnly=false, destructive=false, idempotent=false), so the description carries real added weight: it discloses the required infrastructure_lifecycle_events:write scope and the scope-resolution rule that every feature resolves the most specific matching scope. It does not state whether the created event is returned or how duplicates are handled.

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 scope semantics, then the replacement exclusion, then the operational hint and auth scope. Every sentence carries information, though the paragraph is dense and the replacement tangent 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?

Covers auth requirements, scope modeling, and domain exclusions for a 20-parameter non-idempotent create. With no output schema, the only real gap is not saying what comes back (e.g. the created event id), which is a minor omission rather than a blocker.

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% with rich per-field descriptions, so the baseline is 3, but the description adds meaning on how feature_class, material, and the diameter band combine into a scope and how specificity resolves. That goes beyond restating field docs and helps an agent choose scope parameters correctly.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 lifecycle strategy event') and immediately scopes what the resource is: strategy/scope-level, not per-asset. The 'never to individual features' clause implicitly distinguishes it from sibling create_asset_lifecycle_event, so an agent can pick the right tool 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 concrete operational guidance: list existing events first to reuse a scope, and model pre-replacement interventions (crack sealing, relining, resurfacing) rather than replacement. It stops short of naming the sibling that handles replacement/asset-level events, so the alternative 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_infrastructure_los_targetCreate infrastructure LoS targetA

Set the technical Level of Service target for one infrastructure feature class and metric. One base target per feature class and metric, set once for the organization; a duplicate returns 409, so update the existing row instead. Each network of that class is held to a version adjusted by the network's criticality (unrated counts as medium): a lower-is-better target is multiplied by the tier's modifier, a higher-is-better one keeps its distance from a perfect score multiplied by it (condition 70 becomes 82 at a Critical network, 58 at a Low one). Derived targets never leave the metric's scale. All three metrics run 0-100: asset_condition_avg is higher-is-better and uses the fixed condition bands; fci and asset_past_useful_life_pct are percentages, lower-is-better. Average risk is not available for infrastructure. Not money. Requires los_targets:write scope, and the organization's plan must include both Level of Service and Infrastructure. Resolve feature_class first via list_infrastructure_feature_classes.

NameRequiredDescriptionDefault
activeNoWhether the target is scored (default true)
metricYesMetric the target tracks (required)
base_targetYesBase target, 0-100 (required)
feature_classYesFeature class code (required) - must exist; resolve first via list_infrastructure_feature_classes

TDQS

A4.8/5.0
Behavior5/5

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

Goes well beyond the sparse annotations (readOnlyHint=false, idempotentHint=false, destructiveHint=false) by disclosing the 409-on-duplicate behavior, the criticality-modifier math for derived per-network targets, the scale preservation rule, and the los_targets:write + plan requirements. This is far more than 'creates a 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-loads the core action and the duplicate-409 rule, then layers in the derivation logic. It is dense rather than padded, though the worked example ('condition 70 becomes 82 at a Critical network, 58 at a Low one') is longer than strictly necessary.

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 covers the error path (409), prerequisites, plan/scope gates, valid metrics, and the domain rule that average risk is unavailable for infrastructure. 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.

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: metric direction and scale ('asset_condition_avg is higher-is-better... fci and asset_past_useful_life_pct are percentages, lower-is-better'), how base_target is transformed per network, and the 'Not money' constraint. It stops short of explaining the 'active' parameter's effect 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 ('Set the technical Level of Service target for one infrastructure feature class and metric') and scopes it precisely to one feature class/metric pair. The 'infrastructure' qualifier distinguishes it from the sibling create_system_los_target 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 Guidelines5/5

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

Explicitly handles the duplicate case ('a duplicate returns 409, so update the existing row instead'), which routes the agent to update_infrastructure_los_target when the row exists. It also names the prerequisite ('Resolve feature_class first via list_infrastructure_feature_classes') and the plan/scope preconditions.

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

create_infrastructure_networkCreate infrastructure networkA

Create an infrastructure network - a named grouping of features bound to one feature class. Requires infrastructure_networks:write scope.

NameRequiredDescriptionDefault
nameYesNetwork name (required)
metadataNoFree-form JSON metadata
criticalityNoHow strictly the network is held to its feature class's Level of Service targets: critical, high, medium or low. Unset is treated as medium; send null on update to clear it
descriptionNoDescription
color_schemeNoDisplay color scheme
feature_classYesAsset class code (must exist; resolve via list_infrastructure_feature_classes)

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare a write operation (readOnlyHint=false, idempotentHint=false, destructiveHint=false, openWorldHint=false), so the safety profile is covered. The description adds genuinely new behavioral context that annotations cannot carry: the required authorization scope, infrastructure_networks:write. It stops short of describing failure modes such as duplicate name handling or the consequence of an invalid feature_class reference.

Agents need to know what a tool does to the world before 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 definition comes first, followed by the hard prerequisite. Nothing is repeated from the title and no sentence fails to earn 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 create tool with no output schema, the description covers identity, meaning, containment relationship, and authorization, which is enough for an agent to invoke it correctly. Minor gaps remain: nothing about the metadata blob or the cardinality/duplication rules, though the 100% schema coverage substantially offsets that.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 six parameters (including metadata's free-form JSON and criticality's enum with its medium default) are already documented in the schema. The description only reinforces two of them ('named' and 'bound to one feature class'), adding no syntax, format, or default information beyond what the schema provides. Baseline 3 applies.

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

Purpose5/5

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

States a specific verb (Create) plus resource (infrastructure network) and then defines the resource itself: 'a named grouping of features bound to one feature class.' That definition lets an agent distinguish it from sibling creates such as create_infrastructure_zone, create_infrastructure_feature_class, and create_infrastructure_asset 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?

It gives a precondition in the form of a required scope ('infrastructure_networks:write'), which is useful gating, but never says when to choose this tool over the many adjacent create_* siblings or what must exist beforehand at the description level. Usage is implied by the verb rather than articulated.

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

create_infrastructure_zoneCreate infrastructure zoneA

Create an operational hydraulic boundary (pressure zone, DMA, sewershed, etc.). boundary is a GeoJSON Polygon, or a MultiPolygon when the area comes in separate pieces. (network_id, name) must be unique. Requires infrastructure_zones:write scope.

NameRequiredDescriptionDefault
codeNoOptional short code (e.g. "PZ-04")
kindYesZone kind (required)
nameYesZone name (required)
notesNoFree-form notes
boundaryYesGeoJSON Polygon or MultiPolygon (EPSG:4326). Each ring is closed; coordinates are [lon, lat]. Use MultiPolygon for a boundary in separate pieces - an area split by a rail corridor, or one containing an island.
network_idYesInfrastructure network ID (required)

TDQS

A3.8/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 bar is lower, and the description still adds real value: the uniqueness constraint on (network_id, name), which explains the non-idempotent hint, plus the required OAuth scope. It does not describe what is returned or failure modes.

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

Conciseness5/5

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

Three short sentences, front-loaded with the purpose, then the boundary format, then the uniqueness and auth constraints. 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 6-param mutation with no output schema, the description covers the tricky input (boundary geometry), the uniqueness constraint, and the auth scope. Only the return value/error behavior is unaddressed, which is a minor gap given no output schema exists.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3; the boundary format, kind enum, and id limits are already documented per-parameter. The description restates the Polygon/MultiPolygon rule rather than adding new semantics such as coordinate ordering caveats beyond what the schema says.

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

Purpose4/5

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

States a specific verb+resource ('Create an operational hydraulic boundary') and disambiguates the domain by naming concrete kinds (pressure zone, DMA, sewershed). It is clearly distinct from create_infrastructure_network or create_service_area, though it never names a sibling explicitly to route the agent.

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 supplies prerequisites (unique (network_id, name), required infrastructure_zones:write scope) which tells the agent when the call will succeed. However, it gives no guidance on choosing this tool over create_infrastructure_network, create_service_area, or bulk_create.

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

create_invoiceCreate invoiceB

Create a new invoice. Requires invoices:write scope.

NameRequiredDescriptionDefault
notesNoNotes
amountYesInvoice amount (required)
statusNoInvoice status
due_dateNoDue date (ISO 8601)
paid_dateNoPaid date (ISO 8601)
vendor_idNoVendor ID
project_idNoProject ID
tax_amountNoTax amount
category_idNoCost category ID
descriptionNoDescription
invoice_dateYesInvoice date (ISO 8601, required)
work_order_idNoWork order ID
invoice_numberYesInvoice number (required)
purchase_order_idNoPurchase order ID

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false, and openWorldHint=false, so the safety profile is covered. The description adds one genuinely useful non-annotation fact: the invoices:write scope requirement. It does not, however, warn that the operation is non-idempotent, i.e. that submitting the same invoice_number twice may create duplicates.

Agents need to know what a tool does to the world before 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, and the core purpose is front-loaded ahead of the scope requirement. Nothing should be removed.

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

Completeness3/5

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

With annotations covering safety and the schema fully documented, the description is minimally sufficient. Gaps remain for a non-idempotent create with no output schema: it never says whether the created invoice (and its ID) is returned, nor how duplicate invoice numbers are handled.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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% across all 14 parameters, so the schema carries the parameter documentation. The description adds nothing about the three required fields, the status enum, or the UUID-typed foreign keys, 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 ('Create a new invoice'), which is unambiguous on its own. It does not distinguish this from sibling creation tools such as create_expense or create_purchase_order, and there is no create_invoice sibling collision to resolve, so sibling differentiation is absent but not needed.

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

Usage Guidelines2/5

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

The description gives no when-to-use guidance, no prerequisites beyond the auth scope, and no indication of how this differs from other financial-creation tools. An agent must infer usage purely from the name.

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

create_locationCreate locationB

Create a new location within a building. Requires locations:write scope.

NameRequiredDescriptionDefault
areaNoArea (sq ft or sq m)
nameYesLocation name (required)
typeNoLocation type label
floorNoFloor identifier
building_idYesBuilding ID (required)
location_type_idNoLocation type ID (from location_types)

TDQS

B3.4/5.0
Behavior3/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 usefully adds the required authorization scope ('locations:write'), which is information annotations cannot express, but it says nothing about validation failures, duplicate handling, or side effects on the parent building.

Agents need to know what a tool does to the world before 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 action and its target are front-loaded before the auth prerequisite. 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 create tool with full schema coverage and annotations establishing the write/non-idempotent/non-destructive profile, the description supplies the key missing piece (auth scope). It is nearly complete, though it omits any mention of parent-entity prerequisites or post-creation 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?

Schema description coverage is 100%, so every parameter including name, building_id, and location_type_id is already documented in the schema. The description adds no field-level meaning beyond that, making the baseline 3 appropriate.

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

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 location') and adds a scoping constraint ('within a building') that implies the building_id parent relationship. It does not explicitly distinguish itself from close siblings such as create_location_type or create_project_location, 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 Guidelines2/5

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

There is no explicit when-to-use or when-not-to-use guidance and no named alternative. The only contextual signal is 'within a building', which is a scoping statement rather than usage direction; an agent must infer that create_building and create_location_type are prerequisites from sibling names alone.

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

create_location_typeCreate location typeB

Create a new location type. Requires location_types:write scope.

NameRequiredDescriptionDefault
nameYesLocation type name (required)
descriptionNoDescription

TDQS

B3.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=false, idempotent=false, destructive=false, openWorld=false), and the description adds a non-obvious auth requirement (location_types:write scope) that annotations do not provide. It does not describe what is returned or confirm the non-idempotent create semantics, but the scope disclosure is meaningful added context beyond structured fields.

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

Conciseness4/5

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

Two short, front-loaded sentences with no filler. It is efficient, though extremely terse; nothing is wasted but little is offered either.

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 low-complexity create tool with only two well-documented parameters and safety annotations present, the description is nearly sufficient. The gap is that with no output schema, it says nothing about what the create returns (e.g., the new ID), which an agent must know for follow-up calls.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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% (name and description are fully documented, with length bounds), so the schema carries the parameter burden. The description adds nothing about the parameters, making the baseline 3 appropriate.

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

Purpose4/5

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

States a specific verb and resource ('Create a new location type'), so the agent knows exactly what the tool produces. However, with hundreds of sibling 'create_*' tools, it offers no differentiation from near-neighbors like create_location or create_building_type beyond the resource name itself.

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 states a prerequisite ('Requires location_types:write scope') but gives no when-to-use guidance, no exclusions, and does not point to any alternative such as update_location_type or create_location. Usage must be inferred entirely from the name.

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

create_los_consequenceCreate LoS consequenceA

Record what a missed technical Level of Service target means, in the organization's own words. Advisory only: the statement is shown on the Status screen when a matching target is breached, and no notification is sent to notify_roles or to anyone else. When several match a breach the most specific scope wins (a specific system or feature class over a criticality tier over global). severity is a floor; the severity shown scales with the size of the gap and the facility's criticality. Requires los_consequences:write scope.

NameRequiredDescriptionDefault
activeNoWhether the consequence is shown (default true)
metricNoLimit to one metric; omit or null to match any metric
severityYesMinimum severity shown (required)
scope_refNoWhat the scope points at: null for global; critical, high, medium or low for criticality_tier; a system ID (resolve first via list_systems) for system; a feature class code (resolve first via list_infrastructure_feature_classes) for feature_class. Required unless scope_type is global
statementYesThe consequence, as a statement (required)
scope_typeYesWhat the consequence applies to (required)
notify_rolesNoRoles named as owning the consequence. Recorded only; nothing is sent

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 ('Requires los_consequences:write scope') and pre-empts the most likely misreading of notify_roles by stating no notification is sent to those roles or anyone else. Annotations only supply the generic write/non-destructive profile; the description carries the meaningful side-effect and visibility semantics.

Agents need to know what a tool does to the world before 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, purpose first, then side-effect scope, precedence, severity behavior, and auth. Every sentence carries information an agent would otherwise have to guess, 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.

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 generic annotations, the description supplies the missing pieces: what the record affects, that nothing is emitted, how matches are resolved, how severity behaves, and what permission is needed. An agent has enough to create the record correctly on the first attempt.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds genuinely new semantics: the scope precedence rule (specific system/feature class over criticality tier over global) and the fact that severity acts as a floor while the severity actually shown scales with gap size and facility criticality. The notify_roles clarification largely restates 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?

Names a specific verb and resource ('Record what a missed technical Level of Service target means') and explains the artifact's role in the domain (a statement attached to a breached target). It is clearly distinct from sibling creators like create_los_measure or create_infrastructure_los_target, but no sibling is named explicitly, which is what would push this to 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 real context for when the record matters ('shown on the Status screen when a matching target is breached') and when multiple records apply ('the most specific scope wins'), which steers how an agent should create one. It stops short of naming alternatives or stating when not to use it, so it lacks explicit exclusions.

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

create_los_measureCreate LoS measureA

Create a new LoS measure within a service area. Requires los_measures:write scope. Resolve service_area_id first via list_service_areas.

NameRequiredDescriptionDefault
nameYesMeasure name (required, unique per service area)
typeYesMeasure type (required)
unitNoUnit of measurement (e.g., "%", "hours", "count")
weightNoWeight for composite score calculation (default: 1.0)
categoryYesMeasure category (required)
is_activeNoWhether the measure is active (default: true)
sort_orderNoSort order for display
data_sourceYesData source type (required). Use "manual" if values will be entered by hand.
descriptionNoDescription
stretch_goalNoStretch goal value
target_valueNoTarget value
service_area_idYesService area ID (required)
trend_directionNoWhich direction is better
data_source_configNoData source configuration (JSONB). E.g., {"threshold": 3} for pct_above/below, {"days_back": 90} for WO metrics.
minimum_acceptableNoMinimum acceptable value
community_statementNoCommunity-facing statement (for community type measures)

TDQS

A4/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=false, so the safety profile is covered. The description adds value the annotations lack: the required write scope and the cross-tool dependency on list_service_areas. It stops short of stating what happens on duplicate names or validation failure.

Agents need to know what a tool does to the world before 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 scope requirement, then prerequisite. Zero filler and nothing repeated from the schema.

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

Completeness4/5

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

For a 16-parameter create tool with full schema coverage and no output schema, the description covers purpose, auth and the key prerequisite. It omits duplicate-name behavior (the schema flags name as unique per service area) and any notion of the created object's identifier, which would round it out.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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% across 16 parameters, so the schema already carries every field's meaning, constraints and enums. The only parameter-adjacent note is the service_area_id resolution hint; otherwise the description adds nothing beyond the schema, which is the expected baseline 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+resource+scope: 'Create a new LoS measure within a service area.' An agent can tell it apart from create_los_measurement or create_los_consequence by the resource noun, though it does not explicitly contrast with those siblings.

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

Usage Guidelines4/5

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

Gives two concrete operating conditions: the required los_measures:write scope and the instruction to resolve service_area_id via list_service_areas first. It names the helper tool explicitly, but offers no when-not-to-use guidance (e.g., bulk_create for multiple measures).

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

create_los_measurementCreate LoS measurementA

Record a new LoS measurement value. Requires los_measurements:write scope. Resolve los_measure_id first via list_los_measures.

NameRequiredDescriptionDefault
notesNoNotes or context for this measurement
is_autoNoWhether this is an auto-calculated value (default: false)
period_endYesPeriod end date (ISO 8601, required, e.g., "2026-03-31")
period_typeYesPeriod type (required)
actual_valueYesMeasured value (required)
period_startYesPeriod start date (ISO 8601, required, e.g., "2026-01-01")
los_measure_idYesLoS measure ID (required)

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare this as a non-read-only, non-idempotent, non-destructive write, so the safety profile is covered. The description adds two useful facts beyond them: the los_measurements:write scope requirement and the FK-resolution precondition. However, it says nothing about whether re-posting the same period conflicts or what happens on failure, so it is modest added value rather than rich disclosure.

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

Conciseness5/5

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

Two tight sentences with the action, then the authorization and prerequisite, in that order. Zero filler and every clause is actionable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence 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 covers the prerequisites and permissions for a 7-parameter write tool, and the schema documents every field. The main gap is the absence of any statement about duplicate measurements for the same period or the response shape, which matters given idempotentHint=false.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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% across all 7 params, including enum values for period_type and ISO 8601 formats, so the schema carries the semantics. The description mentions only los_measure_id resolution and adds no meaning for actual_value, period_type, is_auto, or notes. Baseline 3 is correct.

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

Purpose4/5

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

States a specific verb and resource: 'Record a new LoS measurement value.' An agent can distinguish it from create_los_measure (the measure definition) and create_los_measurement's list/get/update/delete siblings by the object being recorded. It does not explicitly contrast itself with those siblings, 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 Guidelines4/5

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

Gives a concrete precondition and route: 'Resolve los_measure_id first via list_los_measures,' which names the exact sibling to call beforehand. It also states the required scope. No when-not-to-use guidance or mention of duplicate-period behavior, 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.

create_los_proposed_targetCreate LoS proposed targetA

Record the proposed level of service for a LoS measure in one future year (O. Reg. 588/17 s. 6(1)). One row per measure and year; a duplicate returns 409, so update the existing row instead. Use target_statement for a community measure and target_value for a technical one. Requires los_proposed_targets:write scope. Resolve los_measure_id first via list_los_measures.

NameRequiredDescriptionDefault
yearYesTarget year, 2000-2200 (required)
target_valueNoProposed value for a technical measure, in the measure's own unit
los_measure_idYesLoS measure ID (required)
target_statementNoProposed level of service for a community measure, as a statement

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare this is a non-idempotent, non-destructive write operation. The description adds valuable context beyond that: the one-row-per-measure-and-year constraint, the 409 duplicate response, and the required write scope. It does not describe the success return payload, but that is minor 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?

The description is dense but front-loaded, leading with the purpose and then covering constraints, alternatives, parameter choice, permissions, and prerequisites in a few tightly packed sentences. Each sentence 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 create tool with no output schema, the description covers purpose, uniqueness constraints, duplicate handling, parameter selection, scope requirements, and a prerequisite lookup. It omits what a successful response contains, but the core invocation guidance is 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 four parameters are already documented in the schema, including the community-vs-technical distinction for target_statement and target_value. The description restates that distinction without adding new semantic 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?

The description states a specific verb and resource: recording the proposed level of service for a LoS measure in one future year, with regulatory citation. It is clear but does not explicitly differentiate itself from similar siblings such as create_infrastructure_los_target, create_system_los_target, or create_los_measure.

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

Usage Guidelines5/5

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

It gives explicit when-to-use guidance: a duplicate returns 409, so use update_los_proposed_target instead. It also names the prerequisite tool (list_los_measures to resolve los_measure_id) and the required scope, 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.

create_manufacturerCreate manufacturerB

Create a new manufacturer. Requires manufacturers:write scope.

NameRequiredDescriptionDefault
nameYesManufacturer name (required)
notesNoNotes
websiteNoWebsite URL
contact_nameNoPrimary contact name
contact_emailNoContact email address
contact_phoneNoContact phone number

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, and idempotentHint=false, so the agent knows this is a non-destructive, non-idempotent write. The description adds the required write scope, which is genuine auth context beyond the annotations, but nothing about side effects, dedupe behavior, or what happens on repeated calls.

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, front-loaded sentences with no filler; the purpose comes first and the scope prerequisite second. Efficient, though extremely terse.

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

Completeness3/5

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

For a simple six-field create tool with full schema coverage and safety annotations, the description covers the essential purpose and scope. It omits any indication of the created record's identity or return shape, which would help since there is no output schema.

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

Parameters3/5

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

Schema description coverage is 100%, so all six parameters (name, notes, website, contacts) are already documented in the schema. The description adds no parameter meaning beyond that, so the baseline of 3 applies.

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

Purpose4/5

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

States a specific verb+resource ('Create a new manufacturer'), so an agent knows exactly what the tool does. However, it offers no differentiation from closely related siblings like create_vendor or create_part, which follow the identical create-X pattern.

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

Usage Guidelines2/5

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

The description gives no when-to-use guidance or alternatives. The 'Requires manufacturers:write scope' line is an auth prerequisite, not usage selection guidance, so it doesn't help the agent choose this over create_vendor or the update/delete manufacturer siblings.

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

create_partCreate partB

Create a new part/inventory item. Requires parts:write scope.

NameRequiredDescriptionDefault
costNoUnit cost
nameYesPart name (required)
site_idNoSite ID
categoryNoCategory label
quantityNoCurrent stock quantity
supplierNoDEPRECATED - legacy free-text supplier name. Use supplier_id instead.
building_idNoBuilding ID
location_idNoLocation ID
part_numberNoPart number / SKU
supplier_idNoVendor ID (resolve via list_vendors)
desired_quantityNoTarget / reorder quantity
specific_locationNoStorage location description

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false, and openWorldHint=false, so the write semantics and safety profile are covered structurally. The description adds a genuinely useful piece of context, the required parts:write scope, which is not in the annotations. It says nothing about duplicate handling, idempotency, or what the response 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 short sentences, zero filler, and the core operation is front-loaded ahead of the scope prerequisite. Nothing is wasted.

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 12-parameter mutation, the description is thin, but the fully documented schema and the explicit safety annotations carry most of the burden. The remaining gap is the absence of any return-value or duplicate-handling information, which matters somewhat for a non-idempotent create.

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

Parameters3/5

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

Schema description coverage is 100% across all 12 parameters, so the schema already documents name, cost, quantity, supplier_id (with its resolution hint), and the rest. The description contributes no additional parameter meaning. 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: 'Create a new part/inventory item.' The verb clearly separates it from get_part, update_part, list_parts, and delete_part. However, it does not clarify its boundary against adjacent creation siblings such as create_part_category or create_asset_part.

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 only guidance is a permission prerequisite ('Requires parts:write scope'). It never says when to use this versus bulk_create, create_part_category, or create_asset_part, which are all present in the sibling list. The reader must infer usage from the name alone.

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

create_part_categoryCreate part categoryB

Create a new part category. Requires part_categories:write scope.

NameRequiredDescriptionDefault
nameYesPart category name (required)
moduleNoWorkspace the category is offered in: facilities, infrastructure, or shared (both). Defaults to shared.
descriptionNoDescription

TDQS

B3.3/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, non-destructive, non-idempotent). The description adds genuinely useful context by naming the required scope (part_categories:write), which is not in the annotations or schema. But it omits anything about defaults, duplicate handling, 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.

Conciseness5/5

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

Two short, front-loaded sentences with zero waste. The action is stated first, followed by the permission requirement.

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

Completeness3/5

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

For a simple three-parameter create tool with full schema coverage and a full annotation set, this is minimally sufficient. The scope requirement is a nice addition, but nothing about creating-in-existing-name behavior or the required name uniqueness is conveyed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 all three parameters documented including the enum and default for 'module'. The description adds no parameter 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 ('Create') and resource ('part category') clearly, matching the title. However, it does nothing to distinguish this from the many sibling create_* tools (create_part, create_work_category, create_cost_category) beyond the resource name itself.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives like create_part or create_work_category, nor any prerequisites beyond the scope mention. The scope note is a permission requirement, not usage context.

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

create_pm_scheduleCreate PM scheduleA

Create a new preventive maintenance schedule. Requires pm_schedules:write scope. IMPORTANT - Location hierarchy: always resolve top-down by calling list_sites first, then list_buildings filtered by site_id, then list_locations filtered by building_id. Provide all three IDs explicitly.

NameRequiredDescriptionDefault
tasksNoChecklist of tasks for this PM schedule
titleYesPM schedule title (required)
statusNoSchedule status
site_idNoSite ID - resolve first via list_sites
asset_idNoAsset ID
floatingNoFloating schedule (due date based on completion)
next_dueNoNext due date (ISO 8601)
asset_idsNoAssets this schedule covers - use instead of asset_id when there is more than one.
frequencyNoFrequency
meter_unitNoMeter unit (km, miles, hours, cycles)
start_dateNoStart date (ISO 8601)
system_idsNoSystems this schedule covers. Systems have no singular field; this array is the only way to associate them.
building_idNoBuilding ID - resolve second via list_buildings filtered by site_id
descriptionNoDescription
location_idNoLocation ID - resolve last via list_locations filtered by building_id
meter_basedNoWhether this PM triggers at meter intervals (e.g. every 5000 km)
location_idsNoLocations this schedule covers - use instead of location_id when there is more than one. Sending location_id alone replaces this with that single id.
schedule_typeNoSchedule type
work_categoryNoWork category label
estimated_costNoEstimated cost
lead_time_daysNoLead time in days
meter_intervalNoMeter interval - trigger every N units
estimated_hoursNoEstimated hours
auto_generate_woNoAuto-generate work orders
form_template_idNoForm template ID to attach to every work order this generates - resolve via list_form_templates. Use a PUBLISHED template: generation resolves the current published version of the form, so a draft attaches nothing until it is published.
grace_period_daysNoGrace period in days
safety_requirementsNoSafety requirements
custom_interval_weeksNoCustom interval in weeks (when frequency is CUSTOM)
infrastructure_asset_idsNoInfrastructure features this schedule covers - resolve via list_infrastructure_assets. One schedule over several features generates one work order per cycle covering all of them. Mutually exclusive with asset/location/system targets.

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare this is a non-readOnly, non-idempotent create, so the safety profile is covered. The description adds real value beyond that: the required auth scope and the mandatory top-down ID resolution, which prevents a common failure mode. It does not spell out side effects such as work-order generation or duplicate creation.

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

Conciseness4/5

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

Front-loaded with the purpose, then the scope requirement, then the flagged hierarchy rule. Every sentence is actionable. The hierarchy instruction is slightly verbose but its detail is warranted for a 29-parameter tool with a required resolution chain.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence 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 29-parameter create with no output schema, the description covers the non-obvious prerequisites (scope, hierarchical ID resolution) while the schema carries the per-field detail, including the PUBLISHED form template caveat. It omits return/response behavior, though the absence of an output schema makes that a minor gap.

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

Parameters4/5

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

Schema coverage is 100%, so the 29 parameters are self-documenting and the baseline would be 3. The description still adds cross-cutting guidance that no single field carries: that all three location IDs must be provided explicitly and resolved in order, which clarifies how site_id, building_id, and location_id relate.

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 preventive maintenance schedule'), which is unambiguous against the get_/list_/update_/delete_pm_schedule siblings. It does not distinguish itself from create_compliance_pm_schedule or create_pm_template, so it falls short of a 5.

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

Usage Guidelines4/5

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

Gives an explicit prerequisite (pm_schedules:write scope) and a clear pre-call workflow for resolving the location hierarchy via list_sites -> list_buildings -> list_locations. It stops short of naming when to choose this over create_compliance_pm_schedule or create_pm_template.

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

create_pm_templateCreate PM templateA

Create a new PM template. Templates are reusable PM definitions (not linked to a site/asset) that can seed new PM schedules. Requires pm_templates:write scope.

NameRequiredDescriptionDefault
tasksNoChecklist of tasks baked into this template
titleYesPM template title (required, unique per tenant)
asset_idsNoDefault asset IDs to seed on derived schedules
documentsNoDocument references
frequencyNoSuggested maintenance frequency
resourcesNoResource references (parts, tools, materials, equipment)
descriptionNoDescription
location_idsNoDefault location IDs to seed on derived schedules
work_categoryNoWork category label (free text)
estimated_costNoEstimated cost
estimated_hoursNoEstimated hours
form_template_idNoForm template ID to attach to every work order this generates - resolve via list_form_templates. Use a PUBLISHED template: generation resolves the current published version of the form, so a draft attaches nothing until it is published.
work_category_idNoWork category ID - resolve via list_work_categories
safety_requirementsNoSafety requirements
custom_interval_weeksNoCustom interval in weeks (when frequency is CUSTOM)

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare the safety profile (not read-only, not destructive, not idempotent), so the bar is lower. The description adds useful context beyond annotations: the required pm_templates:write scope and the fact that templates are unlinked, reusable definitions. It does not cover return format or uniqueness behavior, but the auth requirement is a meaningful addition.

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

Conciseness5/5

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

Three short, front-loaded sentences with no waste: the action first, then the definitional context, then the scope requirement. Every sentence earns its place.

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 15-parameter creation tool with no output schema, the description is thin: it omits the post-creation flow (how the template is later consumed via create_pm_schedule) and any note on the seeded defaults. Annotations and full schema coverage carry most of the weight, but there is room to do more.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 15 parameters including the title uniqueness constraint and the PUBLISHED form_template caveat. The description adds no parameter-level detail, so the baseline 3 is correct.

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

Purpose4/5

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

States a specific verb and resource ("Create a new PM template") and clarifies the resource is not linked to a site/asset, distinguishing it from create_pm_schedule. The mention that templates "seed new PM schedules" further separates it from its siblings without naming 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?

Usage is implied through the definition of what a template is and that it seeds schedules, but there is no explicit when-to-use versus when-not, and no guidance on choosing create_pm_template over create_pm_schedule. 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.

create_projectCreate projectB

Create a new project. Requires projects:write scope.

NameRequiredDescriptionDefault
nameYesProject name (required)
budgetNoTotal budget
statusYesProject status (required)
end_dateNoEnd date (ISO 8601)
image_urlNoImage URL
start_dateYesStart date (ISO 8601, required)
descriptionNoDescription
project_codeNoProject code
project_typeNoProject type
budget_statusNoBudget status
current_phaseNoCurrent phase
health_statusNoHealth status
progress_statusNoProgress status
project_managerNoProject manager name
progress_percentageNoProgress percentage (0-100)

TDQS

B3.1/5.0
Behavior3/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). The description does add genuinely useful context by naming the required OAuth scope, but says nothing about what is created, what defaults apply, or what happens on duplicate names.

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, front-loaded sentences with no filler. It is efficient, though the brevity verges on under-specification rather than true conciseness for a 15-parameter mutation tool.

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 mutation tool with 15 parameters, three required fields, and no output schema, the description omits too much: no mention of optional vs. required fields, no default behavior, no response shape, no error or duplicate-handling semantics. The scope note is the sole substantive detail.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 15 parameters, including the three required ones and four enums, are already documented in the schema. The description adds no parameter-level meaning beyond that, which meets the baseline for a fully-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 and resource ('Create a new project'), so the operation is unambiguous. It does not distinguish itself from the many project-scoped creators in the sibling list (create_project_task, create_project_phase, create_project_document, etc.), though the base resource name largely carries that distinction on its own.

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 only guidance offered is the permission requirement ('Requires projects:write scope'). There is no statement of when to use this tool versus bulk_create, create_project_asset, or any of the other project-related creators, and no prerequisites or side effects are described.

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

create_project_assetCreate project assetA

Link an asset to a project. Requires project_assets:write scope.

NameRequiredDescriptionDefault
asset_idYesAsset ID (required)
project_idYesProject ID (required)

TDQS

A3.6/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, openWorldHint=false), so a lower bar applies. The description usefully adds the required auth scope, which annotations do not carry, but says nothing about duplicate-link behavior, despite idempotentHint=false implying a repeat call may error or duplicate.

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

Conciseness5/5

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

Two compact sentences with the action front-loaded and the prerequisite second. No filler or restated title text.

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

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 linking tool with no output schema and annotations that already cover the safety profile, the description covers purpose and authorization adequately. The only real gap is what happens when the link already exists, given the non-idempotent annotation.

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

Parameters3/5

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

Schema description coverage is 100% with only two UUID parameters, both documented in the schema with format/pattern constraints. The description adds no additional meaning beyond the schema, 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.

Purpose4/5

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

"Link an asset to a project" gives a specific verb (link) and both resources (asset, project), which is distinct from the many create_project_* and create_asset_* siblings. It does not, however, differentiate itself from the near-neighbor create_project_infrastructure_asset or explain how linking relates to those variants.

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 purpose statement and the stated prerequisite scope (project_assets:write), but there is no explicit when-to-use/when-not and no alternative tool named for the related operations (e.g., delete_project_asset or create_project_infrastructure_asset).

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

create_project_budget_itemCreate project budget itemB

Create a new project budget item. Requires project_budget_items:write scope.

NameRequiredDescriptionDefault
categoryYesBudget category (required)
project_idYesProject ID (required)
descriptionNoDescription
actual_amountNoActual amount
planned_amountNoPlanned amount

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false and closed-world. The description adds the required write scope, which is genuine value the annotations do not carry. It does not, however, surface the practical consequence of idempotentHint=false (repeated calls can create duplicate line items) 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 short sentences with no filler, and the operation is front-loaded ahead of the scope prerequisite. Nothing is padded or restated.

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 five-parameter mutation tool with full schema coverage and a clear annotation profile, the entry is adequate but minimal: it says what it creates and the scope needed, but leaves duplicate-creation risk from non-idempotency unstated and gives no sense of the created record's shape beyond the schema.

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

Parameters3/5

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

Schema description coverage is 100%, so all five parameters (project_id, category, description, actual_amount, planned_amount) are already documented in the schema, including the category enum. The description contributes nothing 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.

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 budget item.' An agent immediately knows it creates a budget-line record. It does not, however, differentiate from adjacent siblings such as create_project_cost_snapshot or create_budget, which are also project-finance creators.

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 only guidance is the required scope ('project_budget_items:write'), which is an auth prerequisite rather than a usage rule. There is no when-to-use, when-not-to-use, or pointer to alternatives like update_project_budget_item or the bulk_create variant.

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

create_project_buildingCreate project buildingA

Link a building to a project. Requires project_buildings:write scope.

NameRequiredDescriptionDefault
project_idYesProject ID (required)
building_idYesBuilding ID (required)

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, and idempotentHint=false, so the safety profile is covered. The description adds a genuinely useful behavioral constraint not in the annotations: the required project_buildings:write scope. It stops short of explaining duplicate-link behavior or response, leaving most disclosure to structured fields.

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

Conciseness5/5

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

Two short, front-loaded sentences with zero padding. Purpose first, prerequisite second — no wasted tokens.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence 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-ID link operation with no output schema and annotations covering the safety profile, the description covers purpose and auth scope adequately. A note on the effect of re-linking an already-linked building/project would make it fully complete.

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

Parameters3/5

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

Schema description coverage is 100% and both parameters carry their own descriptions, so the schema fully documents the inputs. The description adds no additional parameter meaning, which is the expected baseline when the schema does the heavy lifting.

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

Purpose4/5

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

The description states a clear verb+resource ('Link a building to a project'), and the verb 'link' usefully distinguishes this association operation from sibling create_building/create_project, which create new entities. It does not explicitly name those siblings, but the distinction is inferable from the wording.

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 operation (associate an existing building with an existing project) and a prerequisite scope is stated, but there is no explicit when-to-use/when-not-to-use guidance nor any reference to the related delete_project_building or get_project_building siblings.

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

create_project_commentCreate project commentB

Create a new comment on a project. Requires project_comments:write scope.

NameRequiredDescriptionDefault
contentYesComment content (required)
parent_idNoParent comment ID (for threading)
project_idYesProject ID (required)

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare non-read-only, non-idempotent, non-destructive, non-open-world behavior, so the safety profile is covered. The description usefully adds the required 'project_comments:write' scope, which annotations do not convey, but says nothing about threading semantics, validation failures, or what happens to the returned comment.

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

Conciseness5/5

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

Two short sentences, zero filler, with the action stated first and the scope prerequisite second. Nothing to trim.

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

Completeness3/5

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

For a simple 3-parameter create tool with annotations and a fully described schema, the description is minimally sufficient. It is missing the one thing structured fields cannot supply: when to prefer this over sibling creation tools and when parent_id should be set for threaded replies.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 parameter (content, parent_id, project_id) is documented in the schema with format, pattern and required flags. The description adds no parameter-level meaning, so the baseline of 3 applies.

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

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 ('a new comment on a project'), so the agent knows exactly what is produced. It does not differentiate from the many adjacent create_* siblings (e.g. create_project_update, create_project_task), but the resource itself is unambiguous.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus alternatives like create_project_update or update_project_comment, nor when to use the parent_id threading option. The only precondition given is the scope requirement, which is an authorization note rather than usage direction.

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

create_project_cost_snapshotCreate project cost snapshotB

Record a cost snapshot for a project at a point in time. Requires project_cost_snapshots:write scope.

NameRequiredDescriptionDefault
project_idYesProject ID (required)
actual_costYesActual cost to date (required)
total_budgetYesTotal budget amount (required)
snapshot_dateYesSnapshot date (ISO 8601, required)
forecasted_costNoForecasted total cost
percent_completeNoCompletion percentage (0-100)

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false, and openWorldHint=false, so safety profile is provided. The description adds the required OAuth scope ('project_cost_snapshots:write'), which is useful auth context. However, it does not disclose idempotency implications, duplicate-date handling, or whether snapshots are immutable.

Agents need to know what a tool does to the world before 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 waste. The core purpose is front-loaded and the auth requirement follows immediately. Nothing is repeated or over-explained.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence 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 mutation tool with no output schema and rich annotations, the description covers the essential purpose and a key prerequisite. It could go further by noting whether duplicate snapshots for the same project/date are allowed or what makes the record unique, but it is largely sufficient.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all six parameters. The description adds only a vague temporal hint ('at a point in time') that maps to snapshot_date but provides no format, constraint, or meaning beyond what the schema supplies.

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 ('Record') and resource ('cost snapshot for a project') with a temporal qualifier ('at a point in time'). Clear, but it does not distinguish itself from sibling create_project_* tools or explain how a cost snapshot differs from other project records.

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

Usage Guidelines2/5

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

The description gives no when-to-use guidance, no when-not-to-use conditions, and no alternatives. The only sentence beyond the purpose is a scope requirement, which is a prerequisite rather than usage context.

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

create_project_documentCreate project documentB

Create a project document record. Requires project_documents:write scope.

NameRequiredDescriptionDefault
nameYesDocument name (required)
file_pathYesStorage path from upload URL response (required)
file_sizeNoFile size in bytes
file_typeNoMIME type
folder_idNoFolder ID
project_idYesProject ID (required)
descriptionNoDescription
uploaded_byYesUploader user ID (required)

TDQS

B3.1/5.0
Behavior3/5

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

Annotations already declare non-readOnly, non-destructive, non-idempotent, closed-world behavior. The description usefully adds the required write scope (auth context), but says nothing about what happens on duplicate submission, error behavior, or how the file_path must be obtained.

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 with no filler and the action front-loaded. It is efficient, though it is arguably too terse given the tool's complexity.

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

Completeness2/5

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

For an 8-parameter, 4-required create tool with no output schema, the description omits essential context: the upload-URL prerequisite for file_path, the folder_id relationship, and what the record represents. Annotations cover the safety profile but not the workflow needed to invoke this correctly.

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

Parameters3/5

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

Schema description coverage is 100%, so all 8 parameters are already documented in the schema (including format, length, and required notes). The description adds no parameter meaning beyond that, so the baseline of 3 applies.

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

Purpose4/5

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

States a clear specific verb and resource ('Create a project document record'), which distinguishes it from generic create_* tools. However, it offers no differentiation from close siblings such as create_asset_document, create_contract_document, and create_project_document_folder_template that an agent must choose between.

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 only guidance is the permission prerequisite ('Requires project_documents:write scope'). It never says when to use this tool versus the other document/attachment creation siblings, nor does it mention the critical upstream step implied by file_path ('Storage path from upload URL response'), i.e. that create_upload_url must be called first.

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

create_project_document_folder_templateCreate project document folder templateB

Create a project document folder template. Requires project_document_folder_templates:write scope.

NameRequiredDescriptionDefault
nameYesTemplate name (required)
structureNoFolder hierarchy as JSON array
is_defaultNoWhether this is the default template
descriptionNoTemplate description

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare the safety profile (not read-only, not destructive, not idempotent, not open-world), and the description adds the required write scope, which is useful auth context. It does not describe side effects, return behavior, or what happens when is_default is set, so it adds only moderate value beyond annotations.

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

Conciseness5/5

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

The description is two sentences, front-loads the core action, and includes no wasted words. It is appropriately sized for the tool.

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

Completeness3/5

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

With annotations covering safety, a fully described schema, and no output schema, the definition is minimally adequate. The required scope is stated, but the description omits when to use this tool, how the structure parameter behaves, and what creating a default template implies, leaving clear gaps for a create mutation.

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

Parameters3/5

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

Schema description coverage is 100%, so all four parameters (name, structure, is_default, description) are already documented in the schema. The description adds no additional parameter meaning or format details, 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 clear specific verb (Create) and resource (project document folder template), making it distinguishable from most sibling tools. However, it does not explicitly differentiate itself from closely related siblings like create_project_document or update_project_document_folder_template beyond 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 Guidelines2/5

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

The description mentions a required write scope, which is a prerequisite, but provides no guidance on when to use this tool versus alternatives such as create_project_document or when a folder template is appropriate. No exclusions or context are given.

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

create_project_infrastructure_assetCreate project infrastructure assetA

Link a project to an infrastructure feature. The (project_id, feature_id) pair must be unique - a duplicate returns 409. Requires project_infrastructure_assets:write scope.

NameRequiredDescriptionDefault
notesNoFree-form notes
feature_idYesInfrastructure feature ID (required)
project_idYesProject ID (required)

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare non-readonly, non-idempotent, non-destructive, but the description adds genuinely new behavior: the (project_id, feature_id) uniqueness rule, the concrete 409 failure on duplicate, and the required write scope. It stops short of describing whether the link is reversible or how the created record 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?

Two short sentences, no filler; the action is front-loaded and the constraint/error and scope follow. 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 non-idempotent create-link mutation with no output schema, the description covers the key risk (duplicate 409) and the auth requirement (write scope). It is nearly complete; a note on whether duplicates can be remediated via update/delete would close the 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 description coverage is 100%, so the baseline is 3 and the schema already documents project_id, feature_id, and notes with formats. The description adds the pair-level uniqueness relationship, which is slightly beyond the per-field schema, but not enough to exceed the baseline meaningfully.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 ('Link') plus both resources ('project' and 'infrastructure feature'), and the uniqueness constraint on the pair. An agent can distinguish this from the many sibling creators (create_project_asset, create_project_system, create_infrastructure_asset) because it is explicitly a join/link 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 implied by the verb and the resource naming in the name/description, but it never says when to use this versus alternatives such as create_project_asset or update_project_infrastructure_asset, and gives no preconditions beyond the scope requirement. Minimum-viable guidance only.

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

create_project_locationCreate project locationB

Link a location to a project. Requires project_locations:write scope.

NameRequiredDescriptionDefault
project_idYesProject ID (required)
location_idYesLocation ID (required)

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare this as a non-read-only, non-idempotent, non-destructive write. The description adds the required write scope, which is useful auth context beyond the annotations, but it does not disclose duplicate-handling behavior or other mutation 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.

Conciseness5/5

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

Two sentences with zero waste. The purpose is front-loaded, followed by the required scope. 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 link tool with full schema coverage and annotations covering the mutation profile, the description provides the core purpose and the required scope. It is nearly complete, though it could clarify expected behavior on duplicate links given the non-idempotent hint.

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

Parameters3/5

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

Schema description coverage is 100%, so both parameters are fully documented in the schema. The description adds no extra meaning about the UUID parameters or their format beyond what is already provided.

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: 'Link a location to a project.' It clearly conveys the operation, though it does not explicitly differentiate from siblings like create_project_site or create_location.

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 only guidance is a required scope ('Requires project_locations:write scope'), which is an auth prerequisite rather than selection advice. There is no indication of when to use this tool versus alternatives such as create_project_site or bulk_create.

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

create_project_milestoneCreate project milestoneB

Create a new project milestone. Requires project_milestones:write scope.

NameRequiredDescriptionDefault
nameYesMilestone name (required)
statusNoMilestone status
due_dateYesDue date (ISO 8601, required)
project_idYesProject ID (required)
descriptionNoDescription
completed_dateNoCompleted date (ISO 8601)

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false and openWorldHint=false, so the safety profile is covered structurally. The description adds the write-scope authorization requirement, which is real value beyond annotations, but says nothing about whether a duplicate name collides, what defaults apply to status, 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?

Two short sentences, zero padding, with the core action stated first and the scope requirement immediately after. Nothing could be trimmed without losing information.

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

Completeness3/5

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

For a 6-parameter mutation tool with no output schema, the description covers the action and authorization but omits behaviorally relevant details such as default status, duplicate handling, and whether the created milestone (with its generated ID) is returned. Adequate but with clear gaps.

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

Parameters3/5

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

Schema description coverage is 100% with all six fields documented, including the ISO 8601 format for due_date, the enum for status, and UUID format for project_id. The description adds no parameter-level meaning 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.

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 ('project milestone'), so an agent immediately knows the operation. It does not need heavy sibling differentiation since the create_* family is partitioned by resource, but it adds nothing to distinguish creating a milestone from, say, update_project_milestone or bulk_create.

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 only guidance is the required 'project_milestones:write' scope, which is a precondition rather than a when-to-use rule. There is no mention of when to use this versus bulk_create or update_project_milestone, nor of any preconditions such as the project already existing.

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

create_project_phaseCreate project phaseB

Create a new project phase. Requires project_phases:write scope.

NameRequiredDescriptionDefault
nameYesPhase name (required)
statusNoPhase status
end_dateNoEnd date (ISO 8601)
project_idYesProject ID (required)
start_dateNoStart date (ISO 8601)
descriptionNoDescription
sequence_orderNoOrder within the project

TDQS

B3.3/5.0
Behavior3/5

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

Annotations declare readOnlyHint=false and destructiveHint=false, indicating a safe write operation. The description adds the required scope ('Requires project_phases:write scope'), which is useful and not in annotations. It does not disclose idempotency (annotations say false) or any side effects, but with annotations covering the basic safety profile, this is adequate.

Agents need to know what a tool does to the world before 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: the first states the action, the second states the required scope. No wasted words, front-loaded with the core purpose.

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 and full schema coverage, the description covers the essential action and permission requirement. However, it lacks usage context (e.g., when to use this vs. bulk_create) and does not mention any behavioral aspects like whether the phase is created in a default status or how sequence_order interacts.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 fully documents all seven parameters. The description adds no parameter-level details, 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.

Purpose4/5

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

States a specific verb+resource ('Create a new project phase'), which is clear and differentiates from siblings like create_project_milestone or create_project_task by naming the exact resource. However, it offers no additional scope or field information to distinguish it further within the large set of project-related create tools.

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

Usage Guidelines2/5

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

Provides no explicit when-to-use guidance, no prerequisites beyond the scope, and no alternatives (e.g., bulk_create). The agent must infer that this is for a single phase and not for bulk operations.

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

create_project_phase_categoryCreate project phase categoryB

Create a new project phase category. Requires project_phase_categories:write scope.

NameRequiredDescriptionDefault
nameYesPhase name (required), e.g. "Planning", "Design"
sort_orderNoDisplay order (lower = first)
descriptionNoDescription of the phase

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false and openWorldHint=false. The description adds genuinely useful auth context ('Requires project_phase_categories:write scope'), but it omits what the non-idempotent behavior implies (duplicate categories on repeated calls) and what the response 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 short sentences with zero filler; the action statement is front-loaded and the permission requirement follows immediately. Nothing could be removed without losing information.

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

Completeness4/5

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

For a simple three-parameter create tool whose safety profile is fully covered by annotations and whose params are fully documented in the schema, this is close to sufficient. It stops short of 5 only because it says nothing about duplicate-name handling for a non-idempotent create.

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

Parameters3/5

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

Schema description coverage is 100% and all three parameters carry inline descriptions with constraints (maxLength, min/max, examples), so the description is not required to compensate. It adds no syntax or ordering 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.

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 phase category'), which cleanly separates it from sibling creators like create_project_phase and create_cost_category. It does not, however, explain how the 'category' groups phases, which would help an agent distinguish it from create_project_phase.

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 is given, and no alternative sibling is named. The only conditional information is the required scope, which is a permission prerequisite rather than usage direction.

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

create_project_riskCreate project riskA

Create a new project risk. Requires project_risks:write scope.

NameRequiredDescriptionDefault
titleYesRisk title (required)
impactNoImpact level
statusNoRisk status (default: identified)
categoryNoRisk category
due_dateNoDue date (ISO 8601)
owner_idNoRisk owner (Clerk user ID)
created_byNoCreator (Clerk user ID)
project_idYesProject ID (required)
descriptionNoRisk description
probabilityNoProbability level
mitigation_planNoMitigation plan
contingency_planNoContingency plan

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare non-read-only, non-idempotent, non-destructive behavior, so the safety profile is covered. The description adds real value by disclosing the required write scope, but does not warn that non-idempotency means repeated calls create duplicate risks, nor describe 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.

Conciseness5/5

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

Two short sentences with the action front-loaded and the prerequisite following. No filler, no redundancy with the title.

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 12-parameter mutation tool with no output schema, the description covers the action and auth requirement but says nothing about what is returned or what happens on duplicate creation. Annotations plus the rich schema carry most of the burden, leaving this adequate but thin.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 12 parameters (including enums for impact, status, category, probability) are documented in the schema itself. The description adds no parameter-level meaning beyond that, which is the expected baseline when the schema does the heavy lifting.

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

Purpose4/5

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

States a specific verb and resource ('Create a new project risk'), which is unambiguous against siblings like create_project_task or create_project_milestone. It does not explicitly name an alternative or scope the operation, but the name/resource pairing is clear enough for selection.

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 only guidance is the permission prerequisite ('Requires project_risks:write scope'), which is useful but not usage-oriented. There is no statement of when to use this versus bulk_create or update_project_risk, so usage is only implied by the tool name.

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

create_project_siteCreate project siteA

Link a site to a project. Requires project_sites:write scope.

NameRequiredDescriptionDefault
site_idYesSite ID (required)
project_idYesProject ID (required)

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=false, idempotent=false, and openWorld=false, so the safety profile is covered structurally. The description adds genuinely new behavioral context that annotations do not carry: the required project_sites:write scope. It stops short of noting any side effects on existing links or duplicate-handling 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, front-loaded with the action and followed by the authorization precondition. No filler, no 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 simple two-parameter association tool with full schema coverage, full safety annotations, and no output schema, the description covers purpose and the auth requirement adequately. It could be slightly stronger by noting the effect on already-linked pairs, but 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 both parameters (project_id, site_id) are documented in the schema with format and pattern. The description adds no syntax, constraint, or ordering detail beyond that, so baseline 3 is appropriate.

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

Purpose4/5

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

States a clear verb+resource: linking (associating) a site to a project. The operation is unambiguous, but with many sibling association tools (create_contract_site, create_service_area_site, create_vendor_site_assignment, create_project_location), the description does nothing to distinguish this tool from those or explain why a caller would pick it over them.

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

Usage Guidelines3/5

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

States the required permission scope (project_sites:write), which is a useful precondition for invocation. However, it gives no when-to-use guidance relative to the many sibling create_* association tools, and no when-not-to-use 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_project_systemCreate project systemA

Link a system to a project. Requires project_systems:write scope.

NameRequiredDescriptionDefault
system_idYesSystem ID (required)
project_idYesProject ID (required)

TDQS

A3.6/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-destructive, non-idempotent write, so the safety bar is lower. The description earns credit by disclosing an authorization prerequisite ('Requires project_systems:write scope'), which is exactly the kind of context annotations cannot convey. It stops short of explaining duplicate-link 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.

Conciseness5/5

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

Two very short sentences, action first and authorization second. Nothing is padded and nothing extraneous is included.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence 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 association tool with no output schema and annotations covering the safety profile, the essentials are present: the action, the two entities involved, and the required scope. The only meaningful omission is what happens when the link already exists (idempotentHint=false suggests a failure mode worth warning about).

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 required UUIDs with their own descriptions, so the schema carries the full burden. The description adds no syntax, ordering, or constraint detail beyond the schema; baseline 3 applies.

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

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 — 'Link a system to a project' — which precisely characterizes this as a junction/association creation, more informative than the tool name alone. However, it does nothing to distinguish it from the many near-identical siblings such as create_project_system_class, create_project_system_group, or create_project_asset.

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

Usage Guidelines2/5

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

There is no explicit when-to-use guidance, no prerequisites, and no mention of alternatives or follow-up tools (e.g. list_project_systems or delete_project_system). The intended usage is only inferable from the one-line purpose statement, matching the 'no guidance' band.

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

create_project_system_classCreate project system classB

Link a system class to a project. Requires project_system_classes:write scope.

NameRequiredDescriptionDefault
project_idYesProject ID (required)
system_class_idYesSystem class ID (required)

TDQS

B3.4/5.0
Behavior3/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, openWorldHint=false), so safety is covered. The description adds genuinely useful context by naming the required write scope, but says nothing about behavior when the link already exists (relevant given idempotentHint=false).

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

Conciseness5/5

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

Two short sentences, the purpose front-loaded ahead of the scope requirement, with zero filler. 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 simple two-parameter linking tool whose annotations carry the safety profile and which has no output schema, purpose plus scope is nearly sufficient. A note on duplicate-link behavior would close the only real gap.

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

Parameters3/5

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

Schema description coverage is 100%, so both UUID parameters (project_id, system_class_id) are fully documented in the schema. The description adds no format, constraint, or semantic detail beyond what the schema already provides — baseline 3 is appropriate.

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

Purpose4/5

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

The description uses a specific verb ('Link') plus both resources ('a system class to a project'), which usefully disambiguates the 'create_' prefix against siblings like create_system_class and create_project_system. It stops short of naming those siblings explicitly, 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 Guidelines2/5

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

There is no when-to-use vs. alternatives guidance and no stated preconditions for success beyond the scope note. Nothing tells the agent how this differs from create_project_system, create_system_class, or create_service_area_system_class in practice.

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

create_project_system_groupCreate project system groupB

Link a system group to a project. Requires project_system_groups:write scope.

NameRequiredDescriptionDefault
project_idYesProject ID (required)
system_group_idYesSystem group ID (required)

TDQS

B3.4/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, openWorldHint=false), so the bar is lower. The description adds genuinely useful info not in the annotations — the required project_system_groups:write scope — but is silent on duplicate-link/idempotency behavior, which is the notable ambiguity here.

Agents need to know what a tool does to the world before 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 front-loaded and the prerequisite second. Nothing to trim.

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

Completeness4/5

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

For a simple two-parameter association tool with no output schema and full annotation coverage, the description supplies the action and the auth requirement. The only real gap is what happens when the link already exists, which matters given idempotentHint=false.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 UUID parameters are fully documented with format and pattern in the schema. The description adds no syntax or constraint detail beyond what the schema already provides, so baseline 3 applies.

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

Purpose4/5

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

The description states a specific verb and both resources ('Link a system group to a project'), which disambiguates it from create_system_group (creates the group itself) and create_project_system (a different relationship). It doesn't explicitly name 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 Guidelines2/5

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

It gives a precondition for authorization (the write scope) but never says when to use this tool versus create_system_group, create_project_system, or list_project_system_groups, nor what happens if the link already exists.

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

create_project_taskCreate project taskB

Create a new project task. Requires project_tasks:write scope.

NameRequiredDescriptionDefault
titleYesTask title (required)
statusNoTask status
due_dateNoDue date (ISO 8601)
phase_idNoPhase ID
priorityNoPriority
project_idYesProject ID (required)
start_dateNoStart date (ISO 8601)
assigned_toNoAssigned user
descriptionNoDescription
estimated_costNoEstimated cost
estimated_hoursNoEstimated hours

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false, and openWorldHint=false, so the mutation/safety profile is covered structurally. The description adds one genuinely useful behavioral fact beyond the annotations: the required project_tasks:write scope. It says nothing about what is returned, validation failures, or default field values.

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

Conciseness4/5

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

Two short sentences, front-loaded with the action and immediately followed by the auth precondition. Nothing is wasted, though the content is thin enough that 'concise' shades into 'sparse'.

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

Completeness3/5

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

For an 11-parameter mutation tool with no output schema, the description covers the essential precondition (write scope) but omits what a caller gets back, how optional fields default, and how it relates to sibling creation tools. Adequate to invoke, but not 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% across all 11 parameters, including the two required ones, enum sets for status/priority, and ISO 8601 hints for dates. The description adds no parameter-level meaning beyond the schema, so the baseline 3 for schema-driven tools 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 ('Create a new project task'), so the agent knows exactly what operation this is. It does not, however, distinguish itself from adjacent siblings such as create_project_milestone, create_project_phase, or bulk_create, which share the same create-a-project-entity shape.

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, no exclusions, and no routing to alternatives. With a large sibling set that includes bulk_create and other create_project_* tools, the agent is left to infer whether this is the singleton creation path.

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

create_project_task_dependencyCreate project task dependencyB

Create a dependency between two project tasks. Requires project_task_dependencies:write scope.

NameRequiredDescriptionDefault
task_idYesTask ID (the dependent task, required)
dependency_typeNoDependency type (default: finish_to_start)
depends_on_task_idYesTask ID that must complete first (required)

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, and idempotentHint=false, so the mutation/safety profile is covered. The description adds the required write scope, which is useful auth context, but says nothing about side effects, cycle validation, or duplicate handling.

Agents need to know what a tool does to the world before 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, front-loading the action and following with the scope constraint. 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 low-complexity creation tool with full schema coverage and annotations covering the safety profile, the description supplies the key extra fact (write scope). Minor gaps around validation behavior remain, 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.

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 (task_id, depends_on_task_id, dependency_type with its enum and default) are fully documented in the schema. The description adds nothing beyond that, which is the expected baseline when the schema does the work.

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

Purpose4/5

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

States a specific verb (Create) and resource (dependency between two project tasks), which is unambiguous and clearly distinct from create_project_task. It does not explicitly name its siblings like delete_project_task_dependency, but the name and phrasing leave no real ambiguity.

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

Usage Guidelines2/5

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

The description only says what it does plus a scope requirement. It gives no when-to-use context, no prerequisites (e.g. tasks must exist, cycle rules), and no pointer to the related get/list/delete dependency tools.

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

create_project_team_memberCreate project team memberA

Add a team member to a project. Requires project_team_members:write scope.

NameRequiredDescriptionDefault
roleYesRole on the project (required)
user_idYesClerk user ID (required)
end_dateNoEnd date (ISO 8601)
is_activeNoWhether member is currently active
project_idYesProject ID (required)
start_dateNoStart date (ISO 8601)
responsibilitiesNoDescription of responsibilities

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false, and openWorldHint=false, so the mutation/safety profile is covered structurally. The description adds the write-scope requirement, which is real value beyond annotations. It still omits what happens on a duplicate membership or whether the response returns the created record.

Agents need to know what a tool does to the world before 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 action is front-loaded and the authorization constraint follows immediately. Nothing could be removed without losing information.

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

Completeness3/5

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

For a seven-parameter mutation tool with no output schema, the definition covers the action and the auth requirement but says nothing about the result of the call or edge cases such as an already-existing member. Adequate as a minimum viable definition, but thin for the tool's complexity.

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

Parameters3/5

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

Schema description coverage is 100% and all seven properties carry descriptions, so the schema already documents role, user_id, project_id, dates, and responsibilities. The description adds no parameter-level meaning (e.g. role vocabulary, date semantics, default for is_active), 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 ('Add a team member to a project'), which is unambiguous against siblings like create_project, create_project_task, or update_project_team_member. It does not explicitly name a sibling alternative, but the name-plus-description pairing makes the target entity clear 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 names the required authorization scope (project_team_members:write), which is a genuine usage prerequisite an agent must satisfy before calling. It gives no guidance on when to prefer this over bulk_create or update_project_team_member, and no 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.

create_project_time_entryCreate project time entryB

Create a new project time entry. Requires project_time_entries:write scope.

NameRequiredDescriptionDefault
task_idYesTask ID (required)
user_idYesUser ID (required)
end_timeNoEnd time (ISO 8601 datetime)
user_nameNoDisplay name of the user
project_idYesProject ID (required)
start_timeYesStart time (ISO 8601 datetime, required)
descriptionNoDescription
is_billableNoWhether the time is billable
duration_minutesNoDuration worked, in minutes

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, idempotentHint=false, destructiveHint=false and openWorldHint=false, so the safety profile is covered structurally. The description adds the required write scope, which is genuinely useful, but says nothing about duplicate-creation risk on retry (implied by idempotentHint=false) or how duration/start/end are reconciled.

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

Conciseness4/5

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

Two short sentences, front-loaded with the action followed by the permission requirement; nothing is padded. It is arguably too terse rather than too long, but there is no wasted text.

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

Completeness3/5

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

For a 9-parameter write tool with no output schema, the description covers the action and the auth requirement but omits anything about success behavior, validation coupling between duration_minutes and start/end times, or side effects. Annotations carry the safety profile, so this is adequate but with clear gaps.

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

Parameters3/5

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

Schema description coverage is 100% across all 9 parameters, so the schema already documents field meaning, formats, and required status. The description adds no parameter detail beyond that, which is the expected baseline when the schema does the work.

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

Purpose4/5

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

States a specific verb and resource ("Create a new project time entry"), so the action is unambiguous. It does not differentiate from siblings such as update_project_time_entry or the broader create_* family, but the verb+resource pairing is clear enough.

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

Usage Guidelines3/5

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

The description names a prerequisite (project_time_entries:write scope), which is useful context, but gives no when-to-use guidance relative to update_project_time_entry or bulk_create, and no when-not-to-use conditions. Usage is only implied by the verb.

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

create_project_updateCreate project updateA

Create a periodic project status update. Requires project_updates:write scope.

NameRequiredDescriptionDefault
titleNoOptional custom title
contentYesUpdate content (required)
author_idYesAuthor Clerk user ID (required)
timeframeYesUpdate timeframe (required)
project_idYesProject ID (required)
period_yearYesYear for this update period (required)
period_valueYesPeriod value - 1-12 for monthly, 1-4 for quarterly, etc. (required)

TDQS

A3.6/5.0
Behavior4/5

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

Annotations cover the safety profile (readOnly=false, destructive=false, idempotent=false), and the description adds a concrete behavioral fact the annotations do not: it requires the project_updates:write scope. That auth requirement is genuinely useful context beyond structured fields, though it stops short of describing duplicate handling 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.

Conciseness5/5

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

Two short sentences with zero waste; the action is front-loaded and the scope 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 mutation tool with no output schema, the combination of full-schema parameter coverage, safety annotations, and the stated scope requirement makes it largely complete. Minor gaps remain around duplicate behavior and what happens to non-supplied fields.

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

Parameters3/5

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

Schema description coverage is 100%, so all seven parameters (including required project_id, author_id, timeframe, period_year, period_value, content) are already documented in the schema. The description adds no parameter syntax or format detail, so the baseline 3 is appropriate.

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

Purpose4/5

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

The description states a specific verb and resource ('Create a periodic project status update'), which is clear enough to distinguish it from update_project_update and create_project_comment. However, it offers no explicit differentiation from the many sibling create_* tools beyond 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 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, no prerequisites spelled out beyond scope, and no named alternative for related operations (e.g., create vs. update_project_update). The word 'periodic' hints at intent but leaves 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_purchase_orderCreate purchase orderB

Create a new purchase order. Requires purchase_orders:write scope.

NameRequiredDescriptionDefault
notesNoNotes
amountYesPO amount (required)
statusNoPO status
po_numberYesPO number (required)
vendor_idNoVendor ID
project_idNoProject ID
category_idNoCost category ID
descriptionNoDescription
issued_dateNoIssued date (ISO 8601)
expected_dateNoExpected delivery date (ISO 8601)
work_order_idNoWork order ID

TDQS

B3.3/5.0
Behavior3/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 safety profile is covered. The description usefully adds the auth requirement (purchase_orders:write scope), but says nothing about side effects, what defaults are applied, or what happens to the created record beyond 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?

Two short sentences, front-loaded with the action and followed by the required scope. Nothing is wasted and the key constraint is not buried.

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

Completeness3/5

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

For an 11-parameter mutation tool with no output schema, the description is minimal but the schema covers all parameters and annotations cover the safety profile. It still lacks any indication of response shape or side effects, so it is adequate rather than 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 11 parameters are documented in the schema itself. The description adds no meaning beyond that, which is the expected baseline when the schema does the heavy lifting.

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

Purpose4/5

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

The description states a specific verb+resource ('Create a new purchase order'), which is unambiguous. However, with closely related siblings like create_purchase_order_line and create_purchase_order_link, it does not explicitly differentiate itself from those neighboring tools.

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

Usage Guidelines2/5

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

It names the required scope (purchase_orders:write), which is a precondition, but there is no guidance on when to use this tool versus alternatives such as create_purchase_order_line or bulk_create. No exclusions or context for selection are provided.

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

create_purchase_order_lineCreate purchase order lineA

Add a line item to a purchase order. Requires purchase_orders:write scope. The PO's amount becomes the sum of its lines. A line naming a part_id is counted in whole units, and its quantity_received is added to that part's stock. Required: purchase_order_id, description, quantity.

NameRequiredDescriptionDefault
part_idNoPart from inventory - resolve via list_parts
quantityYesQuantity ordered (required)
unit_costNoPrice per unit, in the organization currency
descriptionYesWhat is being ordered (required)
line_numberNoPosition on the order
purchase_order_idYesPurchase order ID (required) - resolve via list_purchase_orders
quantity_receivedNoQuantity received so far, 0 to quantity

TDQS

A4/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 write scope, a parent-side effect (the PO amount becomes the sum of its lines), and an inventory-side effect (part_id lines count in whole units and quantity_received feeds part stock). These side effects are exactly the behavioral context an agent needs before calling a mutating 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?

Four short sentences, front-loaded with the purpose followed by scope and behavioral consequences. Every sentence carries information; 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 mutation tool with no output schema, the description covers scope, required fields and side effects thoroughly. It stops short of describing what is returned (e.g., the created line ID) or idempotency behavior, which are minor gaps given the strong behavioral coverage.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning: it names the three required fields and explains the non-obvious semantics of part_id (whole-unit counting, stock effect via quantity_received). This adds value the schema alone does not 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?

Clear specific verb+resource: 'Add a line item to a purchase order.' An agent immediately knows this creates a child line on an existing PO. It does not explicitly differentiate itself from siblings like bulk_create or update_purchase_order_line, but the action and target are unambiguous.

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

Usage Guidelines3/5

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

It states the required parameters and the required scope (purchase_orders:write), which implies preconditions, but it never explains when to prefer this over bulk_create for multiple lines or update_purchase_order_line for edits. Usage is implied rather than guided.

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

create_service_areaCreate service areaA

Create a new service area for Level of Service tracking. Requires service_areas:write scope. After creating, link system classes via create_service_area_system_class and sites via create_service_area_site.

NameRequiredDescriptionDefault
iconNoIcon name (e.g., "droplets" for water)
nameYesService area name (required, unique per tenant)
colorNoHex color code (e.g., "#3B82F6")
is_activeNoWhether the service area is active (default: true)
sort_orderNoSort order for display
descriptionNoDescription

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-write profile (readOnly=false, destructive=false, idempotent=false, openWorld=false), so the barrier is low. The description adds the required authorization scope and the post-create linking obligation, which is genuine behavioral context not present in the annotations. It does not clarify whether a duplicate name fails or what the tenant-uniqueness constraint does on conflict.

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

Conciseness5/5

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

Two short sentences, front-loaded with the core action, then scope and follow-up. No filler or restatement of the title.

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

Completeness4/5

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

Covers what the tool does, the auth requirement, and the two next-step linking calls for a six-parameter create tool with no output schema. The only gap is that it never indicates whether the created service area's identifier is returned, which the recommended linking calls would need.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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% across all six parameters, so the schema already documents name, icon, color, is_active, sort_order and description. The description adds no parameter-level 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 and resource ("Create a new service area") and adds the domain context ("for Level of Service tracking") that separates it from the many adjacent create_* tools such as create_site or create_system. An agent can identify the target entity 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 gives a clear prerequisite ("Requires service_areas:write scope") and a concrete follow-up workflow naming two sibling tools (create_service_area_system_class, create_service_area_site). It stops short of any when-not-to-use or alternative guidance (e.g. update_service_area), but the sequencing guidance is unusually actionable.

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

create_service_area_siteCreate service area siteA

Link a site to a service area (optional scoping). Requires service_areas:write scope. Resolve IDs first: list_service_areas → service_area_id, list_sites → site_id.

NameRequiredDescriptionDefault
site_idYesSite ID (required)
service_area_idYesService area ID (required)

TDQS

A3.8/5.0
Behavior3/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 safety profile is covered. The description adds a genuinely useful non-annotation detail, the required write scope, but says nothing about what happens if the site is already linked or whether the call is safe to retry (relevant 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?

Two tight sentences, front-loaded with the action, then prerequisites, then ID resolution — good ordering with no filler. The parenthetical '(optional scoping)' is vague enough to slightly muddy an otherwise clean statement.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence 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 association tool with no output schema, the description covers purpose, authorization scope, and ID sourcing adequately. It omits conflict/duplicate behavior and any hint about what the call returns or creates, which is the remaining gap.

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

Parameters4/5

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

Schema coverage is 100% and both required UUID parameters are self-documented, so the baseline is 3. The description goes beyond the schema by explaining how each ID should be sourced (list_service_areas → service_area_id, list_sites → site_id), which is real added meaning for an agent.

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 pair ('Link a site to a service area'), which cleanly identifies this as a join/association tool distinct from create_site or create_service_area. It does not explicitly name a sibling to differentiate from, and '(optional scoping)' is left unexplained, so it falls short of a 5.

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

Usage Guidelines4/5

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

It gives clear preconditions ('Requires service_areas:write scope') and a concrete ID-resolution workflow pointing at list_service_areas and list_sites. There is no explicit when-not-to-use or alternative for the linking operation itself, which keeps it at 4 rather than 5.

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

create_service_area_system_classCreate service area system classA

Link a system class to a service area. Requires service_areas:write scope. Resolve IDs first: list_service_areas → service_area_id, list_system_classes → system_class_id.

NameRequiredDescriptionDefault
service_area_idYesService area ID (required)
system_class_idYesSystem class ID (required)

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 (non-read-only, non-destructive, non-idempotent), and the description adds meaningful context they do not: the required service_areas:write scope. It omits what happens if the link already exists (relevant given idempotentHint=false), so it stops short of full behavioral disclosure.

Agents need to know what a tool does to the world before 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: purpose first, then auth/prerequisite detail. Every clause carries operational value.

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

Completeness5/5

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

For a two-parameter junction-creation tool with full schema coverage, no output schema, and existing annotations covering the safety profile, the description supplies everything an agent needs: what it does, the required scope, and how to obtain valid IDs.

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 both UUID params are already documented (baseline 3). The description goes further by mapping each parameter to the list tool that produces it (list_service_areas → service_area_id, list_system_classes → system_class_id), adding resolution guidance 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 relationship: 'Link a system class to a service area.' This makes clear it is a junction/association creation, distinguishing it from create_service_area and create_system_class in the sibling list, which create the entities themselves rather than the 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?

Explicitly states the required scope (service_areas:write) and gives the prerequisite workflow for obtaining IDs (list_service_areas → service_area_id, list_system_classes → system_class_id). It does not state when not to use the tool or how it behaves on duplicate links, but the practical usage path is clear.

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

create_siteCreate siteB

Create a new site. Requires sites:write scope.

NameRequiredDescriptionDefault
cityNoCity
nameYesSite name (required)
addressNoStreet address
countryNoCountry
provinceNoProvince/state
year_builtNoYear built
descriptionNoDescription
postal_codeNoPostal/zip code
contact_nameNoPrimary contact name
contact_emailNoContact email
contact_phoneNoContact phone
cost_per_sqftNoBase cost per square foot
lease_detailsNoFree-text lease details / notes
lease_end_dateNoLease end date (YYYY-MM-DD)
owner_landlordNoProperty owner or landlord
ownership_typeNoOwnership type
renewal_optionNoLease renewal option details
square_footageNoSquare footage
lease_start_dateNoLease start date (YYYY-MM-DD)
insurance_providerNoInsurance provider name
insurance_policy_numberNoInsurance policy number
additional_cost_per_sqftNoAdditional cost per square foot
property_manager_companyNoProperty management company name
operational_cost_per_sqftNoOperational cost per square foot
property_manager_contact_nameNoProperty management contact name
property_manager_contact_emailNoProperty management contact email
property_manager_contact_phoneNoProperty management contact phone

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=false, idempotentHint=false, and openWorldHint=false, so the safety and mutation profile is covered. The description adds the auth scope requirement, which is genuinely useful context beyond annotations, but says nothing about return behavior, error/duplicate handling, 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?

Two short sentences with the core action front-loaded and no filler. Given the size of the input schema, it is arguably under-specified rather than overlong, but it wastes no words.

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 creation tool with 27 parameters and no output schema, the description is very thin: it omits what a successful call yields (created site ID?), whether all fields are optional except name, and any deduplication or validation behavior. Annotations and the schema cover much, but the description leaves an agent without a full 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?

Schema description coverage is 100% across all 27 parameters, so the schema already documents each field including the required 'name'. The description adds no parameter-level meaning or grouping (e.g., address vs. lease vs. insurance blocks), 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 ('Create') and resource ('site'), so the agent knows exactly what it does. However, with hundreds of 'create_*' siblings (create_building, create_location, create_project_site), it offers no differentiation or disambiguation about which entity a 'site' is versus adjacent resources.

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?

Aside from the authorization prerequisite ('Requires sites:write scope'), there is no guidance on when to use this versus alternatives. It does not mention related tools like bulk_create, update_site, or create_site variants, nor any preconditions such as unique name requirements.

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

create_systemCreate systemA

Create a new system. Requires systems:write scope.

NameRequiredDescriptionDefault
nameYesSystem name (required)
descriptionNoDescription
crv_multiplierNoCRV multiplier
system_group_idNoSystem group ID

TDQS

A3.8/5.0
Behavior4/5

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

Annotations declare non-read-only, non-destructive, non-idempotent, closed-world behavior, and the description adds the mandatory authorization scope, which annotations do not cover. It still says nothing about side effects such as duplicate names or what happens on scope failure.

Agents need to know what a tool does to the world before 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 and the permission requirement second; 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 simple four-parameter creation tool with no output schema and annotations covering the safety profile, purpose plus required scope is nearly enough. A note on what the created system is identified by, or on uniqueness of 'name', would close the 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 description coverage is 100% across all four parameters, so the schema already carries the semantics; the description contributes nothing about name, description, crv_multiplier, or system_group_id. Baseline 3 is appropriate when the schema does the work.

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

Purpose4/5

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

States a specific verb and resource ('Create a new system') that an agent can act on immediately. It does not differentiate from the many adjacent create_* siblings (create_system_class, create_system_group, create_project_system), but the name itself is unambiguous.

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

Usage Guidelines3/5

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

The description surfaces a prerequisite ('Requires systems:write scope'), which is genuine usage context, but it gives no when-to-use guidance or alternatives relative to create_system_class, create_system_group, or create_project_system.

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

create_system_classCreate system classA

Create a new system class (top-level classification, e.g., "HVAC & Mechanical", "Material Handling"). Requires systems:write scope.

NameRequiredDescriptionDefault
nameYesSystem class name (required)
descriptionNoDescription

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false and openWorldHint=false. The description adds the write-scope authorization requirement, which structured fields do not cover, but stays silent on non-idempotency behavior (duplicate names) and what happens on conflict.

Agents need to know what a tool does to the world before 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, no filler, with the action and the authorization prerequisite front-loaded before any elaboration. 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 simple two-parameter create tool with full schema coverage and a complete annotation set, the definition is nearly sufficient. Only the uniqueness/duplicate-name behavior on a non-idempotent create is left unstated.

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

Parameters3/5

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

Schema description coverage is 100% for both parameters, so the schema already documents name and description with length bounds. The example class names give mild flavor but add no syntax or format guidance 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 (create) and resource (system class), and the parenthetical examples ("HVAC & Mechanical", "Material Handling") clarify what a system class actually is. It does not, however, distinguish this top-level class from the similarly named siblings create_project_system_class or create_service_area_system_class.

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 supplies a concrete prerequisite ("Requires systems:write scope"), which implies usage context. It never says when to choose this over create_project_system_class or create_service_area_system_class, so the agent must infer scope on its own.

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

create_system_groupCreate system groupB

Create a new system group (category under a system class, e.g., "Heating", "Cooling"). Requires systems:write scope.

NameRequiredDescriptionDefault
nameYesSystem group name (required)
descriptionNoDescription
system_class_idNoParent system class ID

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false and openWorldHint=false, so the safety profile is covered. The description adds one genuinely new fact beyond the structured fields - the required systems:write scope - but says nothing about duplicate-name behavior, validation failures, or what identifies the created group.

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

Conciseness5/5

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

Two short sentences, front-loaded with the core action and hierarchy, followed immediately by the permission requirement. No filler, no 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 low-complexity create tool with a fully described 3-parameter schema, no output schema, and annotations covering the safety profile, the description supplies the essential missing pieces: what a system group is in the hierarchy and the required scope. The remaining gap is behavior on duplicate or invalid input, which is a minor omission 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 all three parameters (name, description, system_class_id) are already documented in the schema with constraints. The description adds conceptual context that a group sits under a system class, hinting at the role of system_class_id, but no format or constraint detail beyond the schema. Baseline 3 applies.

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

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 system group') and further disambiguates with a hierarchy definition ('category under a system class') and concrete examples ('Heating', 'Cooling'). It does not explicitly contrast with the near-identical sibling create_project_system_group, which keeps it just shy of a 5.

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

Usage Guidelines2/5

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

There is no when-to-use vs when-not-to-use guidance, no prerequisites such as the parent system class needing to exist, and no mention of alternative tools like bulk_create or create_system_class. The only conditional statement is the auth scope, which is a permission requirement 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.

create_system_los_targetCreate system LoS targetA

Set the technical Level of Service target for one system and metric. One base target per system and metric, set once for the organization; a duplicate returns 409, so update the existing row instead. Each building is held to a version adjusted by its criticality: a lower-is-better target is multiplied by the tier's modifier, a higher-is-better one keeps its distance from a perfect score multiplied by it (condition 70 becomes 82 at a Critical facility, 58 at a Low one). Derived targets never leave the metric's scale. Direction is fixed by the metric and cannot be sent: asset_condition_avg is higher-is-better and uses the fixed 0-100 condition bands; fci, asset_past_useful_life_pct (both 0-100 percent) and risk_score_avg (0-25) are lower-is-better. Not money. Requires los_targets:write scope. Resolve system_id first via list_systems.

NameRequiredDescriptionDefault
activeNoWhether the target is scored (default true)
metricYesMetric the target tracks (required)
system_idYesSystem ID (required) - resolve first via list_systems
base_targetYesBase target on the metric's scale (required): fci, asset_condition_avg and asset_past_useful_life_pct run 0-100; risk_score_avg runs 0-25

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 by disclosing the 409-on-duplicate behavior, the derived-target mechanics (criticality modifier multiplication, examples 70->82 at Critical / 58 at Low), the scale-clamping guarantee, and the required los_targets:write scope. Annotations only cover readOnly/idempotent/destructive 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?

Purpose is front-loaded and every sentence carries information, but the derived-target arithmetic example is dense and the paragraph is long for a four-parameter tool. Slight sprawl without being 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 mutation tool with no output schema, the description supplies everything an agent needs: authorization scope, duplicate handling, key resolution prerequisite, fixed direction, and metric 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 baseline is 3, but the description adds meaningful semantics: direction is fixed by the metric and cannot be sent, which metric is higher- vs lower-is-better, the scale of each metric, and 'Not money'. It duplicates some scale info already in the schema fields, keeping 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?

States a specific verb and resource ('Set the technical Level of Service target for one system and metric'), scoping it to a single system+metric and distinguishing it from the sibling target tools by the 'one base target per system and metric' constraint and the update-existing-row directive.

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-not and the alternative: a duplicate returns 409, so update the existing row instead (routing to update_system_los_target). It also gives a prerequisite workflow step, 'Resolve system_id first via list_systems'.

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

create_upload_urlCreate upload URLA

Generate a signed upload URL for uploading a file to AssetLab storage. Returns a signed_url to PUT the file to, and the storage path to store on the record. IMPORTANT - When a user wants to upload a file, always clarify the target. File upload paths: (1) Asset IMAGE: bucket "asset-images" → update_asset with image_url. (2) Asset DOCUMENT (O&M, warranty, spec): bucket "documents" → create_asset_document. (3) Work order IMAGE: bucket "attachments" → update_work_order with image_url. (4) Work order/request/PM ATTACHMENT: bucket "attachments" → create_attachment with the parent ID. (5) Project DOCUMENT: bucket "project-documents" → create_project_document. (6) Contract DOCUMENT: bucket "contract-documents" → create_contract_document. Always ask the user which type they mean if ambiguous. Requires upload_urls:write scope.

NameRequiredDescriptionDefault
bucketYesStorage bucket (required). Use "asset-images" for asset photos.
file_nameYesFile name including extension (required)

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false, and openWorldHint=false. The description adds the required 'upload_urls:write' scope and the returned values (signed_url and storage path), but it does not disclose URL expiration or reuse 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?

The description is long but front-loads the core purpose and return values, then uses a numbered list for the six upload paths. The final ambiguity reminder slightly duplicates the earlier 'always clarify the target' instruction, preventing a perfect score.

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 explains the return values ('signed_url' and storage path) that an agent needs after the call. It also covers scope, routing, and ambiguity handling, so it is complete for a 2-parameter pre-upload 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 description coverage is 100%, so the baseline is 3; the description adds substantial meaning by mapping each bucket to its target upload path and follow-up tool. It does not add further detail for file_name beyond the schema's 'including extension' 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: 'Generate a signed upload URL for uploading a file to AssetLab storage.' It also distinguishes the tool's role in the upload workflow by naming downstream tools and buckets, so an agent can tell it apart from direct create/upload 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?

Explicitly says when to use it ('When a user wants to upload a file') and routes six bucket/target combinations to the correct follow-up tools (update_asset, create_asset_document, etc.). It also instructs the agent to ask the user when ambiguous and notes the required scope.

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

create_vendorCreate vendorA

Create a new vendor. Requires vendors:write scope.

NameRequiredDescriptionDefault
cityNoCity
nameYesVendor name (required)
stateNoState/province
statusNoVendor status
addressNoStreet address
countryNoCountry
websiteNoWebsite URL (protocol and www prefix are stripped automatically)
categoriesNoVendor categories (e.g. ["HVAC", "Plumbing"])
descriptionNoDescription
contact_nameNoContact person name
contact_emailNoContact email
contact_phoneNoContact phone

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare the safety profile (readOnly=false, destructive=false, idempotent=false), so the description carries a lower burden. It adds the required 'vendors:write' scope, which is useful auth context not present in structured fields, but says nothing about duplicate-name handling, error responses, or side effects beyond creation.

Agents need to know what a tool does to the world before 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 purpose is front-loaded, and the auth requirement follows immediately. No filler or repetition.

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

Completeness3/5

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

For a 12-parameter mutation tool with no output schema, annotations cover safety and schema covers parameters, so the description can be minimal. However, it omits potentially useful context such as duplicate handling, what fields are returned, or when to prefer this over bulk_create, 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 description coverage is 100%, so all 12 parameters are documented in the input schema. The description adds no parameter-level meaning beyond what the schema already provides, which is the expected baseline when the schema does the heavy lifting.

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

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 vendor'), which clearly distinguishes it from siblings such as update_vendor, get_vendor, list_vendors, and create_vendor_site_assignment. An agent can identify the tool's purpose directly 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 Guidelines2/5

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

The description gives no guidance on when to use this tool versus alternatives (e.g., update_vendor for existing vendors, bulk_create for multiple vendors). The only context is the required 'vendors:write' scope, which is a prerequisite 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.

create_vendor_site_assignmentCreate vendor site assignmentB

Assign a vendor to a site. Requires vendor_site_assignments:write scope.

NameRequiredDescriptionDefault
site_idYesSite ID (required)
vendor_idYesVendor ID (required)

TDQS

B3.3/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, openWorldHint=false, idempotentHint=false), so the bar is lower. The description usefully adds the required write scope, but says nothing about what happens on a duplicate assignment (relevant given idempotentHint=false) or the resulting record.

Agents need to know what a tool does to the world before 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 front-loaded, and the scope requirement placed second. Nothing wasted; 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.

Completeness3/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 essentials but omits duplicate-handling behavior, whether the vendor/site must pre-exist, and any response information. Annotations carry the safety profile, so this is adequate but not 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% with only two UUID parameters, both documented as required in the schema itself. The description adds no format, constraint, or referential meaning beyond what the schema states, 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 ('Assign a vendor to a site'), which lets an agent distinguish it from sibling creation tools like create_vendor or create_site. It does not explicitly contrast with the related delete_vendor_site_assignment or list_vendor_site_assignments, but the purpose is unambiguous.

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

Usage Guidelines2/5

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

The only guidance is a permission requirement ('Requires vendor_site_assignments:write scope'). There is no statement of when to use this versus delete_vendor_site_assignment or bulk_create, nor any prerequisite like the vendor and site already existing.

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

create_work_categoryCreate work categoryB

Create a new work category. Requires work_categories:write scope.

NameRequiredDescriptionDefault
nameYesWork category name (required)
moduleNoWorkspace the category is offered in: facilities, infrastructure, or shared (both). Defaults to shared.
descriptionNoDescription

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, idempotentHint=false, destructiveHint=false, and openWorldHint=false, so the write/safety profile is covered by structured data. The description adds one genuinely useful fact beyond that: the required write scope. It says nothing about duplicate-name behavior or what happens to existing work orders referencing categories.

Agents need to know what a tool does to the world before 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 operation front-loaded before the permission prerequisite. 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 three-parameter creation tool with no output schema, the description covers what the tool does and the auth requirement, which is enough for correct invocation. Given the enormous sibling set, one sentence of disambiguation would have made it fully complete.

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

Parameters3/5

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

Schema description coverage is 100% and each of the three parameters (name, module enum, description) is documented in the schema, including the 'Defaults to shared' behavior for module. The description adds nothing beyond the schema, so the baseline of 3 applies.

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

Purpose4/5

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

The description uses a specific verb and resource: 'Create a new work category.' An agent immediately knows the operation. It does not, however, distinguish this from the many sibling create_* category tools (create_cost_category, create_part_category, create_asset_type, etc.), leaving the agent to infer which category type applies.

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 states a prerequisite ('Requires work_categories:write scope') but gives no guidance on when to use this tool versus alternatives, nor when a new category is appropriate rather than reusing an existing one via list_work_categories.

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

create_work_orderCreate work orderA

Create a new work order. Requires work_orders:write scope. REQUIRED fields: title, site_id, building_id, AND at least one association (asset_id OR location_id). A work order with no asset/location association is not valid - ask the user which one applies before calling. RECOMMENDED: work_category_id (look up via list_work_categories; omit only if no reasonable match exists). Location hierarchy: always resolve top-down by calling list_sites first, then list_buildings filtered by site_id, then list_locations filtered by building_id.

NameRequiredDescriptionDefault
typeNoWork order type
titleYesWork order title (required)
statusNoStatus
site_idNoSite ID - resolve first via list_sites
asset_idNoAsset this work order is for - resolve via list_assets. The server mirrors it into asset_ids.
due_dateNoDue date (ISO 8601)
priorityNoPriority level
asset_idsNoAssets this work order covers - use instead of asset_id when there is more than one.
assigneesNoArray of assigned user IDs (alternative to assigned_to for multiple assignees)
image_urlNoImage storage path (upload via create_upload_url with bucket "attachments", then set this to the returned path)
meter_unitNoMeter unit (km, miles, hours, cycles)
start_dateNoStart date (ISO 8601)
system_idsNoSystems this work order covers - resolve via list_systems. Systems have no singular field; this array is the only way to associate them.
assigned_toNoAssigned user ID (mapped to assignees array)
building_idNoBuilding ID - resolve second via list_buildings filtered by site_id
descriptionNoDetailed description
location_idNoLocation this work order is for - resolve last via list_locations filtered by building_id. The server mirrors it into location_ids, so send this OR location_ids, not a conflicting pair.
location_idsNoLocations this work order covers - use instead of location_id when there is more than one. Sending location_id alone replaces this with that single id.
meter_readingNoMeter/odometer reading at time of service
estimated_costNoEstimated cost
estimated_timeNoEstimated time in hours
work_category_idNoWork category ID
purchase_order_idNoPurchase order that paid this work order's actual cost - resolve via list_purchase_orders. Counts against the order's remaining balance.
infrastructure_asset_idsNoInfrastructure features this work order covers - resolve via list_infrastructure_assets. Use this when one job covers several features (a round of hydrant flushing); the whole selection is one work order with one completion and one cost, split across the features. Mutually exclusive with asset/location/system targets.

TDQS

A4/5.0
Behavior4/5

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

Annotations cover the safety profile (non-read-only, non-destructive, non-idempotent, closed-world), and the description usefully adds the required scope and the validation rule that a work order needs at least one asset/location association. Weakness: it asserts site_id and building_id are REQUIRED while the schema's required list contains only title, an inconsistency that could mislead an agent.

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

Conciseness4/5

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

Densely packed but front-loaded: creation, scope, required fields, recommendation, then hierarchy. Every sentence carries an actionable constraint, though the all-caps and multi-clause run-ons slightly reduce 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?

For a 24-parameter create tool with no output schema, the description surfaces the key pitfalls (association requirement, category lookup, hierarchy order, scope). It leaves the many optional fields (cost, meter, dates, purchase_order_id) entirely to the schema, which is acceptable given full 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?

Schema coverage is already 100%, so the baseline is 3, but the description adds genuine meaning: which fields are mandatory in practice, the asset_id/location_id-or-array alternatives, and the required-vs-recommended distinction for work_category_id. It does not explain the mutually-exclusive infrastructure_asset_ids targeting beyond what the schema says.

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

Purpose4/5

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

States a specific verb and resource ('Create a new work order'), which is unambiguous among the many create_* siblings. It does not, however, differentiate itself from the adjacent create_work_request or bulk_create, leaving that distinction to inference.

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

Usage Guidelines4/5

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

Gives concrete preconditions and routing: required fields, the 'ask the user which association applies' rule, when to omit work_category_id, and an explicit top-down resolution order (list_sites -> list_buildings -> list_locations). It stops short of saying when to prefer this tool over create_work_request.

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

create_work_order_commentCreate work order commentB

Create a new comment on a work order. Requires work_order_comments:write scope.

NameRequiredDescriptionDefault
commentYesComment text (required)
work_order_idYesWork order ID (required)

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false, and openWorldHint=false. The description adds genuinely useful context by naming the required work_order_comments:write scope, which annotations do not convey. However, it says nothing about side effects (notifications, visibility) or the returned comment identifier.

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

Conciseness5/5

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

Two short sentences, zero waste, with the core action front-loaded and the authorization requirement immediately after. Nothing to trim.

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

Completeness4/5

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

For a simple two-parameter create with full schema coverage, rich annotations, and no output schema, the description covers action plus auth scope adequately. It is slightly thin on expected results and side effects, but nothing critical is missing for correct invocation.

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

Parameters3/5

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

Schema description coverage is 100% with only two required parameters (work_order_id, comment), both fully documented in the schema with type, format, pattern and min length. The description adds no syntax or format detail beyond the schema, so the baseline of 3 applies.

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

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 comment on a work order'), which cleanly distinguishes it from the many sibling comment creators (create_asset_comment, create_project_comment, etc.) by target entity. It does not explicitly name an alternative, but the resource is unambiguous.

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

Usage Guidelines2/5

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

The description says what the tool does but gives no when-to-use guidance, no prerequisites beyond scope, and does not point to alternatives such as update_work_order_comment. An agent gets no routing help.

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

create_work_order_scheduleCreate work order scheduleA

Schedule a work order for a technician on a date (one entry of a day plan). stop_order gives the position in the technician's day; leave it unset for an unordered calendar entry. Requires work_order_schedules:write scope.

NameRequiredDescriptionDefault
stop_orderNo1-based stop position in the day plan
technician_idYesTechnician Clerk user ID (required)
work_order_idYesWork order ID (required)
scheduled_dateYesDate (YYYY-MM-DD, required)
duration_minutesNoPlanned duration in minutes
scheduling_notesNoScheduling notes
scheduled_end_timeNoEnd time (HH:MM)
travel_time_minutesNoTravel time from previous stop
scheduled_start_timeNoStart time (HH:MM)

TDQS

A3.9/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, destructive=false, idempotent=false). The description adds meaningful context beyond them by stating the required write scope ('Requires work_order_schedules:write scope') and clarifying the create-one-entry behavior. Return/response behavior is not covered, 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.

Conciseness5/5

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

Three short sentences, each carrying distinct information: purpose/scope, the stop_order toggle, and the scope requirement. Front-loaded with the core action and 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?

For a 9-parameter create tool with fully documented schema and present annotations, the description covers purpose, the key optional parameter's behavior, and auth scope. It could note the non-idempotent nature, but nothing critical to correct invocation is missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning for stop_order beyond the schema's '1-based stop position in the day plan' by explaining that leaving it unset yields an unordered calendar entry. Other parameters are left entirely to the schema.

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

Purpose4/5

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

States a specific verb and resource ('Schedule a work order for a technician on a date') and clarifies the scope as 'one entry of a day plan,' which implicitly distinguishes it from create_work_order. It stops short of naming a sibling explicitly, so a full 5 isn't earned, but the purpose is unambiguous.

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

Usage Guidelines3/5

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

It gives conditional usage for one parameter ('leave it unset for an unordered calendar entry'), which is genuinely helpful. However, it never states when to use this tool versus update_work_order_schedule or create_work_order, so tool-level selection guidance is only implied by context.

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

create_work_requestCreate work requestA

Create a new work request. Requires work_requests:write scope. IMPORTANT - Location hierarchy: always resolve top-down by calling list_sites first, then list_buildings filtered by site_id, then list_locations filtered by building_id. Provide all three IDs (site_id, building_id, location_id) explicitly.

NameRequiredDescriptionDefault
titleYesWork request title (required)
statusNoStatus
site_idNoSite ID - resolve first via list_sites
asset_idNoAsset ID
priorityNoPriority level
system_idNoSystem ID
building_idNoBuilding ID - resolve second via list_buildings filtered by site_id
descriptionNoDescription
location_idNoLocation ID - resolve last via list_locations filtered by building_id
work_category_idNoWork category ID

TDQS

A4.3/5.0
Behavior4/5

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

With annotations declaring readOnlyHint=false and destructiveHint=false, the description adds important context beyond annotations: it states the required OAuth scope ('Requires work_requests:write scope') and a mandatory multi-step resolution procedure for location hierarchy. It does not explicitly mention that the operation is non-idempotent (repeated calls create duplicates), which would be useful given idempotentHint=false, but the scope and ordering requirements are significant additions.

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 compact and front-loads the core action, followed by the scope requirement and the critical location resolution procedure. The 'IMPORTANT' label correctly highlights the most error-prone aspect. No wasted words, though slightly dense in the second sentence.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence 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 tool's complexity (10 parameters, 1 required) and the absence of an output schema, the description provides the essential information: the write scope, the mandatory location hierarchy resolution, and the need to supply all three IDs. It does not cover potential failure modes or what happens on success (e.g., returned work request ID), but with no output schema, that is less critical. The description is sufficient for correct invocation.

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

Parameters3/5

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

Schema description coverage is 100%, so parameter semantics are largely covered by the schema. The description does mention that all three IDs (site_id, building_id, location_id) must be provided explicitly, which adds a requirement not obvious from the schema (since only title is required). However, it does not explain the purpose of other parameters like status, priority, asset_id, system_id, or work_category_id beyond what the schema provides.

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

Purpose5/5

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

The description states a specific verb+resource: 'Create a new work request.' This unambiguously distinguishes it from update_work_request, delete_work_request, and create_work_order in the sibling list. An agent can determine the tool's purpose without inspecting the schema.

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

Usage Guidelines5/5

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

Provides explicit when-to-use and when-to-do-something-else guidance: 'always resolve top-down by calling list_sites first, then list_buildings filtered by site_id, then list_locations filtered by building_id.' This is detailed workflow guidance that removes ambiguity about the correct call sequence and prerequisites.

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

delete_assetDelete assetA
DestructiveIdempotent

Delete an asset by ID. Requires assets:write scope.

NameRequiredDescriptionDefault
idYesAsset ID

TDQS

A3.6/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, so the core risk profile is covered. The description adds a useful auth requirement (assets:write scope), but omits whether the delete is soft or hard, whether related entities cascade or block, and whether it 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?

Two sentences, no filler, with the action front-loaded ahead of the permission note. 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 single-parameter delete whose annotations already carry the destructive/idempotent profile, the prerequisites and target are sufficient. The remaining gap is deletion semantics (soft vs hard, cascade behavior), which an agent would benefit from before invoking.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 id parameter, and the schema itself constrains it to a UUID pattern, so the baseline of 3 applies. "By ID" adds nothing beyond what the schema already specifies.

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?

"Delete an asset by ID" gives a specific verb plus resource, so the operation is unambiguous on its own. It does not, however, differentiate itself from the near-identical sibling delete_infrastructure_asset or explain the asset vs infrastructure-asset boundary an agent would need when choosing between them.

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

Usage Guidelines3/5

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

The description states the required scope (assets:write), which is a genuine precondition, but it never says when to prefer this over the many other delete_* siblings or what to do if the asset has dependent records. Usage is implied rather than guided.

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

delete_asset_bettermentDelete asset bettermentA
DestructiveIdempotent

Delete a betterment by ID. The asset's net book value and remaining life revert to what they were without it. Requires asset_betterments:write scope.

NameRequiredDescriptionDefault
idYesBetterment ID

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, so the safety profile is covered. The description earns credit for disclosing a concrete side effect beyond annotations: the asset's net book value and remaining life revert to their pre-betterment state, plus the auth scope required.

Agents need to know what a tool does to the world before 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, side effect, required scope. Front-loaded with the operation and zero filler, so 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 single-parameter delete with no output schema and safety fully covered by annotations, the description supplies purpose, the key side effect on the parent asset, and the auth requirement. It omits only idempotency/irreversibility framing, which the annotations already imply.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 id parameter is fully documented (UUID format, pattern, 'Betterment ID'). The description's 'by ID' adds nothing the schema doesn't already convey, 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 ('Delete a betterment') and scopes it to 'by ID'. The verb cleanly separates it from get_/list_/update_/create_asset_betterment siblings, though the description never explicitly names an alternative, so it stops short of a 5.

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

Usage Guidelines3/5

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

The action implies usage, and the required scope is noted, but there is no explicit when-to-use vs alternatives guidance, no warning about irreversibility, and no mention of prerequisites such as confirming the betterment exists. 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.

delete_asset_commentDelete asset commentA
DestructiveIdempotent

Delete an asset comment by ID. Requires asset_comments:write scope.

NameRequiredDescriptionDefault
idYesAsset comment ID

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, so the safety profile is known. The description adds the authorization requirement ('asset_comments:write scope'), which is behavioral context not present in the annotations. It stops short of stating that deletion is permanent/irreversible.

Agents need to know what a tool does to the world before 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, action front-loaded ahead of the scope requirement. Nothing is redundant or padded.

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

Completeness4/5

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

For a single-parameter destructive delete with no output schema, the description covers what it does, the key to identify the target, and the required permission. Only the irreversibility/aftermath of the delete is unstated, a minor gap.

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

Parameters4/5

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

Single required 'id' parameter with 100% schema description coverage, so the schema already carries the semantics; the description's 'by ID' confirms the identifier role. Baseline of 4 for a fully documented single-parameter tool 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 ('Delete') and resource ('asset comment') and the identifier used ('by ID'). It distinguishes cleanly from the many create_/update_/get_ siblings, though it does not explicitly separate itself from the near-identical delete_infrastructure_asset_comment.

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 real prerequisite ('Requires asset_comments:write scope'), which tells the agent when invocation will succeed. However, it names no alternative tool and gives no when-not-to-use guidance, so usage is only partially covered.

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

delete_asset_condition_assessmentDelete asset condition assessmentA
DestructiveIdempotent

Soft-delete an asset condition assessment by ID. Requires asset_condition_assessments:write scope.

NameRequiredDescriptionDefault
idYesAssessment ID

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, readOnlyHint=false, and openWorldHint=false. The description adds meaningful nuance beyond those hints by specifying "Soft-delete" (distinguishing it from a hard delete) and stating the required permission scope. It does not explain reversibility or side effects on related records, so it is not fully comprehensive.

Agents need to know what a tool does to the world before 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, front-loaded sentences with zero wasted words. The key operation and identifier come first, followed by the required scope. No redundancy 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?

The tool has low complexity (one required parameter), rich annotations, and no output schema. The description covers the operation, the soft-delete nature, and the required scope, which is enough for correct invocation. It could optionally clarify what soft-delete means for recoverability, but that omission is 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%, and the single parameter already has a clear description ("Assessment ID") with UUID format and pattern. The description's "by ID" adds no syntax, format, or meaning 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 ("Soft-delete"), resource ("asset condition assessment"), and identifier ("by ID"), making it immediately distinguishable from sibling create_*, update_*, and get_* tools. No ambiguity about what operation is performed.

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

Usage Guidelines2/5

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

The description gives no when-to-use guidance, no when-not-to-use conditions, and no alternatives (e.g., update_asset_condition_assessment or a hard delete if one exists). The only contextual detail is the required scope, which is an authorization prerequisite 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.

delete_asset_costDelete asset costB
DestructiveIdempotent

Delete an asset cost entry by ID. Requires asset_costs:write scope.

NameRequiredDescriptionDefault
idYesAsset cost ID

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, idempotentHint=true and readOnlyHint=false, so the mutation/safety profile is covered structurally. The description adds one genuinely useful fact beyond them, the required asset_costs:write scope, but says nothing about permanence, cascading effects on related cost records, or failure behavior for unknown 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?

Two sentences, zero filler, with the action front-loaded and the prerequisite trailing. Nothing could be removed without losing information.

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

Completeness4/5

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

For a single-parameter delete with rich annotations and no output schema, the description covers the action and the auth requirement, which is enough to invoke it correctly. It stops short of covering irreversibility or side effects, which is a minor gap given the annotation set.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 id parameter is fully documented (uuid format, pattern, description) in the schema. The description's "by ID" adds no syntax or meaning 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.

Purpose4/5

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

States a specific verb and resource ("Delete an asset cost entry") plus the identifier used for lookup, so the action is unambiguous. It does not distinguish itself from the near-identical sibling delete_infrastructure_asset_cost, leaving the agent to infer which entity type applies.

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 only guidance is the required scope (asset_costs:write). There is no statement of when to use this versus update_asset_cost, delete_infrastructure_asset_cost, or delete_expense, and no warning that the operation is irreversible.

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

delete_asset_documentDelete asset documentA
DestructiveIdempotent

Delete an asset document by ID. Requires asset_documents:write scope.

NameRequiredDescriptionDefault
idYesAsset document ID

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, so the safety profile is covered. The description adds genuinely new information the annotations lack: the required asset_documents:write scope, which is an auth prerequisite an agent must satisfy. It does not describe recovery or not-found behavior, keeping it below 5.

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

Conciseness5/5

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

Two short, front-loaded sentences with zero filler. The action and lookup key come first, the permission requirement second.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence 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 delete whose safety profile is already declared by annotations, this is nearly complete — the scope requirement is the one missing piece an agent needs and it is supplied. An edge-case note (e.g., behavior on a missing/nonexistent ID) would make it fully complete.

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

Parameters3/5

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

Schema description coverage is 100% and the single id parameter is fully documented as a UUID with a pattern, so the schema carries the burden. The description's 'by ID' adds no syntax or format detail beyond the schema; baseline 3 is appropriate.

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

Purpose4/5

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

The description states a specific verb and resource (delete an asset document) plus the lookup key (by ID), which lets an agent distinguish it from delete_asset, delete_attachment, and delete_project_document. It does not explicitly name a sibling it is not, 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 scope requirement ('Requires asset_documents:write scope') gives a useful precondition, but there is no explicit when-to-use guidance, no statement of when not to use it, and no routing to an alternative such as delete_attachment for non-document files.

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

delete_asset_lifecycle_eventDelete asset lifecycle eventA
DestructiveIdempotent

Delete a facility lifecycle strategy event by ID. Projections recompute immediately; consider update with is_active=false to disable instead. Requires asset_lifecycle_events:write scope.

NameRequiredDescriptionDefault
idYesLifecycle event ID

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 two facts they cannot express: the side effect that 'projections recompute immediately' and the required authorization scope (asset_lifecycle_events:write). These are exactly the behavioral traits an agent needs before calling a destructive tool.

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

Conciseness5/5

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

Three short clauses, each carrying distinct load-bearing information (what it does, the safer alternative, the required scope), with the destructive action stated first. 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?

For a single-parameter delete with full annotation coverage and no output schema, the description supplies everything an agent needs: target identification, the safer alternative, the downstream projection effect, and the required scope.

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

Parameters3/5

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

Schema coverage is 100% and the single parameter's type, UUID format, and description are fully documented in the schema. The description's 'by ID' adds no meaning 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 (Delete), a precise resource (asset lifecycle event), and the lookup key ('by ID'). An agent can distinguish this from update_asset_lifecycle_event and delete_infrastructure_lifecycle_event 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 names the alternative behavior ('consider update with is_active=false to disable instead') and the condition under which it is preferable, effectively telling the agent when NOT to delete. This is a genuine routing rule, not implied usage.

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

delete_asset_partDelete asset partA
DestructiveIdempotent

Remove a part from an asset by association ID. Requires asset_parts:write scope.

NameRequiredDescriptionDefault
idYesAsset-part association ID

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, so the safety profile is covered. The description adds something the annotations do not: the required asset_parts:write scope, which is a concrete authorization prerequisite. It stops short of 5 because it doesn't say whether the removal 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?

Two short sentences, the core action front-loaded and the prerequisite scoping statement second. Every clause carries information; 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 single-parameter destructive delete with no output schema, the description supplies the action, the target, the identifier, and the required scope, while annotations carry the destructive/idempotent semantics. Only the reversibility of the deletion 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?

With a single parameter at 100% schema description coverage, the schema already documents 'id' as the asset-part association ID. The description repeats that framing without adding format or edge-case 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 ('Remove a part from an asset') and pins the identifier ('by association ID'), so the operation is unambiguous. It does not explicitly distinguish itself from close siblings like delete_part or delete_infrastructure_asset_part, 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 phrase 'by association ID' implies the tool operates on an existing association rather than the part entity itself, which nudges toward correct usage. However, there is no explicit when-to-use, no when-not-to-use, and no mention of the alternative delete_part or delete_infrastructure_asset_part.

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

delete_asset_placementDelete asset placementA
DestructiveIdempotent

Remove an asset placement. The asset itself is not affected - only the pin on the floorplan is removed. Requires asset_placements:write scope.

NameRequiredDescriptionDefault
idYesAsset placement ID

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 adds genuinely useful context beyond that: the asset record is unaffected, only the placement pin is removed, and an asset_placements:write scope is required. It stops short of noting irreversibility or error behavior, hence 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 short sentences with zero waste, front-loading the action and immediately qualifying its scope, then the auth requirement. 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 one-param destructive delete with annotations covering safety and no output schema needed, the definition supplies the key missing context (blast radius and required scope). It is essentially complete; only irreversibility/confirmation expectations are 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% and the single 'id' param (uuid, 'Asset placement ID') is fully documented in the schema. The description adds no syntax, format, or meaning beyond it, so the baseline 3 for schema-covered params 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 (Remove) plus resource (asset placement), and it explicitly disambiguates from the sibling delete_asset by stating 'The asset itself is not affected - only the pin on the floorplan is removed.' An agent can distinguish this from delete_asset and delete_floorplan_region without opening a schema.

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

Usage Guidelines3/5

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

The description implies the deletion scenario (removing a floorplan pin) but gives no explicit when-to-use, when-not, or alternatives such as update_asset_placement or delete_asset for other cases. Usage context is inferable but not stated.

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

delete_asset_replacement_planDelete asset replacement planB
DestructiveIdempotent

Delete an asset replacement plan by ID. Requires asset_replacement_plans:write scope.

NameRequiredDescriptionDefault
idYesAsset replacement plan ID

TDQS

B3.3/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, so the risk profile is covered. The description does add real value beyond the schema by naming the required scope (asset_replacement_plans:write), but it says nothing about permanence of deletion or side effects on linked 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, deletion action front-loaded, permission requirement second. Nothing is padded or redundant.

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 single-parameter destructive tool with no output schema the essentials (action, key, scope) are present, and annotations cover the destructive/idempotent profile. Still missing is whether the delete is permanent or recoverable, which an agent should know 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?

One parameter with 100% schema description coverage (UUID with an explicit pattern), so the schema already carries the semantics. The description only restates 'by ID' and adds no format or constraint detail beyond the schema.

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

Purpose4/5

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

States a specific verb (delete) and resource (asset replacement plan) plus the lookup key (by ID), which separates it from the create_/update_/get_/list_ siblings for the same resource. It doesn't call out the nearest alternatives explicitly, but the verb+resource pairing is unambiguous.

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

Usage Guidelines2/5

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

No guidance on when to delete versus archiving or updating a plan, no prerequisites beyond the scope, and no warning that the operation is irreversible. The agent must infer usage from the verb alone.

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

delete_asset_statusDelete asset statusB
DestructiveIdempotent

Delete an asset status by ID. Requires asset_statuses:write scope.

NameRequiredDescriptionDefault
idYesAsset status ID

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false, so the safety profile is covered. The description adds meaningful context by disclosing the required auth scope (asset_statuses:write), but says nothing about side effects on assets referencing the status or about return 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 zero filler, and the action/resource is front-loaded ahead of the scope requirement. Nothing is wasted.

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

Completeness4/5

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

For a single-parameter delete tool with annotations covering the safety profile and no output schema required, the definition supplies the essential action and scope. It is nearly complete, missing only any note on referential side effects.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 id parameter is fully specified as a UUID in the schema. The description's 'by ID' adds no meaning beyond what the schema already provides, so the baseline of 3 is appropriate.

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

Purpose4/5

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

The description states a specific verb (Delete) and resource (asset status) plus the keying mechanism (by ID), which cleanly distinguishes it from the many create_/update_/get_/list_asset_status siblings. It stops short of naming alternatives, but the action itself is unambiguous.

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

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, no mention of when deletion is inappropriate, and no reference to alternatives such as update_asset_status or the fact that a status may be referenced elsewhere. The only usage signal is 'by ID', which merely restates the schema.

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

delete_asset_typeDelete asset typeB
DestructiveIdempotent

Delete an asset type by ID. Requires asset_types:write scope.

NameRequiredDescriptionDefault
idYesAsset type ID

TDQS

B3.3/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, so the safety profile is covered. The description adds real value with the required authorization scope ('asset_types:write'). It stops short of disclosing what happens to assets referencing the type or whether deletion is blocked when dependents 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 short sentences, zero filler, front-loaded with the action and the identifier requirement before the scope note. Nothing is padded.

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

Completeness3/5

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

For a destructive, single-param delete with annotations covering safety and no output schema, the description is adequate. It omits the one thing an agent would want for a delete: whether dependent records block the operation or cascade, and whether confirmation is expected.

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

Parameters3/5

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

Schema description coverage is 100% and the single 'id' parameter is fully typed and patterned in the schema. The description only restates 'by ID', adding no format or lookup-hint meaning beyond the schema. Baseline 3 for a fully-covered single-param schema.

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

Purpose4/5

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

The description gives a specific verb+resource ('Delete an asset type') and the identifier form ('by ID'), which is unambiguous. It doesn't distinguish itself from adjacent siblings like delete_asset_type_group or update_asset_type, but the resource is named precisely enough that the agent won't confuse it.

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

Usage Guidelines2/5

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

No guidance on when to use this versus alternatives, no prerequisites stated beyond the scope line. The agent gets no cue about confirming intent, checking for dependent assets, or preferring update_asset_type when the goal is modification.

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

delete_asset_type_groupDelete asset type groupA
DestructiveIdempotent

Delete an asset type group by ID. Requires asset_type_groups:write scope.

NameRequiredDescriptionDefault
idYesAsset type group ID

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false, so the safety profile is covered. The description adds a non-obvious behavioral requirement, the asset_type_groups:write scope, which is genuinely useful context an agent cannot get from annotations or schema.

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

Conciseness5/5

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

Two short sentences with no filler; the action and the auth prerequisite are both front-loaded and each 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 single-parameter destructive delete with full annotation coverage and no output schema, the description supplies the missing piece (required scope). It lacks any confirmation/cascade behavior note (e.g., what happens to dependent assets), which would round it out.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 uuid parameter. The description's 'by ID' merely restates what the schema already conveys, 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 (Delete) and resource (asset type group), and adds the identification method ('by ID'). Distinguishable from delete_asset_type, delete_asset, and the update/list siblings, though it does not name any sibling explicitly.

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

Usage Guidelines2/5

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

No when-to-use guidance, no prerequisites beyond the scope note, and no mention of alternatives (e.g., update_asset_type_group for modification, or list_asset_type_groups to find the ID). The agent must infer context entirely.

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

delete_attachmentDelete attachmentB
DestructiveIdempotent

Delete an attachment by ID. Requires attachments:write scope.

NameRequiredDescriptionDefault
idYesAttachment ID

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true and idempotentHint=true, so the safety profile is fully covered by structured data. The description's one genuine addition is the "attachments:write scope" auth requirement, which annotations do not express; beyond that it adds nothing about permanence 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.

Conciseness5/5

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

Two tight sentences with zero filler, front-loading the action and following with the auth requirement. Every clause carries information an agent can act on.

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

Completeness4/5

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

For a one-parameter delete with full annotation coverage and no output schema, the description is nearly complete: action, key, and scope requirement are all present. It could note that the deletion is permanent/irreversible, but the destructive annotation largely compensates.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 id parameter is fully documented in the schema (including UUID format and pattern). The phrase "by ID" adds no meaning beyond what the schema already provides, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb+resource ("Delete an attachment") and adds the lookup key ("by ID"), so an agent knows exactly what the tool does. It does not differentiate itself from the large family of delete_* siblings, but the resource noun makes the target unambiguous.

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

Usage Guidelines2/5

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

The description never says when to reach for this tool versus alternatives like update_attachment or the bulk tools, nor any preconditions for deletion. The only guidance offered is the required scope, which is a prerequisite 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.

delete_budgetDelete budgetB
DestructiveIdempotent

Delete a budget by ID. Requires budgets:write scope.

NameRequiredDescriptionDefault
idYesBudget ID

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, idempotentHint=true and readOnlyHint=false, so the agent knows this is an irreversible-style mutation. The description adds one genuinely useful piece of context beyond the annotations — the required budgets:write scope — but says nothing about what deletion destroys (e.g. whether linked budget items or expenses are affected) or how a missing ID is handled.

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

Conciseness5/5

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

Two short sentences, zero filler, with the action and its target front-loaded and the authorization caveat second. Nothing wasteful for a tool of this simplicity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence 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 delete with full annotation coverage and no output schema, the description supplies the essential auth requirement. It is only slightly short of complete because it omits the blast radius of the deletion, which matters for a destructiveHint operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 'id' parameter is documented as a UUID with a format pattern. The description only echoes 'by ID' without adding syntax or sourcing guidance, 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?

"Delete a budget by ID" states a specific verb and resource, and the ID parameter is named. However, the huge sibling list includes delete_project_budget_item, delete_project_budget_item-adjacent tools, and the description does nothing to distinguish a budget from a project budget item or other budget-scoped resources.

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, no mention of alternatives (update_budget, delete_project_budget_item) and no statement of when deletion is inappropriate. The only conditional information is the required scope, which is an authorization prerequisite rather than usage direction.

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

delete_buildingDelete buildingA
DestructiveIdempotent

Delete a building by ID. Requires buildings:write scope.

NameRequiredDescriptionDefault
idYesBuilding ID

TDQS

A3.5/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, so the safety profile is largely covered. The description does add real value by disclosing the required auth scope, but it says nothing about cascade effects (e.g., whether associated floors, assets, or project links are removed) or whether the delete is soft or hard.

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

Conciseness5/5

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

Two tight sentences: the action and target are front-loaded, and the scope requirement follows. Nothing is padded or redundant.

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

Completeness3/5

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

For a destructive, no-output-schema tool, the essentials (what it deletes, the identifier, the required scope) are present, and annotations carry the destructive/idempotent semantics. It falls short on the consequences of the operation — cascade behavior and confirmation of permanence — which an agent should know before invoking a delete.

Complex tools with many parameters or behaviors need more documentation. Simple tools 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, fully documented in the schema (uuid format, pattern, description 'Building ID'), giving 100% schema coverage. The description's 'by ID' adds no meaning beyond the schema, 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.

Purpose4/5

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

The description states a specific verb and resource ('Delete a building by ID'), so the agent immediately knows what the tool does. The resource name itself distinguishes it from the many other delete_* siblings, but the description offers no further differentiation (e.g., what 'building' encompasses versus 'site' or 'project_building').

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

Usage Guidelines3/5

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

It gives one concrete precondition ('Requires buildings:write scope'), which tells the agent whether it is even eligible to call the tool. However, there is no guidance on when to use this versus alternatives such as update_building or delete_project_building, nor any warning about irreversibility or dependent records.

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

delete_building_typeDelete building typeA
DestructiveIdempotent

Delete a building type by ID. Requires building_types:write scope.

NameRequiredDescriptionDefault
idYesBuilding type ID

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, so the safety profile is covered. The description adds genuine value beyond that by naming the required auth scope (building_types:write), which is not present in structured fields. It omits cascade effects on dependent records, 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?

Two brief sentences with the action and the required scope front-loaded; nothing redundant or 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 delete tool whose annotations already carry the destructive/idempotent safety profile and with no output schema to explain, the description covers the essentials plus the scope requirement. Only cascade/impact information is arguably 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 'id' parameter (uuid format, pattern) is fully documented in the schema. The description's 'by ID' adds no format or semantic detail beyond what the schema already provides, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource ('Delete a building type by ID'), making it immediately distinguishable from update_building_type, create_building_type, and list_building_types. It stops short of explicitly naming sibling alternatives, but the operation type is unambiguous.

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

Usage Guidelines3/5

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

The intent to delete a resource is implied clearly, but there is no explicit guidance on when to use this versus update_building_type or what prerequisites exist (e.g., what happens to buildings referencing this type). Usage must be inferred.

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

delete_change_orderDelete change orderA
DestructiveIdempotent

Delete a change order by ID. Requires change_orders:write scope.

NameRequiredDescriptionDefault
idYesChange order ID

TDQS

A3.6/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, so the safety profile is covered structurally. The description contributes the auth scope requirement, which is genuinely additive, but says nothing about irreversibility, cascading effects, or failure modes beyond what the annotations imply.

Agents need to know what a tool does to the world before 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, action and prerequisite front-loaded in order of importance, with zero filler.

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

Completeness4/5

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

For a single-parameter destructive mutation with full annotation coverage and a fully documented schema, the description covers what it does, the key, and the required scope. Only minor gaps remain (irreversibility/confirmation behavior), and no output schema is needed for a delete.

Complex tools with many parameters or behaviors need more documentation. Simple tools 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 100% schema coverage including a UUID format and pattern, so the schema fully documents it. The description's 'by ID' merely echoes the schema; no added format or source-of-ID guidance. Baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource ('Delete a change order') plus the lookup key ('by ID'), which cleanly separates it from update_change_order, get_change_order, and list_change_orders siblings. No explicit sibling naming, but the verb+resource is unambiguous.

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

Usage Guidelines3/5

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

Adds one real usage constraint — 'Requires change_orders:write scope' — which tells the agent a prerequisite. There is no guidance on when to delete vs. update/archive, nor any warning about irreversibility or dependent records.

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

delete_compliance_itemDelete compliance itemA
DestructiveIdempotent

Delete a compliance item by ID. Requires compliance:write scope.

NameRequiredDescriptionDefault
idYesCompliance item ID

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, so the safety profile is covered structurally. The description adds auth context ('Requires compliance:write scope') that annotations do not carry, which is genuinely useful for an agent deciding whether it can call this.

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

Conciseness5/5

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

Two short sentences, front-loaded with the action and resource, with the permission constraint appended. 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 one-parameter delete with strong annotation coverage and no output schema, the description supplies what the structured fields lack (required scope). It could go further by noting behavior for a missing/already-deleted ID, 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.

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 ('Compliance item ID'), so the schema already documents it fully. The description's 'by ID' repeats this without adding format or lookup guidance, matching the baseline 3 when the schema does the heavy lifting.

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

Purpose4/5

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

States a specific verb (delete) and resource (compliance item) plus the identifier used. It is distinguishable from unrelated siblings, though it does not explicitly distinguish itself from the near-identical delete_compliance_pm_schedule and delete_compliance_record.

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 naming the required scope, which functions as a precondition, but gives no guidance on when to delete versus archive/update, nor any warning about irreversibility or dependent records.

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

delete_compliance_pm_scheduleDelete compliance PM scheduleA
DestructiveIdempotent

Unlink a PM schedule from a compliance item. The schedule and the item both stay. Requires compliance:write scope.

NameRequiredDescriptionDefault
idYesLink ID - resolve via list_compliance_pm_schedules

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare destructiveHint, idempotentHint and readOnlyHint=false, so the safety profile is covered. The description adds two things annotations cannot: that the underlying schedule and compliance item are preserved, and that 'compliance:write' scope is required. That is real value 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?

Three short sentences, front-loaded with the core action and the most surprising fact (nothing is destroyed), 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 one-parameter tool with no output schema and full annotation coverage, the description supplies the semantics, the side-effect guarantee and the auth scope needed to call it correctly. The only minor gap is not explaining what the resulting link state or response looks like, which is small given there is no output schema.

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

Parameters3/5

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

Schema coverage is 100% and the single parameter 'id' already documents itself as a Link ID to resolve via list_compliance_pm_schedules. The description adds no syntax or resolution 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?

The description gives a specific verb ('Unlink') and both resources ('a PM schedule from a compliance item'), and it immediately corrects the misleading 'delete' in the tool name by stating the schedule and item both survive. An agent can distinguish this from the true destructive siblings.

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

Usage Guidelines4/5

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

It clarifies the effect of use ('The schedule and the item both stay'), which tells an agent this is a non-destructive detach rather than a removal, and it preconditions with the required scope. It does not name an alternative tool for actually deleting a link vs. deleting the entities, but the operational context is clear.

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

delete_compliance_recordDelete compliance recordA
DestructiveIdempotent

Delete a compliance record by ID. Requires compliance_records:write scope.

NameRequiredDescriptionDefault
idYesCompliance record ID

TDQS

A3.6/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, so the safety profile is covered. The description's only added behavioral value is the required scope, which is a genuine but thin addition; it says nothing about irreversibility, cascade effects on related compliance items, or failure modes.

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

Conciseness5/5

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

Two short sentences, zero padding, with the core action front-loaded and the scope requirement second. Nothing is wasted.

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

Completeness4/5

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

For a single-parameter delete tool whose annotations already declare destructive and idempotent semantics and whose schema fully documents the id, the description covers the essentials. The remaining gap is the absence of any note on irreversibility or related-record impact, but there is no output schema to explain and no nested parameters to document.

Complex tools with many parameters or behaviors need more documentation. Simple tools 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 id parameter with 100% schema description coverage including a UUID format and pattern, so the schema carries the full burden. The description's phrase 'by ID' adds no format or lookup detail beyond the schema, making the baseline of 3 appropriate.

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

Purpose4/5

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

States a specific verb (Delete) and resource (compliance record) with an identifying key (by ID), so an agent immediately knows the operation. It does not, however, distinguish itself from the nearest sibling update_compliance_record beyond the verb, and no scope/behavioral contrast is drawn.

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 supplies a precondition (compliance_records:write scope) which tells the agent whether it can call the tool, but gives no guidance on when to delete versus update or archive, nor any warning about irreversibility.

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

delete_contractDelete contractB
DestructiveIdempotent

Delete a contract by ID. Requires contracts:write scope.

NameRequiredDescriptionDefault
idYesContract ID

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, idempotentHint=true and readOnlyHint=false, so the danger profile is known without the description. The description adds the 'contracts:write' scope requirement, which is genuinely useful auth context. It stops short of disclosing cascading effects (e.g., linked contract documents/sites) or irreversibility details.

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

Conciseness5/5

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

Two short sentences, front-loaded with the action and resource, with the requirement second. 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 destructive delete with full annotation coverage and no output schema, the description supplies the one missing piece an agent needs: the required scope. The only gap is the absence of any note on downstream effects of deleting a contract versus its child resources.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 the UUID format and pattern, so the schema carries the load. 'By ID' in the description adds nothing beyond it; 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: 'Delete a contract by ID.' The agent can identify the operation immediately. It does not distinguish itself from close siblings such as delete_contract_document or delete_contract_site, but the resource noun 'contract' is precise enough to be unambiguous.

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

Usage Guidelines2/5

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

There is no when-to-use guidance, no statement of prerequisites beyond scope, and no mention of alternatives or the consequences of deleting a contract that has dependent documents/sites. The scope note hints at a requirement but doesn't instruct on usage conditions.

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

delete_contract_documentDelete contract documentA
DestructiveIdempotent

Delete a contract document by ID. Requires contract_documents:write scope.

NameRequiredDescriptionDefault
idYesContract document ID

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, so the safety profile is covered. The description adds the required OAuth scope, which is genuinely useful context beyond the annotations, but it does not say what is destroyed (file vs. association) or whether children are cascaded.

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

Conciseness5/5

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

Two short sentences, zero filler, with the action front-loaded and the permission prerequisite second. Nothing is padded or repeated from 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 one-parameter delete with no output schema and annotations covering destructiveness and idempotency, the description is nearly sufficient. It names the scope, which is the main missing piece in structured data; only cascade/effect-on-related-records detail is absent.

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

Parameters3/5

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

Schema description coverage is 100% for the single 'id' parameter, and the format/pattern for the UUID is fully documented in the schema. The description's 'by ID' adds no semantics 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.

Purpose5/5

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

States a specific verb ('Delete') and resource ('a contract document') with an identifying mechanism ('by ID'). This clearly separates it from delete_contract, delete_contract_site, and update_contract_document 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?

The description gives a prerequisite ('Requires contract_documents:write scope') but no when-to-use/when-not guidance and no routing to alternatives such as update_contract_document for modification or delete_contract for the parent contract. Usage is implied by the name and prerequisite rather than explained.

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

delete_contract_siteDelete contract siteA
DestructiveIdempotent

Remove a contract from a site. Requires contract_sites:write scope. An assignment is identified by its contract and site; it has no id of its own.

NameRequiredDescriptionDefault
site_idYesSite ID (required)
contract_idYesContract ID (required)

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, so the safety profile is covered. The description adds valuable context beyond that: the required contract_sites:write scope and the fact that the assignment has no standalone id, clarifying the identity model.

Agents need to know what a tool does to the world before 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 each carries distinct information (action, auth scope, identity model). 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 destructive mutation, the description covers the action, the required scope, and the identity model, while annotations cover destructiveness and idempotency. Only a brief note on post-deletion effect would be needed for a 5.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline would be 3, but the description adds genuine meaning: it explains that the (contract_id, site_id) pair is the composite identity of the assignment and that no separate id exists, justifying why both are required together.

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

Purpose4/5

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

States a specific verb and resource: 'Remove a contract from a site.' This is clearly the association-deletion tool, distinct from delete_contract (which removes the contract itself). It does not explicitly name that sibling, 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?

No explicit when-to-use/when-not guidance or named alternatives. The note that an assignment is identified by its contract and site implies the required inputs, but an agent gets no routing advice versus delete_contract or list_contract_sites.

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

delete_cost_categoryDelete cost categoryA
DestructiveIdempotent

Delete a cost category by ID. Requires cost_categories:write scope.

NameRequiredDescriptionDefault
idYesCost category ID

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false, so the safety profile is covered. The description adds real value beyond the annotations by disclosing the required authorization scope ('cost_categories:write'), which is not present in the structured fields. It stops short of noting side effects such as what happens to items referencing the deleted category.

Agents need to know what a tool does to the world before 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 the core action front-loaded and the prerequisite second. 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 delete tool with full annotation coverage and no output schema, the description supplies what is missing: the required scope, the identifier-based targeting, and the destructive nature implied by the verb. Only the absence of side-effect/cleanup context 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% and the single 'id' parameter is documented as a UUID with a pattern, so the schema carries the semantics. The description's 'by ID' simply restates that, adding no format or usage detail beyond the schema. Baseline 3 applies.

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

Purpose4/5

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

The description states a specific verb and resource ('Delete a cost category') and names the identifier used ('by ID'), which is enough for an agent to distinguish it from the many sibling delete_* tools. It does not explicitly contrast with alternatives like update_cost_category, but the name and phrasing make the operation unambiguous.

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

Usage Guidelines2/5

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

There is no guidance on when to use this versus alternatives (e.g., update_cost_category if the goal is to modify rather than remove, or list_cost_categories to find IDs). The only implied usage is that a valid ID and write scope are needed, which is sparse for a destructive operation.

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

delete_criticality_modifierDelete criticality modifierA
DestructiveIdempotent

Delete a criticality modifier override by ID, which restores the built-in default for that tier (critical 0.6, high 0.8, medium 1.0, low 1.4). Requires los_targets:write scope.

NameRequiredDescriptionDefault
idYesCriticality modifier ID

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 goes further by disclosing the non-obvious effect (restoring the built-in default, with the concrete per-tier values) and the los_targets:write scope requirement, which are useful behavioral facts 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?

A single front-loaded sentence with the key action first, followed by the consequential side effect and auth requirement. No filler; the parenthetical default values earn their place by making the restore outcome concrete.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence 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 delete tool with annotations covering the safety profile and no output schema, the description supplies auth scope and the resulting state change. Return-value behavior is unspecified, but with no output schema that is not required.

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

Parameters3/5

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

Schema description coverage is 100% and there is a single 'id' parameter already documented as a UUID in the schema. The description only echoes 'by ID' without adding format or validation detail 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 and resource ('Delete a criticality modifier override by ID') and is clearly distinguishable from siblings like create/update/get/list_criticality_modifier. It also names the resource being operated on precisely, so 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 Guidelines3/5

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

The description clarifies the 'by ID' nature of the call and what deletion accomplishes, giving implied usage context. However, it never states when to prefer this over update_criticality_modifier or any exclusions, leaving the routing decision to inference.

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

delete_custom_field_definitionDelete custom field definitionB
DestructiveIdempotent

Delete a custom field definition by ID. Requires custom_fields:write scope.

NameRequiredDescriptionDefault
idYesCustom field definition ID

TDQS

B3.3/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, so the safety profile is covered structurally. The description adds genuinely non-obvious context the annotations cannot: the required custom_fields:write scope. However, it says nothing about downstream effects, such as whether existing custom field values become orphaned or are cascaded away when the definition is removed.

Agents need to know what a tool does to the world before 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 operation and the identifier are front-loaded before the permissions note.

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

Completeness3/5

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

The scope requirement and identifier are present, and annotations cover the destructive/idempotent profile. Still missing is the consequence of deletion for dependent custom field values, which is the main thing an agent should know before invoking a destructive, non-reversible-content 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?

Only one parameter, and schema description coverage is 100% with a UUID format and regex pattern already documented. The description's 'by ID' restates what the schema conveys, 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.

Purpose4/5

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

States a specific verb and resource ('Delete a custom field definition') plus the identifier used, so an agent can distinguish it from create_custom_field_definition, update_custom_field_definition and delete_custom_field_value by name alone. It stops short of noting the distinction from the sibling delete_custom_field_value, which matters in this catalogue.

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 guidance on when to use this tool versus update_custom_field_definition or delete_custom_field_value, and no prerequisites or warnings are given before an irreversible removal. The description is purely declarative.

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

delete_custom_field_valueDelete custom field valueA
DestructiveIdempotent

Delete a custom field value by ID. Requires custom_fields:write scope.

NameRequiredDescriptionDefault
idYesCustom field value ID

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false, so the safety profile is covered structurally. The description adds real value beyond those annotations by naming the required OAuth scope (custom_fields:write), which an agent needs before attempting the call. It stops short of stating what happens to dependent data or whether the delete is soft or hard.

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

Conciseness5/5

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

Two short sentences, front-loaded with the action and immediately followed by the authorization 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?

For a single-parameter destructive delete with rich annotations, the description supplies the missing piece (required scope). Nothing critical is absent, though a note on irreversibility or effect on parent records would fully complete 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% with a single documented id parameter (UUID format and pattern fully specified). The phrase 'by ID' adds nothing beyond the schema, so the baseline 3 is appropriate.

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

Purpose4/5

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

The description states a specific verb (Delete) and resource (a custom field value) plus the identifier method (by ID), which is clear. It does not differentiate from its nearest sibling delete_custom_field_definition, which deletes the definition rather than a value, so an agent must infer the distinction from the tool names alone.

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

Usage Guidelines2/5

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

The description gives no when-to-use guidance, prerequisites beyond the scope string, or alternatives. An agent looking at delete_custom_field_definition, update_custom_field_value, or get_custom_field_value gets no routing help.

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

delete_expenseDelete expenseA
DestructiveIdempotent

Delete an expense by ID. Requires expenses:write scope.

NameRequiredDescriptionDefault
idYesExpense ID

TDQS

A3.6/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, so the safety profile is covered. The description adds the 'Requires expenses:write scope' authorization requirement, which is genuine value beyond the structured fields, but it omits whether the delete is permanent, cascades to related records, or returns anything.

Agents need to know what a tool does to the world before 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 operation is front-loaded and the permission requirement follows immediately. Nothing extraneous.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence 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 delete with destructive/idempotent annotations and full schema coverage, the auth scope note makes the definition largely sufficient. It would be stronger with a word on permanence or side effects, but no critical gap prevents correct invocation.

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

Parameters3/5

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

Schema coverage is 100% with the single 'id' parameter documented as 'Expense ID' with a UUID pattern. The description adds nothing beyond the schema's 'by ID' phrasing, 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.

Purpose4/5

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

States a specific verb and resource ('Delete an expense') scoped by identifier ('by ID'), which clearly separates it from create_expense, update_expense, and get_expense. No explicit sibling naming, but the purpose is unambiguous within the CRUD group.

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 delete verb plus the required ID, and the stated scope requirement hints at a precondition. However, there is no explicit when-to-use guidance, no note about alternatives (e.g., soft-delete or update), and no warning that the operation is irreversible.

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

delete_floorplanDelete floorplanA
DestructiveIdempotent

Delete a floorplan. WARNING: cascades to all regions and asset placements on this floor. Does NOT delete the underlying PDF file from storage (do that separately if no other floors reference it). Requires floorplans:write scope.

NameRequiredDescriptionDefault
idYesFloorplan ID

TDQS

A4.3/5.0
Behavior5/5

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

Goes well beyond the annotations: discloses that deletion cascades to regions and asset placements, that the PDF is deliberately left in storage, and that floorplans:write scope is required. Annotations only say destructive/idempotent; the description explains the actual blast radius and an auth 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 short sentences, front-loaded with the destructive warning before the caveats, and every sentence carries distinct information (action, cascade, storage, scope). 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 destructive mutation with annotations covering safety and no output schema, the description supplies everything an agent needs: consequence scope, what is not deleted, and the required permission.

Complex tools with many parameters or behaviors need more documentation. Simple tools 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 (id) and schema coverage is 100%, so the schema fully documents it. The description adds no format or lookup guidance beyond what the schema already provides, which is the baseline 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?

States a specific verb and resource ('Delete a floorplan'), which cleanly separates it from update_floorplan and delete_floorplan_region. It does not explicitly name the nearby siblings, but the scope of what is removed (the floor and its cascades) is unambiguous.

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

Usage Guidelines4/5

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

Gives clear operational context: warns before use that regions and placements cascade, and steers the agent to a separate action for the underlying PDF 'if no other floors reference it'. It stops short of naming an alternative tool, so it is not 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.

delete_floorplan_regionDelete floorplan regionA
DestructiveIdempotent

Delete a region. Asset placements that referenced this region will have region_id set to null but remain on the floorplan. Requires floorplan_regions:write scope.

NameRequiredDescriptionDefault
idYesFloorplan region ID

TDQS

A3.5/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 genuinely new context: referencing asset placements survive with region_id set to null, and a required floorplan_regions:write scope. That cascade and auth detail is not derivable from the structured fields.

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

Conciseness4/5

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

Three short sentences, front-loaded with the action and free of filler. The opening sentence is largely a restatement of the title, which is the only minor 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 one-parameter delete with no output schema and full annotation coverage, the description supplies the key facts an agent needs: scope requirement and the non-destructive treatment of dependent asset placements.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 uuid parameter, so the schema carries the burden. The description adds no format or semantics beyond it, making the baseline 3 correct.

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

Purpose4/5

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

States a specific verb+resource ('Delete a region') that maps cleanly to the tool name, and the UUID id parameter reinforces the target. It does not, however, differentiate itself from closely-related siblings like delete_floorplan, relying on the resource noun 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 or when-not-to-use guidance and no named alternative (e.g., update_floorplan_region to rename rather than remove). The only context given is a side-effect, not a routing condition.

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

delete_form_responseDelete form responseA
DestructiveIdempotent

Remove a form from the record it is attached to, along with any answers already given. Use this before attaching a different form, since a record holds at most one form. Requires form_responses:write scope.

NameRequiredDescriptionDefault
idYesForm response ID - resolve via list_form_responses filtered by subject_id

TDQS

A4.1/5.0
Behavior5/5

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

Annotations already declare destructiveHint=true and idempotentHint=true, but the description adds value beyond them: it discloses that attached answers are deleted too (cascading destruction) and that the form_responses:write scope is required. These are exactly the destructive semantics and auth needs an agent needs, not restatements of 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 the action and destructive side effect before the usage condition and scope requirement. No sentence is filler.

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

Completeness4/5

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

For a one-parameter destructive mutation with no output schema, the description covers purpose, side effects, usage precondition, and auth scope—everything needed to call it correctly. It does not address behavior when no form is attached, a minor omission.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 itself explains how to resolve the id ('via list_form_responses filtered by subject_id'). The description adds no further parameter meaning, so the baseline of 3 applies.

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

Purpose4/5

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

It names a specific verb (remove/delete) and resource (the form/form response on a record), and specifies scope: 'along with any answers already given.' The singular phrasing 'Remove a form' rather than 'form response' is slightly loose versus the tool name, but an agent can still distinguish this from delete_form_template.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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 usage condition: 'Use this before attaching a different form, since a record holds at most one form.' This is a clear when-to-use signal tied to a real constraint. It does not name alternative tools or a when-not-to-use case, keeping it short of a 5.

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

delete_form_templateDelete form templateA
DestructiveIdempotent

Delete a form template by ID. Requires form_templates:write scope.

NameRequiredDescriptionDefault
idYesForm template ID

TDQS

A3.6/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, so the safety profile is covered. The description adds the write scope requirement, which is useful auth context, but does not mention cascade effects or irreversibility beyond what annotations imply.

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

Conciseness5/5

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

Two short sentences with zero waste; the action is front-loaded and the scope 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?

Given the low complexity (one required ID), complete schema, and rich annotations, the description is nearly sufficient. It discloses the required scope but omits any note about dependent records or whether deletion is permanent, which would help for a destructive operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 the single id parameter fully documented as the form template UUID. The description adds only 'by ID', which does not extend the schema's 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 ('Delete') and resource ('form template by ID'), which distinguishes it from get_form_template, update_form_template, and delete_form_template_item. It does not explicitly name a sibling or scope difference, so full sibling differentiation is missing.

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 verb implies when to use it, and the required 'form_templates:write' scope gives a concrete precondition. However, there is no explicit guidance on when to choose this over alternatives like delete_form_template_item or update_form_template.

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

delete_form_template_itemDelete form template itemA
DestructiveIdempotent

Delete a form template item by ID. Requires form_template_items:write scope.

NameRequiredDescriptionDefault
idYesForm template item ID

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, idempotentHint=true and readOnlyHint=false, so the safety profile is covered. The description adds meaningful context beyond that: the required form_template_items:write scope, which an agent cannot derive from the schema or annotations.

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

Conciseness5/5

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

Two short sentences with the action front-loaded and the prerequisite trailing. No filler, no 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 single-parameter destructive delete, the annotations carry the safety semantics and the description adds the auth scope, so an agent has what it needs to call it. Return behavior is unspecified, but no output schema exists and deletes typically return little, so this 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?

One parameter with 100% schema description coverage; the schema already documents the UUID id and its format. The description adds nothing beyond the fact that the ID identifies a form template item, 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 (Delete) plus the exact resource (form template item) and the identifier used (by ID). An agent can distinguish it from sibling delete_* tools by the resource name alone, though it does not explicitly contrast itself with delete_form_template or delete_form_response.

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

Usage Guidelines2/5

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

No guidance on when to use this instead of alternatives such as delete_form_template (which may cascade to items) or update_form_template_item. The prerequisite scope is stated, but usage context is left entirely to inference.

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

delete_infrastructure_assetDelete infrastructure assetA
DestructiveIdempotent

Soft-delete an infrastructure asset (feature) by ID (sets deleted_at). Requires infrastructure_assets:write scope.

NameRequiredDescriptionDefault
idYesInfrastructure asset ID

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 known. The description goes beyond them by disclosing that deletion is soft ("sets deleted_at") and naming the required write scope, which is exactly the kind of behavioral context annotations cannot convey.

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

Conciseness5/5

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

Two tight clauses: one front-loads the delete semantics and the field it sets, the second states the auth prerequisite. No filler and the most decision-relevant information (soft delete) comes first.

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

Completeness4/5

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

For a one-parameter delete with full annotation coverage and no output schema, the description covers what the operation does, its soft-delete nature, and the required scope. It could note what happens to dependent/linked records, 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.

Parameters3/5

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

Schema coverage is 100%, so the single id parameter (uuid, linked to an infrastructure asset) is already fully documented. "By ID" adds nothing beyond the schema, so the baseline of 3 applies.

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

Purpose4/5

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

States a specific verb ("Soft-delete") plus resource ("infrastructure asset (feature)") and the lookup key ("by ID"). However, it offers no differentiation from near-name siblings such as delete_project_infrastructure_asset or delete_infrastructure_asset_comment, which an agent could easily confuse.

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 scope requirement ("Requires infrastructure_assets:write scope") is a useful precondition, but there is no when/when-not guidance and no mention of alternative tools. Usage is only implied by the ID-based targeting.

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

delete_infrastructure_asset_commentDelete infrastructure asset commentB
DestructiveIdempotent

Delete an infrastructure asset comment by ID. Requires infrastructure_asset_comments:write scope.

NameRequiredDescriptionDefault
idYesComment ID

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false, so the safety profile is covered without the description. The description does add one thing beyond structured data: the required write scope, which is useful auth context. It stops short of saying whether the delete is soft or hard, whether it cascades, or what happens on a missing ID.

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

Conciseness5/5

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

Two short sentences, front-loaded with the action and resource, with no filler or repetition. Every clause carries weight (operation, identifier, prerequisite scope).

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

Completeness4/5

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

For a single-parameter delete with destructive/idempotent annotations and a fully documented schema, the description plus annotations give an agent enough to call the tool correctly. Minor residual gaps (not-found behavior, soft vs. hard delete) are low-risk given destructiveHint is already declared.

Complex tools with many parameters or behaviors need more documentation. Simple tools 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 a single parameter and 100% schema description coverage, the schema already documents 'id' (uuid, 'Comment ID'). The phrase 'by ID' adds nothing beyond the schema, so the baseline of 3 applies.

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

Purpose4/5

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

The description states a specific verb (Delete) and resource (infrastructure asset comment) and narrows the operation with 'by ID', so an agent knows exactly what is affected. However, it does not acknowledge the near-identical sibling delete_asset_comment, leaving the two ambiguous to an agent that only reads descriptions.

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 only guidance is the required scope (infrastructure_asset_comments:write), which is a prerequisite rather than a when-to-use statement. There is no indication of when to delete vs. update (update_infrastructure_asset_comment) or the list/get tools, and no exclusions or error conditions.

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

delete_infrastructure_asset_costDelete infrastructure asset costB
DestructiveIdempotent

Delete an infrastructure asset cost by ID. Requires infrastructure_asset_costs:write scope.

NameRequiredDescriptionDefault
idYesCost ID

TDQS

B3.2/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, so the safety profile is covered. The description adds useful auth context via the required infrastructure_asset_costs:write scope, but says nothing about hard-vs-soft delete or reference/cascade behavior beyond what annotations imply.

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

Conciseness4/5

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

Two compact sentences, front-loaded with the action and followed by the auth requirement. No wasted words, though it is brief enough to leave useful behavior unstated.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence 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 destructive delete, the purpose, identifier, and required scope together with the rich annotations give an agent enough to invoke it correctly. The only unaddressed nuance is post-delete behavior, which is minor given the annotations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 'id' (uuid) parameter. The description's 'by ID' merely echoes the schema and adds no format 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.

Purpose4/5

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

States a specific verb and resource ('Delete an infrastructure asset cost') and the operation granularity ('by ID'). An agent can distinguish it from update_infrastructure_asset_cost and delete_infrastructure_asset without opening the schema, though it doesn't explicitly name a sibling.

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

Usage Guidelines2/5

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

No guidance on when to use this versus alternatives, no prerequisites or preconditions stated (e.g. whether the cost must be unreferenced). Only the scope requirement is given, which is a precondition but not a use-vs-alternative guideline.

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

delete_infrastructure_asset_documentDelete infrastructure asset documentA
DestructiveIdempotent

Delete an infrastructure asset document by ID. Requires infrastructure_asset_documents:write scope.

NameRequiredDescriptionDefault
idYesDocument ID

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, so the safety profile is carried structurally. The description adds the write-scope requirement, which is behavioral context not present in the annotations. It stops short of describing cascade effects or irreversibility beyond what destructiveHint implies.

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

Conciseness5/5

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

Two short sentences, front-loaded with the action and resource before the prerequisite. 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 delete with no output schema and full annotation coverage, the definition supplies what an agent needs to call it correctly: what it deletes, how it is identified, and the required authorization scope. Return behavior is not described, but nothing is expected to be returned.

Complex tools with many parameters or behaviors need more documentation. Simple tools 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 ('Document ID' plus UUID format and pattern), so the schema does the heavy lifting. The description's 'by ID' adds nothing beyond that, making the baseline 3 appropriate.

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

Purpose4/5

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

States a specific verb+resource pair ('Delete an infrastructure asset document by ID'), which is clearly distinguishable from the many sibling delete_* tools by the resource noun. It does not, however, distinguish itself from close siblings such as delete_infrastructure_asset or delete_infrastructure_asset_comment beyond the noun itself.

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 names the required scope (infrastructure_asset_documents:write), which is genuine prerequisite guidance. It gives no when-to-use vs. when-not-to-use context and names no alternative (e.g., that update_infrastructure_asset_document exists for modifications rather than removal).

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

delete_infrastructure_asset_inspectionDelete infrastructure asset inspectionA
DestructiveIdempotent

Soft-delete an infrastructure asset inspection by ID. Requires infrastructure_asset_inspections:write scope.

NameRequiredDescriptionDefault
idYesInspection ID

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare mutation, destructiveness, and idempotency. The description adds the valuable 'soft-delete' nuance and required auth scope, going beyond structured fields, though it omits cascading effects or restore details.

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

Conciseness5/5

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

Two sentences, front-loaded with the operation and scope followed by the auth requirement. 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?

For a one-param mutation with rich annotations and no output schema, the description covers purpose, soft-delete semantics, and required scope. Minor gap: no note on side effects or restore 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?

Schema description coverage is 100% with the single 'id' param fully documented. The description's 'by ID' adds no new syntax or format details, 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 ('soft-delete') and resource ('infrastructure asset inspection') with 'by ID' scope. It does not explicitly name sibling tools or exclusions, but the precise resource name differentiates it from other delete_* 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?

Provides prerequisite (write scope) and ID requirement, but gives no explicit when-to-use vs alternatives (e.g., update vs delete). Usage is only implied.

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

delete_infrastructure_asset_partDelete infrastructure asset partA
DestructiveIdempotent

Delete an infrastructure asset part association by ID. Requires infrastructure_asset_parts:write scope.

NameRequiredDescriptionDefault
idYesAssociation ID

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false, so the safety profile is covered structurally. The description still adds two items beyond that: the required infrastructure_asset_parts:write scope and the fact that it removes the association rather than the part itself. It does not cover not-found behavior or error semantics, 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?

Two sentences, zero filler, with the operation front-loaded before the prerequisite scope. 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 single-parameter delete with annotations covering destructiveness and idempotency and no output schema, the description supplies what an agent needs: the target, the key, and the required permission. It omits failure/not-found behavior and confirmation of whether deletion is recoverable, 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 description coverage is 100% and the single 'id' parameter is documented as 'Association ID' with uuid format. The description's 'by ID' adds nothing beyond the schema, so the baseline 3 for fully-covered schemas 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 (Delete) and a precise resource (an infrastructure asset part association), plus the keying mechanism (by ID). The domain-specific naming inherently separates it from delete_asset_part and delete_part, but the description never explicitly names a sibling, so it lands just short of a 5.

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

Usage Guidelines2/5

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

No when-to-use guidance, no exclusions, and no pointer to alternatives such as update_infrastructure_asset_part (to edit the association) or delete_infrastructure_asset (to remove the whole asset). The agent must infer usage purely from the name.

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

delete_infrastructure_feature_classDelete infrastructure feature classA
DestructiveIdempotent

Delete a tenant-defined infrastructure feature class by code. Builtin classes cannot be deleted. Classes referenced by any infrastructure network are protected by FK and cannot be deleted until those networks are reassigned. Requires infrastructure_feature_classes:write scope.

NameRequiredDescriptionDefault
codeYesAsset class code (lowercase snake_case, 1-50 chars)

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already signal destructive=true and idempotent=true; the description adds the non-obvious domain constraints (builtin immutability, FK protection from network references) and the required infrastructure_feature_classes:write scope, which an agent could not infer from the schema.

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

Conciseness5/5

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

Three short sentences, front-loaded with the core operation and followed by restrictions and auth requirement in decreasing order of importance. 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 no-output-schema, single-parameter delete tool, the description covers the operation, the two blocking conditions, and the required scope — everything an agent needs to decide and invoke correctly.

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

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 'code' parameter is fully documented in the schema (pattern, length, format). The description's 'by code' phrasing adds no detail beyond what the schema already 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 and resource ('Delete a tenant-defined infrastructure feature class by code') and scopes it to tenant-defined classes, cleanly distinguishing it from siblings like delete_infrastructure_network or update_infrastructure_feature_class.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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 deletion is not allowed: builtin classes and classes referenced by any infrastructure network. That is actionable pre-call guidance. It stops short of naming the alternative operation (e.g., reassign networks first, then delete), but the failure conditions are clear.

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

delete_infrastructure_lifecycle_eventDelete infrastructure lifecycle eventA
DestructiveIdempotent

Delete a lifecycle strategy event by ID. Projections recompute immediately; consider update with is_active=false to disable instead. Requires infrastructure_lifecycle_events:write scope.

NameRequiredDescriptionDefault
idYesLifecycle event ID

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, so the safety profile is known. The description adds context the annotations cannot: that projections recompute immediately as a downstream side effect, and that the call requires the infrastructure_lifecycle_events:write scope.

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

Conciseness5/5

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

Three short sentences, zero filler, and the irreversible action is stated first, followed by side effect, alternative, and auth requirement in priority order.

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 delete tool with no output schema, the description covers the operation, the immediate side effect, the safer alternative, and the required scope. 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 the single `id` parameter is documented in the schema itself. The description's 'by ID' adds no format, UUID, or validation detail beyond what the schema already carries, 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 (Delete) and resource (lifecycle strategy event) plus the keying strategy (by ID). An agent can distinguish this immediately from create/update/list_*_infrastructure_lifecycle_event siblings 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 safer alternative and the condition that selects it: 'consider update with is_active=false to disable instead.' This is exactly the when-not-to-use guidance an agent needs before invoking an irreversible delete.

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

delete_infrastructure_los_targetDelete infrastructure LoS targetA
DestructiveIdempotent

Delete an infrastructure LoS target by ID. Networks of that class stop being scored on the metric; past status snapshots are kept. Requires los_targets:write scope.

NameRequiredDescriptionDefault
idYesInfrastructure LoS target ID

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, yet the description adds genuine context beyond them: the downstream effect that networks of that class stop being scored, the retention guarantee that past status snapshots survive, and the required los_targets:write scope. These are exactly the facts an agent needs before an irreversible-feeling delete.

Agents need to know what a tool does to the world before 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 identifier, then effect, then auth requirement. No filler; every clause conveys a distinct operational 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 single-parameter delete whose annotations already flag destructiveness and idempotency, the description supplies the cascade effect, data retention, and scope requirement. With no output schema and complete param coverage, 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?

Only one parameter with 100% schema description coverage, so the schema already carries the semantics and the 3 baseline applies. 'By ID' restates rather than enriches the schema's 'Infrastructure LoS target ID'.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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') and a precisely named resource ('infrastructure LoS target') qualified by 'by ID'. Against a sibling set full of create_/update_/get_/list_ infrastructure LoS target tools, the operation is unambiguous 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 explicit 'by ID' anchor and the described consequence, but there is no stated when-to-use vs when-not, no reference to update_infrastructure_los_target as a softer alternative, and no prerequisites for deletion callers.

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

delete_infrastructure_networkDelete infrastructure networkA
DestructiveIdempotent

Delete an infrastructure network by ID. Cascades to all features in the network - confirm with the user before deleting. Requires infrastructure_networks:write scope.

NameRequiredDescriptionDefault
idYesInfrastructure network ID

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 information annotations cannot convey: the delete cascades to all features in the network, and the call requires the infrastructure_networks:write scope. Cascade scope and authorization requirements are precisely the kind of behavioral context an agent needs before invoking a destructive tool.

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

Conciseness5/5

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

Three short sentences, front-loaded with the action, then the cascade warning, then the authorization requirement. Every sentence contributes 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 single-parameter destructive tool with no output schema, the description covers the target, the destructive blast radius, the user-confirmation workflow, and the required scope. Nothing an agent needs in order to call this safely 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 a single required parameter with 100% schema description coverage (uuid-formatted 'Infrastructure network ID'), so the schema carries the semantics. 'By ID' in the description confirms the identifier is a network ID rather than a name, but adds nothing beyond the schema; baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource ('Delete an infrastructure network by ID'), so an agent knows exactly what object is targeted. It does not, however, explicitly differentiate itself from neighboring deletes such as delete_infrastructure_asset, delete_infrastructure_zone, or delete_infrastructure_feature_class, so it stops short of the sibling-disambiguation bar.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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 operational instruction: confirm with the user before deleting, which is exactly the right precondition for a cascading destructive operation. It does not name any alternatives or say when this tool should be chosen over, say, updating or archiving the network instead, so it lacks 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.

delete_infrastructure_zoneDelete infrastructure zoneA
DestructiveIdempotent

Delete an infrastructure zone by ID. Requires infrastructure_zones:write scope.

NameRequiredDescriptionDefault
idYesZone ID

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. The description adds a useful behavioral detail not in the annotations: the required infrastructure_zones:write scope. It does not describe cascading effects or what exactly is removed, but the annotation coverage reduces the burden.

Agents need to know what a tool does to the world before 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 operation is front-loaded, and the scope requirement is stated directly afterward.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence 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 one-parameter delete tool with rich annotations and complete schema coverage, the description provides the essential purpose and auth requirement. It does not explain deletion consequences or alternatives, but those gaps are small given the annotation and schema support.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 already documented as 'Zone ID' with UUID format and pattern. The description's 'by ID' repeats the schema rather than adding syntax or selection guidance beyond it.

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

Purpose5/5

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

The description states a specific verb and resource: delete an infrastructure zone by ID. The resource name matches the tool name and distinguishes it from sibling delete_infrastructure_* tools for assets, networks, feature classes, etc.

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 requirement to have infrastructure_zones:write scope gives a prerequisite, and 'by ID' implies the usage context. However, it does not explicitly state when to use this versus alternatives or whether a confirmation step is expected.

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

delete_invoiceDelete invoiceB
DestructiveIdempotent

Delete an invoice by ID. Requires invoices:write scope.

NameRequiredDescriptionDefault
idYesInvoice ID

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already carry destructiveHint=true, idempotentHint=true and readOnlyHint=false, so the safety profile is known. The description adds the required 'invoices:write' scope, which is genuine auth context, but omits irreversibility, cascade effects, and whether this is a soft or hard delete.

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

Conciseness5/5

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

Two tight sentences with zero waste; the operation and its target are front-loaded before the scope prerequisite.

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

Completeness4/5

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

For a single-parameter delete whose annotations already declare destructiveness and idempotency, coverage is nearly complete, and no output schema means no return-value explanation is needed. The main omission is any note on reversibility or downstream effects.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 'id' parameter is fully documented as a UUID with a regex pattern. The description only restates 'by ID', adding no format or constraint detail beyond the schema, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb (delete) and resource (invoice) plus the identifier used. Clear enough that an agent distinguishes it from create_invoice/update_invoice/get_invoice by verb, though it does not explicitly call out sibling boundaries.

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

Usage Guidelines2/5

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

No guidance on when to delete versus update_invoice or when deletion is inappropriate. The only usage-adjacent detail is the required scope, which is a prerequisite rather than a when-to-use rule.

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

delete_locationDelete locationB
DestructiveIdempotent

Delete a location by ID. Requires locations:write scope.

NameRequiredDescriptionDefault
idYesLocation ID

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false, so the safety profile is covered. The description adds the non-obvious auth requirement (locations:write scope), which is genuine value beyond annotations, but it says nothing about cascade effects on dependent records or whether the deletion 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?

Two short sentences, front-loaded with the action and the scope constraint, zero filler. 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 simple single-parameter destructive delete with annotations covering the safety profile and no output schema, the description is nearly complete. The auth scope is a helpful addition; only the consequences of deleting a location (dependent records) are left 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% with a single well-documented UUID parameter, so the schema carries the semantics. The description's 'by ID' adds nothing beyond what the schema and its format/pattern already state; 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 (delete) plus resource (location) and the identifying input ('by ID'), which is enough to tell it apart from create_location/update_location. However, it does not differentiate itself from the ~dozens of other delete_* siblings, so it relies purely on the resource noun.

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

Usage Guidelines2/5

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

No guidance on when to use this versus update_location or when deletion is appropriate, and no mention of prerequisites or alternatives. The only context is the permission scope, 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.

delete_location_typeDelete location typeA
DestructiveIdempotent

Delete a location type by ID. Requires location_types:write scope.

NameRequiredDescriptionDefault
idYesLocation type ID

TDQS

A3.5/5.0
Behavior3/5

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

The annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false, so the safety profile is covered structurally. The description adds genuinely useful non-annotation context in 'Requires location_types:write scope', which tells the agent about authorization needs, but it omits cascade/reversibility consequences of the deletion.

Agents need to know what a tool does to the world before 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, the action and resource front-loaded, and the authorization requirement placed second. Nothing is wasted and there is no padding.

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

Completeness3/5

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

For a one-parameter delete with annotations covering the safety profile and no output schema, the definition is serviceable. It is missing one materially relevant thing for a delete: what happens to dependent entities (e.g., locations referencing this type), which is the kind of context a deletion tool benefits from.

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

Parameters3/5

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

Schema description coverage is 100% and there is a single required uuid parameter fully documented as 'Location type ID'. 'By ID' in the description confirms the schema but adds no format or sourcing detail beyond it, so the baseline of 3 applies.

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

Purpose4/5

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

States a specific verb and resource ('Delete a location type') and the identifier used ('by ID'). This is clearly distinct from delete_location (a different resource) without needing the schema. However, it does not explicitly differentiate itself from related siblings like delete_location or update_location_type, 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 phrase 'by ID' implies the intended usage, and the tool is self-evidently a deletion primitive, but there is no explicit when-to-use guidance, no warning about prerequisites (e.g., dependent locations), and no naming of alternatives. Usage is implied rather than spelled out.

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

delete_los_consequenceDelete LoS consequenceB
DestructiveIdempotent

Delete a LoS consequence by ID. Requires los_consequences:write scope.

NameRequiredDescriptionDefault
idYesLoS consequence ID

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, idempotentHint=true and readOnlyHint=false, so the safety profile is covered. The description adds genuinely useful non-annotation context: the required los_consequences:write scope. It does not, however, say whether the delete is permanent or what happens to dependent 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, action and identifier front-loaded, followed by the scope requirement. No filler and nothing to trim.

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

Completeness4/5

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

For a one-argument delete whose safety semantics are already carried by annotations, the description is nearly sufficient: it identifies the target and the authorization scope. Only irreversibility/dependency behavior is unstated, and no output schema is needed for a delete.

Complex tools with many parameters or behaviors need more documentation. Simple tools 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 a single parameter and 100% schema description coverage ('LoS consequence ID', uuid format/pattern), the schema fully documents the input. 'By ID' in the description adds no syntax or format 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?

The description gives a specific verb and resource ('Delete a LoS consequence') plus the identifier basis ('by ID'), so an agent knows exactly what it does. It does not distinguish itself from siblings like update_los_consequence or the other ~150 delete_* tools, but the name/resource pairing is unambiguous.

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

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 or when-not-to-use guidance and no mention of alternatives (e.g., update_los_consequence to modify rather than remove). Only the required scope is stated, which is a permission note 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.

delete_los_measureDelete LoS measureA
DestructiveIdempotent

Delete a LoS measure by ID. WARNING: This also deletes all associated measurements and targets history. Requires los_measures:write scope.

NameRequiredDescriptionDefault
idYesLoS measure ID

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, but the description adds the critical detail that associated measurements and targets history are also deleted, and the required los_measures:write scope. This is exactly the behavioral context beyond annotations that 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?

Three tight sentences, front-loaded with the action, then the warning, then the prerequisite. Every sentence carries weight.

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?

Complete for a single-param destructive tool. Annotations cover safety, schema covers the parameter, and the description adds the non-obvious cascade and auth requirements.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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% (the id field is documented), so the baseline is 3. The description adds no format details beyond confirming it is an ID.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 (Delete) plus specific resource (LoS measure) plus identifying key (by ID). Distinguishable from siblings like delete_los_measurement or delete_los_consequence.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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 cascade warning implicitly signals the destructiveness that determines when to use it, and the scope requirement signals prerequisites. No explicit alternative or exclusion is named, but the context is clear for a delete-by-id tool.

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

delete_los_measurementDelete LoS measurementA
DestructiveIdempotent

Delete a LoS measurement by ID. Requires los_measurements:write scope.

NameRequiredDescriptionDefault
idYesLoS measurement ID

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and idempotentHint=true, so the safety profile is covered. The description adds a genuinely new behavioral detail not in structured fields: the required los_measurements:write scope (auth requirement). It stops short of stating permanence or not-found behavior, but the auth disclosure is a meaningful value-add over the annotations.

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

Conciseness5/5

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

Two short sentences, zero filler. The operation is front-loaded and the auth requirement follows immediately; 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 single-parameter destructive delete with rich annotations and no output schema, the description covers what it does, that it needs write scope, and (via annotations) that it is destructive and idempotent. It omits whether deletion is permanent and what happens on a missing/invalid ID, but these are minor gaps given the 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 the single id parameter (UUID format with pattern) is fully documented in the schema. The description's 'by ID' adds no format or meaning beyond what the schema already 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.

Purpose4/5

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

States a specific verb and resource ('Delete a LoS measurement by ID'), so the operation is unambiguous. However, it does not distinguish this from near-identical siblings like delete_los_measure, delete_los_consequence, or delete_los_proposed_target, so an agent must infer which LoS entity applies.

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

Usage Guidelines2/5

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

The description gives no when-to-use guidance, no prerequisites for deletion, and no mention of alternatives (e.g., deleting a measurement vs a measure, or using update_los_measurement instead). It only restates the operation, leaving selection entirely to the agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_los_proposed_targetDelete LoS proposed targetA
DestructiveIdempotent

Delete a LoS proposed target by ID. Requires los_proposed_targets:write scope.

NameRequiredDescriptionDefault
idYesLoS proposed target ID

TDQS

A3.6/5.0
Behavior3/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 does add one genuine behavioral fact beyond the annotations, the required los_proposed_targets:write scope, but says nothing about side effects, dependent records, or irreversibility of the deletion.

Agents need to know what a tool does to the world before 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, the core action front-loaded, and the scope requirement placed second. 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 delete whose annotations carry the safety profile and whose schema carries the parameter, the description is nearly sufficient. The one gap is the effect of deletion (what is removed or whether related targets are affected), which 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?

Only one parameter and schema description coverage is 100%, so the schema already documents the UUID id fully. The description's 'by ID' adds no format or constraint detail beyond what the schema provides, matching the baseline for fully-covered schemas.

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 (Delete) and resource (LoS proposed target) plus the keying mechanism (by ID). An agent can distinguish it from the many delete_* siblings by the resource noun, though it does not name any specific sibling for 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 gives an implied precondition (requires los_proposed_targets:write scope) but never states when to use this versus update_los_proposed_target or the bulk alternatives, nor any exclusions. Usage is largely inferred from the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_manufacturerDelete manufacturerB
DestructiveIdempotent

Delete a manufacturer by ID. Requires manufacturers:write scope.

NameRequiredDescriptionDefault
idYesManufacturer ID

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=true, covering safety and repeat behavior. The description adds the auth requirement ('Requires manufacturers:write scope'), a genuine extra. Does not describe consequences (e.g., impact on related parts) or irreversibility, but annotations cover the core.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the action and resource, then the auth requirement. No waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple single-parameter delete tool with annotations covering safety, the description is adequate. However, it lacks any warning about destructive side effects or related data handling, which would be valuable even with destructiveHint set.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, with the id parameter fully documented including UUID format and pattern. The description adds no parameter details 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.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb 'Delete' and resource 'manufacturer' with 'by ID'. Clear on its own, but does not differentiate from the mass of sibling delete_* tools beyond 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 Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this versus alternatives (e.g., get_manufacturer, list_manufacturers) or prerequisites beyond the scope. Only the scope requirement is mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_partDelete partA
DestructiveIdempotent

Delete a part/inventory item by ID. Requires parts:write scope.

NameRequiredDescriptionDefault
idYesPart ID

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, so the safety profile is largely covered. The description adds the required authorization scope ('parts:write'), which is not present in the annotations and is valuable for an agent. It does not describe side effects, referential-integrity failures, or what happens to dependent records, but given annotation coverage this is a moderate 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 short sentences, front-loaded with the core action and followed by the prerequisite. There is no redundancy or 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 simple single-parameter delete tool with full schema coverage and annotations that already convey the destructive and idempotent nature, the description covers the essentials: what it does, how to identify the target, and the required scope. It could optionally note whether deletion fails when the part is referenced elsewhere, but that is a minor omission 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%, and the single parameter 'id' is fully documented in the schema as a UUID with a clear description. The description only restates that deletion is 'by ID,' adding no new semantic detail beyond the schema. With the schema doing the heavy lifting, a baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Delete a part/inventory item by ID.' It clearly identifies the operation, but it does not explicitly distinguish this tool from siblings like delete_asset_part, delete_infrastructure_asset_part, or delete_part_category. An agent can infer the difference from the name, but the description itself offers no 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 includes a prerequisite ('Requires parts:write scope'), which gives useful context for when the tool can be used. However, it provides no guidance on when to choose this tool over alternatives, no exclusions, and no mention of conditions under which deletion might fail. Usage is implied rather than explained.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_part_categoryDelete part categoryA
DestructiveIdempotent

Delete a part category by ID. Requires part_categories:write scope.

NameRequiredDescriptionDefault
idYesPart category ID

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, so the safety profile is covered structurally. The description adds auth scope, which annotations do not capture, but is silent on the operationally important question of whether deletion cascades or is blocked when parts still reference the category.

Agents need to know what a tool does to the world before 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, action front-loaded, prerequisite second. Zero filler and nothing a reader must scan past.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter destructive delete with rich annotations and no output schema, the description covers the essentials: what it deletes, how it identifies it, and the required scope. Only referential-integrity/cascade behavior is left unstated, a minor gap given the annotations already flag destructiveness.

Complex tools with many parameters or behaviors need more documentation. Simple tools 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 'id' parameter with 100% schema description coverage; the schema already documents the UUID format and pattern. 'By ID' in the description adds nothing 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 (delete), resource (part category), and lookup key (by ID) in one sentence. Among ~250 delete_* siblings, 'part category' is precise enough to distinguish it from delete_part and delete_cost_category without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description supplies a prerequisite ('Requires part_categories:write scope'), which is real usage context, but it never states when to use this tool versus update_part_category or list_part_categories, nor any exclusions (e.g., categories still referenced by parts). Implied usage only.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_pm_scheduleDelete PM scheduleB
DestructiveIdempotent

Delete a PM schedule by ID. Requires pm_schedules:write scope.

NameRequiredDescriptionDefault
idYesPM schedule ID

TDQS

B3.3/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, so the safety profile is covered structurally. The description adds the required 'pm_schedules:write' scope, which is genuine value beyond annotations, but it omits whether deletion is permanent, whether it cascades to related records, or how failures (e.g., in-use schedules) are reported.

Agents need to know what a tool does to the world before 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 the action front-loaded and the auth requirement following. Every word earns its place with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter destructive call with full annotation coverage and no output schema, the definition is nearly adequate. However, for a delete operation the description should mention irreversibility or cascade behavior, which is the one 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% and the single 'id' parameter is fully documented as a UUID with a pattern, so the schema does the heavy lifting. The description's 'by ID' adds nothing beyond that, making 3 the appropriate baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Delete') and resource ('PM schedule') scoped by ID, so the action is unambiguous. It does not distinguish itself from close siblings like delete_compliance_pm_schedule, delete_pm_template, or list/get_pm_schedule, but the core purpose is clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this versus update_pm_schedule or the compliance PM schedule variants, and no prerequisites beyond the scope mention. The agent must infer usage context entirely.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_pm_templateDelete PM templateB
DestructiveIdempotent

Delete a PM template by ID. Requires pm_templates:write scope.

NameRequiredDescriptionDefault
idYesPM template ID

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=true, so the safety profile is covered structurally. The description adds the required scope (pm_templates:write), which is genuinely useful auth context, but says nothing about irreversibility, cascading effects, or whether deletion is blocked when schedules reference the template.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, zero filler, with the action and resource front-loaded and the scope prerequisite trailing. Nothing could be removed without losing information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter destructive tool whose annotations already flag destructiveness and idempotency, the description covers the essentials plus the auth requirement. The one meaningful omission is the consequence of deleting a template still in use by schedules, but the core call path is fully specified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% with a single, well-documented 'id' parameter (uuid with a regex pattern). 'By ID' in the description merely restates what the schema already conveys, 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 ('Delete a PM template by ID'), which is unambiguous against siblings like delete_pm_schedule or delete_form_template. It stops short of any explicit sibling differentiation, but the name plus resource is clear enough that an agent can select it correctly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this versus alternatives, no preconditions beyond the scope requirement, and no note on what happens if the template is referenced by a PM schedule. The only usage-relevant statement is the required scope, which is an auth constraint rather than selection guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_projectDelete projectB
DestructiveIdempotent

Delete a project by ID. Requires projects:write scope.

NameRequiredDescriptionDefault
idYesProject ID

TDQS

B3.3/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, so the safety profile is covered. The description adds the auth requirement (projects:write scope), which is genuinely useful context, but it says nothing about whether deletion cascades to child records (tasks, milestones, budgets) or 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?

Two short sentences, front-loaded with the action and identifier, no filler. Every phrase carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive single-parameter delete, annotations and schema carry most of the load and the scope note covers the gap. The unresolved question of cascading deletion on a parent project is the one omission that would materially affect agent behavior, but the tool is otherwise callable as documented.

Complex tools with many parameters or behaviors need more documentation. Simple tools 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 the UUID id. The description's "by ID" restates what the schema carries without adding format or resolution guidance. 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 (Delete) and resource (project) plus the lookup key (by ID), which is clearer than the bare title. It does not differentiate from the many project-scoped delete siblings such as delete_project_task or delete_project_asset, so an agent could conflate the parent-entity delete with the sub-resource deletes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no when-to-use guidance, no prerequisites beyond scope, and no pointer to alternatives. With ~150 delete siblings in the namespace, an agent gets no help deciding when deleting a whole project is the right call versus deleting its child records.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_project_assetDelete project assetA
DestructiveIdempotent

Remove an asset from a project by ID. Requires project_assets:write scope.

NameRequiredDescriptionDefault
idYesProject asset ID

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, so the safety profile is covered. The description adds the required scope (project_assets:write), which is a genuine behavioral constraint not present in the structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, zero filler; the action and its prerequisite are both front-loaded and immediately scannable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter destructive tool with full annotation coverage and no output schema, this is nearly complete. The only omission is any note about cascading effects or irreversibility beyond the destructive hint.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 id parameter, which documents the UUID format and pattern. The description's 'by ID' merely reinforces the schema rather than adding format or lookup semantics, 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 (Remove) and resource (an asset from a project) with the identifier basis (by ID). This clearly separates it from delete_asset or delete_project, though it doesn't explicitly name those siblings as alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a prerequisite (project_assets:write scope), which is useful context for when the call will succeed, but there is no explicit guidance on when to choose this over delete_asset or the other delete_* siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_project_budget_itemDelete project budget itemB
DestructiveIdempotent

Delete a project budget item by ID. Requires project_budget_items:write scope.

NameRequiredDescriptionDefault
idYesProject budget item ID

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=true and readOnlyHint=false, so the safety profile is known. The description adds the required auth scope (project_budget_items:write), which is genuinely useful context not in the structured fields, but says nothing about side effects such as cascading deletes or the response.

Agents need to know what a tool does to the world before 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, operation stated first and the scope requirement second. Every clause carries information with zero padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-ID delete whose destructive/idempotent traits are covered by annotations, the description is nearly sufficient; the scope requirement closes the main gap. Only the absence of side-effect/cascade behavior and result description 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?

Only one parameter and schema description coverage is 100%, so the schema already documents the ID with format and pattern. The description's 'by ID' adds no format or semantics beyond that; baseline 3 is correct.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Delete a project budget item') plus the lookup key ('by ID'), which lets an agent distinguish it from update_project_budget_item and get_project_budget_item. It doesn't explicitly name alternatives, but the verb+resource pairing is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to delete versus update, no prerequisites, no warning about irreversibility or when this should not be used. The 'by ID' phrasing implies the required key but not the usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_project_buildingDelete project buildingA
DestructiveIdempotent

Remove a building from a project by ID. Requires project_buildings:write scope.

NameRequiredDescriptionDefault
idYesProject building ID

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false, so the safety profile is covered. The description adds genuine value beyond them by naming the required permission scope (project_buildings:write), which an agent needs before attempting the call. It does not, however, say whether the underlying building is preserved or cascading effects occur.

Agents need to know what a tool does to the world before 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 action and scope front-loaded ahead of the permission requirement. 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 one-parameter delete whose annotations already carry the safety and idempotency profile, the description covers action, target, lookup key, and required scope. The only meaningful omission is whether the building entity persists after removal from the project.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 (id, uuid) is fully documented in the schema. The description's 'by ID' adds no syntax or format detail beyond what the schema already provides, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource+scope: 'Remove a building from a project by ID.' The phrase 'from a project' distinguishes it from the sibling delete_building, which presumably removes the building entity itself. It stops short of naming that alternative explicitly, so it isn't a clean 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance, no when-not-to-use, and no pointer to alternatives (e.g. delete_building or update_project_building). The agent must infer the distinction between disassociating a building from a project and deleting the building entirely.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_project_commentDelete project commentA
DestructiveIdempotent

Delete a project comment by ID. Requires project_comments:write scope.

NameRequiredDescriptionDefault
idYesProject comment ID

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, so the safety profile is covered. The description adds the meaningful extra that this requires the project_comments:write scope, which is actionable auth context for a mutating call. It does not say whether the delete is soft or permanent, 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 compact sentences, with the core action front-loaded and the permission requirement second. No filler, nothing redundant with the title 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 single-parameter delete with rich annotations and no output schema, the description covers what is deleted, how it is identified, and the required scope. The only gap is any statement about permanence or side effects, which the destructiveHint partially covers.

Complex tools with many parameters or behaviors need more documentation. Simple tools 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 exists and schema description coverage is 100%, so the schema already documents the UUID id fully. The description's 'by ID' adds nothing beyond what the schema provides, matching the baseline 3 for schema-documented 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?

The description gives a specific verb and resource ('Delete a project comment by ID'), which is unambiguous and lets an agent distinguish it from delete_project, delete_project_update, and delete_project_document by name alone. It does not explicitly contrast itself with those siblings, so it falls short of the 5-level 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 'by ID' plus the stated project_comments:write scope prerequisite, which is a genuine precondition. However, there is no guidance on when to prefer this over update_project_comment (edit vs. remove) or any note about irreversible removal.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_project_cost_snapshotDelete project cost snapshotA
DestructiveIdempotent

Delete a project cost snapshot by ID. Requires project_cost_snapshots:write scope.

NameRequiredDescriptionDefault
idYesProject cost snapshot ID

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. The description adds useful auth context by stating the required 'project_cost_snapshots:write' scope, though it does not describe cascading effects or irreversibility beyond what the annotations imply.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two short sentences with no wasted words. The core action is front-loaded, followed immediately by the required scope.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple single-parameter deletion tool with rich annotations and no output schema, the description supplies everything needed to call it correctly: the target resource, the identifier requirement, and the required write scope.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% for the single id parameter, and the schema itself documents the UUID format and meaning. The description's 'by ID' adds no meaningful detail beyond what the schema already provides, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Delete a project cost snapshot by ID.' It clearly distinguishes this tool from sibling operations such as get_project_cost_snapshot and list_project_cost_snapshots.

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 delete action and the required write scope is stated. However, the description does not explicitly say when to use this tool versus alternatives or mention any exclusions or prerequisites beyond the scope requirement.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_project_documentDelete project documentA
DestructiveIdempotent

Delete a project document by ID. Requires project_documents:write scope.

NameRequiredDescriptionDefault
idYesProject document ID

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=true, readOnlyHint=false, and openWorldHint=false, so the safety profile is covered. The description adds one genuinely non-annotated fact: the required project_documents:write scope. It says nothing about permanence, cascade effects on folders/links, or whether deletion is soft or hard.

Agents need to know what a tool does to the world before 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, action stated first, requirement second. No filler and nothing 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 single-parameter destructive tool whose annotations already declare destructiveness and idempotency, the description plus schema covers what an agent needs before calling. Minor gap: no note on irreversibility or what else is removed with the document.

Complex tools with many parameters or behaviors need more documentation. Simple tools 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; the schema already documents 'id' as the Project document ID. The description's 'by ID' mirrors that without adding format, lookup, or validation meaning 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 ('Delete'), resource ('project document'), and identifier ('by ID'), so the action is unambiguous. It does not distinguish itself from other delete_* siblings such as delete_project_document_folder_template, but the resource name is precise enough to route correctly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage 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 description — delete this specific document by its ID — but there is no explicit when-to-use guidance, no mention of alternatives (e.g., list_project_documents to find an ID, or update_project_document instead of deleting), and no stated preconditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_project_document_folder_templateDelete project document folder templateB
DestructiveIdempotent

Delete a project document folder template by ID. Requires project_document_folder_templates:write scope.

NameRequiredDescriptionDefault
idYesTemplate ID

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=true, so the safety profile is covered structurally. The description adds one genuinely non-redundant detail – the required project_document_folder_templates:write scope – but says nothing about cascading effects, reversibility of contents, or failure modes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences, action and identifier first, then the authorization requirement. No filler and nothing that could be trimmed without losing 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 one-parameter delete tool whose annotations already convey destructiveness and idempotency, the description plus scope note is nearly sufficient; no output schema is needed to explain a delete acknowledgement. A brief note on cascade/irreversibility would make it fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% with a single UUID 'id' parameter fully documented, so the schema carries the parameter burden. The description's 'by ID' adds no format or constraint detail beyond what the schema already states; 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 (Delete) and resource (project document folder template) plus the lookup key (by ID), so an agent can tell it apart from create/update/get/list siblings of the same resource. It stops short of explicit sibling differentiation, which keeps it out of 5 territory.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this versus alternatives such as delete_project_document or update_project_document_folder_template, and no stated preconditions beyond the scope line. The 'by ID' phrasing implies a direct single-record delete but nothing is spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_project_infrastructure_assetDelete project infrastructure assetA
DestructiveIdempotent

Delete a project ↔ infrastructure feature link by ID. Requires project_infrastructure_assets:write scope.

NameRequiredDescriptionDefault
idYesLink ID

TDQS

A4/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 auth requirement (project_infrastructure_assets:write scope), which is real behavioral context beyond the structured fields, though it omits that only the link is removed and not the underlying assets.

Agents need to know what a tool does to the world before 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, action and resource first, prerequisite second. 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 single-param destructive tool whose annotations carry the safety profile and whose schema fully documents the parameter, this is nearly complete; the only missing detail is that deletion affects the link rather than the associated assets.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 'id' param is documented as the Link ID. The description's 'by ID' adds no syntax or format detail beyond the schema, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Delete') and resolves the ambiguous name into a concrete resource: a project ↔ infrastructure feature link. This distinguishes it clearly from sibling delete_project_asset and delete_infrastructure_asset.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The required write scope gives a precondition, and 'by ID' implies the operation context, but there is no explicit when-to-use/when-not guidance or named alternative among the many sibling delete_* tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_project_locationDelete project locationA
DestructiveIdempotent

Remove a location from a project by ID. Requires project_locations:write scope.

NameRequiredDescriptionDefault
idYesProject location ID

TDQS

A3.6/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, so the safety profile is covered. The description adds the required auth scope, which is useful context beyond the annotations, but says nothing about cascading effects (e.g. whether linked project assets are affected) or reversibility.

Agents need to know what a tool does to the world before 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, action and prerequisite front-loaded, with zero filler. Nothing to trim.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter destructive delete with no output schema, the description covers the action, the identifier, and the permission requirement, while annotations carry the safety semantics. Only the absence of cascade-effect information 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% and there is only one parameter, so the schema fully documents the UUID 'id'. The description's 'by ID' adds nothing the schema doesn't already provide. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: remove a location from a project, identified by ID. This is clearly differentiated from delete_location (global location deletion) by the tool name and description, though the text itself doesn't explicitly call out that distinction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a prerequisite ('Requires project_locations:write scope') which is genuine usage context, but offers no when-to-use guidance versus alternatives such as delete_location or delete_project_site, and no warning about when not to delete.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_project_milestoneDelete project milestoneA
DestructiveIdempotent

Delete a project milestone by ID. Requires project_milestones:write scope.

NameRequiredDescriptionDefault
idYesProject milestone ID

TDQS

A3.6/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, so the safety profile is covered structurally. The description adds the required auth scope, which is useful context annotations cannot convey, but says nothing about whether deletion cascades to related records or 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?

Two short sentences, zero filler, with the action front-loaded and the prerequisite trailing. Nothing to trim.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter delete with annotations carrying the destructive/idempotent profile and no output schema, the definition covers what an agent needs to invoke it. Only the omission of cascade/reversibility behavior keeps it from a 5.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one parameter and schema coverage is 100%, so the schema fully documents the UUID id. The description's 'by ID' adds no syntax or format detail beyond what the schema already provides; baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Precise verb+resource (delete a project milestone) with the identifier type stated. It clearly distinguishes itself from create_project_milestone, update_project_milestone and list_project_milestones by name, though it does not explicitly contrast with sibling delete tools like delete_project or delete_project_task.

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 states a prerequisite (project_milestones:write scope), which is genuine guidance, but gives no when-to-use vs. alternatives framing and no warning about irreversibility or cascading effects. Usage is only implied by the tool name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_project_phaseDelete project phaseB
DestructiveIdempotent

Delete a project phase by ID. Requires project_phases:write scope.

NameRequiredDescriptionDefault
idYesProject phase ID

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=true, so the safety profile is covered. The description adds the required scope ('project_phases:write'), which is genuinely useful auth context not present in the annotations. However, it omits cascade behavior (e.g., whether tasks/milestones tied to the phase are affected) and reversibility.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact sentences with the operation stated first and the scope requirement second. No filler, well 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-parameter delete whose destructive and idempotent traits are declared in annotations, this is nearly complete and adds the required auth scope. The only notable gap is the absence of any cascade/deletion-impact note, which matters for a destructive operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 'id' parameter is fully documented in the schema. The description's 'by ID' adds nothing beyond what the schema already provides, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Delete a project phase'), making the operation immediately identifiable. It does not differentiate from siblings like delete_project_milestone or delete_project_task beyond the resource name, but the name and description align clearly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this versus alternatives, no prerequisites beyond scope, and no note on consequences of deletion. The agent must infer usage context entirely from the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_project_phase_categoryDelete project phase categoryB
DestructiveIdempotent

Delete a project phase category by ID. Requires project_phase_categories:write scope.

NameRequiredDescriptionDefault
idYesProject phase category ID

TDQS

B3.3/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, so the safety profile is covered structurally. The description adds the required auth scope (project_phase_categories:write), which is genuinely useful, but says nothing about cascading effects on phases referencing the category or behavior when the ID does not 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 short sentences, action and scope front-loaded, zero filler. Nothing could be removed without losing information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter destructive delete with full annotation coverage and no output schema, the description is minimally adequate. It omits the one thing that matters most for a destructive operation — whether deletion cascades to dependent phase data or fails when references exist.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one parameter exists and schema description coverage is 100%, with the UUID format and pattern fully documented in the schema. The description's 'by ID' 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?

The description states a specific verb (delete) and resource (project phase category) plus the identifier basis ('by ID'), which is unambiguous against generic siblings. It does not, however, differentiate itself from near-neighbors like delete_project_phase or update_project_phase_category beyond 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 Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives, nor any stated preconditions such as whether the category must be unused before deletion. The scope requirement is a permission prerequisite, not usage routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_project_riskDelete project riskA
DestructiveIdempotent

Delete a project risk by ID. Requires project_risks:write scope.

NameRequiredDescriptionDefault
idYesProject risk ID

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, so the safety profile is covered. The description adds the non-obvious authorization requirement (project_risks:write scope), which is genuine context beyond the annotations. It stops short of stating irreversibility or error behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, zero filler, with the action and lookup key front-loaded and the prerequisite 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 one-parameter destructive delete, the description plus annotations plus 100% schema coverage give an agent everything needed to invoke it correctly. Missing only edge-case detail (e.g., behavior when the risk is referenced elsewhere), which 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% and the single 'id' parameter is fully documented in the schema (UUID format with pattern), so the schema does the heavy lifting. The description's 'by ID' adds only marginal value, matching the baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Delete a project risk') plus the lookup key ('by ID'), which lets an agent distinguish it from the many sibling delete_* tools. It does not explicitly name alternatives like delete_project or update_project_risk, 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 Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description states the required scope ('project_risks:write'), which is a useful precondition, but gives no explicit when-to-use vs when-not guidance or pointer to sibling delete/update tools. Usage is implied by the verb, so a 3 is appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_project_siteDelete project siteA
DestructiveIdempotent

Remove a site from a project by ID. Requires project_sites:write scope.

NameRequiredDescriptionDefault
idYesProject site ID

TDQS

A3.5/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 something annotations cannot: the required project_sites:write scope, which is directly actionable for an agent deciding whether the call can succeed. It stops short of saying what is destroyed beyond the link itself (e.g. whether child records at that site are affected).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, zero filler, with the operation stated first and the prerequisite second. Nothing in it could be removed without losing information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter delete with full annotation coverage and no output schema, the essentials are present. The gap is disambiguation: in an API containing delete_site, delete_project_location and delete_service_area_site, the description should state that this removes only the project-to-site association and that it is permanent, neither of which is addressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and there is only one parameter (id, a UUID with an explicit pattern), so the schema fully documents the input. The description only echoes "by ID" without adding format or lookup guidance, which is the expected baseline when the schema does the work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource ("Remove a site from a project") plus the identifier used ("by ID"), which is far better than a restatement of the title. It does not, however, distinguish this from nearby siblings such as delete_site or delete_project_location, which an agent could plausibly 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 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 versus alternatives, nor any warning about when removal is inappropriate. The only conditional information is the scope prerequisite, which is closer to an auth requirement than usage guidance. The implication that this is the delete counterpart of create_project_site must be inferred from the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_project_systemDelete project systemA
DestructiveIdempotent

Remove a system from a project by ID. Requires project_systems:write scope.

NameRequiredDescriptionDefault
idYesProject system ID

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 the required auth scope (project_systems:write), which annotations do not convey — genuine added value. It still omits whether removal cascades to dependent records, which is the main remaining behavioral unknown.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, zero filler, with the core action front-loaded and the prerequisite scope trailing. Nothing to cut.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence 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 delete with no output schema and annotations that already cover destructiveness and idempotency, the description covers purpose, identifier, and required scope. The only gap is cascade/aftermath behavior, which is minor at this complexity level.

Complex tools with many parameters or behaviors need more documentation. Simple tools 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 100% schema description coverage means the schema fully documents the UUID 'id'. The description's 'by ID' adds no format or semantics beyond what the schema already provides, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Remove') and resource ('a system from a project'), keyed by ID, so an agent can distinguish it from delete_project (the whole project) and delete_system (the system catalog entry). It does not explicitly name its nearest siblings delete_project_system_class/group, but the resource wording is precise enough to route correctly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description names the prerequisite scope (project_systems:write), which is useful context for whether the agent can call it, but gives no guidance on when to prefer this over delete_project_system_group or delete_project_system_class, nor any warning about when removal is inappropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_project_system_classDelete project system classA
DestructiveIdempotent

Remove a system class from a project by ID. Requires project_system_classes:write scope.

NameRequiredDescriptionDefault
idYesProject system class ID

TDQS

A3.6/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, so the safety profile is covered. The description adds the required write scope ('project_system_classes:write'), which is genuine value, but says nothing about failure modes (e.g., whether dependent records block deletion) or what the response 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 short sentences, zero filler, with the action and identifier front-loaded and the prerequisite scope stated directly after. Nothing could be trimmed 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 single-parameter destructive delete with full schema coverage and no output schema, the description covers what, how to identify the target, and the auth requirement. The only real gap is the absence of any note on cascade or dependency behavior when removing a class from a project.

Complex tools with many parameters or behaviors need more documentation. Simple tools 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, including format and UUID pattern, so the schema carries the documentation burden. The description only echoes 'by ID' and adds no format or semantic detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Remove a system class from a project') plus the lookup key ('by ID'). It does not, however, distinguish itself from very similar siblings such as delete_project_system, delete_system_class, or delete_service_area_system_class, which an agent could plausibly confuse.

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 mentions the required scope, which implies an authorization precondition, but gives no explicit when-to-use or when-not-to-use guidance relative to the near-identical delete siblings in this large toolset.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_project_system_groupDelete project system groupB
DestructiveIdempotent

Remove a system group from a project by ID. Requires project_system_groups:write scope.

NameRequiredDescriptionDefault
idYesProject system group ID

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false, so the safety profile is covered. The description adds the required 'project_system_groups:write' scope, which is useful auth context beyond the annotations, but it does not explain what happens to associated data or whether deletion is reversible beyond what destructiveHint already implies.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two short sentences with zero filler, and the core action is front-loaded before the scope requirement. Every sentence carries necessary 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 one-parameter delete operation with complete schema coverage and rich annotations covering safety, the description is nearly complete. It states the action and the required write scope, but does not mention error behavior or side effects on related records, 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%, and the single 'id' parameter is already fully documented as a UUID-format 'Project system group ID' in the schema. The description adds no syntax, format, or constraint details 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.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Remove') and resource ('a system group from a project by ID'), and the phrase 'from a project' scopes it to project-level system groups rather than global system groups. However, it does not explicitly name or contrast with siblings such as delete_system_group or delete_project_system, so a 4 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 Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no guidance about when to use this tool versus alternatives like delete_system_group or update_system_group. It only states a required scope, which is an authorization prerequisite rather than a usage condition, so usage guidance is effectively absent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_project_taskDelete project taskA
DestructiveIdempotent

Delete a project task by ID. Requires project_tasks:write scope.

NameRequiredDescriptionDefault
idYesProject task ID

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (destructiveHint=true, idempotentHint=true, readOnlyHint=false), so the bar is lower. The description adds the auth requirement (project_tasks:write), which is genuine value, but says nothing about cascading effects on task dependencies or whether the deletion is recoverable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, with the action front-loaded before the scope requirement. No filler, nothing restated from the title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive single-entity delete with full annotation coverage and no output schema, the definition is adequate but incomplete: it omits what happens to related records (e.g., task dependencies) and whether the operation can be undone, which are the main things an agent would want before calling a 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% for the single id parameter (UUID format is fully specified in the schema). The phrase 'by ID' adds nothing beyond what the schema already documents, 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 (delete), resource (project task), and selection key (by ID), so the agent knows exactly what the tool does. It is distinguishable from siblings like delete_project_task_dependency by the resource name, though the description itself does not call out that distinction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The purpose implies usage (use it to remove a single project task), but there is no guidance on when to prefer it over update_project_task or how it relates to delete_project_task_dependency. No exclusions or preconditions beyond the scope note are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_project_task_dependencyDelete project task dependencyB
DestructiveIdempotent

Delete a task dependency by ID. Requires project_task_dependencies:write scope.

NameRequiredDescriptionDefault
idYesProject task dependency ID

TDQS

B3.2/5.0
Behavior3/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 information in the form of the required project_task_dependencies:write scope, but omits what deletion means for dependent tasks or whether it cascades.

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, action front-loaded, no filler. The scope sentence earns its place by flagging an auth requirement, though the phrasing is terse enough that it could be briefly expanded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence 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 delete with full annotation coverage and no output schema, the description covers the essentials. The one meaningful gap is the side effect on tasks that referenced the deleted dependency.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 (uuid id) is fully documented in the schema. The description's 'by ID' adds nothing beyond that, 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.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (delete) and resource (task dependency) with the lookup key (by ID), which cleanly separates it from the create_/get_/list_ siblings in the same family. It stops short of naming a sibling explicitly, so it is clear but not maximally differentiated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this versus update_project_task_dependency or list_project_task_dependencies, and no prerequisites or warnings about breaking task scheduling. The only conditional context is the required scope, which is authorization rather than usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_project_team_memberDelete project team memberA
DestructiveIdempotent

Remove a team member from a project by ID. Requires project_team_members:write scope.

NameRequiredDescriptionDefault
idYesProject team member ID

TDQS

A3.6/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, so the safety profile is covered structurally. The description adds the required write scope, which is genuinely useful beyond annotations, but says nothing about side effects (e.g., whether access is revoked, what happens to related time 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, zero filler, with the action front-loaded and the prerequisite trailing. 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 single-parameter destructive tool with no output schema and full annotation coverage, the description supplies what the schema cannot: the scope requirement. It is essentially complete, though a note on irreversibility or cascade effects would make it airtight.

Complex tools with many parameters or behaviors need more documentation. Simple tools 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, fully documented in the schema at 100% coverage (UUID format and pattern). The description's 'by ID' merely restates 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.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (remove) and resource (team member from a project) plus the identifying key (ID), so an agent knows exactly what the call does. It does not explicitly differentiate itself from the create/update/get siblings beyond the verb, but the action is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It supplies one real precondition — the project_team_members:write scope — which is actionable context. It offers no when-to-use vs alternatives guidance (e.g., remove vs update_project_team_member for role changes), so usage is only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_project_time_entryDelete project time entryB
DestructiveIdempotent

Delete a project time entry by ID. Requires project_time_entries:write scope.

NameRequiredDescriptionDefault
idYesProject time entry ID

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=true and readOnlyHint=false, so the safety profile is covered. The description usefully adds the required 'project_time_entries:write' scope, which annotations do not convey, but it says nothing about whether the deletion is permanent or recoverable or what a failed delete 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with no filler: the action and its target come first, followed by the authorization requirement. 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 single-parameter delete with destructive/idempotent annotations and no output schema, the definition covers the action, the identifier, and the scope requirement. The remaining gap is behavioral nuance about permanence or error handling, which is a minor omission rather than a blocker.

Complex tools with many parameters or behaviors need more documentation. Simple tools 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 'id' parameter with 100% schema description coverage, including format and regex pattern, so the schema fully carries parameter meaning. The description's 'by ID' adds nothing beyond that baseline, making 3 the appropriate 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 ('Delete') and resource ('a project time entry') plus the keying mechanism ('by ID'), so the agent can distinguish it from update_project_time_entry or delete_project. It stops short of naming or contrasting any sibling explicitly, which keeps it at a 4 rather than a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no when-to-use context, no mention of alternatives (e.g., update_project_time_entry for modifications), and no prerequisites such as ownership or whether the entry must be unreferenced. The only condition given is the scope requirement, which is authorization 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.

delete_project_updateDelete project updateB
DestructiveIdempotent

Delete a project update by ID. Requires project_updates:write scope.

NameRequiredDescriptionDefault
idYesProject update ID

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=true and readOnlyHint=false, so the safety profile is covered structurally. The description adds genuinely new context by naming the required auth scope (project_updates:write), but says nothing about what is destroyed or whether the deletion is recoverable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, zero filler, and the action plus the auth requirement are front-loaded. Nothing is padded or repeated from the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter delete with no output schema and full annotation coverage, the definition supplies the essential scope requirement and identifier semantics. It is adequate, though a brief note on irreversibility or prior verification would close the 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?

Only one parameter and schema description coverage is 100%, so the schema already documents 'id' as the project update UUID. The description's 'by ID' adds no syntax or format detail beyond that, which is the expected baseline 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 (Delete) and resource (project update) plus the identifying key (by ID), which cleanly separates it from the delete_* siblings. It does not, however, differentiate itself from update_project_update or get_project_update beyond the verb.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this versus alternatives such as update_project_update (soft change) or get_project_update (verify before deleting), and no prerequisites or warnings about irreversibility. The agent gets a purpose but no routing context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_purchase_orderDelete purchase orderA
DestructiveIdempotent

Delete a purchase order by ID. Requires purchase_orders:write scope.

NameRequiredDescriptionDefault
idYesPurchase order ID

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=true, readOnlyHint=false, and openWorldHint=false, so the safety profile is fully covered by structured data. The description adds the genuine extra value of the required auth scope (purchase_orders:write), but says nothing about cascade behavior (e.g., whether associated lines/links are removed), which is the main undisclosed behavioral trait for a delete.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the core action and followed by the prerequisite. Nothing is padded or 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 simple single-parameter delete with no output schema and annotations that already cover destructiveness and idempotency, the description supplies what an agent needs to call it: the action, the key, and the required permission. The only minor gap is the absence of cascade/return-behavior detail.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 'id' parameter that is fully documented in the schema itself, so the baseline is 3. The phrase 'by ID' mirrors the schema without adding format or constraint detail beyond the UUID pattern the schema already specifies.

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 (Delete) and resource (purchase order) plus the keying mechanism (by ID), which is unambiguous against siblings like get_purchase_order, update_purchase_order, and list_purchase_orders. It does not explicitly distinguish itself from delete_purchase_order_line or delete_purchase_order_link, so it falls short of the 5 tier for 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?

There is no explicit when-to-use or when-not-to-use statement, and no named alternatives. However, the naming and the added scope prerequisite ('Requires purchase_orders:write scope') make the usage context reasonably inferable for a straightforward delete-by-ID operation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_purchase_order_lineDelete purchase order lineA
DestructiveIdempotent

Delete a purchase order line item. Requires purchase_orders:write scope. A line with stock received is refused until its quantity_received is set back to 0.

NameRequiredDescriptionDefault
idYesPurchase order line ID

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, readOnlyHint=false, so the safety profile is covered. The description adds value beyond them by disclosing the required purchase_orders:write scope and a specific business rule (refusal on lines with received stock), which is exactly the kind of context annotations cannot express.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences: action first, then the permission requirement, then the failure condition. No filler, and the operation itself 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?

No output schema exists, but for a delete that is acceptable and the annotations carry the destructive semantics. The scope requirement and refusal rule make it nearly complete; only the exact error behavior/side effects of a successful delete are left implicit.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one parameter (id) and schema description coverage is 100%, so the schema fully documents the UUID input. The description adds no param-specific meaning beyond the schema, 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?

States a specific verb+resource ('Delete a purchase order line item'), which cleanly separates it from the create_/update_/get_/list_ purchase order line siblings by naming convention. It does not explicitly name an alternative, but the intent is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides a real precondition ('A line with stock received is refused until its quantity_received is set back to 0'), which implies when the call will fail. However, it does not name the alternative tool (e.g., update_purchase_order_line to fix quantity_received) or state when to prefer deletion over other cleanup paths.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_service_areaDelete service areaA
DestructiveIdempotent

Delete a service area by ID. WARNING: This also deletes all linked measures, measurements, and junction records. Requires service_areas:write scope.

NameRequiredDescriptionDefault
idYesService area ID

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructiveHint=true, but the description adds the crucial detail of WHAT is destroyed: all linked measures, measurements, and junction records. It also states the required auth scope. This is exactly the behavioral context an agent needs before invoking a cascade delete.

Agents need to know what a tool does to the world before 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 waste, with the destructive warning front-loaded ahead of the scope requirement. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter destructive delete with no output schema, the description covers action, cascade side effects, and authorization. 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.

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 id parameter (uuid format/pattern documented), so the schema carries the load. The description's 'by ID' adds no meaning beyond it; 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, 'Delete a service area by ID', which is unambiguous. However, it does not differentiate itself from adjacent siblings such as delete_service_area_site or delete_service_area_system_class, leaving that distinction to 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?

The description implies the precondition (requires service_areas:write scope) but gives no explicit when-to-use or when-not-to-use guidance, and names no alternatives among the many delete_* siblings. Usage is inferable but not stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_service_area_siteDelete service area siteA
DestructiveIdempotent

Remove a site link from a service area. Requires service_areas:write scope.

NameRequiredDescriptionDefault
idYesService area site link ID

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 adds the auth requirement (service_areas:write scope), which is genuinely beyond the structured data. It stops short of saying whether the link removal cascades or is recoverable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, zero filler, action stated first and the prerequisite second. Nothing to trim.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter delete with no output schema and rich annotations, the description covers the operation and the auth scope. Only minor gaps remain, such as whether the removal is reversible or has side effects on related records.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 single 'id' parameter is fully documented in the schema as the service area site link ID. The description adds no format or sourcing 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 — 'Remove a site link from a service area' — and the phrase 'site link' distinguishes it from delete_service_area (which removes the service area itself) and delete_site. An agent can tell this apart from siblings in that family without reading 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 names the required service_areas:write scope, which is a real prerequisite, but it gives no when-to-use guidance relative to alternatives such as delete_service_area or delete_service_area_system_class, and no note about what state the service area must be in. Usage is only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_service_area_system_classDelete service area system classA
DestructiveIdempotent

Remove a system class link from a service area. Requires service_areas:write scope.

NameRequiredDescriptionDefault
idYesService area system class link ID

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 adds the auth scope requirement, which is genuine behavioral context beyond the annotations, though it says nothing about reversibility or side effects on related records.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, zero waste, with the destructive action front-loaded and the prerequisite scope stated immediately after. Nothing extraneous.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence 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 destructive tool with full annotation coverage and a fully documented schema, the definition supplies the action, the one required scope, and the target identifier. The absence of any return or cascading-effect information 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?

Only one parameter and schema description coverage is 100%, so the schema fully documents the 'id' field as the link ID. The description adds no format or semantics beyond that, which is the expected baseline when the schema does the work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Remove') and a precisely scoped resource ('a system class link from a service area'), which distinguishes it from delete_service_area, delete_system_class, and delete_service_area_site. An agent can tell it removes an association rather than the underlying entities.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The prerequisite ('Requires service_areas:write scope') gives operational context, but there is no guidance on when to prefer this over sibling delete/list tools for system class links. 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.

delete_siteDelete siteA
DestructiveIdempotent

Delete a site by ID. Requires sites:write scope.

NameRequiredDescriptionDefault
idYesSite ID

TDQS

A3.5/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, so the safety profile is covered. The description adds the scope requirement, which is genuinely additive, but says nothing about cascading deletions of dependent records or irreversibility.

Agents need to know what a tool does to the world before 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, front-loaded sentences with zero padding. The action is stated first and the prerequisite second, which is an efficient ordering.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive delete the description covers purpose, the parameter, and the auth scope, and rich annotations carry the safety profile. However, for a delete tool it omits whether removal is reversible or what happens to related entities, leaving a 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 coverage is 100% for the single 'id' parameter, so the schema fully documents it. The description only echoes this with 'by ID' and adds no format or syntax detail beyond the schema, which is the expected baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Delete a site by ID'), making the operation unambiguous. It does not explicitly distinguish itself from sibling delete_* tools, but the resource is specific enough that no real ambiguity exists among the siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It supplies a prerequisite ('Requires sites:write scope'), which is useful usage context, but gives no when-to-use vs when-not-to-use guidance or warning about consequences. There is no obvious alternative tool for site deletion, so the omission is minor but the guidance is thin.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_systemDelete systemB
DestructiveIdempotent

Delete a system by ID. Requires systems:write scope.

NameRequiredDescriptionDefault
idYesSystem ID

TDQS

B3.2/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 openWorldHint=false, so the safety profile is covered. The description adds the required 'systems:write' scope, which is genuinely useful auth context, but says nothing about irreversibility or whether related records (parts, LOS targets, project systems) are cascaded.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loading the action and following with the prerequisite. No filler, though it is extremely terse and could absorb one clause of extra context without bloat.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, idempotent delete with a fully documented single param and annotation coverage, the essentials are present. The notable gap is deletion side effects (cascading or blocking on dependent records), which an agent needs before invoking a destructive operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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% — the single 'id' parameter is documented in the schema as a UUID with a pattern. The description adds nothing beyond naming the resource, 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 clear verb+resource ('Delete a system by ID'), so the agent knows exactly what it does. However it does not differentiate from close siblings like delete_project_system or delete_system_class, which the name alone must disambiguate.

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 or when-not-to-use guidance, and no mention of alternatives (e.g. archiving, or deleting via delete_project_system instead). The only conditional information is the permission scope, which is a prerequisite 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.

delete_system_classDelete system classB
DestructiveIdempotent

Delete a system class by ID. Requires systems:write scope.

NameRequiredDescriptionDefault
idYesSystem class ID

TDQS

B3.3/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, so the safety profile is covered. The description adds genuinely new context — the required systems:write scope — but omits whether deletion cascades to dependents or is reversible, which matters for a destructive operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with zero filler; the action and identifier are front-loaded and the authorization requirement follows immediately. Nothing is wasted.

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 one-parameter destructive tool with no output schema, the description covers the essentials, and annotations carry the safety profile. However, a delete operation should ideally state consequences such as cascading effects on associated systems or whether the delete can be undone, which is missing 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?

There is a single parameter and schema description coverage is 100%, so the UUID format and pattern are already fully documented in the schema. The description only restates that the ID selects the class, adding no format or constraint detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource plus the identifier used for selection: 'Delete a system class by ID.' An agent can distinguish it from create_system_class, update_system_class, and list_system_classes, but the description does not disambiguate from closer siblings like delete_project_system_class or delete_service_area_system_class.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance, no prerequisites beyond the scope note, and no mention of alternatives (e.g., delete_project_system_class for project-scoped classes). The agent must infer context from the sibling list alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_system_groupDelete system groupB
DestructiveIdempotent

Delete a system group by ID. Requires systems:write scope.

NameRequiredDescriptionDefault
idYesSystem group ID

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=true, so the safety profile is covered. The description adds the useful auth requirement (systems:write scope), which is not in the structured fields, but says nothing about cascading effects on member systems or whether the group must be empty.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the action and the resource, with the scope requirement second. 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 single-parameter delete with annotations covering destructiveness and idempotency and no output schema, the description is nearly sufficient; the missing piece is what happens to contained systems/classes on deletion.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 id parameter (uuid format and pattern), so the schema carries the load. The description only restates 'by ID' and adds no format or lookup semantics beyond it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Delete) and resource (system group) plus the keying method (by ID), which is enough to separate it from delete_system, delete_system_class, and delete_project_system_group. It does not explicitly distinguish itself from those siblings, but the resource name is precise.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance, no prerequisites, and no mention of alternatives (e.g. delete_project_system_group vs delete_system_group). The agent must infer usage purely from the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_system_los_targetDelete system LoS targetA
DestructiveIdempotent

Delete a system LoS target by ID. Buildings stop being scored on that system and metric; past status snapshots are kept. Requires los_targets:write scope.

NameRequiredDescriptionDefault
idYesSystem LoS target ID

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructive=true, idempotent=true, readOnly=false. The description adds genuine value beyond them: buildings stop being scored on that system/metric, past status snapshots are retained, and a los_targets:write scope is required. That answers what is and isn't destroyed, which annotations alone cannot.

Agents need to know what a tool does to the world before 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 side effect, then the auth requirement. 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 single-param destructive delete with no output schema and full annotation coverage, the description supplies the blast radius, data retention behavior, and required scope. Only minor gaps remain, such as behavior on a nonexistent ID or error 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?

One parameter with 100% schema coverage, so the schema already documents the UUID 'id' fully. The description only restates 'by ID' and adds no format or constraint detail beyond the schema, which is the expected baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Delete a system LoS target by ID') and adds the scoring consequence, so the agent knows exactly what is removed. It does not distinguish this from the similarly named sibling delete_infrastructure_los_target, which leaves some sibling ambiguity unresolved.

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 CRUD verb and the 'by ID' phrasing, plus the required scope, but there is no explicit statement of when to use this versus the infrastructure variant or update/archive alternatives. Adequate but leaves the choice to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_vendorDelete vendorB
DestructiveIdempotent

Delete a vendor by ID. Requires vendors:write scope.

NameRequiredDescriptionDefault
idYesVendor ID

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare destructiveHint=true, idempotentHint=true and readOnlyHint=false, so the safety profile is covered structurally. The description adds a genuinely useful behavioral detail beyond that — the required 'vendors:write' scope — but says nothing about cascade effects, whether related records are removed, or whether the deletion is recoverable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the action and key, then the permission requirement. No filler, no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive single-argument tool with annotations covering destructiveness and idempotency plus a stated auth scope, the definition is minimally serviceable. It still omits the consequences an agent should weigh before deleting a vendor — related-record handling and recoverability — which is the main remaining gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and there is a single required 'id' parameter already fully documented (UUID format/pattern). The phrase 'by ID' adds nothing the schema does not already state, 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?

The description states a specific verb and resource ('Delete a vendor') and adds the lookup key ('by ID'), so the agent knows exactly what the tool acts on. It does not distinguish itself from related siblings such as delete_vendor_site_assignment or update_vendor, but the name and verb make the distinction reasonably inferable.

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 guidance on when to use this tool versus alternatives: no mention of when deletion is appropriate, no warning about related records (e.g. vendor site assignments) that might need cleanup first, and no pointer to update_vendor for non-destructive changes. The reader gets only a definition, not a usage decision.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_vendor_site_assignmentDelete vendor site assignmentA
DestructiveIdempotent

Remove a vendor-site assignment by ID. Requires vendor_site_assignments:write scope.

NameRequiredDescriptionDefault
idYesVendor-site assignment ID

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already disclose destructiveHint=true, idempotentHint=true, readOnlyHint=false, and that this is a closed-world operation. The description adds auth context beyond the annotations by naming the required scope, which is genuinely useful for invocation. It does not mention cascade effects or behavior when the ID is absent, keeping it at 4.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, action first, prerequisite second. No filler, no restatement of the title, 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 single-parameter delete with full annotation coverage and no output schema, the description plus annotations tell the agent everything needed to invoke it correctly: what it does, what it targets, and the required scope. Only edge-case behavior (missing ID, dependent records) 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% and the single parameter is already documented as a UUID 'Vendor-site assignment ID'. The description's 'by ID' phrasing adds nothing beyond the schema, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Remove a vendor-site assignment by ID'), which is unambiguous and readily distinguished by name from the get/create/list vendor-site-assignment siblings. It does not explicitly name an alternative or contrast scope, so it stops short of 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a prerequisite ('Requires vendor_site_assignments:write scope'), which is useful, but offers no when-to-use framing or alternatives (e.g. use get_vendor_site_assignment to look it up first, or bulk operations for multiple deletions). Usage is implied by the name rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_work_categoryDelete work categoryA
DestructiveIdempotent

Delete a work category by ID. Requires work_categories:write scope.

NameRequiredDescriptionDefault
idYesWork category ID

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=true and openWorldHint=false, so the safety profile is covered structurally. The description still adds genuine value by disclosing the required auth scope ('work_categories:write'), which annotations cannot express. It does not, however, mention cascade effects or whether deletion 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?

Two short sentences, action first and the prerequisite second, with zero filler. Nothing could be removed without losing information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter destructive delete with no output schema and full annotation coverage, the description supplies what an agent most needs: the target and the required scope. What is missing is any statement about downstream impact of removing a category still referenced by work orders.

Complex tools with many parameters or behaviors need more documentation. Simple tools 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 100% schema description coverage and a UUID pattern; the schema fully documents it. 'By ID' in the description matches the schema but adds no format, source, or lookup nuance 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.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Delete a work category by ID'), which is unambiguous and easily distinguished from update_work_category / create_work_category. It stops short of any explicit sibling routing, so it lands at a clear-but-undifferentiated 4.

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, or alternative guidance. The agent gets no signal about irreversible consequences or whether to prefer a soft-delete/archive path, which matters in a toolset this large.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_work_orderDelete work orderA
DestructiveIdempotent

Delete a work order by ID. Requires work_orders:write scope.

NameRequiredDescriptionDefault
idYesWork order ID

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=true, so the safety profile is covered. The description adds a genuinely useful piece of context not present in structured fields: the required 'work_orders:write' scope. It stops short of disclosing cascade behavior for dependent records (comments, schedules), which matters for a destructive delete.

Agents need to know what a tool does to the world before 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, the action and identifier front-loaded, followed by the permission requirement. No filler 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 single-parameter destructive delete whose annotations already declare destructiveness and idempotency, the description plus schema covers what an agent needs to invoke it. Adding whether the deletion cascades to sub-resources or can be undone would make it complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single 'id' parameter is fully documented (UUID, pattern) in the schema. The description only echoes 'by ID', adding no syntax or format detail. Baseline 3 applies 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.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Delete a work order by ID'), which is unambiguous and clearly distinct from sibling deletes such as delete_work_order_comment or delete_work_order_schedule. It does not explicitly differentiate itself from those siblings, so it falls 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 Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance, no prerequisites beyond the scope string, and no mention of alternatives (e.g., update/closing a work order, or get_work_order to verify first). The context of when deletion is appropriate is entirely left to the agent to infer.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_work_order_commentDelete work order commentA
DestructiveIdempotent

Delete a work order comment by ID. Requires work_order_comments:write scope.

NameRequiredDescriptionDefault
idYesWork order comment ID

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, so the safety profile is covered structurally. The description adds a genuinely new fact beyond the annotations: the required work_order_comments:write scope, which an agent needs before attempting the call.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero padding, with the action and identifier front-loaded and the permission requirement second. Nothing here is redundant or misplaced.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence 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 destructive tool with no output schema, the description plus annotations cover the essential facts: what it removes, how it is targeted, safety profile, and the required scope. It stops short of noting any cascade effects (e.g., whether replies or attachments tied to the comment are affected), which would be the last piece 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 description coverage is 100% and the single id parameter is fully documented as a UUID with a regex pattern in the schema. The description's 'by ID' adds nothing 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 (Delete) and resource (work order comment) plus the identifying key (by ID). This cleanly separates it from delete_work_order, delete_work_order_schedule, and update_work_order_comment 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 Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description states no when-to-use condition, no prerequisites beyond the scope string, and never mentions the alternative of editing the comment via update_work_order_comment. The agent must infer that this is the removal path for an existing comment.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_work_order_scheduleDelete work order scheduleA
DestructiveIdempotent

Delete a work order schedule entry by ID (removes the stop from the technician's day). Requires work_order_schedules:write scope.

NameRequiredDescriptionDefault
idYesWork order schedule ID

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 still adds genuine value by disclosing the required write scope and the user-visible consequence that the technician's day loses the stop.

Agents need to know what a tool does to the world before 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, action first, with the effect and the auth requirement each packed into a single clause and no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter delete with annotations covering the safety profile and no output schema, the definition supplies effect and scope requirements. It stops short of noting irreversibility or error behavior on an unknown ID, 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?

Only one parameter exists and schema description coverage is 100%, so the schema already documents the UUID id fully. The phrase 'by ID' adds no format or sourcing detail beyond that, making the baseline 3 correct.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Delete a work order schedule entry by ID') and adds the real-world effect, removing the stop from the technician's day. Clear on its own, but it never explicitly contrasts with update_work_order_schedule or delete_work_order, so sibling routing rests on the name convention rather than the text.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the operation, and one prerequisite is given ('Requires work_order_schedules:write scope'), but there is no explicit when-to-use/when-not-to-use guidance or reference to the update/create alternatives for rescheduling instead of deleting.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_work_requestDelete work requestB
DestructiveIdempotent

Delete a work request by ID. Requires work_requests:write scope.

NameRequiredDescriptionDefault
idYesWork request ID

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false, so the safety profile is covered. The description adds useful authorization context by stating the required scope (work_requests:write), but does not disclose whether deletion is permanent, what happens to related records, or error behavior for missing 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?

Two tightly written sentences with no filler. The core action is front-loaded, and the scope requirement follows efficiently.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence 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 delete operation with rich annotations and no output schema, the description covers the essential action and the required write scope. It is somewhat sparse on irreversibility and post-deletion behavior, but nothing critical is missing for an agent to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single id parameter is documented as 'Work request ID' in the schema. The description only says 'by ID', adding no format, syntax, or semantic detail beyond the structured schema, which is the expected baseline when coverage is high.

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 (Delete) and resource (work request) with an identifying key (by ID). It clearly distinguishes this operation from sibling read/update/list tools on the same resource, though it does not explicitly contrast with other delete_* tools, which is unnecessary given the distinct 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 Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives such as update_work_request or other delete tools. Usage is only implied by the verb, with no conditions, prerequisites, or exclusions stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_assetGet assetA
Read-onlyIdempotent

Get detailed information about a specific asset by its ID. Amounts are bare numbers with no currency: call get_organization_settings for currency_code before stating one.

NameRequiredDescriptionDefault
idYesAsset ID

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish read-only, idempotent, non-destructive behavior, so the safety profile is covered. The description adds a genuinely non-obvious behavioral fact beyond the structured data: amounts come back as bare numbers without currency, and currency_code must be fetched separately. That is real value the annotations and schema do not provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tightly written sentences with zero filler; the core look-up purpose is front-loaded and the currency caveat follows as a dependent instruction. 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 read with full annotation coverage, the description is nearly sufficient. With no output schema, it sensibly flags the amount/currency representation, though it says nothing about the shape or scope of the returned asset details.

Complex tools with many parameters or behaviors need more documentation. Simple tools 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 baseline is 3. The description only restates that the asset is identified 'by its ID' and adds no format, validation, or lookup semantics beyond the schema's uuid pattern.

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 (asset) plus the retrieval key (by its ID), which separates it from list_assets. It does not, however, distinguish itself from the many get_asset_* sibling tools for sub-resources (cost, document, part, etc.), leaving some ambiguity about which record this returns.

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 usage context is implied by 'by its ID' (single-record lookup rather than a list), but there is no explicit when-to-use vs when-not guidance or named alternative. The routing to get_organization_settings is a follow-up data-dependency rule rather than tool-selection guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_asset_bettermentGet asset bettermentA
Read-onlyIdempotent

Get a single betterment by ID - one capital improvement on one asset, with its cost, the service life it bought, and its in-service date. Amounts are bare numbers with no currency: call get_organization_settings for currency_code before stating one.

NameRequiredDescriptionDefault
idYesBetterment ID

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 semantics, so the safety profile needs no restating. The description adds genuinely useful context beyond annotations: amounts are returned as bare numbers with no currency, and get_organization_settings must be consulted for currency_code.

Agents need to know what a tool does to the world before 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, zero filler. The scope and returned fields are front-loaded, and the currency caveat is placed as a trailing actionable instruction.

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 one parameter, the description covers what an agent needs: what a betterment is, which fields come back, and the currency-unit caveat with the tool to resolve 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 description coverage is 100% for the single id parameter, so the schema already documents it fully. The description only adds 'by ID', which does not extend the schema's UUID 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+resource (get a single betterment by ID) and defines the domain term by explaining a betterment is 'one capital improvement on one asset'. It also enumerates the salient returned fields (cost, service life, in-service date), letting an agent distinguish it from list_asset_betterments.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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 'single betterment by ID' framing implicitly routes the agent away from list_asset_betterments for singular lookups, and it explicitly tells the agent to call get_organization_settings before stating a currency. No explicit when-not-to-use clause, but the context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_asset_commentGet asset commentA
Read-onlyIdempotent

Get a single asset comment by ID.

NameRequiredDescriptionDefault
idYesAsset comment ID

TDQS

A3.8/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 adds no extra behavioral context beyond that, which is acceptable given the low bar but not value-adding.

Agents need to know what a tool does to the world before 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 short, front-loaded sentence with zero waste. 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?

For a simple single-parameter getter with full annotation coverage and no output schema, the description is sufficient. It does not need to describe return values, though it could note the response shape for extra clarity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 'id' parameter is documented as the asset comment ID with a UUID pattern. The description contributes no additional parameter meaning, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Get), resource (asset comment), and scope (single, by ID). The word 'single' implicitly distinguishes it from the sibling list_asset_comments, so an agent can tell it apart 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: fetch one comment when you have its ID, versus list_asset_comments for enumeration. No explicit when-to-use, when-not, or alternative routing is provided, so it sits at the minimum-viable implicit level.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_asset_condition_assessmentGet asset condition assessmentA
Read-onlyIdempotent

Get a single asset condition assessment by ID. Condition scores are 0-100: 85+ Excellent, 70-84 Good, 55-69 Fair, 40-54 Poor, below 40 Critical. Amounts are bare numbers with no currency: call get_organization_settings for currency_code before stating one.

NameRequiredDescriptionDefault
idYesAsset condition assessment ID

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the safe read-only, idempotent, non-destructive profile, so the bar is lower. The description adds genuinely useful context beyond them: how to interpret the 0-100 score bands (85+ Excellent through below 40 Critical) and the caveat that amounts are bare numbers requiring get_organization_settings for currency_code.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the core action and then the two interpretation rules. Every sentence earns its place; nothing is padding, though the score-band enumeration is the bulkiest 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 wisely covers the two ambiguous output elements an agent would trip on: the score scale and the currency-less amounts. It does not describe error behavior for a missing ID, keeping it just short of complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% for the single required 'id' parameter (uuid format, pattern), so the schema already carries the semantics. The description restates 'by ID' without adding format or lookup guidance beyond it, which matches the baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Get) and resource (a single asset condition assessment) scoped by ID, which cleanly distinguishes it from the sibling list_asset_condition_assessments. It does not name siblings explicitly, 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 'by ID' phrasing implies this is the retrieval path for a known identifier rather than browsing, but it never states when to use this versus list_asset_condition_assessments or what to do if the ID is unknown. Usage is implied rather than guided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_asset_costGet asset costA
Read-onlyIdempotent

Get a single asset cost record by ID - the record type shown on the main AssetLab "Expenses" page. Returns amount, cost_date, category, description, invoice_number, po_number, and related asset, site, building, and work_order. Distinct from get_expense (project-scoped expenses without invoice/PO). Amounts are bare numbers with no currency: call get_organization_settings for currency_code before stating one.

NameRequiredDescriptionDefault
idYesAsset cost ID

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 behavior, so the safety profile is covered. The description adds genuinely non-obvious context: the exact field set returned and the critical caveat that amounts are bare numbers with no currency attached. It does not discuss error behavior for a bad UUID, but that 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 tight sentences, front-loaded with what the tool returns, then sibling differentiation, then the currency caveat. No filler or restatement of the title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

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 burden of describing return contents and does so by enumerating fields and related entities. Combined with the currency warning and the sibling distinction, an agent has everything needed to call and correctly 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% for the single 'id' parameter, so the schema already documents it fully. The description's 'by ID' adds nothing beyond the schema; baseline 3 applies when structured data does the work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get a single asset cost record by ID') and anchors it to a concrete UI surface (the AssetLab 'Expenses' page). It also lists the returned fields, so an agent knows exactly what this record contains versus other cost-like records.

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 sibling it is confused with ('Distinct from get_expense (project-scoped expenses without invoice/PO)') and states the distinguishing condition. It also gives a prerequisite action for interpreting the result (call get_organization_settings for currency_code before stating a currency).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_asset_documentGet asset documentA
Read-onlyIdempotent

Get a single asset document by ID.

NameRequiredDescriptionDefault
idYesAsset document ID

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, and destructiveHint=false, so the safety profile is fully covered there. The description adds nothing beyond the structured data—no note on not-found behavior or access requirements—so it meets the lower bar set by annotations but adds no extra 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?

A single, front-loaded sentence with zero waste. It communicates the essential 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 simple, single-parameter read tool with full schema coverage and complete annotations, the description is adequate. It is a bit thin on when to reach for it versus list_asset_documents, but no critical information 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 'id' parameter is fully documented in the schema (UUID format/pattern). The description adds nothing beyond what the schema already 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.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Get'), resource ('asset document'), and scope ('single ... by ID'). It is clear what the tool does, though it does not explicitly differentiate from the sibling list_asset_documents or get_infrastructure_asset_document beyond the entity 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?

The 'by ID' phrasing implies usage when a single document ID is known, and the existence of list_asset_documents implies a bulk alternative, but the description never states when to use this vs. alternatives or any preconditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_asset_lifecycle_eventGet asset lifecycle eventA
Read-onlyIdempotent

Get a single facility lifecycle strategy event by ID. Amounts are bare numbers with no currency: call get_organization_settings for currency_code before stating one.

NameRequiredDescriptionDefault
idYesLifecycle event ID

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, non-destructive, and closed-world behavior, so the safety profile is covered. The description adds meaningful non-obvious context: amounts are bare numbers and the agent must call get_organization_settings to obtain currency_code before stating an amount.

Agents need to know what a tool does to the world before 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 are front-loaded with purpose and then a targeted caveat. Every sentence earns its place and there is no 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 tool with rich annotations, the description covers purpose and a crucial data-interpretation caveat. It does not describe the returned event shape, but with no output schema this 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?

Schema coverage is 100% and the only parameter is fully documented as a UUID lifecycle event ID. The description restates 'by ID' but adds no syntax or format detail beyond the schema, 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.

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 ('Get a single facility lifecycle strategy event') and narrows scope with 'by ID'. It implicitly distinguishes itself from the list sibling, but does not explicitly differentiate from get_infrastructure_lifecycle_event or other retrieval siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit guidance on when to use this tool versus alternatives such as list_asset_lifecycle_events or get_infrastructure_lifecycle_event. The currency note is a data-handling caveat rather than a usage selection guideline.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_asset_partGet asset partB
Read-onlyIdempotent

Get a single asset-part association by ID, including asset and part details.

NameRequiredDescriptionDefault
idYesAsset-part association ID

TDQS

B3.4/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 one extra fact: the response expands related asset and part details, which is useful but modest added value beyond the 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single tight sentence with the verb, resource, lookup key, and payload all front-loaded. Every clause earns its place; 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 simple single-entity getter with full annotation coverage, the description is nearly sufficient, and the note that asset and part details are included partially compensates for the absent output schema. A brief mention of error/not-found behaviour would make it complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single 'id' parameter is fully documented in the schema (UUID format, pattern, meaning). The description's 'by ID' merely restates this, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Get a single asset-part association') and adds the lookup key ('by ID'), so the agent knows exactly what is retrieved. It doesn't explicitly distinguish itself from near-neighbours like get_infrastructure_asset_part or list_asset_parts, which keeps it 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 Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies a single-record fetch by ID but offers no when-to-use guidance, no condition for choosing it over list_asset_parts, get_asset, or get_part, and no prerequisites. Nothing is misleading, but nothing routes the agent either.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_asset_placementGet asset placementC
Read-onlyIdempotent

Get a single asset placement by ID.

NameRequiredDescriptionDefault
idYesAsset placement ID

TDQS

C2.9/5.0
Behavior2/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 by structured data. The description adds nothing about behavior beyond that – not what happens when the ID is not found, nor any auth or scoping 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?

A single, front-loaded sentence with zero filler; appropriate size for a trivial lookup tool. It is efficient but has no structural elaboration to earn a 5.

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 one-parameter read tool with full annotations and complete schema coverage, this is adequate. Minor gaps remain around failure/not-found behavior and usage context, but nothing an agent strictly needs to invoke the 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 description coverage is 100% with a single well-documented 'id' parameter (UUID pattern and format), so the schema carries the semantic load. The description only restates that lookup is by ID, adding no new format or constraint detail.

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 ('a single asset placement') and scopes it to one record by ID, which implicitly distinguishes it from the sibling list_asset_placements. It does not explicitly name that alternative, so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this versus list_asset_placements or the other get_* siblings. The ID-based framing implies single-record retrieval, but no conditions, prerequisites, or alternatives are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_asset_replacement_planGet asset replacement planA
Read-onlyIdempotent

Get a single asset replacement plan by ID. Amounts are bare numbers with no currency: call get_organization_settings for currency_code before stating one.

NameRequiredDescriptionDefault
idYesReplacement plan ID

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, non-destructive, closed-world behavior, so the bar is lower. The description adds important behavioral context: amounts are bare numbers and get_organization_settings must be called for currency_code before stating a monetary 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?

Two sentences, front-loaded with the core action and followed by a necessary data-format warning. Every sentence carries useful information and there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple UUID lookup, the description plus annotations and full schema coverage are nearly sufficient. The currency guidance closes a significant data-interpretation gap, though the broader return shape is not described and no output schema is present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with the id parameter already documented as 'Replacement plan ID.' The description only repeats 'by ID' and adds no format, validation, or lookup semantics beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Get a single asset replacement plan by ID.' The word 'single' distinguishes it from the sibling list_asset_replacement_plans, so 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?

The description gives clear context for use: retrieve one plan when an ID is available. It does not explicitly name list_asset_replacement_plans as the alternative for multiple plans, but the single-by-ID framing makes the intended usage clear without exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_asset_risk_history_entryGet asset risk history entryB
Read-onlyIdempotent

Get a single asset risk history entry by ID.

NameRequiredDescriptionDefault
idYesRisk history entry ID

TDQS

B3.2/5.0
Behavior2/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 and idempotency profile is fully covered elsewhere. The description adds nothing beyond that: no behavior for a missing/invalid ID, no error semantics, and no indication of what the entry contains.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with zero filler, matching the low complexity of a one-parameter read. It is efficient but offers no additional structure or scoping note that a 5 would require.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter retrieval tool with rich annotations, the description is minimally adequate. With no output schema present, nothing tells the agent what fields a risk history entry returns or how an invalid ID is handled, which is a real but modest gap for this tool class.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% with a single well-documented uuid parameter (format and regex pattern for the ID), so the schema carries the parameter burden. The description's 'by ID' merely restates what the schema already specifies and adds no format or sourcing guidance.

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 (asset risk history entry) and adds the retrieval key (by ID), which is enough to distinguish a single-record fetch from list_asset_risk_history. It does not name that sibling explicitly, so the differentiation is inferable 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?

Usage is implied: the 'by ID' framing tells the agent this is a lookup that requires a known identifier, so enumerating tools are the implicit alternative. However there is no explicit when-to-use statement and no warning about confusing this with get_infrastructure_asset_risk_history_entry, which is a similarly named tool for a different asset family.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_asset_statusGet asset statusB
Read-onlyIdempotent

Get a single asset status by ID.

NameRequiredDescriptionDefault
idYesAsset status ID

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=false, and destructiveHint=false. The description adds no behavioral context beyond the annotations, such as what happens when the ID is not found or what permissions are required.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence with no wasted words. It is appropriately sized for a simple lookup tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-by-ID tool with rich annotations and complete schema coverage, the description is nearly sufficient. It does not describe the return shape, but the lack of an output schema makes this a minor gap rather than a blocking omission.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 id parameter, so the schema already documents it fully. The description says 'by ID' but adds no format or semantic detail beyond the schema baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Get a single asset status by ID.' The word 'single' distinguishes it implicitly from the list_asset_statuses sibling, but no sibling is named explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit guidance on when to use this tool versus alternatives such as list_asset_statuses. Usage is only implied by the phrase 'by ID'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_attachmentGet attachmentB
Read-onlyIdempotent

Get a single attachment by ID.

NameRequiredDescriptionDefault
idYesAttachment ID

TDQS

B3.1/5.0
Behavior2/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, covering the safety profile. The description adds no behavioral context beyond those annotations, such as auth requirements or error behavior for a missing attachment.

Agents need to know what a tool does to the world before 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, front-loaded sentence with no wasted words. It is appropriately sized for a simple single-resource read tool.

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 one-parameter read tool with rich annotations and schema coverage, the description is close to sufficient. However, there is no output schema and the description says nothing about what an attachment contains or what happens when the ID is not found, leaving those gaps unfilled.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 required parameter is fully documented in the schema as 'Attachment ID'. The description's 'by ID' adds no syntax or format detail beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get a single attachment') and adds a scope qualifier ('by ID') that distinguishes it from list_attachments. It does not explicitly name sibling alternatives, 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 gives no when-to-use guidance, no prerequisites, and no alternatives. 'By ID' implies the caller must already have an ID, but the agent receives no routing help against list_attachments or other get_* tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_budgetGet budgetA
Read-onlyIdempotent

Get a single annual funding budget by ID. Use list_sites/list_buildings to resolve site_id/building_id. Amounts are bare numbers with no currency: call get_organization_settings for currency_code before stating one.

NameRequiredDescriptionDefault
idYesBudget ID

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint and non-destructive, so safety is covered. The description adds genuinely non-obvious behavioral context: amounts are bare numbers with no currency, requiring a separate get_organization_settings call before quoting a figure.

Agents need to know what a tool does to the world before 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 supporting resolution and currency caveats. Every sentence carries distinct, actionable information with 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 carries return-value burden and partially does so by warning that amount fields lack currency and naming the tool that supplies it. It still doesn't hint at the other fields a budget returns, so it is strong but not exhaustive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single id parameter is fully documented in the schema (100% coverage), and the description only restates that lookup is by ID. Baseline 3 applies; it adds no format, prefix, or validity 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 (Get), a precise resource (a single annual funding budget), and the lookup key (by ID). This clearly contrasts with the sibling list_budgets, which returns many, so an agent can distinguish them 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 concrete follow-up guidance: use list_sites/list_buildings to resolve site_id/building_id, and call get_organization_settings for currency_code. It does not, however, explicitly say when to prefer this over list_budgets, 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.

get_change_orderGet change orderA
Read-onlyIdempotent

Get a change order by ID, including amount, status, vendor, and linked project. Amounts are bare numbers with no currency: call get_organization_settings for currency_code before stating one.

NameRequiredDescriptionDefault
idYesChange order ID

TDQS

A4.2/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 closed-world behavior. The description adds genuinely non-obvious behavioral context beyond that: amounts are bare numbers with no embedded currency, and currency_code must come from get_organization_settings. That prevents the agent from misreporting monetary 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?

Two sentences, zero filler. The primary purpose and returned fields come first, and the currency caveat follows as the operationally important addendum. 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?

There is no output schema, and the description compensates by naming the returned fields and flagging the currency caveat, which is the main hazard for this single-parameter read. It is essentially complete for a simple read-only lookup, though it doesn't mention behavior on a missing or invalid ID.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 'id' parameter is fully documented as a UUID with a format pattern. The description adds no syntax or format detail beyond the schema, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get a change order') and pins the scope with 'by ID', which distinguishes it from list_change_orders. It goes further and enumerates the key returned fields (amount, status, vendor, linked project), so an agent knows exactly what it retrieves.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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 'by ID' phrasing implies the lookup-by-identifier use case and the currency note explicitly routes the agent to get_organization_settings before stating an amount. It stops short of naming list_change_orders as the alternative for enumeration or any exclusions, so it's clear but not fully prescriptive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_compliance_itemGet compliance itemB
Read-onlyIdempotent

Get detailed compliance item including linked PM schedules and their required frequencies.

NameRequiredDescriptionDefault
idYesCompliance item ID

TDQS

B3.2/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 adds one useful behavioral fact beyond that: the response embeds linked PM schedules and their frequencies, indicating the read is an expanded/joined fetch rather than a flat record.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence, front-loaded with the verb and resource, with the payload detail trailing. No filler or restatement of the title, though it is on the sparse side for a tool with 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 partially compensates by naming what the response contains (linked PM schedules and required frequencies). Annotations cover the safety side. Only the sibling differentiation and error/not-found behavior remain 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?

There is a single parameter and the schema documents it at 100% coverage (uuid pattern and description 'Compliance item ID'). The description adds no format, lookup, or identification guidance beyond what the schema already supplies, 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 ('Get detailed compliance item') and adds scope detail about the payload, namely linked PM schedules and their required frequencies. It does not explicitly distinguish itself from the closely named siblings get_compliance_pm_schedule, get_compliance_record, or list_compliance_items, 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 Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use or when-not-to-use guidance. The description never mentions the sibling list_compliance_items (for enumerating items) or get_compliance_pm_schedule (for fetching a schedule on its own), so the routing decision is left entirely to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_compliance_pm_scheduleGet compliance PM scheduleB
Read-onlyIdempotent

Get one compliance item to PM schedule link by its ID.

NameRequiredDescriptionDefault
idYesLink ID

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered by structured data. The description adds nothing beyond restating retrieval (permissions, error behavior on missing ID, or response shape are absent), so it contributes no behavioral context of its 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?

A single short sentence with no filler, and the identifying key is front-loaded. It is appropriately sized for a trivial single-fetch tool, though the noun phrase is a little clunky.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence 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 of one link record with full annotation coverage, complete parameter documentation, and no output schema, the description is sufficient. It does not explain what the returned link contains, but with a trivial schema and no output schema the agent has enough to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one parameter exists and schema description coverage is 100%, including format and UUID pattern, so the schema carries the semantics. The description's 'by its ID' matches the schema without adding format or source details beyond it, which is the baseline 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?

States a specific verb (get), a single resource (one compliance item-to-PM-schedule link), and the lookup key (its ID), which cleanly separates it from the list_compliance_pm_schedules and create/update/delete siblings. The phrasing 'one compliance item to PM schedule link' is slightly awkward but unambiguous about what entity is fetched.

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 'one ... by its ID' implicitly signals the single-record fetch case versus the list sibling, but no explicit when-to-use, when-not-to-use, or alternatives are named. Guidance 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_compliance_recordGet compliance recordC
Read-onlyIdempotent

Get a single compliance record by ID.

NameRequiredDescriptionDefault
idYesCompliance record ID

TDQS

C2.9/5.0
Behavior2/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 and repeatability profile is fully covered. The description adds nothing beyond that, and notably omits not-found behavior or any error semantics for an invalid/unknown UUID.

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 short sentence with no filler, and the identifying detail (by ID) is front-loaded. It is efficient, though it borders on under-specification rather than true economy.

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 one-parameter read tool with full schema coverage and rich annotations, little is strictly required. Still, with no output schema present, a brief indication of what the record contains or how a missing ID is handled would round it out; as written it is minimally viable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 id parameter is fully documented in the schema with type, UUID format, and regex pattern. The description only restates that the lookup is by ID and adds no format or constraint detail beyond the schema, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (get a single compliance record) and adds the retrieval key (by ID), which distinguishes it from list_compliance_records in the sibling set. It does not, however, explicitly name or differentiate itself from get_compliance_item or get_compliance_pm_schedule.

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 list_compliance_records or the other get_* compliance siblings, and no prerequisites or preconditions (e.g., needing an ID obtained from a list call) are mentioned. Usage must be inferred entirely from the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_contract_documentGet contract documentB
Read-onlyIdempotent

Get a single contract document by ID.

NameRequiredDescriptionDefault
idYesContract document ID

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=false, and destructiveHint=false, covering the safety profile. The description adds no behavioral context beyond what the annotations provide, such as error behavior, authentication needs, or pagination/return details.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence with no filler. It states the core operation directly and wastes no words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-one tool with rich annotations and a fully described schema, this is minimally adequate. However, it lacks routing guidance against the many sibling tools and does not indicate what the returned document contains, which matters because no output schema exists.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single 'id' parameter is fully documented in the schema as a UUID with a clear description. The description adds only the redundant phrase 'by ID', so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Get'), resource ('contract document'), cardinality ('a single'), and lookup key ('by ID'). This clearly distinguishes it from create/update/delete siblings, but it does not explicitly differentiate from list_contract_documents or explain its relationship to create_contract_document.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit guidance on when to use this tool versus list_contract_documents or other retrieval tools. The phrase 'by ID' weakly implies that a known ID is required, but no alternatives or prerequisites are named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_criticality_modifierGet criticality modifierA
Read-onlyIdempotent

Get a single criticality modifier override by ID. A tier with no override uses the built-in default (critical 0.6, high 0.8, medium 1.0, low 1.4); a modifier below 1 tightens targets and one above 1 relaxes them.

NameRequiredDescriptionDefault
idYesCriticality modifier ID

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. The description adds domain behavior: tiers without an override fall back to built-in defaults, and a modifier below/above 1 tightens/relaxes targets. It does not cover return shape, errors, or auth, but it meaningfully extends the annotation set.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, purpose front-loaded; the second sentence earns its place by explaining default fallback and modifier direction. 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?

Simple one-parameter read tool with rich annotations but no output schema. Description covers purpose and the meaning/defaults of modifiers; it omits return fields and error behavior, which are minor for this low-complexity get.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 id parameter is described as 'Criticality modifier ID' with UUID format. The description adds 'by ID' and 'single', but no syntax or constraint 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 ('Get') and resource ('criticality modifier override'), with scope 'single ... by ID'. This implicitly separates it from list_criticality_modifiers, but no sibling is named, so it lacks explicit differentiation.

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 never states when to use this tool rather than list_criticality_modifiers or update_criticality_modifier, nor any prerequisite. 'By ID' implies the identifier is required, but that is already in the schema; no real usage guidance is given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_custom_field_definitionGet custom field definitionA
Read-onlyIdempotent

Get a single custom field definition by ID.

NameRequiredDescriptionDefault
idYesCustom field definition ID

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 and idempotency profile is fully covered without the description. The description adds only the single-record scoping, not return shape, error behavior, or permission requirements.

Agents need to know what a tool does to the world before 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 nine-word sentence with the resource and lookup key front-loaded and zero filler. Nothing to trim.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter, read-only, annotation-rich getter, the description covers what is needed to invoke it; the absence of an output schema means return values are undescribed, but that is the only remaining gap and it is 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 description coverage is 100% with one documented parameter ('Custom field definition ID') including a UUID pattern, so the schema carries full parameter meaning. The description only restates 'by ID' and adds no format or lookup semantics beyond it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Get) and resource (custom field definition), and the word 'single' plus 'by ID' distinguishes it from the sibling list_custom_field_definitions. It stops short of naming that sibling explicitly, so sibling differentiation is only implicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'by ID' implies the usage condition (you already hold the identifier), which is adequate but never states when to prefer this over list_custom_field_definitions or what to do if the ID is unknown. No prerequisites or exclusions are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_custom_field_valueGet custom field valueC
Read-onlyIdempotent

Get a single custom field value by ID.

NameRequiredDescriptionDefault
idYesCustom field value ID

TDQS

C2.9/5.0
Behavior2/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 fully covered. The description adds nothing beyond that — no note on missing records, error behavior, or what a 'value' contains — so it contributes no behavioral context of its 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?

One short, front-loaded sentence with no waste. It is appropriately sized for a trivial single-record fetch, though it is so terse that it borders on under-specification.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter read with full annotation coverage and no output schema, the definition is minimally adequate. It omits return-shape or error expectations for a missing ID, which for a simple getter is a tolerable 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% and the single parameter is documented in the schema as 'Custom field value ID'. The description's 'by ID' merely restates this, adding no format or constraint 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.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get a single custom field value') and scopes it to one record via ID, which implicitly separates it from list_custom_field_values. It never names that sibling explicitly, so sibling differentiation is only inferable.

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, no prerequisites, and no mention of the alternative (list_custom_field_values) or of update_custom_field_value. The agent must infer usage from the verb alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_dashboard_snapshotGet dashboard snapshotA
Read-onlyIdempotent

Get a single dashboard snapshot by ID. Amounts are bare numbers with no currency: call get_organization_settings for currency_code before stating one.

NameRequiredDescriptionDefault
idYesDashboard snapshot ID

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish safe-read semantics (readOnlyHint, idempotentHint, destructiveHint=false), so the bar is lower. The description adds non-obvious output behavior: amounts are bare numbers with no currency, requiring a separate settings call. That is meaningful context beyond the annotations, though nothing is said about missing/orphaned 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?

Two compact sentences, front-loaded with the operation and followed by a caveat that changes how the result must be reported. Nothing is redundant or padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description carries the return-value burden and does so by flagging the currency pitfall and its remedy. For a single-parameter read with full annotation coverage, this is close to complete; a note on behavior for an unknown ID would round it out.

Complex tools with many parameters or behaviors need more documentation. Simple tools 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 already documents it fully at 100% coverage (UUID format with regex). The description adds no format, sourcing, or lookup guidance for the id 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.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get a single dashboard snapshot by ID'), which is unambiguous about the operation. It does not, however, distinguish itself from the close sibling get_dashboard_summary or from list_dashboard_snapshots, leaving the agent to infer the singular-vs-aggregate distinction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description supplies a genuine workflow instruction — call get_organization_settings for currency_code before stating an amount — which is real 'when' guidance. It stops short of routing between this tool, get_dashboard_summary, and list_dashboard_snapshots, so the alternative-selection guidance is only implied by 'by ID'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_dashboard_summaryGet dashboard summaryA
Read-onlyIdempotent

Get aggregated dashboard statistics: total assets, work orders by status, overdue count, active PM schedules, sites, and buildings.

NameRequiredDescriptionDefault

No parameters

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, destructiveHint=false, openWorldHint=false, so the safety profile is fully covered for free. The description adds only that the payload is aggregated statistics rather than raw records—useful but thin, with nothing about cost, caching, or freshness of the aggregates.

Agents need to know what a tool does to the world before 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 front-loaded sentence naming the action and then the payload contents; no filler, no redundancy with 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 enumerates the returned fields, which is the key thing an agent needs here. It stops short of covering the aggregate/detail alternative (get_dashboard_snapshot), which is the main remaining gap for a no-param read tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so per the rubric the baseline is 4; there is no input syntax to document or misdocument.

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 ('Get aggregated dashboard statistics') with an enumeration of the exact metrics returned (total assets, work orders by status, overdue count, PM schedules, sites, buildings). This clearly separates it from the CRUD siblings, though it does not explicitly differentiate itself from get_dashboard_snapshot or list_dashboard_snapshots.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to call this versus get_dashboard_snapshot or list_dashboard_snapshots, both of which sit in the sibling list and sound near-identical. The agent is left to infer that this is the cheap aggregate view and the others are detail/raw snapshots.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_expenseGet expenseA
Read-onlyIdempotent

Get a project-scoped expense (Project → Costs → Expenses tab) by ID, including amount, date, receipt, and linked project or work order. Does NOT include invoice_number or po_number - those live on asset_costs (the main AssetLab "Expenses" page). Use get_asset_cost for that record type. Amounts are bare numbers with no currency: call get_organization_settings for currency_code before stating one.

NameRequiredDescriptionDefault
idYesExpense 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, so safety is covered. The description adds non-obvious domain behavior beyond that: which fields are absent and where they live, and the currency-denormalization caveat that would otherwise cause a wrong answer. It doesn't discuss pagination/error behavior, but for a single-record read that 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?

Three sentences, all front-loaded with the core definition first and the caveats after. Every sentence carries distinct information (identification, field boundaries, currency), though the parenthetical UI path is slightly extraneous.

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 returned fields (amount, date, receipt, linked project or work order) and the fields it omits plus where they live. Combined with the currency caveat, 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?

Schema coverage is 100% and there is a single UUID-typed id, fully documented in the schema. The description only restates 'by ID' and adds no format, scoping, or lookup semantics 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+resource (get a project-scoped expense by ID) and even locates it in the UI (Project → Costs → Expenses tab). It explicitly names the sibling it is not (get_asset_cost) and the record type it excludes, so an agent can distinguish it from the other cost/expense getters 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 Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes the agent: use get_asset_cost for records carrying invoice_number/po_number, and call get_organization_settings for currency_code before stating an amount. Both the alternative and a prerequisite are named with their triggering conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_floorplanGet floorplanA
Read-onlyIdempotent

Get a single floorplan by ID. Returns floor metadata, PDF path, page number, and detection status.

NameRequiredDescriptionDefault
idYesFloorplan ID

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, non-destructive and closed-world, so the safety profile is covered. The description adds real value by disclosing the response contents (floor metadata, PDF path, page number, detection status), 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 short sentences, zero waste, with the core action front-loaded and the return fields following. 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 enumerates the fields returned, and annotations cover the safety semantics for a simple read. What remains thin is usage routing (vs list_floorplans), but for a one-parameter getter this is close to complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is a single parameter with 100% schema description coverage, including type, UUID format and pattern, so the schema does the heavy lifting. The description only echoes 'by ID' and adds no syntax or format detail beyond the schema, matching the baseline for full 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+resource ('Get a single floorplan by ID'), which is clear and contrasted with the plural list_floorplans sibling by virtue of 'single ... by ID'. It stops short of naming the alternative, so it is clear but not explicitly 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 only implied: 'by ID' signals a point lookup, so an agent can infer this is the retrieve-one path. There is no explicit when-to-use/when-not guidance and no named alternative (e.g. list_floorplans) for browsing cases.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_floorplan_regionGet floorplan regionB
Read-onlyIdempotent

Get a single floorplan region by ID.

NameRequiredDescriptionDefault
idYesFloorplan region ID

TDQS

B3.3/5.0
Behavior2/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, fully covering the safety profile. The description adds no behavioral context beyond that, such as what happens if the ID is not found 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?

A single, front-loaded sentence with no filler; every word maps to the tool's action, resource, scope, and identifier.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter read with full annotation coverage and no output schema, the description is minimally adequate. It omits any hint of return shape or error behavior, which for a read-by-ID tool would be helpful but is not strictly required given the low complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 'id' parameter is fully documented in the schema (type, format, pattern, and description). The description's 'by ID' adds no syntax or format detail beyond the schema, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

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 (floorplan region) with a clear singular scope ('a single ... by ID'), which implicitly distinguishes it from the plural list_floorplan_regions and the parent get_floorplan. It does not name any sibling explicitly, 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 phrase 'by ID' implies the tool is used when a specific region identifier is known, giving implied usage context. However, there is no explicit when-to-use guidance, no exclusion criteria, and no named alternative (e.g., list_floorplan_regions for browsing).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_form_responseGet form responseB
Read-onlyIdempotent

Get detailed information about a specific form response by its ID.

NameRequiredDescriptionDefault
idYesForm response ID

TDQS

B3.4/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 and idempotency profile is fully covered structurally. The description adds no further behavioral context such as permission requirements or what happens for a non-existent/inaccessible ID, so it earns only baseline 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?

A single efficient sentence with the resource and the selector front-loaded and no filler. It is appropriately sized for a one-parameter lookup tool, though it is too terse to be exemplary.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only getter with full annotation coverage and a single well-documented parameter, the description is broadly sufficient. It is slightly thin in that there is no output schema and 'detailed information' leaves the returned shape unspecified, but nothing critical to invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is a single parameter with 100% schema description coverage, including format and UUID pattern, so the schema fully documents it. The description only restates 'by its ID' and adds no semantics beyond what the schema already conveys, which is the baseline 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?

The description gives a specific verb (Get) and resource (form response) and scopes it to a single record identified by ID, which separates it from list_form_responses. It does not, however, name or contrast itself with the closely named sibling get_form_response_answer (which retrieves answers rather than the response record itself).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Use case is implied: fetch one response when you already have its ID. There is no explicit statement of when to prefer this over list_form_responses or get_form_response_answer, and no prerequisites or exclusions are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_form_response_answerGet form response answerB
Read-onlyIdempotent

Get detailed information about a specific form response answer by its ID.

NameRequiredDescriptionDefault
idYesForm response answer ID

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=false and destructiveHint=false, so the safety profile is fully covered. The description adds that it returns 'detailed information' for a single answer, but says nothing about permissions, missing-ID behavior, or completeness of the payload.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One short, front-loaded sentence with no filler. It is efficient, though the phrasing is generic enough that it could be tightened or enriched without growing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence 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-ID read with complete schema coverage and annotations covering safety, no output schema is required to describe returns. The definition is essentially sufficient; only cross-references to the list/parent siblings 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?

There is a single required parameter with 100% schema description coverage ('Form response answer ID' with a UUID pattern), so the schema fully carries parameter meaning. The description's 'by its ID' merely echoes 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?

Names a specific verb (get) and resource (a specific form response answer) scoped by ID, which cleanly separates it from the plural sibling list_form_response_answers and from the parent get_form_response. It does not explicitly name 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 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 rather than list_form_response_answers (to enumerate answers for a response) or get_form_response (to fetch the parent response). Usage is only implied by the get-by-ID naming convention, which is weak given the very large get/list/delete sibling set.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_form_templateGet form templateB
Read-onlyIdempotent

Get detailed information about a specific form template by its ID.

NameRequiredDescriptionDefault
idYesForm template ID

TDQS

B3.1/5.0
Behavior2/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 fully covered by structured data. The description adds nothing beyond that baseline — no error behavior for an unknown ID, no note on what 'detailed information' actually includes.

Agents need to know what a tool does to the world before 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 sentence, front-loaded with the verb and resource, zero filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description is the only place to indicate what is returned, and 'detailed information' is vague. For a simple one-parameter read whose annotations already convey safety, this is minimally adequate but leaves the retrieval result unspecified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single parameter is documented as a UUID-formatted 'Form template ID'. The description's 'by its ID' merely restates the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb (Get) and resource (form template) scoped to retrieval by ID, which distinguishes it from the create/update/delete siblings. However, it does not explicitly distinguish itself from the near-identical list_form_templates or get_form_template_item siblings, so differentiation is only implicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

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 the alternatives. An agent must infer that list_form_templates supplies the ID and get_form_template_item handles line items; nothing in the description states or excludes any of this.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_form_template_itemGet form template itemB
Read-onlyIdempotent

Get detailed information about a specific form template item by its ID.

NameRequiredDescriptionDefault
idYesForm template item ID

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, non-destructive, and closed-world behavior. The description adds little beyond confirming a read retrieval by ID, but it does not contradict the annotations and is consistent with 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?

The description is a single front-loaded sentence with no filler. Every part of the sentence contributes to identifying the operation and its lookup key.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter read tool with complete schema coverage and read-only annotations, the purpose is clear. However, with no output schema, it does not describe what 'detailed information' includes or how missing IDs are handled.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 'id' parameter is fully documented in the schema. The description mentions lookup by ID but adds no format or constraint details beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb ('Get'), resource ('form template item'), and lookup key ('by its ID'). This distinguishes it from list/create/update/delete siblings, though it does not explicitly name an alternative tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It implies use when an ID is known, but gives no explicit when-to-use or when-not-to-use guidance relative to alternatives like list_form_template_items or get_form_template. No prerequisite or exclusion information is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_infrastructure_assetGet infrastructure assetA
Read-onlyIdempotent

Get a single infrastructure asset (feature) by ID. Returns full geometry as GeoJSON plus all attributes. Amounts are bare numbers with no currency: call get_organization_settings for currency_code before stating one.

NameRequiredDescriptionDefault
idYesInfrastructure asset (feature) ID

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so safety is covered. The description adds value beyond that by disclosing the return shape (GeoJSON geometry plus attributes) and the currency-handling caveat, which are behavioral facts not present in structured metadata.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, all earning their place: the first defines the operation, the second describes the return, the third flags a downstream dependency. The core purpose is front-loaded 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?

This is a simple single-parameter read tool with a fully documented schema and safe annotations. With no output schema, the description appropriately supplies the return format (GeoJSON plus attributes) and the currency caveat, covering everything an agent needs to call and interpret the result 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 there is a single required id parameter whose UUID format and meaning are fully documented in the schema. The description only echoes 'by ID' and adds no syntax or constraint detail beyond what the schema already provides, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get a single infrastructure asset (feature) by ID') and clarifies the return payload (full geometry as GeoJSON plus all attributes). The word 'single' implicitly separates it from list_infrastructure_assets, but no sibling is named explicitly, so the differentiation is inferred rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Includes one concrete usage instruction – call get_organization_settings for currency_code before stating an amount – which is a genuine prerequisite. However, there is no guidance on when to use this versus get_asset or list_infrastructure_assets, so the caller is left to infer the selection context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_infrastructure_asset_commentGet infrastructure asset commentB
Read-onlyIdempotent

Get a single infrastructure asset comment by ID.

NameRequiredDescriptionDefault
idYesInfrastructure asset comment ID

TDQS

B3.3/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 fully covered for a simple read. The description adds nothing beyond that — no note about authorization scope or behavior when the ID is unknown — which is acceptable but not value-adding.

Agents need to know what a tool does to the world before 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 short sentence with no filler, and the resource and retrieval key are front-loaded. Nothing needs to be trimmed.

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 one-parameter read whose annotations and schema are complete, the description is arguably sufficient for correct invocation. However, with no output schema present, it says nothing about the returned comment shape or the not-found case, leaving slight 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?

One parameter with 100% schema description coverage, so the schema already documents the UUID id. The description adds no meaning beyond the schema's own 'Infrastructure asset comment ID', making the baseline 3 correct.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get a single infrastructure asset comment') plus the retrieval key ('by ID'), which implicitly separates it from list_infrastructure_asset_comments. It does not name a sibling explicitly, so it stops short of the top mark.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use or when-not-to-use guidance and no mention of the list alternative. The phrase 'by ID' weakly implies the caller must already have an ID, but that is inference rather than stated guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_infrastructure_asset_costGet infrastructure asset costA
Read-onlyIdempotent

Get a single infrastructure asset cost by ID. Amounts are bare numbers with no currency: call get_organization_settings for currency_code before stating one.

NameRequiredDescriptionDefault
idYesInfrastructure asset cost ID

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover safety (readOnly, idempotent, non-destructive), and the description adds genuinely new behavioral context: returned amounts are bare numbers with no currency attached. That is a real gotcha an agent would otherwise misreport.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, zero filler, with the core action first and the currency caveat 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?

No output schema exists, yet the description proactively explains the key property of the return value (bare, unitless amounts) and how to resolve currency. That covers the main ambiguity for a simple single-get; error/failure behavior is the only omission.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 'id' parameter is fully described in the schema as a UUID pattern. The description adds only 'by ID', so it neither compensates for nor extends the schema. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Get a single infrastructure asset cost by ID'), and the word 'single' implicitly distinguishes it from list_infrastructure_asset_costs. It does not name a sibling explicitly, but the purpose is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a concrete prerequisite workflow: call get_organization_settings for currency_code before stating an amount. That is actionable when-to guidance, though it doesn't contrast with list_infrastructure_asset_costs or say what happens if the ID is unknown.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_infrastructure_asset_documentGet infrastructure asset documentB
Read-onlyIdempotent

Get a single infrastructure asset document by ID.

NameRequiredDescriptionDefault
idYesInfrastructure asset document ID

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint=false, so the safety profile is fully covered by structured data. The description adds nothing beyond the annotations, such as behavior when the ID is missing, permissions required, or attachment/document retrieval semantics.

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 short, front-loaded sentence with no filler. It is efficient, though arguably too terse to earn a top score since it stops at restating 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 simple single-record read with full annotation coverage, no output schema, and a fully documented ID parameter, the description is essentially sufficient. Minor gap: no note on error behavior for a nonexistent ID or what document payload is returned.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 'id' parameter is documented as a UUID with a format pattern, so the schema carries the burden. 'By ID' in the description adds no syntax or format detail beyond that; baseline 3 for a fully covered single parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Get) and resource (infrastructure asset document) scoped to a single record via ID. It is clear on its own, but does not distinguish itself from sibling readers like get_asset_document, get_project_document, or get_contract_document, which an agent must disambiguate by resource type.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this versus list_infrastructure_asset_documents or the sibling get_*_document tools. The only implied usage is that a known ID is required, which the schema already enforces.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_infrastructure_asset_inspectionGet infrastructure asset inspectionB
Read-onlyIdempotent

Get a single infrastructure asset inspection by ID.

NameRequiredDescriptionDefault
idYesInfrastructure asset inspection ID

TDQS

B3.4/5.0
Behavior2/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. The description adds nothing beyond that — no note on what is returned, whether the record may be absent, or how it relates to its parent infrastructure asset.

Agents need to know what a tool does to the world before 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 short sentence with the resource and lookup key front-loaded and zero filler. Nothing is wasted, though there is also very little content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple single-record read whose annotations cover safety and whose schema fully documents the one parameter, this is close to sufficient — no output schema exists so return values need not be described. It falls just short because it gives no indication of what the inspection object contains or its relationship to the parent asset.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 documented 'id' parameter (uuid format and pattern), so the schema carries the semantics. The description's 'by ID' merely restates the parameter and adds no format, sourcing, or lookup guidance 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?

Clear verb ('Get') plus specific resource ('a single infrastructure asset inspection') and the retrieval key ('by ID'). It distinguishes itself from the sibling list_infrastructure_asset_inspections by the word 'single', though it never names that sibling or any other alternative.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: 'single ... by ID' suggests fetching one known record rather than enumerating, which contrasts with the list_* family. There is no explicit when-to-use statement, no naming of the alternative list tool, and no prerequisite or error-case guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_infrastructure_asset_partGet infrastructure asset partB
Read-onlyIdempotent

Get a single infrastructure asset part association by ID.

NameRequiredDescriptionDefault
idYesInfrastructure asset part ID

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety and idempotency profile is fully covered externally. The description adds only the fact that exactly one association is returned, which is marginal extra context rather than rich behavioral disclosure.

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 or redundancy, well matched to a trivial single-resource getter. It is efficient but so minimal that it does not demonstrate strong structuring beyond the single clause.

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 one-parameter idempotent read the definition is adequate, but with no output schema present the description could have noted what the returned association contains or keyed fields. Nothing contradicts the annotations; it is simply thin on the response side.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 required UUID parameter already labeled 'Infrastructure asset part ID'. The description's 'by ID' adds nothing the schema doesn't already state, 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?

Specific verb (Get) plus a precise resource ('infrastructure asset part association') and scope ('a single ... by ID'), which implicitly separates it from the list_* sibling. It does not name a sibling (e.g., list_infrastructure_asset_parts or get_infrastructure_asset) for contrast, 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 phrase 'by ID' implies the precondition for use (you already have the association's identifier and want one record), which is reasonable implied guidance for a plain getter. However, no alternatives are named and there is no explicit when-to-use vs when-to-list statement.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_infrastructure_asset_risk_history_entryGet infrastructure asset risk history entryB
Read-onlyIdempotent

Get a single infrastructure asset risk history entry by ID. Read-only.

NameRequiredDescriptionDefault
idYesInfrastructure asset risk history entry ID

TDQS

B3.4/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 description's 'Read-only' is redundant. The description adds no further behavioral context such as required permissions or error behavior, so it minimally satisfies transparency beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that front-loads the essential action and resource, with no extraneous words. The 'Read-only' note is short and clear, maintaining conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence 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 simplicity of the tool (one parameter, no output schema) and the presence of comprehensive annotations, the description covers the core operation. However, it could mention that it returns a single entry and any potential errors, though the lack of output schema means return details are not expected.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 100% coverage for the single 'id' parameter, fully documenting it as a UUID. The description mentions 'by ID' but adds no format, validation, or semantic nuance beyond what the schema provides, which is the baseline expectation.

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 ('Get') and resource ('infrastructure asset risk history entry') and specifies retrieval by ID, distinguishing it from the list variant. However, it does not explicitly differentiate itself from other get_* history entry tools like get_los_targets_history_entry or get_site_fci_history_entry, leaving that for schema inspection.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description offers no guidance on when to use this tool versus list_infrastructure_asset_risk_history or other retrieval tools. It implicitly suggests it fetches a single entry by ID, but provides no exclusions or alternative conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_infrastructure_feature_classGet infrastructure feature classA
Read-onlyIdempotent

Get a single infrastructure feature class by its code (e.g. "water_main"). Note: addressed by code, not UUID.

NameRequiredDescriptionDefault
codeYesAsset class code (lowercase, snake_case)

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 safety is covered. The description adds a genuinely useful behavioral detail beyond that: the resource is addressed by code, not UUID, which prevents a common invocation error.

Agents need to know what a tool does to the world before 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 waste; the primary purpose is front-loaded and the identifier caveat follows immediately. 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 single-parameter read with full schema coverage and no output schema, the description covers purpose and identifier convention. Return shape is unspecified but not required here; a brief note on not-found behavior would make it complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3, but the description adds value with a concrete example ('water_main') that makes the snake_case pattern tangible in a way the schema's regex alone does not.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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'), the exact resource ('a single infrastructure feature class'), and the addressing key ('by its code'). The 'single' qualifier clearly distinguishes it from the sibling list_infrastructure_feature_classes.

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 'single ... by its code' versus the list sibling, but the description never explicitly states when to prefer this over list_infrastructure_feature_classes or what happens on a missing code. 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_infrastructure_lifecycle_eventGet infrastructure lifecycle eventA
Read-onlyIdempotent

Get a single lifecycle strategy event by ID. Amounts are bare numbers with no currency: call get_organization_settings for currency_code before stating one.

NameRequiredDescriptionDefault
idYesLifecycle event ID

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description goes beyond that by disclosing a real behavioral trait of the returned data: amounts are bare numbers with no currency, requiring a separate get_organization_settings call. That is genuine added context not present in structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with no waste. The core purpose is front-loaded, and the currency warning follows compactly, with every clause earning 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 single-record getter with full schema coverage and annotations covering the safety profile, the description is nearly complete and even anticipates a downstream need (currency). No output schema exists, so return-format explanation is not required, though a hint about the shape of the event would round it out.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 'id' parameter, so the schema already documents its type, format, and meaning. The description adds no further semantics about the id itself; the currency note concerns response data, not the parameter. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Get a single lifecycle strategy event by ID.' The word 'single' effectively contrasts it with the sibling list_infrastructure_lifecycle_events. It does not explicitly name that sibling, but the singular/by-ID framing makes the distinction inferable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied (fetch one event when you have an ID), and the description adds a useful cross-reference telling the agent to call get_organization_settings for currency_code. However, it never states when to prefer this over list_infrastructure_lifecycle_events or any related tool, so guidance remains partial.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_infrastructure_los_targetGet infrastructure LoS targetA
Read-onlyIdempotent

Get a single infrastructure LoS target by ID. base_target is the base for that feature class and metric, not what any one network is held to (list_infrastructure_los_targets explains the criticality adjustment). All three metrics are 0-100; condition is higher-is-better, fci and asset_past_useful_life_pct lower-is-better. Not money.

NameRequiredDescriptionDefault
idYesInfrastructure LoS target ID

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, idempotentHint, destructiveHint=false, openWorldHint=false), and the description adds genuine value beyond them by explaining what the returned base_target means, the 0-100 scale and direction of each metric, and the 'Not money' unit caveat. It stops short of describing the full response shape, but for an annotated read tool this is solid disclosure.

Agents need to know what a tool does to the world before 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 in the opening sentence, and each following sentence earns its place by clarifying base_target semantics, metric direction/scale, and units. 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?

With no output schema, the description compensates well by defining the meaning, range, and direction of the returned metrics plus the base_target caveat. Given the simple single-parameter read, this is nearly complete, though the broader response structure remains 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?

There is a single parameter with 100% schema description coverage ('Infrastructure LoS target ID'), so the schema already carries the parameter meaning. The description adds nothing parameter-specific, leaving the baseline of 3 appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence gives a specific verb and resource ('Get a single infrastructure LoS target by ID'), making the single-by-ID scope clear and implicitly contrasting with the list tool. However, it does not differentiate itself from close siblings such as get_system_los_target or get_los_proposed_target, so sibling discrimination relies on the entity 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?

Usage is only implied: 'by ID' signals it is the lookup-for-one path, and it points at list_infrastructure_los_targets for the criticality-adjustment explanation. It never states when to prefer this over list_infrastructure_los_targets or a system-level target getter, so routing guidance is thin.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_infrastructure_networkGet infrastructure networkB
Read-onlyIdempotent

Get a single infrastructure network by ID. criticality sets how strictly the network is held to its feature class's Level of Service targets; null is treated as medium.

NameRequiredDescriptionDefault
idYesInfrastructure network ID

TDQS

B3.2/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 by structured data. The description adds domain semantics about how criticality affects Level of Service enforcement, which is genuine extra context, but it offers nothing about errors when an ID is unknown or about what the response contains.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The definition is short and the core purpose is front-loaded, which is good. However, the second sentence spends half the description on a `criticality` concept that is not an input parameter, which reads as misplaced or stale text rather than earning 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 single-record read with one fully described parameter and no output schema, the description is nearly sufficient — the agent knows the input and the safety characteristics. The dangling reference to a non-existent `criticality` parameter is the only notable gap in an otherwise complete definition.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 required `id` field, so the baseline is 3. The description adds no format or lookup detail for `id`, and the second sentence discusses `criticality`, which does not appear anywhere in the input schema, so it contributes no actionable parameter guidance.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence gives a specific verb+resource+scope ("Get a single infrastructure network by ID"), which cleanly separates it from the sibling list_infrastructure_networks. It doesn't explicitly name that sibling, but the singular/ID framing makes the retrieval-by-key purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement of when to use this tool versus the many get_* siblings or when to reach for list_infrastructure_networks first to find an ID. The description only asserts what the call does, leaving selection entirely to inference from the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_infrastructure_zoneGet infrastructure zoneA
Read-onlyIdempotent

Get a single infrastructure zone by ID. Boundary is returned as a GeoJSON Polygon.

NameRequiredDescriptionDefault
idYesInfrastructure zone ID

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this is a read-only, idempotent, non-destructive, closed-world operation, so safety behavior is covered. The description adds one useful piece of context the annotations do not carry: the boundary field is returned as a GeoJSON Polygon. It says nothing about behavior on a nonexistent ID or the rest 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, zero filler, and the primary purpose is front-loaded ahead of the secondary return-format 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?

With no output schema, the description usefully discloses the shape of the boundary return value (GeoJSON Polygon), which is the one non-obvious payload detail. For a simple single-resource getter this is nearly complete, though error/not-found behavior is left unstated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and there is only one parameter, whose uuid format and pattern are fully documented in the schema. The description's 'by ID' adds no syntax or meaning beyond that, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Get'), resource ('infrastructure zone'), and retrieval scope ('single ... by ID'), which cleanly separates it from list_infrastructure_zones. It does not explicitly name the sibling alternative, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by 'by ID' — an agent infers it needs a known zone identifier rather than listing. There is no explicit when-to-use statement, no mention of when to prefer list_infrastructure_zones, and no prerequisites (e.g., permissions) given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_invoiceGet invoiceA
Read-onlyIdempotent

Get detailed invoice information including amounts, dates, linked vendor, project, and purchase order. Amounts are bare numbers with no currency: call get_organization_settings for currency_code before stating one.

NameRequiredDescriptionDefault
idYesInvoice ID

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, so the safety profile is covered. The description earns credit by disclosing a genuine output quirk not visible anywhere else: amounts are bare numbers carrying no currency, which changes how an agent must present results.

Agents need to know what a tool does to the world before 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 defines the payload, the second front-loads the failure mode (currencyless amounts) and the fix. Nothing is redundant with the title 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?

With no output schema, the description must describe the return shape, and it does by naming the key fields, plus it flags the currency caveat that would otherwise cause a silent error. For a single-parameter read tool this is 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?

There is a single parameter (id) and schema description coverage is 100%, so the schema already carries the semantics. The description adds nothing about the identifier's form or origin. Baseline 3 applies when the schema does the work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (Get invoice) and enumerates the payload contents (amounts, dates, linked vendor, project, purchase order), which lets an agent confirm it returns the full record rather than a summary. It is distinguishable from list_invoices, which returns collections.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It supplies a concrete cross-tool rule: call get_organization_settings for currency_code before stating an amount. That is prescriptive guidance for correct use. It does not, however, state when to reach for get_invoice over list_invoices, so it stops short of 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_los_consequenceGet LoS consequenceA
Read-onlyIdempotent

Get a single LoS consequence by ID. Advisory only: no notification is sent. scope_ref holds a criticality tier, a system ID or a feature class code depending on scope_type, and is null for global.

NameRequiredDescriptionDefault
idYesLoS consequence ID

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint and non-destructive, so safety is covered. The description adds meaningful context beyond them: 'no notification is sent,' which is not encoded in any annotation and prevents an agent from assuming 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight clauses, front-loaded with the core action and followed by the advisory caveat and the field semantics. 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?

With no output schema, the description usefully explains that scope_ref varies by scope_type and is null for global, giving the agent enough to interpret the response. It omits return shape/pagination, but for a single-by-ID fetch this 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 'id' parameter, so the schema carries the burden and baseline 3 applies. The scope_ref detail actually describes a returned field, not an input parameter, so it does not augment parameter understanding.

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 (LoS consequence) with a clear scope qualifier ('single ... by ID'), which implicitly distinguishes it from the sibling list_los_consequences. It stops short of naming the alternative sibling explicitly, so it is clear but not maximally differentiated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description offers no when-to-use vs alternatives guidance; 'Advisory only' is a behavioral fact rather than routing advice. An agent gets no explicit direction on when to call this rather than the list or update variants.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_los_measureGet LoS measureA
Read-onlyIdempotent

Get a single LoS measure by ID, including all configuration (targets, data source, weights).

NameRequiredDescriptionDefault
idYesLoS measure ID

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, so safety is fully covered. The description's only added behavior detail is that the response bundles configuration (targets, data source, weights), which is useful context given there is no output schema, but it says nothing about not-found errors or permissions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence with zero filler, front-loading the verb, resource, and lookup key, then appending the most decision-relevant detail about returned content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only single-record fetcher with full annotation coverage, a fully described parameter, and no output schema, the description says enough: what it returns and how to address it. A brief note on behavior when the ID is unknown would make it complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is a single parameter at 100% schema description coverage, so the schema already documents the UUID format and pattern. The phrase 'by ID' in the description adds no syntax or constraint information beyond that, matching the baseline for schema-complete 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 (Get), resource (LoS measure), and lookup key (by ID), plus a scope hint that the full configuration is included. It is clearly distinguishable from list_los_measures and the update/create/delete siblings, 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?

Usage is only implied: fetching one record when you already have its UUID versus listing. There is no explicit when-to-use statement or pointer to list_los_measures for discovering IDs, and no guidance on the related get_los_measurement / get_los_proposed_target siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_los_measurementGet LoS measurementB
Read-onlyIdempotent

Get a single LoS measurement by ID, including value, period, and source metadata.

NameRequiredDescriptionDefault
idYesLoS measurement ID

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint=false, and destructiveHint=false, so the safety profile is fully covered. The description adds only that the returned fields include value, period, and source metadata, which is modest extra context beyond the structured hints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single tight sentence with no filler, front-loaded with the verb and resource. Nothing to trim, though it is too terse to be exemplary.

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?

Adequate for a one-parameter read tool whose annotations cover safety, but there is no output schema, so the brief listing of returned fields (value, period, source metadata) is the only information about the response and it is thin.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 lone 'id' parameter is documented with format and pattern in the schema. The description adds no syntax or format detail beyond what the schema already provides, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Get) and resource (a single LoS measurement by ID), clearly distinguishing it from the bulk 'list_los_measurements' and the write-oriented 'create/update/delete_los_measurement' 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?

Implies usage by stating 'by ID', but never explicitly contrasts with 'list_los_measurements' or 'get_los_measure', nor does it state when this is preferable. Context is implied rather than spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_los_proposed_targetGet LoS proposed targetA
Read-onlyIdempotent

Get a single LoS proposed target by ID: measure, year, and target_value (in the measure's own unit, not money) or target_statement.

NameRequiredDescriptionDefault
idYesLoS proposed target ID

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is fully covered. The description adds only that target_value is expressed in the measure's own unit rather than money — useful domain context, but not much beyond what annotations provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One front-loaded sentence with no filler, and the ID-based contract is stated first. It is slightly dense in the trailing field list but nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description compensates by enumerating the returned shape (measure, year, target_value or target_statement), which is what an agent needs. Minor gaps remain around error behavior for a nonexistent ID.

Complex tools with many parameters or behaviors need more documentation. Simple tools 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 required parameter at 100% schema description coverage; the schema already documents id as the LoS proposed target ID. The description adds no format, constraint, or lookup guidance beyond that, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get a single LoS proposed target by ID') and even previews the returned fields, which cleanly separates it from list_los_proposed_targets. It doesn't name the sibling explicitly, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'by ID' implies single-record retrieval, which is the only usage signal present. There is no explicit when-to-use versus list_los_proposed_targets or update_los_proposed_target, and no prerequisites stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_los_status_snapshotGet LoS status snapshotA
Read-onlyIdempotent

Get a single monthly Level of Service reading by ID. actual is null when there was no data; derived_target is what that facility was held to then, after its criticality was applied. fci and asset_past_useful_life_pct are 0-100 percentages (not fractions), asset_condition_avg is 0-100 and risk_score_avg is 0-25. Not money.

NameRequiredDescriptionDefault
idYesLoS status snapshot ID

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive/closed-world, and the description adds genuinely useful field semantics beyond them: actual is null when no data, derived_target reflects criticality applied at the time, and explicit unit ranges (fci/asset_past_useful_life_pct 0-100, asset_condition_avg 0-100, risk_score_avg 0-25) plus 'Not money.' It does not cover not-found/error 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?

Four compact sentences, front-loaded with purpose and then field/unit clarifications; every sentence carries information an agent would otherwise have to guess.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and an existing safety annotation set, the description usefully explains return-value semantics and units for a single-read tool. It omits error/not-found behavior and the full return shape, 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.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one parameter (id) with 100% schema description coverage, so the schema already carries the semantics and the description adds nothing new about it. Baseline 3 is correct.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource plus scope: 'Get a single monthly Level of Service reading by ID.' This clearly distinguishes it from the list_los_status_snapshots sibling implied by the singular/by-ID framing, 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?

The description implies usage (fetch one reading when you have its ID) but gives no explicit when-to-use guidance, no prerequisites, and no mention of the list alternative for discovery. 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_los_targets_history_entryGet LoS targets history entryA
Read-onlyIdempotent

Get a single LoS targets history entry by ID: the target, minimum and stretch goal a measure was set to on effective_date, in the measure's own unit (not money). History exists from 2026-09-20 onward only.

NameRequiredDescriptionDefault
idYesLoS targets history entry ID

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish read-only, idempotent, closed-world, non-destructive behavior, so the bar is lower. The description adds genuinely useful context the annotations lack: the fields returned, the unit semantics (measure's own unit, not money), and a data-availability constraint (history from 2026-09-20 onward).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One dense sentence, front-loaded with the verb and resource, with the payload and availability details trailing. Every clause carries information; no waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description steps in to describe the return payload and its unit, plus a data-boundary caveat. For a simple single-lookup read tool with rich annotations, this is nearly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with a single documented 'id' parameter, so the schema already carries the semantics. The description adds only the trivial 'by ID' framing, which is baseline 3 territory.

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 (a single LoS targets history entry by ID) and describes the payload fields (target, minimum, stretch goal, effective_date, unit). The singular 'single ... entry by ID' implicitly contrasts with the plural list sibling, but does not 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: fetch one entry when you have its ID. No when-to-use/when-not guidance, no named alternative such as list_los_targets_history, though the 'by ID' phrasing signals a direct lookup path.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_manufacturerGet manufacturerB
Read-onlyIdempotent

Get detailed manufacturer information including contact details and associated system classes.

NameRequiredDescriptionDefault
idYesManufacturer ID

TDQS

B3.4/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 clear without the description. The description adds useful return-content detail (contact details and associated system classes), but it does not disclose error behavior, auth requirements, or other operational traits.

Agents need to know what a tool does to the world before 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 a single front-loaded sentence with no filler. Every phrase contributes directly to identifying the tool's output.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence 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 appropriately names the main returned fields (contact details and associated system classes), and annotations cover the read-only behavior. It stops short of describing shape or error cases, but is nearly sufficient for a simple one-parameter get 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 'id' parameter is fully documented in the schema. The description adds no parameter-level meaning beyond what the schema already 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.

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 ('Get detailed manufacturer information') and names returned content (contact details, associated system classes), so an agent can distinguish it from generic list or mutation tools. It does not explicitly say it returns a single manufacturer by ID, which would be needed for a perfect score against siblings like list_manufacturers.

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 states what the tool returns but gives no guidance on when to use it versus alternatives such as list_manufacturers or other get_* tools. There are no prerequisites or exclusion criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_organization_settingsGet organization settingsA
Read-onlyIdempotent

Get this organization's display settings: currency_code (ISO 4217), timezone, date_format, company_name, org_category, and which optional modules are enabled (floorplans, infrastructure, level of service). Call this before presenting any monetary amount - costs, budgets and replacement values returned by every other tool are bare numbers with no currency attached, so stating one without checking risks labelling a Canadian tenant's money as US dollars. Also the fastest way to tell an empty module from one this organization does not have.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish readOnly, idempotent, non-destructive, non-open-world behavior, and the description adds context annotations cannot provide: that other tools return bare numbers without currency and that this tool is required before displaying monetary values. It also discloses the field-level payload and the module-enabled boolean semantics, which is significant 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?

Three sentences, front-loaded with the purpose and the field list, followed by the critical usage rule and a secondary diagnostic use. Every sentence carries distinct, actionable information with no repetition of name 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?

With no input parameters, no output schema, and safety annotations already covered, the description supplies the missing pieces: the exact returned fields, the cross-tool currency hazard, and the module-detection use case. An agent has everything needed to call it and interpret the result 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 spends its words on returned fields rather than parameters, which is appropriate for a no-argument getter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 this organization's display settings') and enumerates the exact fields returned: currency_code, timezone, date_format, company_name, org_category, and enabled modules (floorplans, infrastructure, level of service). It is immediately distinguishable from the many entity getters and listers 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?

Explicitly instructs when to call it: 'Call this before presenting any monetary amount,' with the consequence of not doing so (mislabeling currency). It also gives a second use case: distinguishing an empty module from one the organization does not have. There is no sibling alternative for organization settings, so no alternative-routing is needed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_partGet partA
Read-onlyIdempotent

Get detailed information about a specific part including location and stock levels. Amounts are bare numbers with no currency: call get_organization_settings for currency_code before stating one.

NameRequiredDescriptionDefault
idYesPart ID

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only/idempotent/non-destructive, so the bar is lower. The description adds genuinely non-obvious behavior beyond the annotations: monetary amounts are returned as bare numbers with no currency embedded, and a follow-up call is needed to interpret 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?

Two tight sentences with zero padding; the core purpose is front-loaded and the currency caveat is placed immediately after the content description it modifies.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence 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 gives the agent the key result shape (location, stock levels) plus the currency interpretation warning, which is what an agent needs to report values correctly. A little more on how missing parts are signaled would complete 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 (id) and schema coverage is 100%, with the UUID format and pattern fully documented in the schema. The description adds nothing further about the identifier, 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) and resource (part) and enumerates the payload contents (location, stock levels), which distinguishes it from the create/update/delete/list siblings. It does not explicitly name list_parts as the alternative, so it stops short of full sibling routing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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, actionable usage rule: amounts are bare numbers, so call get_organization_settings for currency_code before stating one. That is real when-to-use guidance involving another tool, though it doesn't say when to prefer this over list_parts.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_part_categoryGet part categoryB
Read-onlyIdempotent

Get a single part category by ID.

NameRequiredDescriptionDefault
idYesPart category ID

TDQS

B3.2/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 by structured data. The description adds nothing beyond that (no error behavior for a missing ID, no scoping/auth notes), which is acceptable for a simple read but earns only the 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?

One short front-loaded sentence with no filler. It is efficient, though so terse that it offers no structural enrichment.

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 single-param read tool with full annotation coverage there is no output schema and none is strictly needed, but the description does not indicate what a category record contains or what happens on an unknown ID, leaving 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 100% and the single 'id' parameter is documented in the schema with format and pattern constraints. The description only restates that identification is by ID, adding no format or semantics beyond the schema, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

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 (part category) with the scope limitation 'single ... by ID', which implicitly separates it from list_part_categories and the create/update/delete siblings. It does not name any sibling explicitly, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance, no prerequisites, no pointer to list_part_categories for browsing/discovery. The 'by ID' phrasing hints at the lookup use case but leaves the agent to infer it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_pm_scheduleGet PM scheduleA
Read-onlyIdempotent

Get detailed information about a specific PM schedule including tasks, resources, and linked assets. Amounts are bare numbers with no currency: call get_organization_settings for currency_code before stating one.

NameRequiredDescriptionDefault
idYesPM schedule ID

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds value beyond them by disclosing the shape of the returned data (tasks, resources, linked assets) and the important quirk that monetary amounts are bare numbers requiring a separate settings lookup.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences: purpose first, then the currency caveat. Every sentence earns its place and the most actionable warning is not buried. Slightly better than average sizing 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?

With no output schema available, the description carries the burden of describing the payload and does so at a summary level, plus flags a real formatting hazard. It omits error/not-found behavior and how to discover an ID, but for a one-parameter read tool it is largely complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single 'id' parameter is fully documented in the schema (type, UUID format, pattern). The description adds no additional semantics about the ID (e.g., where to obtain it), so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (get a PM schedule) and enumerates what the payload contains (tasks, resources, linked assets), which goes beyond a tautological restatement of the title. It does not explicitly distinguish itself from list_pm_schedules or get_compliance_pm_schedule, so an agent must infer the 'specific by ID vs. list' distinction from 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?

There is no explicit when-to-use/when-not-to-use guidance versus siblings such as list_pm_schedules or get_compliance_pm_schedule; usage is only implied by the required UUID parameter. It does, however, give one concrete cross-tool routing instruction (call get_organization_settings for currency_code), which is a partial usage rule.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_projectGet projectA
Read-onlyIdempotent

Get detailed project information including budget, progress, schedule variance, and linked sites. Amounts are bare numbers with no currency: call get_organization_settings for currency_code before stating one.

NameRequiredDescriptionDefault
idYesProject 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, so safety is covered. The description adds genuinely non-obvious behavioral context: monetary amounts are bare numbers with no currency, requiring a follow-up call before presenting them. No auth or error behavior is described, but the data-semantics caveat is high 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?

Two tight sentences with no filler: the returned content is front-loaded and the currency caveat follows. 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, the description carries the burden of describing what comes back and does so (budget, progress, schedule variance, linked sites), plus the currency caveat needed to interpret it. 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?

One parameter with 100% schema coverage — the schema fully documents the project id, including UUID format and pattern. The description adds nothing about the parameter, 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 plus the content it returns (budget, progress, schedule variance, linked sites), which separates it from the many get_project_* child getters. It never names a sibling explicitly, so it is clear but not fully differentiated by routing language.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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 conditional workflow instruction: call get_organization_settings for currency_code before stating an amount. It does not cover when to prefer this over list_projects or the child getters, nor any prerequisite beyond the obvious id, so no exclusions are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_project_assetGet project assetB
Read-onlyIdempotent

Get a single project asset assignment by ID.

NameRequiredDescriptionDefault
idYesProject asset ID

TDQS

B3.2/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 fully covered by structured data. The description adds only the 'single...by ID' scoping and no auth, error, or return-shape detail, so it contributes little beyond what annotations provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence with zero filler. Appropriately sized for a simple retrieve-by-ID tool, though it leans toward under-specification rather than tight conciseness.

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 trivial one-parameter read tool with annotations covering safety and a fully documented schema, the description is minimally adequate. No output schema exists, yet the description never hints at what a 'project asset assignment' record contains, 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% with one documented parameter ('Project asset ID'), so the schema carries the semantics. The description's 'by ID' merely restates the parameter with no added 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 (get) and resource (project asset assignment) scoped to a single record retrieved by ID. The word 'single' implicitly distinguishes it from the sibling list_project_assets, though it never names the 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?

Provides no when-to-use guidance, prerequisites, or alternatives, despite a large sibling set including list_project_assets and get_project. The agent must infer that this fetches one record rather than listing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_project_budget_itemGet project budget itemA
Read-onlyIdempotent

Get a single project budget item by ID. Amounts are bare numbers with no currency: call get_organization_settings for currency_code before stating one.

NameRequiredDescriptionDefault
idYesBudget item ID

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds a genuinely non-obvious behavioral trait the annotations cannot convey: returned amounts carry no currency and require a separate settings lookup to interpret.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences, front-loaded with the core action and followed immediately by the one caveat an agent must know before reporting numbers. No filler or restated title material.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence 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-record getter with full annotation coverage there is no output schema, so return-shape explanation is not required. The currency caveat covers the highest-risk ambiguity; only the set of returned fields is left unspecified, which is acceptable for this tool class.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single 'id' parameter is already documented as a UUID-format budget item ID. The description's 'by ID' adds cardinality context but no format, validation, or lookup-hint 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.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get a single project budget item') plus the retrieval key ('by ID'), which implicitly distinguishes it from the sibling list_project_budget_items. It stops short of naming that sibling explicitly, so an agent must infer the single-vs-list split.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a concrete usage instruction for the data it returns: amounts are unitless, so call get_organization_settings for currency_code before stating a figure. That is actionable context, though it offers no guidance on when to prefer this tool over list_project_budget_items.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_project_buildingGet project buildingC
Read-onlyIdempotent

Get a single project building assignment by ID.

NameRequiredDescriptionDefault
idYesProject building ID

TDQS

C2.9/5.0
Behavior2/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. The description adds only the word 'single' and 'by ID', which restates the required schema parameter rather than disclosing new behavior such as not-found handling or permission 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?

A single short sentence that front-loads the verb and resource with zero wasted clauses. It is efficient, though arguably under-specified for a getter in a 250+ tool surface rather than over-long.

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 one-parameter read tool with rich annotations, the description is minimally sufficient. With no output schema present, a brief note on what the assignment record contains or what happens on an invalid ID would have closed the 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 description coverage is 100% (the 'id' parameter is documented as a UUID 'Project building ID'), so the schema already carries the parameter semantics. The description's 'by ID' phrasing adds nothing beyond that, making the baseline 3 appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Get'), a specific resource ('a single project building assignment'), and the lookup key ('by ID'), so an agent knows exactly what this retrieves. However, it does not distinguish itself from the sibling list_project_buildings, leaving the singular-vs-collection distinction to be inferred 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 mention of alternatives, even though list_project_buildings is the obvious sibling for the opposite case. The agent must infer that this tool is for fetching one known record rather than enumerating many.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_project_commentGet project commentB
Read-onlyIdempotent

Get a single project comment by ID.

NameRequiredDescriptionDefault
idYesProject comment ID

TDQS

B3.4/5.0
Behavior2/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. The description adds no behavioral context beyond restating the operation, such as authentication needs, error behavior, or what the returned comment includes.

Agents need to know what a tool does to the world before 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 short sentence with zero waste. The core operation is front-loaded and no unnecessary detail is included.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence 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 one-parameter read tool with rich annotations and full schema coverage, the description is sufficient for an agent to call it correctly. It could optionally mention the return shape or related list sibling, but no output schema exists and the core operation is clear.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 'id' parameter is already documented as 'Project comment ID' with UUID format details. The description's 'by ID' adds no syntax or format meaning beyond the schema, so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get a single project comment by ID'). The word 'single' and 'by ID' distinguish it from list_project_comments and update/delete siblings, but it does not explicitly name any alternative.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implies the tool is used when retrieving one comment via its ID, but gives no explicit when-to-use guidance or comparison to siblings like list_project_comments or get_asset_comment. The intended usage is inferable from the phrase 'by ID'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_project_cost_snapshotGet project cost snapshotA
Read-onlyIdempotent

Get a single project cost snapshot by ID. Amounts are bare numbers with no currency: call get_organization_settings for currency_code before stating one.

NameRequiredDescriptionDefault
idYesProject cost snapshot ID

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so safety is covered. The description adds genuinely non-obvious behavior the annotations do not: returned amounts are bare numbers with no currency attached, plus the follow-up call needed to interpret 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?

Two short sentences, zero filler. The core purpose is front-loaded and the currency caveat follows immediately as supporting operational 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?

With no output schema, the description usefully compensates by disclosing the shape of the returned amounts and how to resolve currency. For a single-ID read tool with annotations covering safety, this is close to complete, though pagination/error behavior is not addressed (and is not really applicable 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% and the single 'id' parameter is fully documented (type, uuid format, pattern, description) in the schema. The description does not add any meaning about the ID beyond what the schema supplies, 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?

The description names a specific verb and resource ('Get a single project cost snapshot by ID'), and the word 'single' plus 'by ID' implicitly separates it from the sibling list_project_cost_snapshots. It stops short of naming that sibling explicitly, so it is clear but not maximally differentiated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a concrete prerequisite: call get_organization_settings for currency_code before stating a currency. That is actionable when-guidance naming an alternative tool, though there are no when-not conditions or further routing between sibling get_* tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_project_documentGet project documentC
Read-onlyIdempotent

Get a single project document by ID.

NameRequiredDescriptionDefault
idYesProject document ID

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=false, and destructiveHint=false, so the safety profile is fully covered. The description adds nothing beyond the name on failure behavior, whether the ID is validated, or what the document payload contains.

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 short, front-loaded sentence with no filler. It is appropriately sized for a trivial lookup tool, though it is so terse that it verges on under-specification rather than efficient conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple single-record read with no output schema and full annotation coverage, the description is minimally adequate. It omits what a 'project document' actually is (metadata vs. file link) and how it relates to list_project_documents and update_project_document, which an agent would need in a 200+ tool catalogue.

Complex tools with many parameters or behaviors need more documentation. Simple tools 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; the schema documents the UUID format and pattern, and the description's 'by ID' merely restates it. Baseline 3 is appropriate when the schema carries all parameter meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get a single project document') plus a scoping detail ('by ID'), so the agent knows it is a single-record fetch rather than a list. However, it does nothing to distinguish itself from close siblings like list_project_documents, get_project_document_folder_template, or get_project_document_folder_template variants.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance, no prerequisites, and no mention of alternatives such as list_project_documents for enumerating documents or update_project_document for changes. The agent must infer the context from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_project_document_folder_templateGet project document folder templateA
Read-onlyIdempotent

Get a project document folder template by ID, including its folder structure.

NameRequiredDescriptionDefault
idYesTemplate ID

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this as a read-only, idempotent, non-destructive, non-open-world operation. The description adds valuable return-content context by stating that the response includes the template's folder structure, which is not visible in the annotations or an 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?

A single, front-loaded sentence with no filler. It states the action, the lookup key, and the return scope efficiently.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence 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 retrieval tool with full schema coverage and rich annotations, the description is nearly complete: it says what is fetched and that folder structure is included. Minor gaps remain around error behavior (e.g., not-found handling) and pagination, but those are not critical 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% — the single 'id' parameter is fully documented in the schema as a UUID Template ID. The description's phrase 'by ID' adds no format or syntax detail beyond what the schema already 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.

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 ('Get a project document folder template') and clarifies the lookup key ('by ID'), which distinguishes it from the list_project_document_folder_templates sibling. It does not explicitly name that sibling or mention update/delete variants, but the purpose is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by 'by ID' — the agent can infer that an ID must be known and that a list operation should be used when it is not. However, the description states no explicit when-to-use, when-not-to-use, or alternative tool routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_project_infrastructure_assetGet project infrastructure assetA
Read-onlyIdempotent

Get a single project ↔ infrastructure feature link by ID.

NameRequiredDescriptionDefault
idYesProject infrastructure asset link ID

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 and repeatability profile is fully covered by structured data. The description adds nothing beyond that – no mention of behavior when the ID is unknown (e.g. 404 vs null) or of any authorization constraints – so it neither enriches nor contradicts the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One short sentence that front-loads the verb and the exact resource, with zero redundant or filler text. Nothing could be trimmed without losing 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 single-record read with complete annotations, one fully documented parameter, and no output schema to explain, the description is nearly sufficient. A brief note on what a link represents or the failure mode for a missing/foreign ID would make it complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%; the single 'id' parameter is already documented in the schema as the 'Project infrastructure asset link ID' with a UUID format and pattern. The description's 'by ID' adds no syntax or semantic 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.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb (Get) and resource (a single project ↔ infrastructure feature link), and clarifies the entity being fetched, which helps disambiguate from similarly named assets like get_project_asset or get_infrastructure_asset. It does not, however, explicitly contrast itself with the obvious sibling list_project_infrastructure_assets, 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 only implied: the phrase 'by ID' signals this is the lookup you use once you already hold the link's UUID, implicitly routing discovery to list_project_infrastructure_assets. There is no explicit when-to-use statement, no prerequisites, and no named alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_project_locationGet project locationC
Read-onlyIdempotent

Get a single project location assignment by ID.

NameRequiredDescriptionDefault
idYesProject location ID

TDQS

C2.9/5.0
Behavior2/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 by structured data. The description adds no behavioral context beyond that – no error behavior for an unknown ID, no statement about what a "location assignment" contains, and no scoping 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?

A single front-loaded sentence with zero filler. It is efficient, though it leans toward under-specification rather than true conciseness given the tool's many similarly named siblings.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter read tool with rich annotations and no output schema, the description is minimally sufficient. It stops short of clarifying what constitutes a "project location assignment" or how it relates to project and location entities, which is the main ambiguity in this large sibling family.

Complex tools with many parameters or behaviors need more documentation. Simple tools 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 with 100% schema description coverage, including a UUID format and pattern, so the schema fully documents it. The description's "by ID" merely restates what the schema provides, which is the expected baseline of 3 under high coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Get a single project location assignment by ID"), which is more precise than the raw tool name. However, it offers nothing to distinguish it from near-identical siblings such as get_project_site, get_project_building, or list_project_locations, so an agent must infer the distinction 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?

No when-to-use guidance is provided at all. The description never mentions the alternative list_project_locations, nor when a caller should retrieve a single assignment rather than listing them, leaving routing entirely to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_project_milestoneGet project milestoneB
Read-onlyIdempotent

Get a single project milestone by ID.

NameRequiredDescriptionDefault
idYesProject milestone ID

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is fully covered. The description adds only that it retrieves a single milestone by ID, a mild retrieval-scope trait, but no error handling, permissions, or not-found 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?

The description is one short sentence with no filler, and the key information (get single milestone by ID) is front-loaded. Every word earns its place for a simple retrieval tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple get tool with full schema coverage and annotations covering safety, the description states enough to invoke correctly. It lacks return details and usage alternatives, but given the low complexity and rich structured data, it is largely complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single parameter is documented with a UUID format in the schema. The description's 'by ID' adds no syntax or meaning beyond that, so the baseline score 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 names a specific verb ('Get') and resource ('project milestone'), and the word 'single' scopes it to one record, implicitly distinguishing it from list_project_milestones. It does not name the sibling alternative explicitly, but the purpose is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no when-to-use guidance or alternatives. It implies you need an ID but does not explain when to call this instead of list_project_milestones or update_project_milestone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_project_phaseGet project phaseA
Read-onlyIdempotent

Get a single project phase by ID.

NameRequiredDescriptionDefault
idYesProject phase ID

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. The description adds only the single-record scope and contributes no further behavioral context (no not-found 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence with the identifier semantics front-loaded and 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?

For a trivial one-parameter read tool with complete annotations and a fully described schema, the definition is nearly sufficient; only the absence of any note about not-found behavior or the returned payload 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% and the single 'id' parameter is fully documented with format and pattern in the schema. The description's 'by ID' merely echoes 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: 'Get a single project phase by ID.' The 'single ... by ID' phrasing distinguishes it implicitly from the sibling list_project_phases, but it does not name that 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 Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: fetching one phase requires a known ID, which suggests list_project_phases is the discovery path, but the description never says when to use this over the list tool or what happens if the ID is unknown.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_project_riskGet project riskB
Read-onlyIdempotent

Get a single project risk by ID, including mitigation and contingency plans.

NameRequiredDescriptionDefault
idYesProject risk ID

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, non-destructive, and closed-world, so the safety profile is covered. The description adds genuine value by disclosing that the response includes mitigation and contingency plans, but says nothing about missing-ID behavior or error handling.

Agents need to know what a tool does to the world before 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, front-loaded with the operation and scoped to a single record, with the return-content detail appended after. 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 compensates by noting the returned mitigation and contingency plans, and annotations carry the safety profile. For a simple read-by-UUID this is nearly complete, though a note on missing records would close the last 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 id parameter is fully documented (Project risk ID, UUID). The description's 'by ID' merely restates the schema, adding no meaning 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.

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 (project risk) with singular scope ('a single ... by ID'), which implicitly distinguishes it from the sibling list_project_risks. It does not name any sibling explicitly, so a 4 rather than 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'by ID' implies it is a lookup for one known record, but there is no explicit when-to-use, no statement about when to prefer list_project_risks instead, and no prerequisites or error conditions. Guidance is essentially absent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_project_siteGet project siteB
Read-onlyIdempotent

Get a single project site assignment by ID.

NameRequiredDescriptionDefault
idYesProject site ID

TDQS

B3.2/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 a closed world, so the safety profile is fully covered without the description. The description adds nothing beyond that — no note on permissions, error behavior for a missing ID, or what the assignment record contains.

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 or redundancy. It is arguably under-specified rather than wasteful, but nothing in it fails to earn its place.

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 single-parameter read-only getter with complete annotations and full schema coverage, the description is minimally sufficient. A brief note on what a 'project site assignment' represents would close the remaining gap, and no output schema exists to cover return 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?

There is a single parameter (id) with 100% schema description coverage, so the schema already documents its type, UUID format, and pattern. The description only restates 'by ID' without adding format or lookup semantics, matching the baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Get) and resource (project site assignment) plus the lookup key (ID), so it is clearly distinguishable from list_project_sites and create_project_site. It does not explicitly name those siblings, but the singular/ID framing conveys 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 Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this versus list_project_sites, nor any prerequisites, pagination, or authorization context. The verb 'Get' implies read-by-ID, but nothing steers the agent between this and alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_project_systemGet project systemC
Read-onlyIdempotent

Get a single project system assignment by ID.

NameRequiredDescriptionDefault
idYesProject system ID

TDQS

C2.9/5.0
Behavior2/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, fully covering the safety profile. The description contributes essentially nothing beyond that structured data — it merely restates the name and adds no context on permissions, errors for unknown IDs, or record 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?

A single short, front-loaded sentence with no filler. It is efficient, though its brevity edges toward under-specification rather than being a model of compact completeness.

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 trivial single-record lookup with full annotation coverage and a complete one-param schema, the description is minimally adequate. It leaves the reader without any notion of what a 'project system assignment' contains or when this lookup is appropriate, but the structured fields carry most of the load.

Complex tools with many parameters or behaviors need more documentation. Simple tools 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 a single parameter at 100% schema description coverage, the schema already documents 'id' as the Project system ID with format and pattern. The description adds no additional meaning (e.g., where to obtain the ID), 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 ('project system assignment'), and scope ('single ... by ID'), which cleanly separates it from the bulk create/list variants. It does not, however, distinguish itself from the other closely-named getters (get_project_system_class, get_project_system_group), 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 Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus list_project_systems or the sibling get_project_system_class/group getters. The 'by ID' phrasing implies a lookup context, but the choice between alternatives is left entirely to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_project_system_classGet project system classB
Read-onlyIdempotent

Get a single project system class assignment by ID.

NameRequiredDescriptionDefault
idYesProject system class ID

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint=false, so the safety profile is fully covered by structured data. The description only adds that it returns a single record keyed by ID, which is modest value 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?

One efficient sentence with the resource and key front-loaded and zero filler. It is appropriately sized for a trivial single-resource fetch, though it is arguably so terse that it omits usable context.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence 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 lookup with full annotation coverage, a fully documented single parameter, and no output schema to explain, the description is nearly sufficient. The only gap is the absence of any error/not-found or sibling-routing context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 'id' parameter is documented in the schema with format and pattern constraints. The description's 'by ID' phrase adds no syntax or meaning beyond what the schema already provides, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

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 (a single project system class assignment) with the retrieval key (by ID). It is clearly a single-item fetch, implicitly contrasted with list_project_system_classes, though the sibling is never named.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this versus list_project_system_classes, and no prerequisites or error conditions (e.g. what happens if the ID doesn't exist). The ID-only lookup is inferable from the parameter, but nothing is stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_project_system_groupGet project system groupB
Read-onlyIdempotent

Get a single project system group assignment by ID.

NameRequiredDescriptionDefault
idYesProject system group ID

TDQS

B3.2/5.0
Behavior2/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 adds no behavioral context beyond that – nothing about missing-ID/404 behavior, required permissions, or what the assignment record contains – so it contributes nothing on this dimension.

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 redundant or filler content. It is arguably too terse given the sibling tool set, but there is no wasted verbiage to trim.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple single-record read with complete schema coverage and full annotations, the definition is minimally sufficient. With no output schema, an agent still gets no indication of the returned fields or failure modes, leaving a small but real gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%: the single 'id' parameter is typed as a UUID with a regex pattern and the label 'Project system group ID'. The description adds only the words 'by ID', 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 (project system group assignment), and cardinality/selector (single, by ID), which cleanly separates it from the sibling list_project_system_groups. It does not explicitly name that sibling or any other alternative, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'a single ... by ID' implies the point-lookup use case versus the sibling list tool, but no when-to-use, when-not-to-use, or prerequisite conditions are stated. 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.

get_project_taskGet project taskA
Read-onlyIdempotent

Get a single project task by ID, including cost and hour tracking. Amounts are bare numbers with no currency: call get_organization_settings for currency_code before stating one.

NameRequiredDescriptionDefault
idYesProject task ID

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only, idempotent, non-destructive, and closed-world behavior. The description adds useful data semantics beyond those: the result includes cost and hour tracking, and monetary amounts are uncurrencied bare numbers requiring a separate currency lookup.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the core purpose and followed by a specific currency-handling caveat. No filler or redundant restatement of the title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple single-record get with rich annotations, a fully described one-parameter schema, and no output schema, the description supplies the key missing behavioral context: what the result contains and how to interpret monetary amounts.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 'id' parameter is already documented as a project task ID. The description repeats 'by ID' but adds no further syntax, format, or lookup detail beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Get a single project task by ID.' It also distinguishes the single-record operation from the many list/get siblings by emphasizing retrieval by ID.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly implies use when a single project task ID is known, and gives an important usage prerequisite: call get_organization_settings to obtain currency_code before stating monetary amounts. It does not explicitly mention when to use list_project_tasks instead, so it falls 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_project_task_dependencyGet project task dependencyB
Read-onlyIdempotent

Get a single project task dependency by ID.

NameRequiredDescriptionDefault
idYesProject task dependency ID

TDQS

B3.2/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 adds nothing beyond that, but adds nothing wrong either.

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 short, front-loaded sentence with zero filler. Appropriately sized for a trivial single-record fetch, though it is too terse to be maximally useful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only lookup with full annotation coverage and a fully documented parameter, the definition is minimally adequate. With no output schema, it could have said what a dependency record contains, but nothing required 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?

Single 'id' parameter with 100% schema description coverage (UUID format and pattern documented in the schema). The description adds no format or sourcing guidance beyond what the schema already provides; baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clear verb+resource ('Get a single project task dependency') with the lookup key ('by ID') specified. It distinguishes itself functionally from the sibling list_project_task_dependencies by the word 'single', though it does not name 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 Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance, no prerequisites, and no mention of the alternative list_project_task_dependencies tool. Usage is only implied by 'by ID'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_project_team_memberGet project team memberB
Read-onlyIdempotent

Get a single project team member by ID.

NameRequiredDescriptionDefault
idYesProject team member ID

TDQS

B3.3/5.0
Behavior2/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, fully covering the safety profile. The description adds nothing beyond that — no note on what happens for an unknown/inaccessible ID (error vs. empty), and no authorization context. With the bar lowered by annotations, this is still a near-zero contribution.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler; the verb and key qualifier come first. It is appropriately sized for a trivial read, though it is too sparse to earn a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter, single-record read tool with full schema coverage and annotations carrying the safety profile (no output schema to explain), the description supplies the essential operation and scope. Nothing critical is missing for correct invocation of such a simple 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?

There is one parameter at 100% schema description coverage, and the schema already documents the UUID format and pattern. The description restates only 'by ID' and adds no format, scoping, or identifier-source guidance beyond the schema — baseline 3 for a single fully documented parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Get') and resource ('project team member') with a scope qualifier ('single ... by ID') that implicitly distinguishes it from the sibling list_project_team_members. It does not explicitly name that sibling, but the singular/ID framing is enough for an agent to route correctly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: 'by ID' signals a lookup when the identifier is already known, in contrast to the list sibling. There is no explicit when-to-use or when-not-to-use statement, and no mention of prerequisites such as needing the member to belong to an accessible project.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_project_time_entryGet project time entryB
Read-onlyIdempotent

Get a single project time entry by ID.

NameRequiredDescriptionDefault
idYesTime entry ID

TDQS

B3.4/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 adds no further behavioral context such as error behavior for a missing/invalid ID, which is the only notable gap left for a read tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single eight-word sentence with the resource and lookup key front-loaded. Nothing extraneous and no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a trivial single-parameter read tool with complete schema coverage and read-only annotations, the description is largely sufficient. Only minor gaps remain (behavior on a non-existent ID, relationship to the list variant), which is acceptable at this complexity level.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 'id' parameter is documented with its type, UUID format and pattern, so the schema does the heavy lifting. The description only restates 'by ID' and adds no format or constraints beyond what is already structured.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get a single project time entry') plus the lookup key ('by ID'), so the agent knows it is a point fetch rather than a list. It does not explicitly name the sibling list_project_time_entries, so differentiation is implied by 'single' 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 Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance, no prerequisites, and no mention of the alternative (list_project_time_entries) for retrieving multiple entries. The agent must infer that this is the right tool only when it already has a specific ID.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_project_updateGet project updateB
Read-onlyIdempotent

Get a single project update by ID.

NameRequiredDescriptionDefault
idYesProject update ID

TDQS

B3.4/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 by structured data. The description adds no behavioral context beyond that (e.g., what happens if the ID is unknown), so it neither adds value nor contradicts.

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 short sentence with no filler and the key qualifier ('by ID') placed at the end. Efficient, though it is arguably too terse to be maximally useful.

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 one-parameter read tool this is close to adequate, but with no output schema anywhere the agent gets no indication of what a project update contains or how a missing/unauthorized ID behaves. A sentence on the return shape would close the gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single 'id' parameter is documented at 100% schema coverage with uuid format and a regex pattern, so the schema carries the semantics. The description's 'by ID' merely restates the schema; baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Get') and resource ('a single project update') with the lookup key ('by ID'), so the agent knows exactly what it does. It does not name or contrast itself with the sibling list_project_updates, 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 phrase 'a single project update by ID' implies this is the single-record fetch as opposed to list_project_updates, and no exclusions or alternatives are stated explicitly. Usage is inferable but never spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_purchase_orderGet purchase orderA
Read-onlyIdempotent

Get detailed purchase order information including amount, status, vendor, and linked project. Amounts are bare numbers with no currency: call get_organization_settings for currency_code before stating one.

NameRequiredDescriptionDefault
idYesPurchase order ID

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive safety, so the bar is lower. The description adds real behavioral value beyond them: amounts are bare numbers and currency requires a separate call, which prevents an agent from mis-stating monetary 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?

Two tightly scoped sentences, front-loaded with what the tool returns and followed by the one non-obvious data caveat. 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 read-only single-record tool with annotations covering safety and no output schema, the description lists the salient return fields and the currency caveat, which is enough to use it correctly. It stops short of describing pagination or nested structures, but none appear relevant 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?

The single `id` parameter is fully documented in the schema (100% coverage), so the baseline is 3. The description adds no syntax or format detail about the id beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Get) and resource (purchase order) and enumerates the returned fields (amount, status, vendor, linked project). It clearly reads as the single-record counterpart to list_purchase_orders, though it 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?

No explicit when-to-use versus list_purchase_orders or get_purchase_order_line. The currency note does give a useful follow-up workflow step (call get_organization_settings), which is implied usage guidance rather than a selection rule.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_purchase_order_lineGet purchase order lineA
Read-onlyIdempotent

Get one purchase order line item by ID. unit_cost is a bare number with no currency: call get_organization_settings for currency_code before stating one.

NameRequiredDescriptionDefault
idYesPurchase order line ID

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), so the description is not asked to carry that burden. It does add non-obvious behavioral context: unit_cost is a bare number with no currency, plus the follow-up call needed to interpret it. It doesn't describe return shape or error behavior, so not a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no filler: the retrieval purpose leads and the unit_cost/currency caveat 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 simple single-entity getter with no output schema, the description covers the one genuinely surprising detail (currency-less unit_cost) and how to resolve it. It leaves general return-field composition unaddressed, but that gap is 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?

There is a single required 'id' parameter at 100% schema description coverage, so the schema fully documents the input. The description adds no format or sourcing detail for the ID beyond what the schema already gives, 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?

The description states a specific verb ('Get') plus resource ('purchase order line item') and qualifies it with 'one ... by ID', which cleanly separates this single-fetch tool from the sibling list_purchase_order_lines. An agent can pick it without inspecting the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It establishes the when: fetching a single line by ID, and adds a concrete cross-tool instruction (call get_organization_settings for currency_code before stating a currency). It doesn't name the list/update siblings or any exclusions, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_service_areaGet service areaA
Read-onlyIdempotent

Get a single service area by ID, including linked system classes and sites.

NameRequiredDescriptionDefault
idYesService area ID

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds real value beyond them by disclosing that the response includes linked system classes and sites, which is important since there is no output schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence that is front-loaded with the operation and scope, with zero filler. The trailing clause about linked system classes and sites is the highest-value information and costs only a few 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?

For a read-only single-entity fetch with full schema coverage and no output schema, the description covers the operation, the key, and the notable nested return content. It stops short of error behavior (e.g., unknown ID) or permission notes, but these are minor for 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%: the single 'id' parameter is documented as 'Service area ID' with a UUID format and pattern. The description only restates 'by ID' and adds no format, source, or lookup guidance, 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 ('Get') and resource ('a single service area') plus the lookup key ('by ID'), so the agent knows exactly what it retrieves. It does not name a sibling like list_service_areas to distinguish the single-fetch from the list-fetch, 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?

Usage is only implied: 'by ID' suggests fetching one known record rather than enumerating, which contrasts implicitly with list_service_areas. There is no explicit when-to-use statement, no precondition about where the ID comes from, and no named alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_siteGet siteA
Read-onlyIdempotent

Get detailed information about a specific site including address and description. Amounts are bare numbers with no currency: call get_organization_settings for currency_code before stating one.

NameRequiredDescriptionDefault
idYesSite ID

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish readOnlyHint, idempotentHint and non-destructive behavior, so the bar is lower. The description adds genuinely useful context the annotations do not cover: returned amounts are bare numbers with no currency, and currency_code must be fetched separately. That is a meaningful behavioral caveat for an agent reporting values.

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 core purpose front-loaded and the currency caveat second. No filler, though the currency note is somewhat tangential to a 'get site' call and slightly dilutes focus.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple single-record read with full annotation coverage and no output schema, the description covers purpose, key returned fields, and the currency caveat. It is largely self-sufficient; only sibling differentiation and any not-found/error behavior are absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With a single id parameter at 100% schema description coverage, the schema fully documents the input ('Site ID', uuid format/pattern). The description adds nothing about the id itself, 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 ('Get detailed information about a specific site') and names the fields returned (address, description). It distinguishes itself implicitly from list_sites by scoping to 'a specific site', but never names the sibling, so it stops short of full differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use or when-not-to-use guidance relative to list_sites or get_site_fci_history_entry. The second sentence does route the agent to another tool (get_organization_settings) when currency context is needed, which is a useful cross-tool instruction, but it is a data-interpretation rule rather than invocation guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_site_fci_history_entryGet site FCI history entryB
Read-onlyIdempotent

Get a single site FCI history entry by ID.

NameRequiredDescriptionDefault
idYesFCI history entry ID

TDQS

B3.4/5.0
Behavior2/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. The description adds no behavioral context beyond what the structured annotations provide, such as return shape, pagination, or lookup 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?

A single, front-loaded sentence with no wasted words. It is appropriately sized for a simple single-record lookup tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a low-complexity one-parameter read tool with rich annotations, the description is nearly sufficient. It could clarify the return shape or common lookup failure behavior, but with no output schema required, the core intent is complete enough.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already documents the single 'id' parameter at 100% coverage, including its UUID format and meaning. The description's 'by ID' adds no syntax or semantic detail 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 (get), resource (site FCI history entry), and scope (single, by ID). This clearly distinguishes it from list_site_fci_history (multiple entries) and show_site_fci_trend (trend view).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance, no exclusions, and no named alternatives. The phrase 'by ID' implies the ID requirement but does not tell the agent when to choose this over list_site_fci_history or other get_* history tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_system_los_targetGet system LoS targetA
Read-onlyIdempotent

Get a single system LoS target by ID. base_target is the organization-wide base for that system and metric, not what any one building is held to (list_system_los_targets explains the criticality adjustment). fci, asset_condition_avg and asset_past_useful_life_pct are 0-100 and risk_score_avg is 0-25; condition is higher-is-better, the others lower-is-better. Not money.

NameRequiredDescriptionDefault
idYesSystem LoS target ID

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover readOnly/idempotent/non-destructive safety, so the bar is lower. The description adds genuinely useful behavioral context: base_target is the org-wide base rather than a building-level value, and it clarifies that the fields are not currency ('Not money'), which meaningfully shapes how the values should be interpreted.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the purpose, then dense value-adding semantics about the returned fields and units. Each sentence carries information, though the field-range enumeration is slightly list-like and could be tighter.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description's explanation of field ranges (fci/asset_condition_avg 0-100, risk_score_avg 0-25), directionality (higher/lower-is-better), and the base_target meaning does the work of clarifying return values. It is complete enough for an agent 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?

Schema coverage is 100% with a single well-documented 'id' parameter. The description merely restates 'by ID' without adding format, validation, or lookup guidance beyond the schema, so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Get) and resource (a single system LoS target) with scope (by ID), which cleanly separates it from list_system_los_targets. It does not explicitly contrast with the other single-get LoS siblings (get_infrastructure_los_target, get_los_proposed_target), so it stops short of full sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description cross-references list_system_los_targets for the criticality-adjustment explanation, which gives useful context, but it never states when to use this direct get versus alternatives. Usage is only implied by the fact that it fetches one record by ID.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_userGet userA
Read-onlyIdempotent

Get a specific organization member by their user ID. Returns name, email, and role. Requires users:read scope.

NameRequiredDescriptionDefault
idYesUser ID (Clerk user ID string)

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover readOnly, idempotent, non-destructive and closed-world behavior, so the bar is lower; the description still adds the auth scope requirement and the returned fields (name, email, role). It does not describe behavior when the ID is unknown, 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, each carrying distinct payload (identity of the lookup key, return contents, permission requirement), with the verb+resource front-loaded and no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter read tool with no output schema, the description is nearly complete: it names the scope requirement and the returned fields, so an agent knows what it gets back. Error/not-found behavior is unstated, which is a minor omission.

Complex tools with many parameters or behaviors need more documentation. Simple tools 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 string parameter at 100% schema coverage, with the schema already documenting it as a Clerk user ID. The description's phrase 'by their user ID' adds no format or syntax 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.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get a specific organization member by their user ID') and implies single-record retrieval as opposed to the sibling list_users. It does not explicitly name an alternative tool, so differentiation is by inference rather than declaration, keeping it just below a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description supplies a prerequisite ('Requires users:read scope'), which is real guidance, but says nothing about when to use this versus list_users or how to obtain a user ID. Usage is implied by 'specific ... by their user ID' only.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_vendorGet vendorA
Read-onlyIdempotent

Get detailed vendor information including contact details, address, and website.

NameRequiredDescriptionDefault
idYesVendor ID

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. The description adds the content shape (contact details, address, website) but says nothing about not-found/error behavior or permissions. Modest added value over 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?

One front-loaded sentence with no filler; the purpose and the returned content are conveyed 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?

With no output schema, the description usefully enumerates the main returned fields, which is what an agent needs for a simple single-entity fetch. A note on missing-ID or error handling would make it fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one parameter (id, UUID) with 100% schema description coverage, so the schema fully documents it. The description adds no additional semantics such as where to obtain the ID or accepted formats. Baseline 3 applies when the schema carries the load.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Get detailed vendor information') and enumerates the returned fields, making it clearly distinct from list_vendors and update_vendor. It does not name any sibling explicitly, but the singular-resource retrieval is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the verb 'Get' and the required id, so an agent can infer this is a single-record fetch. However, there is no explicit guidance on when to prefer this over list_vendors or get_vendor_site_assignment, and no stated prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_vendor_site_assignmentGet vendor site assignmentA
Read-onlyIdempotent

Get a single vendor site assignment by ID, including vendor and site names.

NameRequiredDescriptionDefault
idYesVendor site assignment ID

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, and destructiveHint=false, so the safety profile is fully covered by structured data. The description adds only that the result includes vendor and site names, which is mild but genuine extra context; it says nothing about missing-ID/error behavior or permissions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence that identifies the operation, the lookup key, and the response content with no filler. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so the description compensates by noting that vendor and site names are included in the result. For a simple one-parameter read tool with full annotation coverage, this is nearly complete, though it omits error behavior for a nonexistent ID.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and there is a single required id parameter, so the schema already documents the input fully. The description's 'by ID' adds no format or syntax detail beyond the schema, making the baseline of 3 appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get a single vendor site assignment') and scopes it to lookup 'by ID', which implicitly separates it from the sibling list_vendor_site_assignments. It does not name the sibling explicitly, so it lacks the extra disambiguation that would push it to 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 'by ID' phrasing implies the retrieval use case, but there is no explicit statement of when to use this versus list_vendor_site_assignments or get_vendor. Guidance is only inferable from the name and description, not stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_work_orderGet work orderA
Read-onlyIdempotent

Get detailed information about a specific work order by its ID, including description, dates, costs, and completion details. Amounts are bare numbers with no currency: call get_organization_settings for currency_code before stating one.

NameRequiredDescriptionDefault
idYesWork order ID

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 behavior. The description adds a valuable data-interpretation caveat: amounts are bare numbers with no currency, and it names get_organization_settings as the prerequisite for currency_code, which is behavior an agent cannot infer from the schema or annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the core action and scope; the second sentence adds only necessary currency context. No redundant or filler text.

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 by-ID get with no output schema, the description is complete: it names the returned detail categories and addresses the non-obvious currency representation. Annotations already cover the safety profile, so nothing needed for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the sole id parameter is documented as a UUID with description 'Work order ID'. The description adds no syntax, format, 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 (get) and resource (work order) and scope (by ID), plus the fields returned (description, dates, costs, completion details). It does not explicitly name or distinguish itself from the many sibling get_* and list_work_orders tools, so it stops short of 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implies retrieval by ID, which is clear for a get tool, but gives no explicit when-to-use guidance versus list_work_orders or related get_work_order_comment/schedule tools, and no exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_work_order_commentGet work order commentA
Read-onlyIdempotent

Get a single work order comment by ID.

NameRequiredDescriptionDefault
idYesWork order comment ID

TDQS

A3.6/5.0
Behavior2/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 no behavioral context beyond the annotations, such as error handling for invalid IDs, permission requirements, or return 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?

The description is a single, front-loaded sentence with no padding. Every word earns its place for such a simple retrieval tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-by-ID tool with rich annotations and a fully described single parameter, the description is nearly complete. It could optionally mention the return object or error behavior, but no output schema exists and the core operation is clear.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 'id' parameter is fully documented as a UUID with a clear description. The description adds only 'by ID', which does not extend the schema semantics, 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 ('Get'), resource ('work order comment'), and scope ('single ... by ID'). This clearly distinguishes it from sibling list_work_order_comments and from mutation tools like update_work_order_comment.

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 'by ID' implies the tool is used when a work order comment ID is already known, but there is no explicit when-to-use guidance, no named alternative such as list_work_order_comments, and no conditions for choosing this over a list operation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_work_order_scheduleGet work order scheduleA
Read-onlyIdempotent

Get a single work order schedule entry by ID.

NameRequiredDescriptionDefault
idYesWork order schedule ID

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, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered elsewhere. The description adds only the 'single entry' cardinality hint and nothing about error behavior when the ID is unknown or 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?

One short sentence, front-loaded with the verb and resource, with zero filler. Nothing could be removed without losing meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a trivial single-parameter read with rich annotations, the definition is workable, but there is no output schema and the description never indicates what a schedule entry contains or what happens on a not-found ID. A brief note on the return shape would close the 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 description coverage is 100% and the single 'id' parameter is documented with format uuid and a regex pattern, so the description cannot add much. It confirms the ID is the schedule's identifier but adds no syntax or format detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get a single work order schedule entry') plus the lookup key ('by ID'), which is precise enough to distinguish it from list_work_order_schedules. It stops short of naming the sibling or contrasting the singular/plural read paths 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: the agent can infer this is the by-ID lookup rather than the list endpoint, but there is no explicit 'use this when you have an ID, use list_work_order_schedules otherwise' guidance or any prerequisite/permission note. Adequate but with a clear gap.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_work_requestGet work requestA
Read-onlyIdempotent

Get detailed work request information including description, attachments, and processing status.

NameRequiredDescriptionDefault
idYesWork request ID

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and a closed-world scope, so the safety profile is covered. The description adds only the returned field surface (description, attachments, processing status); it says nothing about behavior when the ID is unknown or stale, so with annotations doing the heavy lifting a 3 is right.

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 verb and resource lead and the field enumeration follows. It is efficient, though the field list is the only content and the sentence does little more than that.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence 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 usefully names the returned content, and for a single-ID getter that is close to sufficient. It omits error/not-found behavior and any note on related tools, keeping 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 100% schema description coverage and a single 'id' parameter documented as 'Work request ID' with a UUID pattern, the schema fully carries the parameter burden. The description adds no format, sourcing, or lookup guidance beyond it, so the 3 baseline 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 ('Get detailed work request information') and enumerates the payload (description, attachments, processing status), which separates it from create/update/delete_work_request. It does not explicitly distinguish itself from the sibling list_work_requests, so it stops short of the 5 bar.

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: 'detailed work request information' plus a required UUID id signals a single-record lookup versus the list tool, but there is no explicit when-to-use, when-not-to-use, or named alternative. Adequate but with a clear gap.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_asset_bettermentsList asset bettermentsA
Read-onlyIdempotent

List betterments - capital work that extended a facility asset's life, such as an elevator modernization or a boiler retube. Each records what the work cost (capitalized_amount), how much service life it bought (added_life_years), and when it went into service (occurred_on). A betterment re-bases the asset's depreciation from its own date and never changes the asset's original in-service date. Filter by asset_id, project_id or work_order_id. Amounts are bare numbers with no currency: call get_organization_settings for currency_code before stating one.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
asset_idNoFilter by asset ID
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.
project_idNoFilter by the project that delivered it
work_order_idNoFilter by the work order that delivered it

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 bar is lower, and the description adds meaningful domain behavior beyond them: a betterment re-bases depreciation from its own date and never changes the original in-service date. It stops short of return-shape or pagination behavior, though the currency caveat is a genuinely useful operational note.

Agents need to know what a tool does to the world before 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 definition, then attributes recorded fields, then filters, then the currency caveat. Every sentence earns its place with no redundant or filler 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 no output schema, the description carries the return-value burden and does so by naming capitalized_amount, added_life_years, and occurred_on. Combined with filter guidance and the cross-tool currency instruction, 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 all five parameters including the filters named in the description. The description merely restates the filter fields (asset_id, project_id, work_order_id) without adding format or syntax detail, so it earns 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 ('List') and resource ('betterments'), then defines the resource concretely with domain examples ('elevator modernization', 'boiler retube'). An agent can distinguish it from siblings like list_asset_costs or list_assets 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 filtering context (filter by asset_id, project_id or work_order_id) and routes to a sibling (get_organization_settings for currency_code). It lacks explicit when-to-use versus list_asset_costs or when-not-to-use guidance, but the operational context is solid.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_asset_commentsList asset commentsB
Read-onlyIdempotent

List comments on assets. Filter by asset_id to get comments for a specific asset.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
asset_idNoFilter by asset ID
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is fully covered. The description adds no behavioral context such as pagination behavior, return format, or auth requirements, so it earns little credit beyond the structured metadata.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the core purpose. The second sentence is slightly redundant with the schema's asset_id description but still concise overall.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list tool, the description plus rich annotations and fully documented parameters provide enough to call the tool correctly. The lack of output schema and any mention of return fields or pagination behavior is a minor gap, but not critical for this tool type.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 each parameter documented in the input schema. The description mentions only the asset_id filter, which is already covered, adding no extra meaning 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 the verb 'List' and resource 'comments on assets', making the core function clear. However, it does not distinguish this tool from similar sibling list tools like list_infrastructure_asset_comments or list_work_order_comments, so an agent must rely on the name to disambiguate.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides a single usage hint: 'Filter by asset_id to get comments for a specific asset.' There is no guidance on when to use this tool versus alternatives or any prerequisites, leaving the agent to infer context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_asset_condition_assessmentsList asset condition assessmentsA
Read-onlyIdempotent

List point-in-time condition assessments recorded against assets. Filter by asset, assessor, method, condition score range, or assessment date range. Condition scores are 0-100: 85+ Excellent, 70-84 Good, 55-69 Fair, 40-54 Poor, below 40 Critical. Amounts are bare numbers with no currency: call get_organization_settings for currency_code before stating one.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
methodNoFilter by method (visual | detailed | vendor)
asset_idNoFilter by asset ID
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.
assessor_idNoFilter by assessor user ID
condition_maxNoMaximum condition score (0-100)
condition_minNoMinimum condition score (0-100)
assessed_on_toNoFilter assessments on/before this date (YYYY-MM-DD)
assessed_on_fromNoFilter assessments on/after this date (YYYY-MM-DD)

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 and openWorldHint=false, so safety is covered. The description adds genuinely useful behavioral context beyond that: assessments are point-in-time snapshots, scores are 0-100 with named bands, and currency must be resolved via get_organization_settings before any amount 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with purpose, then filters, then the interpretive and cross-tool notes. No filler and nothing repeated from the schema; every sentence carries information an agent would otherwise have to guess.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 9-parameter read-only list tool with no output schema, the description is nearly sufficient: purpose, filters, score semantics and the currency prerequisite are all present. It omits result ordering and any note on default result volume, minor gaps given annotations already establish the safe-read profile.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning on top of the raw fields: the 85+ Excellent / 70-84 Good / 55-69 Fair / 40-54 Poor / below 40 Critical scale for condition_min and condition_max, and the bare-number currency convention. That is interpretation the schema does not provide.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 point-in-time condition assessments recorded against assets.' The plural 'List' plus 'point-in-time' framing cleanly separates it from the singular get_asset_condition_assessment and from create/update/delete siblings without needing to name them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description enumerates the filter dimensions (asset, assessor, method, condition score range, assessment date range), which tells the agent when this tool applies. It does not explicitly say when this is preferable to get_asset_condition_assessment for a single record, 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.

list_asset_costsList asset costsA
Read-onlyIdempotent

List asset cost records - this is what the AssetLab UI shows on the main "Expenses" page (top-level nav). Each record includes amount, cost_date, category (Repair, PM, Operation, Replacement, Decommission, Other), description, invoice_number, po_number, and links to asset/site/building/work_order. Distinct from list_expenses, which returns project-scoped expenses without invoice/PO fields. Filter by asset, site, category, or work order. Amounts are bare numbers with no currency: call get_organization_settings for currency_code before stating one.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
site_idNoFilter by site ID
asset_idNoFilter by asset ID
categoryNoFilter by cost category
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.
work_order_idNoFilter by work order 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, so the safety profile is covered. The description earns credit for adding non-obvious behavior: this mirrors the UI Expenses page, amounts are currency-less bare numbers requiring get_organization_settings, and all pages are fetched automatically.

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 but front-loaded: identity, UI anchor, fields, sibling differentiation, filters, and the currency caveat in a few tight sentences. Slightly listing-heavy, 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 no output schema, the description responsibly enumerates returned fields and flags the currency interpretation trap. Pagination is deferred to the schema. Complete for a list tool, though it could note anything about default ordering or missing-data cases.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description restates the filterable fields (asset, site, category, work order) that the schema already documents, and its category list even includes 'Other', which is absent from the schema enum — a minor mismatch rather than 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+resource ('List asset cost records'), anchors it to a concrete UI location ('Expenses' page), and enumerates the returned fields. It explicitly distinguishes itself from the sibling list_expenses, 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 (list_expenses) and the differentiator (project-scoped expenses without invoice/PO fields), and lists the filter dimensions. It gives clear context but stops short of an explicit 'use this when / use the other when' rule.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_asset_documentsList asset documentsA
Read-onlyIdempotent

List asset documents (O&M manuals, warranties, specs, etc.). Filter by asset_id or category.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
searchNoSearch by name
asset_idNoFilter by asset ID
categoryNoFilter by document category
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.

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, and destructiveHint=false, so the safety profile is fully covered. The description adds only the document-type examples and says nothing about result volume or pagination implications beyond what the schema states; adequate but thin given annotations carry the burden.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact sentences, purpose first, filter guidance second, zero filler. Front-loaded and easy to scan.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a no-required-param list tool with full schema coverage and annotations, the description tells the agent what it returns and how to narrow results. The only real gap is sibling routing given the large family of parallel list_* document tools, and no output schema exists so return-field detail is not expected.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and every parameter is documented in the schema, so the baseline is 3. The description restates the asset_id and category filters without adding format hints, combination semantics, or search behavior beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb+resource ('List asset documents') with helpful examples of what a document is (O&M manuals, warranties, specs). It doesn't explicitly differentiate from near-siblings like list_infrastructure_asset_documents or list_contract_documents, but the resource name is clear enough to be actionable.

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?

'Filter by asset_id or category' implies a retrieval use case, but no when/when-not guidance or routing to alternatives. With many similar list_* document tools in the sibling set, an explicit alternative rule would have been valuable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_asset_lifecycle_eventsList asset lifecycle eventsA
Read-onlyIdempotent

List facility lifecycle strategy events - condition-triggered maintenance/rehabilitation events keyed on an asset-type scope (exactly one of asset_type_id or asset_type_group_id), never on individual assets. The events sharing one scope form that scope's strategy; an asset resolves its type's own strategy first, else its type group's. Filter by asset_type_id, asset_type_group_id, event_class, or is_active. Amounts are bare numbers with no currency: call get_organization_settings for currency_code before stating one.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.
is_activeNoFilter by active ("true") vs disabled ("false") events
event_classNoFilter by event type
asset_type_idNoFilter by asset type ID
asset_type_group_idNoFilter by asset type group ID

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds meaningful behavioral context: that events are scoped to asset-type (never individual assets), that strategy resolution falls back from type to type group, and that pagination is automatic. It does not describe error or empty-result behavior, but the added context exceeds what annotations provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tightly packed sentences: identity and scope first, resolution semantics second, filters and the currency caveat last. Every clause carries information; nothing is repeated 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 zero-required-parameter read-only list tool, the description covers identity, scope semantics, filter fields, resolution precedence, pagination behavior, and even a downstream currency caveat. It does not need to explain return values since no output schema exists, though a hint about what a lifecycle event record contains would be a marginal plus.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all six parameters including the pagination defaults and enum meanings. The description reiterates the filterable fields and adds the constraint that exactly one scope ID may be given, which maps to a real semantic (asset_type_id XOR asset_type_group_id) not fully spelled out in the schema. This is a slight enhancement over 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 states a specific verb and resource ('List facility lifecycle strategy events') and immediately distinguishes the tool from its sibling list_infrastructure_lifecycle_events by scoping to asset-type strategy events rather than infrastructure assets. The parenthetical definition of what an event is adds precision beyond the name.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains the resolution rule (exactly one of asset_type_id or asset_type_group_id, and the effective-strategy precedence) and lists the filterable fields, which gives clear context for when to use this tool. However, it does not explicitly name alternative tools or state when this is the wrong choice versus get_asset_lifecycle_event or list_infrastructure_lifecycle_events.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_asset_partsList asset partsA
Read-onlyIdempotent

List parts associated with assets. Filter by asset_id to get all parts for one asset, or by part_id to see all assets using a specific part.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
part_idNoFilter by part ID
asset_idNoFilter by asset ID
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.

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, and destructiveHint=false, so the safety profile is covered. The description adds filter direction semantics, which is useful, but it does not disclose any additional behavioral traits such as permissions or response format. With annotations doing the heavy lifting, 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 sentences, no waste, and the filter semantics are front-loaded. The description is appropriately sized for a simple list tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the low complexity, read-only annotations, complete schema parameter descriptions, and absence of an output schema, the description covers the essential invocation context. It could mention default pagination behavior, but the schema already handles that, so the definition is largely complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description meaningfully clarifies the relationship direction for asset_id (all parts for one asset) and part_id (all assets using a specific part), adding semantic value beyond the schema's terse filter labels.

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 parts associated with assets. It also explains what each filter returns, which helps an agent understand the tool's purpose. However, it does not differentiate from similar siblings like list_infrastructure_asset_parts or list_parts, so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly explains when to use asset_id versus part_id, giving direct usage context for the two main filters. It lacks any when-not-to-use guidance or explicit alternatives, but the conditional usage is clear enough for an agent to select correctly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_asset_placementsList asset placementsA
Read-onlyIdempotent

List asset pin placements on floorplans. Each asset has at most one placement globally. Filter by floorplan_id to see all pins on one floor, or by asset_id to find where a specific asset is placed.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
asset_idNoFilter by asset ID
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.
region_idNoFilter by region ID
floorplan_idNoFilter by floorplan ID

TDQS

A4.2/5.0
Behavior3/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 a genuine domain invariant ('each asset has at most one placement globally'), which helps the agent interpret results, but says nothing about volume, ordering, or auto-pagination behavior beyond what the schema states.

Agents need to know what a tool does to the world before 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 cardinality invariant, then the filter routing. 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?

For a read-only, fully-annotated list tool with a complete input schema and no output schema, the description supplies what's needed to call it correctly. The unexplained region_id filter is the only notable hole, and it's low-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 coverage is 100%, so the baseline is 3, and the description goes beyond it by tying floorplan_id and asset_id to concrete query intents. It adds no guidance for region_id, page, or per_page, keeping it from a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List asset pin placements on floorplans') with enough domain precision to separate it from get_asset_placement (singular) and the other asset sub-resource list tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explains what each filter mode achieves ('filter by floorplan_id to see all pins on one floor, or by asset_id to find where a specific asset is placed'), effectively telling the agent which parameter to reach for per intent. It stops short of naming when to prefer get_asset_placement or noting what happens when no filters are supplied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_asset_replacement_plansList asset replacement plansA
Read-onlyIdempotent

List asset replacement plans for lifecycle/capital planning. Filter by asset, status, priority, or planned year. Amounts are bare numbers with no currency: call get_organization_settings for currency_code before stating one.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
yearNoFilter by planned replacement year
statusNoFilter by plan status
asset_idNoFilter by asset ID
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.
priorityNoFilter by priority

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 openWorldHint=false, so the safety profile is covered. The description adds genuinely non-obvious behavior beyond the annotations: returned amounts are bare numbers with no currency, requiring a companion lookup. That is a real cross-tool dependency an agent could not infer from the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the purpose, then filters, then the non-obvious currency caveat. 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 warns about bare-number amounts, which is exactly the kind of return-value gotcha it needs to carry. Pagination behavior is left to the schema, so the description is complete enough without being 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%, so every parameter is already documented with enums and defaults; baseline is 3. The description summarizes the filterable fields but adds no syntax, format, or interaction detail beyond the schema, and the currency note concerns output values rather than parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List asset replacement plans') plus its domain ('lifecycle/capital planning'), which helps an agent place it. It does not explicitly distinguish itself from the sibling get_asset_replacement_plan or list_asset_lifecycle_events, so the sibling differentiation is left implicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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 filtering context ('Filter by asset, status, priority, or planned year') and a real workflow directive: call get_organization_settings for currency_code before stating an amount. It stops short of saying when to prefer this list tool over get_asset_replacement_plan or the bulk/update siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_asset_risk_historyList asset risk historyB
Read-onlyIdempotent

List asset risk assessment history. Shows risk scores, condition scores, and trigger events over time. Condition scores are 0-100: 85+ Excellent, 70-84 Good, 55-69 Fair, 40-54 Poor, below 40 Critical.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
asset_idNoFilter by asset ID
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.
trigger_eventNoFilter by trigger event type

TDQS

B3.2/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, so the safety profile is covered. The description adds useful domain context (the 0-100 condition score interpretation bands) but discloses nothing about pagination behavior or result ordering beyond what the schema says.

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 in the first sentence, then supporting detail. Three sentences, no waffle; the grading scale is slightly tangential but earns its place for interpreting returned scores.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence 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 all-optional, read-only list tool with no output schema, the description covers what is returned (risk scores, condition scores, trigger events) and how to read the condition score. It is nearly complete, missing only sibling disambiguation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 (page, per_page, asset_id, trigger_event) is documented in the schema itself, so the baseline of 3 applies. The description adds no parameter-level syntax or filtering nuance 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?

Clear verb+resource: lists asset risk assessment history and names the content returned (risk scores, condition scores, trigger events over time). However, it does not distinguish itself from close siblings such as list_infrastructure_asset_risk_history or get_asset_risk_history_entry, so an agent cannot tell which to pick from the description 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?

No when-to-use, when-not-to-use, or alternative-tool guidance is given. With get_asset_risk_history_entry (single entry) and list_infrastructure_asset_risk_history (infrastructure variant) as siblings, the description leaves routing entirely to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_assetsList assetsA
Read-onlyIdempotent

List assets in your AssetLab account. Supports filtering by site, building, system class, system group, system, and text search. Amounts are bare numbers with no currency: call get_organization_settings for currency_code before stating one.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
searchNoSearch by name
site_idNoFilter by site ID
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.
system_idNoFilter by system ID
building_idNoFilter by building ID
system_class_idNoFilter by system class ID
system_group_idNoFilter by system group ID

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, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered. The description adds genuine value with the currency caveat (amounts are bare numbers; fetch currency_code separately), but says nothing about result volume, ordering, or 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences with the core purpose front-loaded, then filters, then the caveat. No filler, though the currency sentence is a slight topic shift from the listing behavior and does cost a bit of focus.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple, fully-optional list endpoint with no output schema, the description covers purpose, filters, and an important output-interpretation caveat (currency). Pagination is handled in the schema, so the remaining gap is minor; ordering and total-count behavior go unmentioned.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 8 parameters are already documented in the schema, and this is the baseline case. The description's filter list slightly echoes those parameters but adds no syntax, format, or interaction detail (e.g., how filters combine) 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 and resource ("List assets in your AssetLab account") and enumerates the supported filters. It does not distinguish itself from close siblings like list_infrastructure_assets or list_asset_types, so an agent must infer the distinction 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?

The filter enumeration implies when to reach for this tool (browsing/filtering the asset catalog), and the currency note implies a follow-up call to get_organization_settings. However, there is no explicit when-to-use vs. when-not guidance or mention of an alternative list tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_asset_statusesList asset statusesA
Read-onlyIdempotent

List asset statuses for the organization. These define the lifecycle states an asset or infrastructure feature can be in. Each has a module: facilities (assets), infrastructure (features), or null (shared by both); pick one matching the record, or a shared one.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
moduleNoOnly records in this workspace; none = shared ones only
searchNoSearch by name
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds domain context about what statuses represent and the module dimension, but nothing about return shape, ordering, or filtering behavior beyond what the schema states.

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 core action and followed by the domain explanation. No filler, though the trailing guidance sentence is slightly awkward and the null/none discrepancy is a small blemish.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list tool with full schema coverage, annotations carrying the safety profile, and no output schema, the description supplies the necessary domain framing. It is complete enough to call correctly, missing only minor details like ordering or default behavior (which the schema handles).

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 for the module parameter by mapping facilities=assets and infrastructure=features and noting a shared category. Minor issue: it says "null" where the enum value is "none", a slight mismatch that could confuse value selection.

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 asset statuses for the organization") and explains the domain concept (lifecycle states for assets/features), making the resource unambiguous against the many sibling list_* tools. It does not explicitly distinguish itself from get_asset_status or create_asset_status, 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 Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Offers implied usage guidance by telling the agent to "pick one matching the record, or a shared one" when selecting a status, which is useful context. However, it never says when to call this tool versus alternatives (e.g., list vs get), 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_asset_type_groupsList asset type groupsB
Read-onlyIdempotent

List asset type group classifications. Groups organize asset types into logical categories.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
searchNoSearch by name
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.

TDQS

B3.1/5.0
Behavior2/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 elsewhere. The description adds only a conceptual gloss on what a group is and discloses nothing about scoping, result size, or access 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?

Two short sentences with the purpose front-loaded and no padding. The second sentence is marginally redundant but does orient the reader on what the returned entities represent.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence 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, zero-required-parameter list tool with full schema coverage and complete annotations, the definition is close to sufficient. Only the absence of any note about the returned collection 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%, with page, per_page, and search all documented in the schema itself. The description adds no parameter meaning, so the baseline 3 for fully-documented schemas is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence states a specific verb and resource ('List asset type group classifications'), which is clear against create_/update_/delete_asset_type_group siblings. The second sentence is definitional rather than differentiating, so it does not add scope or exclusions beyond the name.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to call this versus alternatives such as get_asset or list_asset_types, and no prerequisites or exclusions are stated. Usage is only implied by the 'list' naming convention shared with hundreds of siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_asset_typesList asset typesB
Read-onlyIdempotent

List asset type classifications. Filter by group.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
searchNoSearch by name
group_idNoFilter by asset type group ID
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.

TDQS

B3.2/5.0
Behavior2/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 fully covered. The description adds nothing behavioral beyond that — it does not mention the automatic multi-page fetching noted in the schema or what the listing returns. With annotations carrying the burden, the description contributes little additional 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?

Two short, front-loaded sentences with no filler; the core action leads and the filter hint follows. It is efficient, though so terse that it omits useful detail rather than being verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description ideally would hint at the shape of returned asset-type records, but it does not. For a simple read-only list tool with fully documented parameters, the definition is minimally viable but leaves the return content unexplained.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all four parameters (page, search, group_id, per_page) are already documented in the schema. 'Filter by group' merely restates the group_id parameter and adds no format or semantic 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.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('List asset type classifications'), which is clear enough to separate it from the nearby list_asset_type_groups. However it never names that sibling explicitly, so the distinction relies on the agent inferring that 'types' and 'type groups' are different entities.

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?

'Filter by group' implies one usage context, but there is no guidance on when to prefer this tool over list_asset_type_groups or list_assets, and no exclusions or prerequisites. The guidance is implied rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_attachmentsList attachmentsA
Read-onlyIdempotent

List file attachments linked to work orders, work requests, PM schedules, or PM templates.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
searchNoSearch by name
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.
work_order_idNoFilter by work order ID
pm_schedule_idNoFilter by PM schedule ID
pm_template_idNoFilter by PM template ID
work_request_idNoFilter by work request ID

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. The description adds nothing about auth requirements, result volume limits, or whether the four filters can be combined; pagination behavior lives only 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?

A single front-loaded sentence with no filler; the resource and its scope are stated 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 an all-optional-filters list tool with a fully documented schema and annotations covering the safety profile, the description is largely sufficient. It leaves implicit whether filters are combinable and what happens with zero filters, but these 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 description coverage is 100%, so all seven parameters (page, per_page, search, and the four ID filters) are already documented in the schema. The description restates the entity types available as filters but adds no syntax or combination semantics beyond that.

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 (file attachments) plus the four parent entity types it links to, which meaningfully scopes the tool. It does not explicitly contrast with get_attachment or create_attachment, so it stops short of full sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The enumerated filter targets imply when the tool is useful (looking up attachments for a work order, request, PM schedule, or template), but there is no explicit when-to-use vs. the get_attachment sibling that fetches a single attachment. 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.

list_budgetsList budgetsA
Read-onlyIdempotent

List annual funding budgets - one figure per year, funding source (O&M or Capital) and workspace (module), which is what the dashboard Budget tab shows. Filter by year, funding source, module, site or building. Includes allocated, budgeted, and remaining amounts. Amounts are bare numbers with no currency: call get_organization_settings for currency_code before stating one.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
yearNoFilter by budget year (e.g. 2026)
moduleNoFilter by workspace; 'none' for organization-wide budgets
searchNoSearch by name
site_idNoFilter by site ID
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.
building_idNoFilter by building ID
funding_sourceNoFilter by funding source

TDQS

A4.1/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 behavior, so the bar is lower; the description still adds real value by disclosing that amounts are bare numbers with no currency and that currency must be fetched separately. It surfaces the dashboard-equivalence and returned fields, though pagination nuance is left to 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?

Three tight, front-loaded sentences with no filler; ordering moves from what the tool returns, to how to filter, to a caveat about currency. Dense and readable, though the currency sentence is slightly run-on.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the return-shape burden and does so: allocated, budgeted, and remaining amounts, plus the currency caveat. Pagination is handled by the schema, so nothing critical is missing for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all eight parameters are already documented; the description maps filters to schema fields but adds no syntax, enum, or format detail beyond what the schema provides. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

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 (annual funding budgets) and describes the row grain ('one figure per year, funding source and workspace'), which differentiates it from get_budget and the create/update budget siblings. An agent knows exactly what set of records comes back.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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 ('what the dashboard Budget tab shows') and enumerates the filter dimensions (year, funding source, module, site, building), plus a concrete cross-tool prerequisite: call get_organization_settings for currency_code. It does not explicitly exclude or compare against get_budget or list_project_budget_items, so no exclusion guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_buildingsList buildingsA
Read-onlyIdempotent

List buildings. Optionally filter by site to see all buildings at a specific location.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
searchNoSearch by name
site_idNoFilter by site ID
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.

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 a closed world, so the safety profile is fully covered. The description adds only the scoping behavior of the site filter and says nothing about result volume, pagination, or how the automatic all-pages fetch behaves, so it is a modest addition rather than a rich disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the tool's action and followed by the one relevant filter option. There is no boilerplate and nothing extraneous; each 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 low-complexity, zero-required-parameter list tool with full annotation and schema coverage, this is nearly complete. The absence of any note on return shape is acceptable because no output schema exists but the tool is a simple enumerator; a mention of result scale would be the only missing piece.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so page, per_page, search and site_id are already documented in the schema. The description echoes only the site_id filter and adds no format, default, or interaction 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.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clear verb+resource ("List buildings") and it is the only building-listing tool among the siblings, so there is little risk of confusion with create_building or list_building_types. However, it never explicitly distinguishes itself from neighboring list tools such as list_project_buildings or list_sites, so the sibling differentiation is implied 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?

"Optionally filter by site to see all buildings at a specific location" gives implied usage for the site_id case, but there is no guidance on when to prefer this over list_project_buildings or get_site, and no exclusions or prerequisites. Adequate but with a clear gap.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_building_typesList building typesC
Read-onlyIdempotent

List building type classifications.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
searchNoSearch by name
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.

TDQS

C2.9/5.0
Behavior2/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 behavior is covered without the description. The description adds nothing behavioral: no note about auto-pagination of all pages, result ordering, or size of the catalog, even though those are real traits of this endpoint.

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 short sentence with no filler and the verb front-loaded. It is efficient, though arguably too terse to be maximally useful.

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-required-parameter list tool with no output schema, the essential call mechanics (pagination, search) are already in the schema, so the description is minimally sufficient. It still omits what the returned records contain and how the catalog is used elsewhere, leaving avoidable gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and all three parameters (page, per_page, search) are fully documented inline, including defaults and max bounds. The description contributes no additional parameter meaning, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('List') and resource ('building type classifications'), so an agent knows this is a read operation returning a catalog. It does not distinguish itself from neighbors such as list_location_types or list_asset_types, nor explain what a building type is in this domain, 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 Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance, no prerequisites, and no mention of alternatives (e.g., create_building_type for writes, or get_* for a single record). The agent must infer usage purely from the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_change_ordersList change ordersA
Read-onlyIdempotent

List change orders. Filter by status, vendor_id, or project_id. Amounts are bare numbers with no currency: call get_organization_settings for currency_code before stating one.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
searchNoSearch by name
statusNoFilter by status: draft, submitted, approved, rejected
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.
vendor_idNoFilter by vendor ID
project_idNoFilter by project ID

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so safety is covered. The description adds genuinely non-obvious context beyond annotations: amounts are bare numbers with no currency, and currency_code must be fetched via get_organization_settings before stating a monetary value. That is a real cross-tool dependency the schema does not convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the core action and filters, then the currency caveat. No filler, and each sentence carries distinct information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list tool with no output schema, the description covers the key trap (currency-less amounts and the required companion call) but does not sketch the returned record shape or restate pagination behavior. The critical gap for an agent reasoning about money is addressed, so it is nearly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so page, per_page, search, status, vendor_id, and project_id are all documented in the schema itself. The description only restates three of the filters and adds no syntax, format, or default information beyond it, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

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 orders') plus the filterable dimensions, which cleanly separates it from the sibling get_change_order, create_change_order, update_change_order, and delete_change_order. An agent can identify the right tool without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

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 by naming the available filters (status, vendor_id, project_id), which tells the agent this is the browsing/query tool as opposed to the single-record getter. However, it offers no explicit when-not guidance, no mention of prerequisites, and no alternative named for cases where the agent needs one specific change order.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_compliance_itemsList compliance itemsB
Read-onlyIdempotent

List compliance items (regulatory requirements tracked against PM schedules). Filter by status or system.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
searchNoSearch by name
statusNoFilter by status: active, archived
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.
system_idNoFilter by system ID

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and a closed world, so the safety profile is fully covered structurally. The description adds no behavioral context beyond that — no note on volume, ordering, or default retrieval scope (even though the schema hints all pages are fetched automatically, the description omits it).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with zero filler, and the tool's scope is front-loaded before the filter hint. Efficient, though it trades brevity for some missing 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 read-only list tool with full parameter documentation and no output schema, the description covers what is needed to call it correctly. It could be slightly stronger by noting return scope or ordering, but 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%, so pagination, search, status and system parameters are already documented in the schema. The description only echoes two of the five filters and adds no syntax or semantic detail beyond what the schema provides, which is the baseline when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('List compliance items') and the parenthetical clarifies the domain object as regulatory requirements tied to PM schedules. However, it does not distinguish itself from close siblings like list_compliance_records or list_compliance_pm_schedules, leaving the agent to infer the boundary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Filter by status or system' implies when the tool is useful (narrowing a compliance list), but there is no explicit when-to-use, when-not-to-use, or routing to alternatives such as get_compliance_item for single-record retrieval. 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.

list_compliance_pm_schedulesList compliance PM schedulesA
Read-onlyIdempotent

List the PM schedules linked to a compliance item, or the compliance items a PM schedule counts toward. Pass compliance_item_id or pm_schedule_id (one is required). Each link carries required_frequency_days (how often the schedule must be completed for the item to stay compliant) and weight.

NameRequiredDescriptionDefault
pm_schedule_idNoPM schedule ID - resolve via list_pm_schedules
compliance_item_idNoCompliance item ID - resolve via list_compliance_items

TDQS

A4.2/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 without the description. The description adds useful domain semantics about what each link carries (required_frequency_days, weight), but says nothing about pagination or result volume. With annotations carrying the behavioral load, this is a modest add.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences: the bidirectional purpose first, the call constraint second, the payload meaning third. No filler sentences and nothing repeated from the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description helpfully explains the two fields each link carries, which is what an agent needs to interpret results. It stops short of noting pagination/limits or that the response may be empty for a valid ID, minor gaps for a listing endpoint.

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 each parameter already points at its resolver tool (list_pm_schedules, list_compliance_items). The description adds the critical non-schema constraint that one of the two is required (schema declares zero required params) and explains the linked semantics of the returned fields, which compensates for the schema's silence on the mutual 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+resource (list PM schedules linked to a compliance item) and goes further by naming the reverse direction (the compliance items a PM schedule counts toward), which distinguishes it from list_pm_schedules, list_compliance_items, and get_compliance_pm_schedule. An agent can tell what this join-listing 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?

Explicitly states that exactly one of compliance_item_id or pm_schedule_id must be passed, which is the key usage decision. It does not, however, name the sibling tools an agent should use instead when it wants the underlying PM schedules or compliance items themselves, so alternative-routing guidance is only partial.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_compliance_recordsList compliance recordsB
Read-onlyIdempotent

List compliance records - audit trail of completed compliance checks linked to work orders and PM schedules.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.
work_order_idNoFilter by work order ID
compliance_item_idNoFilter by compliance item ID

TDQS

B3.2/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 the useful semantic note that records are completed checks linked to work orders and PM schedules, but says nothing about volume, pagination, or sorting 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?

A single compact sentence that front-loads the action and resource, with no filler. It is appropriately sized, though it leaves out actionable detail rather than being optimally dense.

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 four-parameter list tool with no output schema and full annotation coverage, the description covers identity but omits the available filter dimensions (work order, compliance item) and any return-shape context. Adequate but with clear gaps given the rich sibling set.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 page, per_page, work_order_id, and compliance_item_id. The description does not mention any of the filter dimensions it accepts, so it adds no meaning beyond the schema; baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('List compliance records') and adds what the resource represents ('audit trail of completed compliance checks linked to work orders and PM schedules'). It differentiates from sibling list_compliance_items implicitly through the record/item distinction but never names 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 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 get_compliance_record, list_compliance_items, or list_compliance_pm_schedules, and no mention of prerequisites or when filters should be applied. Usage is only implied by the verb 'List'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_contract_documentsList contract documentsB
Read-onlyIdempotent

List documents attached to contracts. Filter by contract_id.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
searchNoSearch by name
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.
contract_idNoFilter by contract ID

TDQS

B3.3/5.0
Behavior2/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 fully covered by structured data. The description adds nothing beyond that: it does not mention pagination auto-fetch behavior, result limits, or ordering, so it contributes no behavioral context of its 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?

Two short sentences with zero filler, and the core action is front-loaded before the filter hint. It is efficient, though borderline sparse given four parameters and pagination semantics that go unmentioned.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list tool with a fully covered schema and complete annotations and no output schema, the description is adequate to invoke correctly. The only gap is that it never surfaces the automatic multi-page fetching behavior that the schema hints at, which an agent might otherwise plan around.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 every parameter (page, per_page, search, contract_id) documented in the schema itself, so the baseline is 3. The description only repeats contract_id filtering and adds no syntax, format, or default-value meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (list documents attached to contracts) that is unambiguous against the create/get/delete/update contract_document siblings. However it does not explicitly differentiate itself from list_contracts or explain why one would list documents vs fetch a contract's attachment metadata.

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 'Filter by contract_id' implies the primary use case (retrieve documents for a known contract), but there is no explicit when-to-use statement, no mention of alternatives such as get_contract_document for a single item, and no guidance on whether contract_id is required in practice even though the schema marks zero required params.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_contractsList contractsA
Read-onlyIdempotent

List vendor contracts. Filter by category or search by title. Amounts are bare numbers with no currency: call get_organization_settings for currency_code before stating one.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
searchNoSearch by name
categoryNoFilter by contract category
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the safe read-only, idempotent profile, so the bar is lower; the description still contributes a genuinely non-obvious behavioral rule — amounts are bare numbers and get_organization_settings must be consulted for currency_code before reporting a value. That cross-tool dependency 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, no filler: purpose first, filtering second, the currency caveat last. Every sentence carries information an agent would otherwise have to guess.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a filter-only list tool with no output schema, the definition covers what it returns conceptually and the pagination model (all pages auto-fetched, already in the schema), plus the currency pitfall. Nothing essential is missing, though it stays silent on result shape and 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%, so page, per_page, search, and category are all documented in the schema itself; baseline 3 applies. The description adds only the mapping of the two filters, and its 'search by title' phrasing diverges slightly from the schema's 'Search by name', which could confuse the agent without adding real semantic depth.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 concrete verb+resource ('List vendor contracts') and immediately names the two supported access modes (category filter, title search). An agent can distinguish this from siblings such as list_contract_documents, list_contract_sites, and get_contract_document 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 Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description says how to narrow results (by category, by title) but never states when to prefer this tool over alternatives like a contract detail getter, nor any prerequisite or exclusion. Usage is implied by the filtering capabilities 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.

list_contract_sitesList contract sitesA
Read-onlyIdempotent

List contract-to-site mappings showing which contracts cover which sites. No single-record lookup (composite key).

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
site_idNoFilter by site ID
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.
contract_idNoFilter by contract ID

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so safety is covered. The description adds one genuinely useful behavioral fact — the composite key means no single-record retrieval exists — but says nothing about pagination cost or result volume beyond what the schema states.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the resource definition and followed by the constraint. No filler, though the parenthetical '(composite key)' could have been folded more smoothly into the second clause.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only listing tool with 100% schema coverage and no output schema, the description covers what the entity is and the key structural limitation. Only the shape of the returned mapping rows is unaddressed, a minor gap since the schema and annotations carry 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 100%, so all four parameters (page, per_page, site_id, contract_id) are already documented in the schema. The description adds no format, default, or combination guidance, so this sits at the baseline for fully-covered schemas.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (List) and the exact resource (contract-to-site mappings), then defines the semantics of that resource — which contracts cover which sites. This separates it cleanly from create_contract_site/delete_contract_site without needing the reader to infer the join-table nature of the entity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The note 'No single-record lookup (composite key)' implicitly tells the agent it must list-and-filter rather than fetch by ID, which is useful routing information. However it never states when to prefer this over list_contracts or list_sites, nor what the contract_id/site_id filters are for.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_cost_categoriesList cost categoriesB
Read-onlyIdempotent

List cost categories used to classify expenses, invoices, and purchase orders. Supports hierarchical parent-child structure.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
searchNoSearch by name
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.
is_activeNoFilter by active status
parent_idNoFilter by parent category ID

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description usefully adds that the hierarchy is parent-child, which explains why filtering by parent_id is meaningful, but it does not mention pagination behavior (auto-fetching all pages) or ordering, which is the main remaining behavioral unknown.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with zero filler, and the core purpose is front-loaded before the structural detail. Nothing could be removed without losing 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 read-only, non-destructive list tool with full schema coverage, full annotation coverage, and no output schema, the description covers the what and the notable structural trait (hierarchy). It is slightly incomplete in that pagination behavior and result ordering are never mentioned.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all five parameters (page, search, per_page, is_active, parent_id) are already documented in the schema. The description's hierarchy sentence gives context for parent_id but adds no syntax or default details beyond the schema, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('List') and resource ('cost categories') and adds real domain context: these categories classify expenses, invoices, and purchase orders. It does not explicitly differentiate from siblings like get_cost_category or create_cost_category, but the name plus scope makes the list-vs-single 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 Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this versus list_work_categories, list_part_categories, or get_cost_category, and no mention of prerequisites or expected callers. Usage is only implied by the verb 'List'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_criticality_modifiersList criticality modifiersA
Read-onlyIdempotent

List the organization's criticality modifier overrides. Rows are overrides only: a tier with no row uses the built-in default (critical 0.6, high 0.8, medium 1.0, low 1.4), so an empty list means every tier is on its default. A modifier below 1 tightens the targets of facilities in that tier and one above 1 relaxes them; the allowed range is 0.1 to 1.9. Deleting a row restores the default. Filter by tier.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.
criticalityNoFilter by criticality tier

TDQS

A4.7/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 adds substantial domain behavior: the built-in defaults per tier, the meaning of a modifier below vs above 1, the allowed range 0.1–1.9, and that deleting a row restores the default. That is genuine context an agent cannot derive 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?

Five tightly packed sentences, front-loaded with what the tool returns, then defaults, then modifier semantics, then range, then the filter. Every sentence carries information the agent needs; nothing is restated from annotations or schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description compensates by describing the row semantics (overrides only, empty list = all defaults) and the value domain. Combined with 100% schema coverage for filters and pagination, 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?

Schema coverage is 100%, so the baseline is 3, but the description adds meaning beyond the schema by mapping the criticality enum values to their default weights (critical 0.6, high 0.8, medium 1.0, low 1.4) and explaining what the returned modifier value does for a tier. Pagination params are left to the schema, which already documents them.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List the organization's criticality modifier overrides') and immediately narrows scope by declaring rows are overrides only. This distinguishes it from get_criticality_modifier and create/update/delete siblings that operate on a single modifier.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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: an empty list means all tiers are on defaults, and 'Filter by tier' tells the agent how to narrow results. It does not explicitly name the alternative tools (get_criticality_modifier, update_criticality_modifier) or say when a single-record fetch is preferable, 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.

list_custom_field_definitionsList custom field definitionsA
Read-onlyIdempotent

List custom field definitions configured for this tenant. Filter by entity type (e.g. asset, work_order) or field type.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.
field_typeNoFilter by field type
entity_typeNoFilter by entity type (e.g. asset, work_order)

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered structurally. The description only adds the tenant-scoping constraint; it says nothing about pagination behavior or result shape, which the schema partly covers instead.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with the resource and scope front-loaded and the filter options second; no filler or redundant 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?

For a simple read-only list tool with no required parameters, no output schema and full annotation coverage, the description covers what the tool returns at a conceptual level and how to narrow results. Only the behaviors already handled by annotations and the pagination schema are omitted.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 each parameter (page, per_page, field_type, entity_type) is already documented, including the enum for field_type. The description's mention of entity/field type filters with examples (asset, work_order) largely restates the entity_type schema text, so it adds little beyond the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("List custom field definitions") and adds tenant scope plus the two filterable facets. It does not name the nearby siblings (get_custom_field_definition, list_custom_field_values), so an agent must infer the boundary itself, but the purpose is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Filtering is described ("Filter by entity type ... or field type"), which implies when the tool is useful, but there is no explicit when-to-use/when-not guidance and no mention of alternatives such as get_custom_field_definition for a single definition or list_custom_field_values for values.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_custom_field_valuesList custom field valuesA
Read-onlyIdempotent

List custom field values. Filter by entity_id to get all custom fields for a specific record, or by field_definition_id.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.
entity_idNoFilter by entity ID (e.g. asset ID, work order ID)
field_definition_idNoFilter by field definition ID

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered by structured data. The description adds only the filter semantics and says nothing about result shape, default breadth of the unfiltered call, or pagination behavior (which 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?

Two tight sentences with the core action front-loaded and the filter guidance immediately following. Nothing is padded, though the second sentence could be slightly more explicit about the mutual-exclusivity or combination of the two filters.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence 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, zero-required-parameter read-only list tool with no output schema, the description covers purpose and the two primary filter intents while the schema handles pagination defaults. Complete enough to invoke correctly, with only minor gaps in result expectations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so page, per_page, entity_id, and field_definition_id are all documented in the schema. The description restates entity_id's meaning slightly more concretely (all custom fields for a specific record) but adds no syntax or format detail beyond the schema, so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List custom field values') and immediately explains the two filter dimensions, which separates it from the singular sibling get_custom_field_value. It does not explicitly name alternatives, but the resource and behavior are unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when each filter applies ('to get all custom fields for a specific record, or by field_definition_id'), which is genuinely useful context. However, it never states when not to use this tool or points to the sibling list/get tools, 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_dashboard_snapshotsList dashboard snapshotsA
Read-onlyIdempotent

List monthly dashboard snapshots with aggregate stats: asset counts, condition scores, work order metrics, and CRV totals. Amounts are bare numbers with no currency: call get_organization_settings for currency_code before stating one.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
yearNoFilter by snapshot year (e.g. 2026)
monthNoFilter by snapshot month (1-12)
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, so safety is covered. The description adds real behavioral context the annotations cannot supply: amounts are bare numbers with no currency attached, and the required follow-up to resolve currency_code. It stops short of describing pagination behavior, though the 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?

Two sentences, zero waste, and the content summary is front-loaded before the caveat. The currency note is a non-obvious gotcha that earns its place rather than padding the definition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description does the heavy lifting by naming the aggregate fields returned and warning that monetary values lack currency context, plus pointing at the tool that supplies it. A brief note on pagination/ordering 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?

Schema description coverage is 100% (page, year, month, per_page all documented, including defaults and the automatic all-pages fetch), so the schema carries parameter meaning fully. The description adds nothing parameter-specific, which is the expected baseline for a fully documented schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("List monthly dashboard snapshots") and enumerates the payload contents (asset counts, condition scores, work order metrics, CRV totals), so an agent knows exactly what comes back. It does not explicitly distinguish itself from close siblings like get_dashboard_snapshot or get_dashboard_summary, leaving that differentiation to inference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives one actionable usage rule — call get_organization_settings for currency_code before quoting an amount — which is a genuine cross-tool workflow hint. However, it offers no guidance on when to choose this list tool over get_dashboard_snapshot/get_dashboard_summary, nor any exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_expensesList expensesA
Read-onlyIdempotent

List project-scoped expenses (the Project → Costs → Expenses tab). These records have description, amount, expense_date, receipt_url, and notes - they do NOT carry invoice_number or po_number. For the records shown on the main AssetLab "Expenses" page (which include invoice_number, po_number, category, and asset/site links), use list_asset_costs instead. Filter by project, work order, or cost category. Amounts are bare numbers with no currency: call get_organization_settings for currency_code before stating one.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
searchNoSearch by name
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.
project_idNoFilter by project ID
category_idNoFilter by cost category ID
work_order_idNoFilter by work order ID

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 safety profile is covered. The description adds real behavioral context: the exact shape of the returned records and the fact that amounts are unitless with no currency, which no annotation or schema 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?

Three dense sentences, each earning its place: scope, sibling disambiguation, filters/currency caveat. 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.

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 returned field list and the currency caveat, which is exactly what an agent needs. Sibling disambiguation plus filtering guidance makes it complete 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 description coverage is 100%, so the baseline is 3. The description adds a small amount of routing value by naming the filter axes (project, work order, cost category) and by clarifying the semantics of the amount field returned, though it does not go beyond the schema on search/pagination.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 project-scoped expenses') and pins the exact UI location (Project → Costs → Expenses). It clearly distinguishes itself from the sibling list_asset_costs by naming the differing fields (invoice_number, po_number, category, asset/site links).

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 for project-cost-tab expenses, use list_asset_costs for the main AssetLab Expenses page. It also names the filter dimensions and warns to fetch currency_code before stating an amount.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_floorplan_regionsList floorplan regionsA
Read-onlyIdempotent

List labeled rooms/zones on a floorplan. Each region has a polygon (normalized 0-1 coordinates), an optional location_id linking to the Locations hierarchy, and a "reviewed" flag for AI-detected regions.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.
reviewedNoFilter by reviewed state
location_idNoFilter regions linked to a specific location
floorplan_idNoFilter by floorplan ID

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the safe read-only/idempotent/non-destructive profile, so the bar is lower. The description adds real value by disclosing the shape of each returned region (normalized polygon, location_id link, reviewed flag), which is not derivable from structured data since there is no output schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the core action, then the item structure. 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?

With no output schema, the description compensates by explaining the returned region fields; the input filters are fully covered by the schema. Pagination is handled by the schema defaults, so nothing critical is missing for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all five filters are already documented. The description's mention of location_id and reviewed mostly describes the region data model rather than the input filters, 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 ("List labeled rooms/zones on a floorplan") that is immediately distinguishable from its siblings list_floorplans and get_floorplan_region. An agent knows it retrieves region collections, not floorplans.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this versus list_floorplans or get_floorplan_region, and no mention of prerequisites or the filtering workflow. The usage must be inferred entirely from the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_floorplansList floorplansA
Read-onlyIdempotent

List floorplans (PDF page-level floors or site-level sheets). Filter by building_id for a building's floors, or by site_id for site-level plans (campus maps, outdoor layouts). Each floorplan belongs to exactly one of building OR site. A multi-page PDF produces multiple floorplans sharing the same pdf_storage_path.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
statusNoFilter by detection status
site_idNoFilter by site ID (site-scoped floorplans only)
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.
building_idNoFilter by building ID (building-scoped floorplans)

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 non-destructive, so safety is covered. The description adds domain behavior beyond annotations: the building-OR-site exclusivity and the fact that a multi-page PDF yields multiple records sharing pdf_storage_path. Pagination behavior is left to 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, front-loaded with what the tool returns before the filtering rules. Every sentence carries distinct information with no repetition of the title or name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-required-parameter list tool with no output schema, the description covers what a floorplan is, the two scoping modes, and the multi-page PDF record behavior. A reader still has to consult the schema for status/page/per_page, but nothing essential about 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%, giving a baseline of 3, but the description adds filter semantics the schema lacks: the exclusivity of building_id vs site_id and the meaning of a page-level vs site-level result. It does not elaborate on status, page, or per_page, keeping it just above baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb+resource with a clarifying parenthetical distinguishing PDF page-level floors from site-level sheets. It does not explicitly name sibling tools like list_floorplan_regions or get_floorplan, so it stops short of full sibling differentiation, but an agent knows exactly what is returned.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states the filtering decision: building_id for a building's floors, site_id for site-level plans such as campus maps. It also states the mutual-exclusivity constraint (belongs to exactly one of building OR site), which is real usage guidance. No explicit alternative-tool routing is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_form_response_answersList form response answersC
Read-onlyIdempotent

List the per-question answer values within form responses. Read-only.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
item_keyNoFilter by item key
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.
response_idNoFilter by form response ID

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

'Read-only' merely restates readOnlyHint=true already declared in annotations, so it adds no behavioral context. Nothing is said about pagination behavior or result shape beyond what the schema already documents, leaving the description with no value beyond structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with the purpose front-loaded and no filler. The phrase 'Read-only' is redundant with annotations, which is the only wasted words, but overall the text is tight.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With four optional filter parameters, no output schema, and no required params, the description does not explain what an answer record contains or how results are grouped per question. Adequate to invoke the tool, but it leaves return-shape questions unanswered.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 page, per_page, item_key, and response_id all documented in the schema itself. The description adds no parameter meaning (e.g., how item_key or response_id interact), so the baseline 3 is warranted.

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 ('per-question answer values within form responses'), which distinguishes it from sibling list_form_responses (whole responses) and get_form_response_answer (a single answer). It is clear, though it doesn't explicitly name those siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance, no prerequisites, and no mention of the alternatives (list_form_responses, get_form_response_answer). The only implicit signal is 'within form responses', leaving the agent to infer that this is for drilling into answers rather than fetching responses.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_form_responsesList form responsesB
Read-onlyIdempotent

List form responses - completed or in-progress fill-outs of a form, attached to a work order or PM. Read-only.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
statusNoFilter by status
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.
subject_idNoFilter by subject ID
template_idNoFilter by form template ID
subject_typeNoFilter by subject type

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true, so the 'Read-only' clause largely repeats structured data. The added value is the 'completed or in-progress' characterization of status states. No pagination, auth, or scope behavior is disclosed beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One compact sentence with the resource and scope front-loaded and no filler. It is appropriately sized for a simple read tool, though the trailing 'Read-only' clause duplicates annotations and earns little.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list tool with full schema coverage and complete annotations but no output schema, the description conveys what is listed and its linkage context. It could note automatic all-page fetching or filter combinations, but nothing essential to invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all six parameters (page, per_page, status, subject_id, subject_type, template_id) are already documented in the schema. The description adds no filter syntax or semantics 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.

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 (form responses) and clarifies what a form response is with 'completed or in-progress fill-outs of a form, attached to a work order or PM.' It distinguishes from list_form_response_answers implicitly by describing whole responses, but never names a sibling to route against.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'attached to a work order or PM' gives context about what responses are linked to, but there is no explicit when-to-use, when-not-to-use, or alternative naming (e.g., list_form_response_answers, get_form_response). Guidance is absent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_form_template_itemsList form template itemsB
Read-onlyIdempotent

List the items (questions) within form templates. Returned in sort order. Filter by template_id.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.
template_idNoFilter by form template ID

TDQS

B3.4/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 one useful behavioral fact ('Returned in sort order') but says nothing about pagination semantics or result shape beyond what the schema already states.

Agents need to know what a tool does to the world before 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 no filler. The resource and the ordering guarantee are stated up front, and the filtering hint 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 read-only list tool with full annotation coverage, a fully documented schema and no output schema, the description supplies what is needed: what it lists, ordering, and the filter. Only the absence of any alternative-routing note 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 page, per_page and template_id are already documented with defaults and constraints. The description merely reiterates the template_id filter without adding format or usage detail, matching the baseline for fully-covered schemas.

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 items (questions) within form templates') and parenthetically clarifies that items are questions. It is clearly distinct from siblings like get_form_template_item or list_form_templates, though it never explicitly names a sibling to route against.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Offers only an implicit hint via 'Filter by template_id' but no when-to-use guidance, no mention of when a full list vs a single get is appropriate, and no exclusions. An agent gets no routing help beyond the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_form_templatesList form templatesB
Read-onlyIdempotent

List form templates - reusable inspection, checklist, compliance, and survey definitions. Each has a module: facilities, infrastructure, or null (shared by both).

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
moduleNoOnly records in this workspace; none = shared ones only
searchNoSearch by name
statusNoFilter by status: draft, published, archived
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.
work_category_idNoFilter by work category ID (look up with list_work_categories)

TDQS

B3.2/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 the module concept but no information about pagination behavior or return shape beyond what annotations already imply.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact sentences, front-loaded with the action and purpose. The module note earns its place; nothing is wasted, though it stops short of being maximally informative.

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 six-parameter read-only list tool, the description covers purpose and the key module concept, and the schema documents every parameter. No output schema exists, so a brief note on the returned collection would help, but the core is covered.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 baseline is 3. The description elaborates on the `module` field (facilities/infrastructure/shared), which is useful, but it says the value is "null" while the schema enum uses "none" — a mismatch that could mislead rather than clarify.

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 form templates") and adds meaningful domain context that form templates are reusable inspection, checklist, compliance, and survey definitions. This distinguishes it from the many other list_* tools, though it does not name a sibling directly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this versus get_form_template or list_form_template_items, and no mention that filters are optional or how to narrow results. The agent must infer usage entirely from the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_infrastructure_asset_commentsList infrastructure asset commentsB
Read-onlyIdempotent

List comments on infrastructure features. Filter by feature.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.
feature_idNoFilter by infrastructure feature ID

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and openWorldHint=false, so the safety profile is fully covered by structured data. The description adds no behavioral context of its own (e.g., what unfiltered calls return, ordering, or volume) beyond the filtering hint, so it sits at the with-annotations 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?

Two short sentences, front-loaded with the action and followed by the filter scope; nothing is wasted. The second sentence is a fragment that could carry slightly more routing information in the same space, but the sizing is appropriate.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple, read-only list endpoint with full schema coverage and no output schema to explain, the description covers what the tool does and how to scope it. Only the absence of sibling differentiation and unfiltered-call behavior 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%, and the schema documents all three parameters including pagination defaults and UUID format. The description only echoes the feature_id filter, adding no semantics 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 clear verb+resource: list comments scoped to infrastructure features (assets). It distinguishes itself implicitly from list_asset_comments by the 'infrastructure' qualifier, but never calls out that sibling or clarifies the asset-vs-feature naming mismatch between the tool name and 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 Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Filter by feature' hints at how to scope the call, but there is no when-to-use guidance, no mention that feature_id is optional (omitting it lists all comments), and no routing to the alternative list_asset_comments or get_infrastructure_asset_comment for single-record retrieval.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_infrastructure_asset_costsList infrastructure asset costsA
Read-onlyIdempotent

List cost rows for infrastructure features. Filter by feature, work order, category, or cost date range. Amounts are bare numbers with no currency: call get_organization_settings for currency_code before stating one.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
categoryNoFilter by cost category
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.
feature_idNoFilter by infrastructure feature ID
cost_date_toNoCosts on/before this date (YYYY-MM-DD)
work_order_idNoFilter by work order ID
cost_date_fromNoCosts on/after this date (YYYY-MM-DD)

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 safety profile is covered. The description adds genuinely non-structured context: amounts are bare numbers without currency and require get_organization_settings for currency_code before reporting a figure. That output-semantics warning goes beyond anything in the annotations or schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, zero filler, front-loaded with the purpose before the filter list and the currency caveat. Every sentence earns its place and the ordering matches how an agent would reason about the call.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Filters are covered by the schema, pagination defaults (auto-fetch all pages, max 1000) are explained in schema descriptions, and there is no output schema to describe. The currency handling note closes the main interpretive gap; only the absence of any sibling-disambiguation keeps it from a 5.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description restates the filter dimensions that the schema already documents (feature_id, work_order_id, category, cost_date_from/to) without adding formats, defaults, or edge-case behavior, so it does not materially extend 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?

States a specific verb (List) and a precisely scoped resource (cost rows for infrastructure features), which cleanly separates it from the near-sibling list_asset_costs and get_infrastructure_asset_cost. An agent knows exactly what it retrieves 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 enumerates the available filter dimensions (feature, work order, category, cost date range) and flags a cross-tool dependency on get_organization_settings, but never states when this tool is the right choice versus list_asset_costs or get_infrastructure_asset_cost. Usage is implied by the filters 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.

list_infrastructure_asset_documentsList infrastructure asset documentsB
Read-onlyIdempotent

List documents attached to infrastructure features. Filter by feature, category, or name search.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
searchNoSearch by name
categoryNoFilter by document category
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.
feature_idNoFilter by infrastructure feature ID

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the entire safety profile of this read operation. The description adds no behavioral context beyond scope—nothing about pagination handling, result ordering, or empty-result behavior, though pagination hints live in the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

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 filters follow. Every clause earns its place.

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-required-parameter list tool with full schema coverage and a complete read-only annotation set, the description is adequate to invoke correctly. It omits what a returned document looks like and how to page through large result sets, but those gaps are minor given the structured data already 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 all five parameters (page, search, category, per_page, feature_id) are already documented in the schema. The description restates the filter dimensions (feature, category, name search) without adding format, matching, or default-value semantics 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.

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 (documents attached to infrastructure features), plus the filterable facets. It does not explicitly differentiate itself from the many sibling document-list tools such as list_asset_documents or list_project_documents, but the resource qualifier 'infrastructure features' makes its scope reasonably clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when it applies (documents on infrastructure features) and lists the filtering options, but gives no explicit when-to-use guidance, no exclusions, and never names the alternatives (e.g., list_asset_documents) an agent should choose between.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_infrastructure_asset_inspectionsList infrastructure asset inspectionsB
Read-onlyIdempotent

List inspections recorded against infrastructure assets. Filter by feature, inspector, method, condition score range, or inspection date range.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
methodNoFilter by inspection method (e.g. CCTV, visual)
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.
feature_idNoFilter by infrastructure asset (feature) ID
inspector_idNoFilter by inspector user ID
condition_maxNoMaximum condition score (0-100)
condition_minNoMinimum condition score (0-100)
inspection_date_toNoFilter inspections on/before this date (YYYY-MM-DD)
inspection_date_fromNoFilter inspections on/after this date (YYYY-MM-DD)

TDQS

B3.2/5.0
Behavior2/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 no behavioral context beyond that – it says nothing about pagination, result ordering, or how the automatic all-pages fetching behaves, which is relevant 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with the core purpose front-loaded and filters second; no filler or redundancy. The second sentence is essentially a parameter enumeration, which is slightly wasteful given the schema already lists them, but it is not verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With rich annotations, full schema coverage, and no output schema, most of what an agent needs is present. Still, for a 9-parameter list tool the description omits any note on pagination/return volume or default behavior that would help the agent 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 every one of the 9 parameters is already documented (including page/per_page defaults and date formats). The description merely restates the filter categories already in the schema and adds no syntax, range, or combination semantics 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: 'List inspections recorded against infrastructure assets,' which clearly separates it from create_/update_/get_infrastructure_asset_inspection siblings. It does not explicitly name the singular getter as the alternative, but the plural list scope is evident from the name and description.

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 enumerating the filter dimensions, so an agent can infer this is the query/browse tool for inspections. However, it never states when to prefer it over get_infrastructure_asset_inspection or list_infrastructure_assets, and gives no prerequisite or exclusion guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_infrastructure_asset_partsList infrastructure asset partsC
Read-onlyIdempotent

List parts associated with infrastructure features. Filter by feature or part.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
part_idNoFilter by part ID
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.
feature_idNoFilter by infrastructure feature ID

TDQS

C2.9/5.0
Behavior2/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 no behavioral context beyond that — no note on automatic pagination semantics, no return-shape or ordering hints — so it contributes little the structured fields don't already 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?

Two short sentences, front-loaded with the resource and scoping behavior; no filler. It is efficient, though arguably so terse that it omits useful routing information rather than being wastefully long.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple, read-only list tool with full schema coverage and safety annotations, the description covers the essentials. It stops short of explaining relationship to sibling list/get/create/delete part tools, which given the large sibling set is the main thing an agent would still need to infer.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all four parameters (page, per_page, feature_id, part_id) are fully documented in the schema. The description's "filter by feature or part" merely restates feature_id/part_id at a higher level, adding no format or usage detail, which matches the baseline 3 when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb ("List") and resource ("parts associated with infrastructure features"), which is specific enough for an agent to know what it returns. It does not, however, distinguish this from close siblings like list_asset_parts or get_infrastructure_asset_part, so a little inference is needed.

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?

"Filter by feature or part" describes a capabability, not when to use the tool or how it differs from sibling list tools such as list_parts or list_asset_parts. There is no guidance on when-not to use it and no named alternative, leaving routing entirely to the agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_infrastructure_asset_risk_historyList infrastructure asset risk historyA
Read-onlyIdempotent

List the risk + condition history captured for infrastructure features (populated automatically when a feature's risk fields change). Read-only. Filter by feature, source, or capture date range.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
sourceNoFilter by capture source (e.g. manual_update)
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.
feature_idNoFilter by infrastructure feature ID
captured_at_toNoEntries on/before this date (YYYY-MM-DD)
captured_at_fromNoEntries on/after this date (YYYY-MM-DD)

TDQS

A3.8/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 structurally. The description adds genuinely new behavioral context: the entries are populated automatically as a side effect of a feature's risk fields changing, and the available filtering dimensions. This is real value beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with what the tool lists, then the provenance caveat, then the filters. 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?

With full schema coverage and rich annotations, the definition covers what an agent needs to invoke it: purpose, read-only nature, provenance, and filter options. No output schema exists, yet the description does not characterize the returned history entries, which is a minor gap for an agent reasoning about results.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 six parameters (page, per_page, source, feature_id, captured_at_from/to) are already documented in structured data. The description restates the filter axes but adds no syntax, format, or default-behavior 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.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (List) plus the resource (risk + condition history for infrastructure features), and clarifies it is history captured automatically when a feature's risk fields change. It distinguishes the 'history' concept from the sibling singular getter get_infrastructure_asset_risk_history_entry, though it does not explicitly contrast with list_asset_risk_history (asset vs infrastructure scope 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 Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides implied usage context by naming the three filter dimensions (feature, source, capture date range) and noting read-only status, which tells an agent when the tool is appropriate. It does not explicitly say when to prefer this over get_infrastructure_asset_risk_history_entry or list_asset_risk_history.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_infrastructure_assetsList infrastructure assetsA
Read-onlyIdempotent

List infrastructure assets (features - segments or nodes). Geometry is returned as GeoJSON (Point for nodes, LineString for segments) in EPSG:4326. Filter by network, feature_type, site, status, asset type, condition score range, or risk score range. Amounts are bare numbers with no currency: call get_organization_settings for currency_code before stating one.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
searchNoSearch by name
site_idNoFilter by site ID
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.
status_idNoFilter by asset status ID
network_idNoFilter by infrastructure network ID
feature_typeNoFilter by feature type
asset_type_idNoFilter by asset type ID
condition_maxNoMaximum condition score (0-100)
condition_minNoMinimum condition score (0-100)
risk_score_maxNoMaximum risk score
risk_score_minNoMinimum risk score
include_deletedNoInclude soft-deleted features ("true") - default "false"

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/destructive=false, so the safety profile is covered. The description adds genuinely useful behavior beyond that: the return shape (GeoJSON Point for nodes, LineString for segments, EPSG:4326) and the currency caveat about bare numbers. It stops short of describing pagination behavior, but it is well above the annotation-only 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 tight sentences that lead with the resource definition, then return format, then filters and the currency caveat. Nothing is wasted, though the filter enumeration is a partial restatement 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?

For a 13-parameter, zero-required list endpoint with no output schema, the description covers resource identity, filter dimensions, geometry return format with CRS, and a cross-tool dependency for currency. Only pagination/result-size behavior is left 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 all 13 parameters are already documented in the schema; the baseline is 3. The description summarizes the filter family and adds the currency-code handling note, but adds no syntax or format detail (e.g., condition/risk score units) 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?

Names a specific verb+resource and clarifies what an 'infrastructure asset' is (features - segments or nodes), so the agent knows this lists infrastructure rather than generic assets. It does not explicitly distinguish itself from the sibling list_assets, which is the most likely confusion point, keeping 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 Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description enumerates the filter dimensions (network, feature_type, site, status, asset type, condition/risk ranges), which implies how to scope a query, and it gives a proactive usage instruction to call get_organization_settings for currency before quoting amounts. However, it never states when to use this tool instead of list_assets or the other infrastructure list endpoints.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_infrastructure_feature_classesList infrastructure feature classesA
Read-onlyIdempotent

List infrastructure feature classes (catalog of classes like water_main, sewer_gravity, pavement). Use the code field as the natural key when referencing a class from a network. Filter by category or is_builtin.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
searchNoSearch by name
categoryNoFilter by category
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.
is_builtinNoFilter by builtin ("true") vs tenant-defined ("false")

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=false and destructiveHint=false, so safety is covered. The description goes beyond that by explaining the catalog's role and the `code` natural-key convention for cross-network references, adding genuine domain 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 purpose, then key convention, then filters. Every sentence earns its place with 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?

For a fully-specified list tool with annotations, the description covers purpose, domain, and the key reference convention. There is no output schema, so a brief note on what fields a returned class contains would have closed the last gap, but 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%, so page, search, category, per_page and is_builtin are all documented in the schema itself. The description restates only two filters (category, is_builtin) and adds no syntax or format detail, so baseline 3 is 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 (List) and resource (infrastructure feature classes) and immediately defines the resource with concrete domain examples (water_main, sewer_gravity, pavement). An agent can distinguish this catalog-listing tool from the many other list_* siblings without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Offers real usage guidance: use the `code` field as the natural key when referencing a class from a network, and filter by category or is_builtin. However, it never contrasts itself with get_infrastructure_feature_class (single-item fetch) or create/update/delete siblings, so the agent must infer that this is the read-many variant.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_infrastructure_lifecycle_eventsList infrastructure lifecycle eventsA
Read-onlyIdempotent

List lifecycle strategy events - condition-triggered maintenance/rehabilitation events keyed on a scope (feature_class code, material, optional diameter band), never on individual features. The events sharing one scope form that scope's strategy; features resolve the most specific matching scope like replacement rates. Filter by feature_class, material, event_class, or is_active. Amounts are bare numbers with no currency: call get_organization_settings for currency_code before stating one.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
materialNoFilter by material (exact string)
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.
is_activeNoFilter by active ("true") vs disabled ("false") events
event_classNoFilter by event type
feature_classNoFilter by feature class code

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 (read-only, idempotent, non-destructive), so the description earns credit for adding domain behavior instead: events are scope-keyed and resolve by most-specific match, and amounts are bare numbers requiring a separate currency lookup. That cross-call currency requirement is behavioral context an agent cannot get from structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, front-loaded with the core scope concept before filters and the currency caveat. Dense but each sentence carries distinct information; the scope-resolution analogy is efficient but slightly abstract.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence 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 partially by flagging that amounts are currency-less and how to resolve currency. For a six-param, zero-required list tool with full annotation coverage, this is sufficient, though return shape (fields, pagination behavior) is only lightly touched.

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 meaningful semantics on top: feature_class and material are described as scope keys (with an optional diameter band) rather than plain filters, and it ties the returned amounts to a currency resolution step. This goes beyond the terse schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

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 (lifecycle strategy events) and immediately scopes it: condition-triggered maintenance/rehabilitation keyed on a scope, never on individual features. This distinction separates it from the sibling list_asset_lifecycle_events, which operates at the feature/asset level, 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 four filters (feature_class, material, event_class, is_active) and gives a concrete cross-tool workflow step: call get_organization_settings for currency_code before stating an amount. It provides clear context for use but does not explicitly state when NOT to use this tool versus list_asset_lifecycle_events; the separation is implied by the scope definition.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_infrastructure_los_targetsList infrastructure LoS targetsA
Read-onlyIdempotent

List technical Level of Service targets for infrastructure. One base target per feature class and metric, set once for the organization. Each network of that class is held to a version adjusted by the network's criticality (an unrated network counts as medium): a lower-is-better target is multiplied by the tier's modifier, a higher-is-better one keeps its distance from a perfect score multiplied by it (condition 70 becomes 82 at a Critical network, 58 at a Low one). Derived targets never leave the metric's scale. Metrics: fci (0-100 percent, lower is better), asset_condition_avg (0-100, higher is better, read with the fixed condition bands), asset_past_useful_life_pct (0-100 percent, lower is better). Average risk is not available for infrastructure. None of these values are money. Filter by feature class, metric or active.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
activeNoFilter by active (true) or paused (false)
metricNoFilter by metric
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.
feature_classNoFilter by feature class code (e.g. "sidewalk")

TDQS

A3.9/5.0
Behavior5/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 description goes well beyond them by disclosing the derivation model (base target per class/metric adjusted by criticality tier, with a worked example), that derived targets stay on the metric scale, that average risk is unavailable for infrastructure, and that none of the values are money. This is genuinely useful interpretive context for a read tool with 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.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose is front-loaded and no sentence is pure filler, but the paragraph is dense and heavily weighted toward derivation math (multiplier example, scale guarantees) that is tangential to invoking a filtered list. It reads more like data-model documentation than tool guidance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description does the work of explaining what the records represent and how to read their values, which is the key gap for this tool. It stops short of describing the response/pagination shape, though the schema notes automatic paging.

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 would be 3, but the description adds meaning over the bare enum by defining each metric's range and direction (fci 0-100 percent lower-is-better, asset_condition_avg higher-is-better read with fixed condition bands, asset_past_useful_life_pct lower-is-better) and by confirming the three filterable dimensions.

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 technical Level of Service targets for infrastructure') and immediately narrows scope to 'one base target per feature class and metric'. An agent understands what is returned, but there is no explicit differentiation from the closely named siblings list_system_los_targets, list_los_proposed_targets, or get_infrastructure_los_target.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The closing 'Filter by feature class, metric or active' implies the intended usage pattern, but the description never states when to choose this listing over list_system_los_targets or get_infrastructure_los_target, and gives no exclusions or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_infrastructure_networksList infrastructure networksA
Read-onlyIdempotent

List infrastructure networks (named groupings of features bound to one feature class). criticality (critical, high, medium, low) sets how strictly a network is held to its feature class's Level of Service targets; null is treated as medium. Filter by feature_class code or text search.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
searchNoSearch by name
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.
feature_classNoFilter by feature class code (e.g. "water_main")

TDQS

A3.5/5.0
Behavior3/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 domain context – what criticality means and that null is treated as medium – but does not cover pagination behavior or return shape, and the criticality discussion risks implying a filter that the schema does not expose.

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 resource and its definition, then the criticality semantics, then filtering, in three tight sentences. The criticality clause 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?

For a read-only list tool with no output schema, the description covers the resource meaning, one attribute's semantics, and available filters. Pagination is handled by the schema, so what remains missing (return shape, sorting) 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%, so page, per_page, search, and feature_class are all documented in the schema itself. The description adds only a restatement of the feature_class/search filters and no format or syntax detail beyond the schema example ('water_main').

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 clear verb+resource (list infrastructure networks) and even defines the resource as 'named groupings of features bound to one feature class'. It does not explicitly distinguish itself from sibling list/get tools such as get_infrastructure_network or list_infrastructure_feature_classes, but the name and definition make the target unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage by naming filters (feature_class code, text search) but never states when to choose this tool over get_infrastructure_network or other list endpoints, nor any prerequisites. Implied rather than explicit guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_infrastructure_zonesList infrastructure zonesA
Read-onlyIdempotent

List operational hydraulic boundaries (pressure zones, DMAs, sewersheds, etc.). Boundary is returned as a GeoJSON Polygon in EPSG:4326. Filter by network or kind.

NameRequiredDescriptionDefault
kindNoFilter by zone kind
pageNoPage number (default: all pages fetched automatically)
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.
network_idNoFilter by infrastructure network ID

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so safety is covered. The description adds real value beyond that by disclosing the return shape (GeoJSON Polygon in EPSG:4326), which the annotations cannot convey and there is no output schema for.

Agents need to know what a tool does to the world before 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: purpose first, return format second, filtering third. 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?

For a read-only list tool, the description covers purpose, filtering, and return format, and annotations cover the safety profile with no output schema required. The only gap is explicit guidance on when to choose this over the single-zone and network list siblings.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all four parameters (kind, page, per_page, network_id) are already documented with enums and formats. The description only restates the two filter dimensions and adds no syntax or format detail beyond the schema, making 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 (List) and a well-defined resource (operational hydraulic boundaries / pressure zones, DMAs, sewersheds), adding domain semantics beyond the tool name. An agent can distinguish it from list_infrastructure_networks and get_infrastructure_zone by the boundary/geometry framing.

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 closing clause 'Filter by network or kind' gives implied usage (how to narrow results), but there is no explicit when-to-use versus get_infrastructure_zone or list_infrastructure_networks, and 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.

list_invoicesList invoicesA
Read-onlyIdempotent

List invoices. Filter by status (pending, approved, paid, voided), vendor, or project. Amounts are bare numbers with no currency: call get_organization_settings for currency_code before stating one.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
searchNoSearch by name
statusNoFilter by status: pending, approved, paid, voided
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.
vendor_idNoFilter by vendor ID
project_idNoFilter by project ID

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 a genuinely non-obvious behavioral fact: amounts are bare numbers with no currency, so a currency_code lookup is required before quoting a figure. It does not describe ordering or default sort, which is 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences with zero filler; the core action is front-loaded and the currency caveat, the highest-value detail, is placed immediately after the filter list.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence 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 a fully documented schema, the description covers purpose, filters, and the one result-format trap an agent would otherwise fall into. Pagination behavior is left to the schema, which already states all pages are fetched automatically, so 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%, so every parameter is already documented in the schema, and the description's status enumeration mirrors the schema rather than extending it. No added syntax, defaulting, or interaction semantics beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("List invoices") and immediately scopes it with the three supported filter axes (status, vendor, project). An agent can distinguish it from the get_invoice / create_invoice / update_invoice siblings from the description 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 actionable guidance on which filters exist and, critically, routes the agent to get_organization_settings when a currency must be stated. It stops short of explicit when-not-use or escalation rules (e.g., when to prefer get_invoice for a single record), so it is clear context without exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_locationsList locationsA
Read-onlyIdempotent

List locations (rooms, floors, areas within buildings). Optionally filter by building or location type.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
searchNoSearch by name
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.
building_idNoFilter by building ID
location_type_idNoFilter by location type ID

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, openWorldHint=false, and destructiveHint=false, so the agent knows this is a safe, repeatable read. The description adds nothing beyond that — no note on pagination/auto-fetch behavior, result volume, or auth requirements — so it earns the baseline, not more.

Agents need to know what a tool does to the world before 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 padding, and the resource clarification is front-loaded before the filtering note. Nothing could be removed without losing information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-required-param list tool with full schema coverage and a complete annotation set, the description supplies enough to invoke correctly. Only minor gaps remain (no mention of pagination semantics or expected result shape, though the schema covers pagination defaults and there is no output schema to explain).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all five parameters (page, search, per_page, building_id, location_type_id) are already documented with types, UUID patterns, and defaults. The description only restates two of the filters in prose, adding no syntax or format detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource and disambiguates the resource ('locations (rooms, floors, areas within buildings)'), which helps separate it from list_buildings. It does not, however, name or contrast itself against the nearest siblings such as list_buildings or list_location_types.

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 'Optionally filter by building or location type' implies the use case (narrowing a location list by parent building or type), but there is no explicit when-to-use statement, no mention of when a different tool such as list_buildings is more appropriate, and no prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_location_typesList location typesB
Read-onlyIdempotent

List location type classifications (e.g., room types, floor types).

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
searchNoSearch by name
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already supply readOnlyHint=true, idempotentHint=true, openWorldHint=false and destructiveHint=false, so the safety profile is fully covered elsewhere. The description only adds semantic context about what a location type represents; it says nothing about result size, ordering, or the auto-pagination behavior that the schema hints at.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler; the parenthetical example earns its place by disambiguating an otherwise abstract classification term. It is tight, though it could have spent one clause on routing to the right sibling.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence 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-parameter, read-only list tool with 100% schema coverage and no output schema, the description supplies enough to invoke correctly. The remaining gap is sibling differentiation in an unusually crowded tool namespace, which is a discovery concern more than an invocation one.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so page, per_page, and search are already documented in the schema, which sets the baseline at 3. The description contributes no additional parameter meaning, such as what name the search matches against.

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 location type classifications') and even defines the resource by example (room types, floor types). It is clear, but it does not distinguish itself from adjacent siblings such as list_locations or list_building_types, which an agent in this very large list_* namespace would need.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no indication of when to call this versus list_locations, list_building_types, or any of the other classification-list tools. With ~150 siblings, there is no guidance on selection, no prerequisites, and no stated exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_los_consequencesList LoS consequencesA
Read-onlyIdempotent

List Level of Service consequences: what a missed technical target means, in the organization's own words. Advisory only: the statement is shown on the Status screen when a target is breached, and no notification is sent to notify_roles or to anyone else. When several match a breach the most specific scope wins (a specific system or feature class over a criticality tier over global). severity is a floor; the severity shown scales with the size of the gap and the facility's criticality. A null metric matches any metric. Filter by scope type, severity or active.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
activeNoFilter by active (true) or paused (false)
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.
severityNoFilter by severity
scope_typeNoFilter by scope type

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover readOnly/idempotent/non-destructive, yet the description adds substantial behavior beyond them: advisory-only, no notification sent to notify_roles, scope-resolution precedence (most specific wins), severity-as-floor scaling, and null-metric matching. This is exactly the extra 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-loaded with purpose before the behavioral rules, and every sentence carries substantive information. Dense but justified; only slightly heavy on stacked clauses.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description explains what the records represent and how they surface (Status screen on breach). Combined with 100% schema coverage and full annotations, an agent has enough 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.

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 meaning beyond the schema: severity acts as a floor whose displayed value scales with gap size and criticality, and a null metric matches any metric. These clarify filter semantics beyond the bare enum lists.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 (LoS consequences) and then defines the domain concept in plain terms: 'what a missed technical target means, in the organization's own words.' Clearly distinguishable from the singular get_los_consequence 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?

Gives clear filtering context ('Filter by scope type, severity or active') and explains matching semantics, but does not explicitly name alternative tools or state when NOT to use this list versus fetching a single consequence. Context is clear without exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_los_measurementsList LoS measurementsB
Read-onlyIdempotent

List LoS measurement values (time-series). Filter by measure, period type, date range, or auto/manual.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
date_toNoFilter measurements up to this date (ISO 8601, inclusive)
is_autoNoFilter by auto-calculated (true) or manual (false)
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.
date_fromNoFilter measurements from this date (ISO 8601, inclusive)
period_typeNoFilter by period type
los_measure_idNoFilter by LoS measure ID

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds only that results are time-series; it says nothing about pagination behavior (which the schema notes is auto-fetched) or result size, so it adds modest value beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact sentences, purpose first and filters second. No filler or redundancy; every clause carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list tool with full parameter documentation and no output schema, the description is nearly sufficient; the time-series hint is helpful. It falls short only on sibling disambiguation and pagination/return-shape expectations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 each parameter already documented (ISO 8601 format, enum values, defaults, max 1000 per page). The description's filter list merely restates the schema fields without adding format or semantic 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 (List) and resource (LoS measurement values), and adds the useful qualifier 'time-series' plus the filterable dimensions. It does not differentiate from the sibling list_los_measures (definitions vs values) or get_los_measurement, which an agent must infer.

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 filter list implies how to narrow results but gives no when-to-use, no when-not-to-use, and no routing to alternatives like list_los_measures or get_los_measurement. The agent is left to infer selection entirely.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_los_measuresList LoS measuresC
Read-onlyIdempotent

List LoS measures. Filter by service area, category, type, data source, or active status.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
typeNoFilter by measure type
searchNoSearch by name
categoryNoFilter by measure category
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.
is_activeNoFilter by active status
data_sourceNoFilter by data source type
service_area_idNoFilter by service area ID

TDQS

C2.9/5.0
Behavior2/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 nothing behavioral beyond the filter list: no mention of automatic multi-page fetching, result volume, or ordering. It essentially restates schema 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?

Two short sentences, purpose front-loaded before the filter enumeration. No filler, though the filter sentence largely duplicates the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

A read-only list tool with zero required parameters and no output schema needs little prose, and the annotations cover the safety profile. However, the description never addresses pagination defaults or what a result item contains, which is the main gap for a list endpoint.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all eight parameters are already documented, including the automatic-pagination behavior for page/per_page. The description's filter enumeration matches the schema exactly and adds no syntax, format, or interaction detail.

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 (LoS measures), so the agent knows exactly what it returns. It does not differentiate from nearby siblings such as get_los_measure or list_los_measurements, which is the only missing piece.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this versus get_los_measure (single record) or list_los_measurements (a different resource). The filter list implies a browsing use case but never states it or names an alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_los_proposed_targetsList LoS proposed targetsA
Read-onlyIdempotent

List proposed levels of service: one row per LoS measure and future year (O. Reg. 588/17 s. 6(1)). A community measure carries target_statement; a technical measure carries target_value, in the measure's own unit (not money). Filter by measure or year.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
yearNoFilter by target year
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.
los_measure_idNoFilter by LoS measure 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 and closed-world, so the safety profile is covered. The description adds genuinely new behavioral context: the shape of each returned row and that community measures carry target_statement while technical measures carry target_value in the measure's own unit (not money). This is useful return-semantics disclosure not present in 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 what is listed and its granularity, then the field semantics, then the filters. Every sentence carries content and none repeats 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 usefully explains row granularity and the community/technical field split, and it names the governing regulation. Pagination behavior is left to the schema. Complete enough for an agent to call and interpret, with only minor gaps such as result 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%, so all four parameters (page, per_page, year, los_measure_id) are already documented in the schema. The description only restates that measure and year are filterable, adding no format or constraint detail beyond the schema. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (List) and resource (proposed levels of service), and goes further by defining the row granularity: one row per LoS measure and future year. This distinguishes it from sibling list tools such as list_los_measures, list_los_measurements and list_los_targets_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?

The closing sentence 'Filter by measure or year' implies how to narrow results, but there is no explicit when-to-use versus alternatives (e.g. list_los_measures or get_los_proposed_target) and no stated exclusions. Usage is implied rather than guided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_los_status_snapshotsList LoS status snapshotsA
Read-onlyIdempotent

List monthly technical Level of Service readings, newest first. Read-only. One reading per tracked pair (a system in a building, or an infrastructure network) and metric per month, recorded the first time anyone opens the Status screen in that month, so a month nobody opened it is missing rather than zero. actual is the measured value and is null when there was no data; base_target is the organization-wide target and derived_target is what that facility was held to at the time, after its criticality was applied; status is exceeding, meeting, below, failing or no_data. fci and asset_past_useful_life_pct are percentages on 0-100 (not fractions), asset_condition_avg is 0-100 and risk_score_avg is 0-25. None of these values are money. Filter by system, building, network, metric, or a period range on period_start.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
metricNoFilter by metric
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.
period_toNoReadings for this month or earlier (YYYY-MM-DD, compared to period_start)
system_idNoFilter by system ID
network_idNoFilter by infrastructure network ID
building_idNoFilter by building ID
period_fromNoReadings for this month or later (YYYY-MM-DD, compared to period_start)

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 description's 'Read-only' is redundant. It earns credit instead for disclosing non-obvious behavior: newest-first ordering and the missing-vs-zero gap semantics for unopened months, which no annotation or schema conveys.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose and ordering, then progressively adds field semantics and units. Dense but nearly every clause carries information an agent needs; a minor trim is possible but nothing is padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description does the work of explaining return values: the meaning of actual (null when no data), base_target vs derived_target, the status enum values, and the units/ranges of fci, asset_past_useful_life_pct, asset_condition_avg, and risk_score_avg. Only pagination/return-shape details are left implicit.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning beyond the schema by clarifying that the period range is compared against period_start and enumerating the filterable dimensions (system, building, network, metric, period).

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 monthly technical Level of Service readings') and adds sorting order ('newest first') plus the unit of observation (one reading per tracked pair and metric per month). An agent can distinguish this from the singular get_los_status_snapshot 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?

Explains when readings exist ('recorded the first time anyone opens the Status screen... a month nobody opened it is missing rather than zero'), which is useful context for interpreting results. However, it never says when to prefer this over alternatives like get_los_status_snapshot or list_los_measurements, 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_los_targets_historyList LoS targets historyA
Read-onlyIdempotent

List recorded changes to a LoS measure's target, minimum and stretch goal, newest first. Recording began on 2026-09-20: a change made before that date left no entry, so an empty list does not mean the target never changed. One entry per measure per day; a second change the same day overwrites that day's entry. Values are in the measure's own unit (not money). Filter by measure ID.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.
los_measure_idNoFilter by LoS measure ID

TDQS

A4.2/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the readOnly/idempotent annotations: it discloses a recording start date (2026-09-20), warns that an empty list does not mean the target never changed pre-backfill, states the one-entry-per-measure-per-day granularity, notes same-day overwrites, and clarifies values are in the measure's own unit rather than money. These are non-obvious, decision-relevant traits an agent could not 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?

Four sentences, front-loaded with the core purpose followed by the caveats that govern interpretation. Every sentence carries information; 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?

With no output schema, the description supplies the return-entry semantics and the two major interpretation traps, which is most of what an agent needs. It leaves unspecified what happens when no measure ID filter is supplied (all measures vs. error), a modest 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 description coverage is 100%, so the schema already documents page, per_page, and los_measure_id. The description only restates the measure-ID filter without adding format or pagination nuance, 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?

Specific verb ('List') plus the exact resource ('recorded changes to a LoS measure's target, minimum and stretch goal') and ordering ('newest first'). An agent can distinguish this from the single-record get_los_targets_history_entry by the list/change-set framing 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 notes that results can be filtered by measure ID and explains how to interpret a result set, but does not state when to prefer this tool over siblings like list_los_measures, list_los_proposed_targets, or get_los_targets_history_entry. 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_manufacturersList manufacturersC
Read-onlyIdempotent

List manufacturers of equipment and assets.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
searchNoSearch by name
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.

TDQS

C2.7/5.0
Behavior2/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 by structured data. The description contributes nothing beyond that — it doesn't mention pagination behavior (all pages auto-fetched), result shape, or search semantics. It does not contradict the annotations, but it adds no behavioral value.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler or repetition. It is efficient, though the brevity reflects under-specification rather than disciplined trimming.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list tool with complete schema documentation, rich annotations, and no output schema, the definition is minimally sufficient. The remaining gap is the absence of any filtering/pagination context or sibling routing, which would help an agent call it accurately in a set of hundreds of list_* 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 description coverage is 100% — page, search, and per_page are each documented in the schema with defaults and limits. The description adds no parameter meaning at all, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a verb+resource ('List manufacturers') and adds a scope qualifier ('of equipment and assets'), but it is essentially the tool title restated and gives no signal distinguishing it from sibling list tools such as list_vendors, list_parts, or get_manufacturer. Purpose is identifiable but not sharpened against alternatives.

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, no indication of when a single-record get_manufacturer is preferable, and no mention of prerequisites or filtering context. The reader must infer all routing from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_part_categoriesList part categoriesA
Read-onlyIdempotent

List part categories used to classify inventory parts. Each has a module: facilities, infrastructure, or null (shared by both); pick one matching the part's workspace, or a shared one.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
moduleNoOnly records in this workspace; none = shared ones only
searchNoSearch by name
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the full safety profile (readOnlyHint, idempotentHint, destructiveHint=false, openWorldHint=false), so the bar is lower. The description adds the shared-vs-scoped nature of categories (null = shared by both workspaces), which is useful semantic context, but says nothing about result size, ordering, or 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with no filler, and the core purpose is front-loaded ahead of the module guidance. The parenthetical module detail is dense but earns its place for correct filtering.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence 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 annotations already covering safety, the description supplies the one piece of domain semantics an agent needs (module scoping). Nothing essential is missing, though return shape and pagination are only implied by 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 all four parameters are already documented, making 3 the baseline. The description's module explanation adds meaning, though it says 'null' while the schema enum value is 'none' — a minor mismatch that slightly weakens the added value.

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 part categories used to classify inventory parts'), which is unambiguous against the CRUD siblings (create/update/delete/get_part_category). It does not explicitly name a sibling to prefer or avoid, so it falls just short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use or when-not-to-use guidance relative to alternatives like get_part_category or list_parts. The sentence 'pick one matching the part's workspace, or a shared one' is guidance for consuming the returned categories, not for selecting this tool, 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_partsList partsA
Read-onlyIdempotent

List parts/inventory items. Filter by site or category. Amounts are bare numbers with no currency: call get_organization_settings for currency_code before stating one.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
searchNoSearch by name
site_idNoFilter by site ID
categoryNoFilter by category (partial match)
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.

TDQS

A3.8/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. The description adds a non-obvious data-semantics fact beyond annotations: amounts are bare numbers with no currency, and it names the tool needed to resolve 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 short sentences, zero waste, and the core action leads before the filter and currency caveats. Every sentence carries a distinct piece of 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 helpfully fills the biggest gap an agent would hit, the currency-less amounts, and pagination defaults are covered by the schema. Slightly more on return shape or filter combination would make it fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents page, search, site_id, category and per_page. The description only restates the site/category filters and adds no format or syntax 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.

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 parts/inventory items') and names the two filter axes, so an agent knows what it returns. It does not, however, distinguish itself from close siblings like list_part_categories or list_asset_parts, 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 Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the filter mention, and there is one genuinely useful instruction: call get_organization_settings for currency_code before quoting an amount. But there is no explicit when-to-use/when-not guidance relative to siblings such as get_part or list_part_categories.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_pm_schedulesList PM schedulesA
Read-onlyIdempotent

List preventive maintenance schedules. Filter by status, frequency, or site. Amounts are bare numbers with no currency: call get_organization_settings for currency_code before stating one.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
searchNoSearch by name
statusNoFilter by status: active, inactive
site_idNoFilter by site ID
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.
frequencyNoFilter by frequency: DAILY, WEEKLY, MONTHLY, QUARTERLY, SEMI_ANNUAL, ANNUAL, FIVE_YEARLY, CUSTOM

TDQS

A3.8/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 safety is covered structurally. The description adds non-obvious behavioral context the annotations cannot: monetary amounts come back as bare numbers and the agent must call get_organization_settings to obtain currency_code before presenting a figure.

Agents need to know what a tool does to the world before 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 waste: purpose first, supported filters second, and the non-obvious currency caveat last. Nothing is padded or 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 read-only list tool with 100% schema coverage, full annotations, and no output schema, the description is nearly sufficient: it names the filters and warns about the currency quirk in returned amounts. Only the differentiation from sibling list tools is left implicit.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter (page, search, status, site_id, per_page, frequency) is already documented in the schema, which sets the baseline at 3. The description's mention of status/frequency/site filters mostly restates that, adding 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.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clear verb+resource ('List preventive maintenance schedules') with the supported filter dimensions named (status, frequency, site). It does not explicitly distinguish itself from the near-identical siblings list_pm_templates or list_compliance_pm_schedules, which is the only gap.

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 filter axes tell the agent how to narrow results, which implies when the tool is useful, but there is no explicit when-to-use vs get_pm_schedule for a single schedule or vs list_compliance_pm_schedules. 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_pm_templatesList PM templatesA
Read-onlyIdempotent

List preventive maintenance templates that can be used to create PM schedules. Amounts are bare numbers with no currency: call get_organization_settings for currency_code before stating one.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
searchNoSearch by name
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only, idempotent, and non-destructive behavior, so the safety profile is done. The description adds a genuinely non-obvious behavioral trait: amounts are returned as bare numbers with no currency and must be paired with get_organization_settings. That output-interpretation caveat is not derivable from 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences: the purpose leads, the currency caveat follows. No filler, no redundancy with the schema or 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 compensates by flagging the currency representation of returned amounts. Pagination is handled by the schema. What remains thin is explicit routing against sibling list/get tools, but for a simple read-only list this is nearly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and all three pagination/search parameters are documented in the schema (including the automatic all-pages behavior). The description adds no parameter-level detail, so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List preventive maintenance templates') and adds scope context ('used to create PM schedules'), which distinguishes it from list_pm_schedules. It does not explicitly name the create/update/delete template siblings, so an agent must still infer the boundary, but the purpose is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to choose this tool versus get/update/create counterparts, nor any stated prerequisites for listing. The only directive ('call get_organization_settings for currency_code') is a downstream interpretation rule, not tool-selection guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_project_assetsList project assetsB
Read-onlyIdempotent

List asset assignments for projects. Filter by project_id or asset_id.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
asset_idNoFilter by asset ID
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.
project_idNoFilter by project ID

TDQS

B3.2/5.0
Behavior2/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 no behavioral context beyond restating the operation, such as pagination behavior or return limits (though those are 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?

Two short sentences, front-loaded with the core purpose and then filter options. 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 read-only list tool with complete parameter documentation and comprehensive annotations, the description is nearly sufficient. It lacks any mention of return values or pagination defaults, but given the absence of an output schema, this 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 description coverage is 100%, so the schema fully documents all four parameters. The description simply echoes the two filter parameters, adding no syntax or format details beyond what is already in the schema. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (List) and resource (asset assignments for projects), distinguishing from siblings like list_assets by the project-asset relationship. However, it does not explicitly differentiate from get_project_asset or list_project_assets in other contexts, 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?

Provides a filter capability but no guidance on when to choose this tool over alternatives such as list_assets or get_project_asset. No when-not conditions 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.

list_project_budget_itemsList project budget itemsA
Read-onlyIdempotent

List project budget line items (labor, materials, equipment, subcontractors, permits, contingency, other). Amounts are bare numbers with no currency: call get_organization_settings for currency_code before stating one.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
categoryNoFilter by budget category
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.
project_idNoFilter by project ID

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, non-destructive behavior, so safety needs no restating. The description adds a non-obvious data trait instead: amounts are bare numbers with no currency attached, which prevents a silent misinterpretation 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, both earning their place, with the resource scope front-loaded and the currency caveat following 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?

With no output schema, the description carries the burden for return-value interpretation and does so by disclosing the currency-less amount format. Minor omission: no indication of the shape or ordering of returned items.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so page, per_page, category and project_id are already fully documented, including the auto-pagination default. The category list in the description merely echoes the enum and adds no filtering syntax or format detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb (List) and resource (project budget line items) and enumerates the categories covered, making it clearly distinct from the singular get_project_budget_item and from list_budgets.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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 cross-tool instruction: call get_organization_settings for currency_code before stating an amount. It does not, however, explain when to prefer this list over get_project_budget_item or list_budgets, so the selection guidance is incomplete.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_project_buildingsList project buildingsA
Read-onlyIdempotent

List building assignments for projects. Filter by project_id or building_id.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.
project_idNoFilter by project ID
building_idNoFilter by building ID

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, non-destructive, and closed-world, so the safety profile is fully covered. The description adds the filtering behavior but doesn't mention the automatic pagination behavior that the schema hints at, nor result ordering. With annotations carrying the behavioral load, 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, front-loaded with the action and resource, followed by the filtering options. No filler, no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple filtered-list tool with full schema coverage and complete annotations, the description is adequate but nothing more. It omits whether both filters can be combined or what happens with no filter, minor gaps that an agent could reasonably want answered.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 filter params, plus pagination, are already documented in the schema. The description only restates that project_id and building_id act as filters, adding no format or combination semantics beyond the schema. Baseline 3 is correct.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List building assignments for projects'), making it clear this returns project-building association records rather than buildings or projects themselves. Siblings like list_project_buildings vs list_buildings vs list_projects exist, and the description distinguishes this by naming the 'assignments' concept, though it doesn't explicitly contrast with those siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states the two filter options (project_id or building_id), which implies when to use each. But it doesn't say whether filters are required, whether they can combine, or when to reach for this versus get_project_building or list_buildings. Usage is implied, not spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_project_commentsList project commentsC
Read-onlyIdempotent

List comments on projects. Supports threaded replies via parent_id.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.
project_idNoFilter by project ID

TDQS

C2.8/5.0
Behavior2/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's only extra claim, 'supports threaded replies via parent_id,' is ambiguous (is it a filter? a return shape?) and references a parameter that the schema does not expose, adding confusion rather than clarity.

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 with no padding and the core purpose front-loaded. Brief, though the second sentence contributes a slightly misleading claim rather than useful information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list tool with no output schema, the description is roughly adequate, but it neither explains the default return scope (all pages fetched automatically per the schema) nor resolves the threading claim it raises.

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 100% so the baseline would be 3, but the description actively muddies parameter understanding by citing parent_id, which is absent from the input schema. That mismatch can mislead an agent into passing a nonexistent argument.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (list comments on projects) that clearly maps to the tool name and distinguishes it from the many list_* siblings. It does not, however, contrast itself with adjacent siblings like list_work_order_comments or list_project_updates, so the differentiation is implicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this versus get_project_comment (single item) or the other comment-listing tools, and no prerequisites or filtering context. The agent must infer usage entirely from the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_project_cost_snapshotsList project cost snapshotsA
Read-onlyIdempotent

List historical cost snapshots for projects. Filter by project_id to see cost trends over time. Amounts are bare numbers with no currency: call get_organization_settings for currency_code before stating one.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.
project_idNoFilter by project 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. The description adds genuinely non-obvious domain behavior: amounts are bare numbers with no currency, and a prerequisite call is required before reporting a currency. It does not additionally note auto-pagination, but that is already 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 short sentences, no padding, and the currency caveat is placed where it will be read before the agent reports figures. 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 usefully compensates by disclosing the currency ambiguity in returned amounts. It does not describe the fields a snapshot contains, but for a simple list tool over fully-documented params this is close to complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% across all three parameters, so the schema already carries param meaning. The description only adds interpretive value for project_id (trends over time); page/per_page semantics come entirely from the schema. Baseline 3 fits.

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 historical cost snapshots for projects') and adds scope ('historical', 'trends over time') that distinguishes it conceptually from the singular get_project_cost_snapshot sibling. It stops short of explicitly naming that sibling or saying it returns the collection rather than one snapshot.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a concrete usage pattern ('Filter by project_id to see cost trends over time') and, notably, routes the agent to another tool ('call get_organization_settings for currency_code before stating one'). It does not name when to use this over get_project_cost_snapshot, but the use context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_project_document_folder_templatesList project document folder templatesB
Read-onlyIdempotent

List project document folder templates for reusable folder structures.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
searchNoSearch by name
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.

TDQS

B3.3/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 openWorldHint=false, covering the safety profile. The description adds nothing about pagination behavior or what happens across pages, which is relevant here given page/per_page params, so it goes only slightly beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single front-loaded sentence with zero waste. Purpose is stated before any elaboration, and there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list tool with a fully-documented schema and no output schema, the definition is minimally adequate. However, it omits pagination notes (all pages auto-fetched) and lacks any sibling differentiation, both of which would help the agent call it correctly in this large toolset.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so page, per_page and search are fully documented in the schema. The description adds no additional semantic detail beyond the schema, which is the baseline case when the schema does all the work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

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 document folder templates') and adds a gloss ('reusable folder structures'). Siblings like get_project_document_folder_template and create_project_document_folder_template make the list/read distinction clear from the verb 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?

No when-to-use guidance, no mention of the get_/create_/update_/delete_ siblings for this resource, no exclusions. The agent must infer that 'list' means enumerate-all from the verb.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_project_documentsList project documentsB
Read-onlyIdempotent

List documents attached to projects. Filter by project_id or folder_id.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
searchNoSearch by name
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.
folder_idNoFilter by folder ID
project_idNoFilter by project ID

TDQS

B3.4/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 covered. The description adds only that it lists documents attached to projects and supports filtering; it does not discuss auth, rate limits, or return behavior. With annotations carrying the behavioral load, 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, front-loaded with the core purpose and followed by the filter options. There is no filler or redundancy, and the structure is appropriate for an API list tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is a simple list operation with five optional parameters, rich read-only annotations, and no output schema. The description covers what it lists and the primary filters, though it omits mention of the search parameter and pagination behavior. Those omissions are minor because the schema documents them fully.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and each of the five parameters is documented in the schema. The description mentions only project_id and folder_id filtering, adding no syntax or nuance beyond the schema. Per the high-coverage baseline, 3 is correct.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (List) and resource (documents attached to projects), which is clear enough for an agent to identify the operation. However, it does not differentiate from related siblings such as list_project_document_folder_templates or get_project_document, 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 Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no explicit when-to-use or when-not-to-use guidance, nor does it name alternative tools. The filter hint ('Filter by project_id or folder_id') is parameter usage, not tool selection guidance. Similar to the MID calibration example, this leaves the agent to infer usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_project_infrastructure_assetsList project infrastructure assetsA
Read-onlyIdempotent

List links between projects and infrastructure features. Filter by project or feature.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.
feature_idNoFilter by infrastructure feature ID
project_idNoFilter by project ID

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. The description adds that the tool returns link relationships and supports filtering, but does not describe authorization needs, return cardinality, or pagination behavior beyond what the schema states.

Agents need to know what a tool does to the world before 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, front-loaded sentences with no filler. The primary purpose is stated first, followed by the filtering capability. 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 list tool with full schema coverage and explicit annotations, the description is nearly complete. It states the listed entity and filtering options; only minor details like return format or pagination defaults are absent, and those are largely covered by the schema descriptions.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all four parameters (page, per_page, feature_id, project_id) are already documented in the schema. The description's 'filter by project or feature' mirrors project_id and feature_id without adding syntax, combination rules, or 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 ('List') and resource ('links between projects and infrastructure features'), making clear this is a junction/association listing distinct from list_project_assets or list_infrastructure_assets. It does not explicitly name sibling tools to differentiate, so not 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 phrase 'Filter by project or feature' implies when to use the tool (to retrieve filtered links), but gives no explicit when-not guidance or mention of alternative tools like get_project_infrastructure_asset for single records. 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_project_locationsList project locationsB
Read-onlyIdempotent

List location assignments for projects. Filter by project_id or location_id.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.
project_idNoFilter by project ID
location_idNoFilter by location ID

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, non-destructive and closed-world behavior, so the safety profile is covered. The description adds nothing behavioral beyond that: it does not mention pagination auto-fetch behavior, result ordering, or what an unfiltered call returns, despite those being relevant to correct invocation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the purpose and then the filtering options; nothing is padded. It stops just short of being maximally useful because the second sentence is largely redundant with the schema parameter descriptions.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple, unparameterized-required list tool with a fully documented schema, the definition is minimally adequate. With no output schema, however, it could usefully say what a location assignment record contains (e.g., project-location pairing) and confirm behavior for an unfiltered call, which it omits.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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% – all four parameters are documented in the schema, including the auto-pagination semantics of page/per_page. The description restates project_id and location_id as filters without adding format, default, or combinatorial detail, so the schema does the real work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List location assignments for projects'), which is more informative than the plain title. It does not explicitly distinguish itself from siblings such as get_project_location or list_projects, but the resource ('location assignments for projects') is narrow enough to be unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The second sentence implies how the tool is scoped (filter by project_id or location_id), which gives some usage signal. However, it never says when to use this list tool versus get_project_location or a broader list_locations, and there are no stated preconditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_project_milestonesList project milestonesA
Read-onlyIdempotent

List project milestones. Filter by project or status (pending, completed, missed, at_risk).

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
searchNoSearch by name
statusNoFilter by milestone status
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.
project_idNoFilter by project ID

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 fully covered by structured data. The description adds filter scoping but nothing about result ordering, pagination semantics, or default behavior — though those live in the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with no filler, and the core action is front-loaded before the filter list. Slight redundancy in repeating the enum values that already appear in 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 zero-required-parameter read-only list tool with full schema coverage, complete annotations, and no output schema, the description covers the essentials. It could be richer by noting default full-pagination behavior, but 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 every parameter is already documented; the description merely restates the status enum values and the filterable fields. Baseline 3 applies since the schema carries 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 ('List') and resource ('project milestones'), which distinguishes it from the create/update/delete/delete siblings and from list_projects. However it does not explicitly distinguish itself from get_project_milestone, which retrieves a single milestone.

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 names the two filter axes (project, status) and enumerates the status values, which implies when to use the tool, but offers no explicit when-to-use versus alternatives such as get_project_milestone or list_projects.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_project_phase_categoriesList project phase categoriesB
Read-onlyIdempotent

List project phase categories (e.g., Planning, Design, Execution). Sorted by sort_order.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
searchNoSearch by name
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.

TDQS

B3.2/5.0
Behavior3/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 fully covered by structured data. The description adds only the ordering guarantee (sorted by sort_order), which is genuinely useful but modest.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the resource and followed by the ordering fact; nothing is wasted or buried. It is not padded, though it is minimal rather than rich.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence 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 category listing with no output schema and fully documented parameters, the description plus annotations cover what an agent needs to call it correctly. Only the missing relationship to sibling project-phase tools keeps it from a 5.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and all three parameters (page, search, per_page) are documented in the schema, including defaults and the automatic all-pages behavior. The description adds nothing about parameters, 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 (List) and resource (project phase categories) and clarifies the domain with examples (Planning, Design, Execution). It does not differentiate itself from the similarly-named list_project_phases sibling, but the resource is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use or when-not-to-use guidance, no mention of prerequisites, and no pointer to alternatives such as list_project_phases or the create/update/delete counterparts. The agent must infer usage entirely from the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_project_phasesList project phasesA
Read-onlyIdempotent

List project phases. Filter by project or status (pending, in_progress, completed, skipped).

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
statusNoFilter by phase status
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.
project_idNoFilter by project ID

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered elsewhere. The description adds no behavioral context beyond the enum values (which live in the schema) – nothing about pagination auto-fetch or result shape.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the operation and followed by the filter facets. No wasted words, though it is arguably too terse to earn a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list tool with full schema coverage, complete annotations and no output schema, the description conveys what is listed and how it can be filtered. Sufficient to call it correctly, despite missing sibling differentiation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so page, per_page, status and project_id are all documented in the schema. The description only restates the status enum values, adding no syntax or semantics beyond what structured data already provides – baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ("List") and resource ("project phases") plus the filterable facets, so the operation is unambiguous. It does not name or distinguish itself from closely related siblings like get_project_phase (singular fetch) or list_project_phase_categories.

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 mention of filtering by project/status signals "pull phases for a project or a status," but there is no when-to-use/when-not guidance and no routing to alternatives such as get_project_phase. 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_project_risksList project risksB
Read-onlyIdempotent

List project risks (risk register). Filter by project, status, category, probability, or impact.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
impactNoFilter by impact level
searchNoSearch by name
statusNoFilter by risk status
categoryNoFilter by risk category
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.
project_idNoFilter by project ID
probabilityNoFilter by probability

TDQS

B3.4/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, so the safety profile is covered. The description adds the filtering dimensions beyond the schema, which is useful context, but doesn't disclose pagination defaults or return behavior — though the schema's pagination descriptions partially cover this.

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 action and aliased resource, followed by filter dimensions. Efficient with no wasted words, though it could be tighter.

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?

A read-only list tool with annotations covering safety and a fully-described schema; the description is minimally sufficient. It doesn't mention pagination behavior (the default fetches all pages automatically), which is relevant context hidden in the schema, but an agent could still 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 all eight parameters are documented in the schema itself. The description repeats the filter list (project, status, category, probability, impact) but adds no syntax, enum values, or format details beyond what the schema provides. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

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 (project risks / risk register), clearly distinct from the many create/update/delete siblings. It doesn't explicitly differentiate from the get/list_project_risk siblings, but the resource is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description lists filters but gives no guidance on when to use this tool versus alternatives like get_project_risk. In a catalog with hundreds of list_* and get_* tools, some routing context would help, but usage is implied for a filterable list.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_projectsList projectsA
Read-onlyIdempotent

List capital projects. Filter by status or health status (on_track, at_risk, delayed, critical). Amounts are bare numbers with no currency: call get_organization_settings for currency_code before stating one.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
searchNoSearch by name
statusNoFilter by project status
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.
health_statusNoFilter by health: on_track, at_risk, delayed, critical

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish the safe read-only profile, so the bar is lower, yet the description adds genuinely useful cross-tool context: amounts are bare numbers and get_organization_settings must be called for currency_code. This is behavioral guidance not present in the schema or annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with the core action, then filters, then the currency caveat. No filler or repetition beyond the schema-echoed enums.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence 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 flags the amounts/currency issue, and pagination behavior is covered by the schema defaults. It stops short of describing the return shape, but for a straightforward list tool this is close to complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents page, search, status, per_page, and health_status. The description's list of health enum values merely repeats the schema's own enumeration, adding no new semantic detail. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List capital projects'), which an agent can distinguish from the many other list_* siblings by the resource noun. It does not explicitly route between similar tools (e.g. list_project_tasks), but the resource is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the filtering guidance ('Filter by status or health status') but there is no explicit when-to-use/when-not or named alternative among the large list_* sibling set. 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_project_sitesList project sitesA
Read-onlyIdempotent

List site assignments for projects. Filter by project_id or site_id.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
site_idNoFilter by site ID
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.
project_idNoFilter by project ID

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations fully cover the safety profile (readOnly, idempotent, non-destructive, closed-world), so the description isn't required to restate it. It adds no behavioral context beyond that – no note on automatic pagination behavior, result ordering, or what a 'site assignment' record 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 short sentences, zero filler, with the core action stated first and the filtering options second. Nothing to trim.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list tool whose annotations and schema are complete, this is minimally adequate. With no output schema, the description could say what a returned assignment looks like, and given the dense cluster of sibling 'site' list tools it should identify itself more distinctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all four parameters including UUID formats and pagination defaults. The description only echoes the two filter parameters and ignores page/per_page, adding negligible meaning. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List site assignments for projects'), which is clearer than a bare 'list_project_sites' restatement. However, it does not differentiate from close siblings such as list_project_locations, list_contract_sites, or list_vendor_site_assignments, so an agent can't tell it apart from them without schema inspection.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Filter by project_id or site_id' implies the intended usage (retrieve assignments scoped to a project or site), but there is no explicit when-to-use, when-not-to-use, or named alternative. The filter hint is the only routing signal.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_project_system_classesList project system classesB
Read-onlyIdempotent

List system class assignments for projects. Filter by project_id or system_class_id.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.
project_idNoFilter by project ID
system_class_idNoFilter by system class ID

TDQS

B3.2/5.0
Behavior2/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 nothing behavioral beyond that: no note on result shape, no mention of how the assignment records are structured, and no pagination context (which only the schema supplies).

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 resource statement front-loaded and zero filler, which is the right shape for a simple list tool. The brevity, however, borders on under-specification rather than efficient conciseness.

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 four-parameter, zero-required list tool with full schema coverage and complete safety annotations, the description is minimally adequate. It stops short of clarifying what an 'assignment' contains or how the two filters interact, but no output schema exists to carry that burden.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so page, per_page, project_id and system_class_id are already documented. The description's 'Filter by project_id or system_class_id' merely restates the schema without adding syntax, combination semantics, or whether both filters can be applied together.

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 (system class assignments for projects), so an agent knows this returns the project-to-system-class join records rather than the classes themselves. It does not explicitly distinguish itself from near siblings like list_project_system_groups or list_system_classes, leaving that to inference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the retrieval use case and points at the two filter keys, but names no alternatives and gives no when-to-use/when-not guidance. An agent must infer that list_system_classes or list_service_area_system_classes is the right sibling when project scoping is irrelevant.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_project_system_groupsList project system groupsA
Read-onlyIdempotent

List system group assignments for projects. Filter by project_id or system_group_id.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.
project_idNoFilter by project ID
system_group_idNoFilter by system group ID

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, and destructiveHint=false, so the safety profile is fully covered. The description adds that these are association/assignment records, which is mild extra context, but says nothing about pagination (despite page/per_page params) or return shape. A 3 fits given the lower bar set by annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

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 filtering hint following immediately. Nothing is padded or 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 simple read-only list tool with full annotation coverage, complete schema descriptions, and no output schema to explain, the description is nearly sufficient. It could optionally note pagination behavior or how this differs from list_system_groups, but 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 all four parameters (page, per_page, project_id, system_group_id) are already documented in the schema. The description names the two filter params but adds no semantics beyond what the schema states. 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 (List) and resource (system group assignments for projects), which is meaningfully more precise than sibling list_system_groups. However, it does not explicitly differentiate itself from close siblings like list_project_systems or list_system_groups, leaving the agent to infer the join-table semantics.

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 hints at usage via 'Filter by project_id or system_group_id', indicating the two useful retrieval modes. It gives no when-to-use guidance, no exclusions, and no named alternatives among the many list_* siblings, 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_project_systemsList project systemsB
Read-onlyIdempotent

List system assignments for projects. Filter by project_id or system_id.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.
system_idNoFilter by system ID
project_idNoFilter by project ID

TDQS

B3.1/5.0
Behavior2/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 no behavioral context beyond that baseline — nothing about pagination behavior, ordering, or what an empty result means — so it earns little credit here.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short, front-loaded sentences with no filler. The second sentence is slightly redundant against the schema's parameter descriptions, keeping it from a perfect score.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence 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, optional-parameter, read-only list tool with no output schema and full annotation coverage, the definition supplies enough to invoke it correctly. It could be richer about result shape and how assignments relate to projects/systems, but 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%, so page, per_page, system_id and project_id are all documented in the schema with formats and ranges. The description merely names the two filter parameters, which the schema already does, 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 ('List') and a specific resource ('system assignments for projects'), so it clearly reads as the project↔system association list, not a plain system list. It stops short of explicitly differentiating itself from close siblings like list_systems or list_project_system_classes/groups, which is why it isn't a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description only says 'Filter by project_id or system_id', which restates the schema filter parameters rather than telling the agent when to reach for this tool over list_projects, list_systems, or get_project_system. There is no context, prerequisite, or exclusion guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_project_task_dependenciesList project task dependenciesB
Read-onlyIdempotent

List task dependencies. Filter by task_id or depends_on_task_id to see dependency chains.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
task_idNoFilter by task ID
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.
dependency_typeNoFilter by dependency type
depends_on_task_idNoFilter by depended-on task ID

TDQS

B3.3/5.0
Behavior2/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 no behavioral context beyond that — no note on default scope when unfiltered, result ordering, or that pagination is auto-completed (that detail lives only 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?

Two short clauses with zero filler; the core action is front-loaded and the filter guidance follows immediately. Nothing needs trimming.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 5-parameter, zero-required list tool with no output schema, the definition tells the agent what it returns (dependency records) but omits what happens when called with no filters, the shape of the chain results, and how it relates to the singular get tool. Adequate but with clear gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter is already documented in the schema and the baseline of 3 applies. The description restates task_id and depends_on_task_id with the added idea of dependency-chain traversal, which is a marginal, not substantial, gain.

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 task dependencies) that an agent can map directly to the tool. It does not, however, differentiate itself from nearby siblings such as list_project_tasks or get_project_task_dependency, so the distinction rests on 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?

It implies usage by naming the two filter parameters and the purpose of filtering ('to see dependency chains'), which tells the agent how to get a chain view. There is no explicit guidance on when this list tool is preferable to the singular get_project_task_dependency or to list_project_tasks.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_project_tasksList project tasksA
Read-onlyIdempotent

List project tasks (work breakdown structure). Filter by project, phase, status, or priority. Amounts are bare numbers with no currency: call get_organization_settings for currency_code before stating one.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
searchNoSearch by name
statusNoFilter by task status
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.
phase_idNoFilter by phase ID
priorityNoFilter by priority
project_idNoFilter by project ID

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), so the bar is lower. The description adds a genuinely valuable behavioral trait beyond the schema: amounts come back as bare numbers with no currency, and get_organization_settings must be called for currency_code before quoting one. That cross-tool dependency is real context the annotations could not supply.

Agents need to know what a tool does to the world before 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 purpose and scope, then filters, then the one non-obvious caveat. 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 read-only list tool with no output schema, the description covers purpose, filters and the crucial currency caveat that the schema cannot express. It stops short of describing the returned task fields or pagination behavior, but the annotation and schema already handle pagination, 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% and every parameter is documented in the input schema, so baseline 3 applies. The description names four filterable dimensions but adds no syntax or semantics beyond what the schema already provides for those fields.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List project tasks') and clarifies the domain with '(work breakdown structure)', which distinguishes it from task-dependency and phase listers. It does not explicitly name a sibling or state scope limits, but the resource is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The filter list ('project, phase, status, or priority') implies when the tool is useful, and the currency note hints at a follow-up workflow. However, it never says when to prefer this over get_project_task or list_project_task_dependencies, so usage is inferred rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_project_team_membersList project team membersA
Read-onlyIdempotent

List project team members. Filter by project, user, or active status.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
searchNoSearch by name
user_idNoFilter by user ID (Clerk ID)
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.
is_activeNoFilter by active status ("true" or "false")
project_idNoFilter by project ID

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered. The description adds only the filtering dimensions and no extra behavioral context such as ordering or default result scope, so it meets but does not exceed the lower bar set by 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?

Two short sentences with zero filler, and the purpose statement is front-loaded ahead of the filter summary. Nothing is redundant with the title or restated unnecessarily.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence 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-parameter read-only list tool with full schema documentation and no output schema, the description supplies enough to select and call it; pagination semantics are covered inside the schema property descriptions. Only minor gaps remain (no statement of default sort/scope when unfiltered).

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 filter list glosses project_id, user_id and is_active but omits search, page and per_page, adding little meaning 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 names a specific verb and resource ('List project team members') and scopes it with the available filter dimensions. It is clearly distinguishable from the sibling get_project_team_member (single record) and create/update/delete variants, though it doesn't explicitly say so.

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?

'Filter by project, user, or active status' implies when this tool is useful (retrieving memberships under a scope), but no alternative is named and no when-not condition is given. A reader must infer that this is the enumeration counterpart to the single-record getter.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_project_time_entriesList project time entriesA
Read-onlyIdempotent

List project time entries for labor tracking. Filter by project, task, or user.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
task_idNoFilter by task ID
user_idNoFilter by user ID
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.
project_idNoFilter by project ID

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds only the labor-tracking domain framing and the presence of filters; it says nothing about result volume, pagination, or ordering that isn't already 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?

Two short, front-loaded sentences with no filler. 'For labor tracking' is marginal but does orient the reader; otherwise 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?

For a simple read-only list tool with full schema coverage, strong annotations, and no output schema or nested objects, the description is sufficient to call it correctly. Only the filtering/pagination behavior narrative is missing, which the schema already 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 100%, so all five parameters are already documented with defaults, ranges and formats. The description names three filter dimensions (project, task, user) but adds no syntax or semantics beyond the schema. 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 ('List project time entries') and adds the domain purpose ('for labor tracking'). It separates itself from the singular sibling get_project_time_entry by implying a collection read, though it does not name 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?

'Filter by project, task, or user' implies when the tool is useful, but there is no explicit when-to-use statement, no prerequisites, and no named alternative (e.g., get_project_time_entry for a single record). Usage must be inferred.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_project_updatesList project updatesA
Read-onlyIdempotent

List periodic project updates (status reports). Filter by project, timeframe, or year.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
searchNoSearch by name
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.
timeframeNoFilter by timeframe
project_idNoFilter by project ID
period_yearNoFilter by year

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 fully covered by structured data. The description adds the 'periodic/status report' semantic framing of the resource, which is modestly useful, but says nothing about pagination behavior, sorting, or result volume beyond what the schema states.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the core action and followed by the filtering capability. No redundant or filler text; every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list tool with no output schema, the safety annotations and full schema coverage carry most of the burden. The description is minimally adequate but omits any sibling disambiguation (list_projects, get_project_update) and any note on result scope, which would help an agent pick correctly among the many list_* 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 description coverage is 100%, so all six parameters are documented in the schema itself. The description's mention of 'project, timeframe, or year' loosely maps to project_id, timeframe, and period_year but adds no syntax or default 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.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb (List) and resource (project updates) and clarifies with '(status reports)', which disambiguates the resource's meaning. However, it does not distinguish this tool from siblings like get_project_update or list_projects, so the agent must infer from context that this is the batch read path.

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?

'Filter by project, timeframe, or year' implies usage (retrieval with optional filters) but gives no explicit when-to-use, when-not-to-use, or alternatives. It does not, for example, contrast itself with get_project_update for fetching a single record.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_purchase_order_linesList purchase order linesA
Read-onlyIdempotent

List purchase order line items: description, optional part, quantity, unit_cost and quantity_received. Filter by purchase_order_id or part_id. A PO with lines takes its amount from them. unit_cost is a bare number with no currency: call get_organization_settings for currency_code before stating one.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
part_idNoFilter by part ID
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.
purchase_order_idNoFilter by purchase order ID

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint=false and destructiveHint=false, so safety is covered. The description adds real context beyond them: the exact fields returned, the derivation rule that a PO amount comes from its lines, and the important caveat that unit_cost carries no currency so currency_code must be fetched separately.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences with the returned fields front-loaded, then filters, then the currency caveat. Every sentence carries information; 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?

With no output schema, the description compensates by naming the returned fields, and it flags the currency ambiguity an agent would otherwise get wrong. Pagination behavior is left to the schema, which documents it, so nothing critical is missing for a zero-required-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 100%, so page/per_page/part_id/purchase_order_id are already documented; baseline 3 applies. The description restates the two filter parameters without adding format, default, or pagination detail 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?

State a specific verb and resource (list purchase order line items) and enumerates the returned fields (description, optional part, quantity, unit_cost, quantity_received) plus the filter keys. It is clearly distinguishable from list_purchase_orders and get_purchase_order_line by name and content, though it never names a 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?

It states which parameters filter the result (purchase_order_id or part_id) and adds a follow-up call instruction (get_organization_settings for currency_code), which is useful operating guidance. However, it never says when to prefer this over get_purchase_order_line or list_purchase_orders, leaving the choice to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_purchase_ordersList purchase ordersA
Read-onlyIdempotent

List purchase orders. Filter by status (draft, issued, partially_received, received, closed, cancelled), vendor, or project. Amounts are bare numbers with no currency: call get_organization_settings for currency_code before stating one.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
searchNoSearch by name
statusNoFilter by status: draft, issued, partially_received, received, closed, cancelled
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.
vendor_idNoFilter by vendor ID
project_idNoFilter by project ID

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so safety is covered. The description adds genuinely new behavior: amounts are bare numbers with no currency, requiring a separate call to get_organization_settings before stating a figure. That is a non-obvious cross-tool dependency the schema does not 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?

Three short sentences, front-loaded with purpose then filters then the currency caveat — no filler. Minor redundancy in re-listing the status values that already appear in the schema keeps it from a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list tool with no output schema, six optional params and full schema coverage, the description supplies the key missing context (core return semantics via the currency caveat). It could be richer about return shape or pagination behavior, but the essentials are 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 all six parameters are already documented (including the status enum, which the description merely repeats). The description adds no syntax or format detail beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('List purchase orders') and enumerates the available filter dimensions (status, vendor, project), letting an agent distinguish it from get_purchase_order or list_purchase_order_lines at a glance. It does not name siblings explicitly, so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use it (to browse/filter purchase orders) and gives one concrete directive — call get_organization_settings for currency_code before quoting an amount. There is no explicit when-not guidance or named alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_service_areasList service areasA
Read-onlyIdempotent

List service areas (Level of Service groupings). Filter by active status or search by name.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
searchNoSearch by name
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.
is_activeNoFilter by active status (true/false)

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint=false, and destructiveHint=false, so the safety profile is fully covered by structured data. The description adds only the domain gloss on 'service areas' and the filter options; it says nothing about scope, result volume, or return shape. With annotations carrying the behavioral load, 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, zero filler, with the resource identity front-loaded ahead of the filter options. It is well-sized, though the parenthetical is the only elaboration and nothing is said about output, so not quite a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list tool with full schema coverage and no output schema, the description is close to sufficient: it identifies the resource and the filtering capability. Pagination behavior is left to the schema, which documents it, so no critical gap remains, though a nod to result scope would make it fully self-contained.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all four parameters (page, per_page, search, is_active) are already documented in the schema. The description restates two of them (active status, search by name) without adding format or syntax detail beyond the schema, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource ('List service areas') and adds a clarifying parenthetical that these are 'Level of Service groupings', which disambiguates the domain term. It does not explicitly differentiate itself from closely named siblings such as get_service_area, list_service_area_sites, or list_service_area_system_classes, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states the available filters ('Filter by active status or search by name'), which implies the intended usage, but offers no when-to-use/when-not guidance and does not name alternative tools. Usage is inferable but not explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_service_area_sitesList service area sitesA
Read-onlyIdempotent

List site links for service areas. Filter by service_area_id or site_id.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
site_idNoFilter by site ID
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.
service_area_idNoFilter by service area ID

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 by structured data. The description adds nothing behavioral beyond that — no note on pagination behavior (which lives only in the schema) or result size. With annotations carrying the burden, 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, front-loaded sentences with zero filler. The purpose is stated first and the filter capability second, which is exactly the priority order for an agent scanning tools.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence 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 filtered list tool with full schema coverage and complete annotations, the description is nearly sufficient: it names the returned entity (site links) and the filter keys. The only gap is that no output schema exists, so result shape and pagination semantics depend entirely on the schema's parameter descriptions rather than the tool 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 description coverage is 100%, so all four parameters (page, per_page, site_id, service_area_id) are already documented in the schema. The description confirms the filter semantics for two of them but adds no syntax, format, or interaction detail (e.g., whether filters are ANDed). Baseline 3 when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

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 (site links for service areas), which distinguishes it from the neighboring list_sites and list_service_areas tools since it targets the association between them. It does not explicitly name a sibling, but the resource phrasing is distinctive enough to identify the 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?

"Filter by service_area_id or site_id" implies when each filter is useful, giving some context for invocation. However, there is no guidance on when to use this tool versus list_service_areas, list_sites, or list_service_area_system_classes, and no mention that both filters can be combined.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_service_area_system_classesList service area system classesB
Read-onlyIdempotent

List system class links for service areas. Filter by service_area_id or system_class_id.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.
service_area_idNoFilter by service area ID
system_class_idNoFilter by system class ID

TDQS

B3.4/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 a closed-world scope, so the safety profile is fully covered by structured data. The description confirms it is a read/list operation but adds no behavioral detail beyond that, such as whether unfiltered calls return everything or default page 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?

Two short sentences with zero filler, and the core purpose is front-loaded ahead of the filter detail. It is efficient, though extremely terse for a tool with four parameters.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list tool with full schema coverage and complete annotations, the description covers purpose and filters adequately. However, with no output schema present, it gives no hint about the shape of returned link records or pagination defaults, 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%, so both filter parameters are already documented in the schema; the description merely restates their names without adding matching semantics (e.g., UUID format, whether either filter is required, or AND/OR behavior when both are supplied). Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('List system class links for service areas'), making clear this returns join/link records rather than the system classes or service areas themselves. It is distinguishable in substance from siblings like list_system_classes or list_service_areas, though it does not name 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 Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Filter by service_area_id or system_class_id' implies when the tool is useful (scoping links to one service area or one class) but gives no explicit when-to-use guidance or when to prefer a different sibling (e.g., list_service_area_sites or get_service_area). Usage is inferred rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_site_fci_historyList site FCI historyA
Read-onlyIdempotent

List Facility Condition Index (FCI) history for sites. fci_value is deferred renewal cost divided by current replacement value, a fraction where LOWER is healthier: below 0.05 good, 0.05-0.10 fair, 0.10 and above poor. It is not a 0-100 condition score. To chart one site, use show_site_fci_trend.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
site_idNoFilter by site ID
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.

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, so the safety profile is covered. The description adds genuine domain context beyond that: it defines fci_value as deferred renewal cost over replacement value and warns it is NOT a 0-100 score, which materially affects interpretation. It does not describe return shape or pagination, keeping it below 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each load-bearing: definition, interpretation scale with explicit disambiguation, and sibling routing. Front-loaded and free of filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, and the description compensates by explaining the units and interpretation of the key fci_value field. Pagination behavior is left to the schema, which documents it thoroughly, so nothing critical is missing, though return-field structure is only partially addressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the description adds no parameter-level detail (page, per_page, site_id are all documented in the schema). Baseline 3 applies when structured fields carry the 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 ('List ... FCI history for sites') and explicitly distinguishes itself from the sibling show_site_fci_trend by naming the alternative and its condition. 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?

Gives an explicit alternative ('To chart one site, use show_site_fci_trend') tied to a concrete condition (charting a single site), which is exactly the when-to-use-this-vs-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.

list_sitesList sitesA
Read-onlyIdempotent

List all sites (physical locations/campuses) in your organization. Amounts are bare numbers with no currency: call get_organization_settings for currency_code before stating one.

NameRequiredDescriptionDefault
cityNoFilter by city name
pageNoPage number (default: all pages fetched automatically)
searchNoSearch by name
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only, idempotent, non-destructive, and closed-world behavior. The description goes beyond them by disclosing that amount fields are bare numbers with no currency and by prescribing a cross-tool call to get_organization_settings before stating a currency value—useful operational context that annotations do not provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tightly written sentences with no filler. The purpose is front-loaded, and the currency-handling note is concise and actionable; nothing needs to 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 simple list tool with rich annotations and full schema coverage, the description supplies the essential purpose and a key return-value caveat. It does not explain the shape of a site record (there is no output schema) or clarify the site/location boundary, but what is present is enough to invoke the tool safely.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so city, page, search, and per_page are fully documented in the schema itself. The description adds no parameter-level meaning, making the baseline of 3 appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a clear verb and resource ('List sites'), defines sites as physical locations/campuses, and scopes to the organization. However, it does not distinguish list_sites from sibling list_locations or list_buildings, leaving ambiguity about what a 'site' is versus a 'location'.

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 starting with 'List all sites' and gives a specific follow-up instruction for currency, but it never states when to choose list_sites over alternatives like list_locations or get_site, nor does it mention exclusions. Guidance is therefore 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.

list_system_classesList system classesB
Read-onlyIdempotent

List system classes (top-level classification, e.g., "HVAC", "Plumbing", "Electrical").

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
searchNoSearch by name
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.

TDQS

B3.3/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 semantic domain context via examples but no additional operational behavior beyond what the annotations and schema pagination notes already 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?

A single front-loaded sentence with no wasted text. The parenthetical examples earn their place by making the resource concrete.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list tool with fully documented optional parameters and annotation-covered safety, the description is adequate but incomplete. It does not resolve ambiguity with sibling tools such as list_project_system_classes or list_service_area_system_classes, which matters in this large toolset.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 documents page, search, and per_page fully. The description adds no parameter-level semantics, so the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('List') and resource ('system classes'), and adds a clarifying parenthetical definition with examples such as HVAC, Plumbing, and Electrical. It does not differentiate this tool from sibling list tools like list_systems or list_project_system_classes, so it is clear but lacks sibling disambiguation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no explicit when-to-use guidance, prerequisites, or alternatives. An agent must infer usage from the tool name alone, and the many similar list_* siblings make that inference risky.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_system_groupsList system groupsB
Read-onlyIdempotent

List system groups (categories of systems, e.g., "Heating", "Cooling"). Optionally filter by system class.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
searchNoSearch by name
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.
system_class_idNoFilter by system class ID

TDQS

B3.4/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 fully covered structurally. The description adds only the semantic framing of what a system group is, with no mention of pagination behavior or result size, which the schema handles instead.

Agents need to know what a tool does to the world before 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 clauses, zero filler, and the resource definition is front-loaded before the optional filter note. Every element 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 zero-required-parameter read-only list tool with full annotation and schema coverage and no output schema, this is nearly enough. The remaining gap is disambiguation from the project-scoped sibling list_project_system_groups, which an agent may easily confuse with this one.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all four parameters (page, search, per_page, system_class_id) are documented in the schema itself, including the auto-fetch pagination behavior. The description adds nothing beyond echoing the system_class filter, which matches the baseline of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List system groups') and adds a clarifying gloss with examples ('categories of systems, e.g., "Heating", "Cooling"'), so the agent knows what a system group is. It does not, however, distinguish this global list from the sibling list_project_system_groups.

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 only guidance is 'Optionally filter by system class,' which is parameter behavior rather than when-to-use advice. Nothing tells the agent when to pick this over list_project_system_groups or list_systems, or whether it needs a project context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_system_los_targetsList system LoS targetsA
Read-onlyIdempotent

List technical Level of Service targets for building systems. One base target per system and metric, set once for the organization. Each building is held to a version adjusted by its criticality: a lower-is-better target is multiplied by the tier's modifier, a higher-is-better one keeps its distance from a perfect score multiplied by it (condition 70 becomes 82 at a Critical facility, 58 at a Low one). Derived targets never leave the metric's scale. Metrics: fci (0-100 percent, lower is better), asset_condition_avg (0-100, higher is better, read with the fixed condition bands), asset_past_useful_life_pct (0-100 percent, lower is better), risk_score_avg (0-25, lower is better). None of these values are money. Filter by system, metric or active.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
activeNoFilter by active (true) or paused (false)
metricNoFilter by metric
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.
system_idNoFilter by system ID

TDQS

A4/5.0
Behavior5/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 substantial domain behavior beyond annotations: the base-target model, how criticality modifies building-level targets, the scale constraint on derived targets, and metric ranges and directionality. That is unusually rich behavioral context for interpreting the returned 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?

The purpose is front-loaded in the first sentence, and the remaining detail is mostly domain context needed because there is no output schema. It is somewhat lengthy and would be easier to scan with bullets for the metric list, but no sentence is clearly irrelevant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence 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 explains what the targets represent, how building-level targets are derived, and what the metric values mean. It covers the important filterable dimensions and value semantics, though it does not describe the exact response shape or field names.

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 parameters are already documented at a baseline level. The description goes further for the metric filter by naming and defining all four enum values with their scales and whether lower or higher is better, which the schema's enum alone does not provide. It adds little for page, per_page, or system_id beyond what the schema already says.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: listing technical Level of Service targets for building systems, with one base target per system and metric. It does not explicitly distinguish this tool from close siblings such as list_infrastructure_los_targets or list_los_proposed_targets, so an agent gets a clear purpose but must infer the boundary from the name.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description says results can be filtered by system, metric, or active status, which implies the retrieval use case, but it never states when to choose this tool over sibling list tools such as list_los_proposed_targets or list_los_targets_history. Usage is therefore implied rather than guided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_systemsList systemsB
Read-onlyIdempotent

List systems (e.g., HVAC units, plumbing systems, electrical systems). Optionally filter by system group.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
searchNoSearch by name
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.
system_group_idNoFilter by system group ID

TDQS

B3.2/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 structurally. The description adds the domain examples but nothing about pagination behavior (which the schema already covers) or result shape, so it is adequate but thin.

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 clauses, one sentence, with the verb and resource front-loaded. Every word earns its place, though the brevity leaves the definition slightly under-specified for a tool in such a dense sibling set.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence 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, non-paginated-surface list tool with 100% schema coverage and full annotations, the essential information is present, and no output schema means return values need not be explained. It misses only marginal context like ordering or default result size.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all four parameters are already documented (page, per_page, search, system_group_id). The description's mention of filtering by system group restates what the schema already states, adding no syntax or format detail beyond it, making the baseline 3 appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('List') and resource ('systems') and reinforces the domain with concrete examples (HVAC units, plumbing systems, electrical systems). It does not differentiate itself from adjacent list tools such as list_system_groups or list_system_classes, 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 Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The only usage hint is 'Optionally filter by system group,' which is really parameter guidance rather than a when-to-use statement. There is no indication of when this tool should be chosen over sibling list/get tools, nor any exclusions or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_usersList usersA
Read-onlyIdempotent

List organization members. Returns user IDs, names, emails, and roles. Requires users:read scope. Note: This exposes personal information - only use when the user explicitly requests member data.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.

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 two things annotations cannot: the required 'users:read' scope and the PII-exposure warning. It does not discuss pagination/return-size behavior, though the schema already states all pages are fetched automatically.

Agents need to know what a tool does to the world before 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 return fields, then the permission requirement, then the risk caveat. No redundancy or filler; each sentence adds a distinct piece of 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?

There is no output schema, yet the description compensates by enumerating return fields, and it supplies the auth scope and a PII caution for a low-complexity, two-optional-parameter read tool. 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% and both parameters are optional with documented defaults, so the schema carries the parameter burden entirely. The description adds no parameter syntax or semantics beyond what the schema provides, making the baseline 3 correct.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List organization members') and enumerates the returned fields (IDs, names, emails, roles), so the agent knows exactly what the tool produces. It never names or contrasts the sibling get_user (singular lookup), so sibling differentiation is left implicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear conditional: 'only use when the user explicitly requests member data,' which functions as both a when-to-use and a soft when-not-to-use rule. It stops short of naming an alternative tool (e.g., get_user for a single member), so it is clear context without explicit alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_vendorsList vendorsC
Read-onlyIdempotent

List vendors. Filter by status, category, or city.

NameRequiredDescriptionDefault
cityNoFilter by city (partial match)
pageNoPage number (default: all pages fetched automatically)
searchNoSearch by name
statusNoFilter by vendor status
categoryNoFilter by category (matches vendors that include this category)
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.

TDQS

C2.9/5.0
Behavior2/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, covering the whole safety profile. The description adds no behavioral context of its own — notably it never mentions the automatic full-pagination behavior the schema calls out, which is the one non-obvious runtime trait of this 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?

Two short sentences with the purpose front-loaded and no filler; every word earns its place. It is economically written, though the sparseness borders on under-specification rather than pure conciseness.

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 six-parameter, zero-required, no-output-schema tool, the description covers the core purpose but omits the search parameter, the pagination/full-fetch behavior, and any indication of result shape. Adequate as a minimum viable definition but with clear gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema fully documents all six parameters, making 3 the baseline. The description only echoes three of the six filters (status, category, city) and omits search, page, and per_page, so it adds no meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("List vendors") and names the filterable dimensions, so the agent knows exactly what the tool returns. It does not, however, distinguish itself from the many sibling list_* tools or from get_vendor, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this versus get_vendor (single record) or any of the other list_* siblings, and no exclusions or prerequisites are stated. The filter clause is a capability statement, not usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_vendor_site_assignmentsList vendor site assignmentsC
Read-onlyIdempotent

List vendor-to-site assignments showing which vendors serve which sites.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
site_idNoFilter by site ID
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.
vendor_idNoFilter by vendor ID

TDQS

C2.9/5.0
Behavior2/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. The description adds nothing beyond that: no note on auto-pagination behavior, result volume, or authorization requirements, which are the remaining behaviors an agent would care about for a listing call.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence with no filler. It is efficient, though the brevity is also what leaves the other dimensions thin.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple paginated list tool with full schema coverage, no output schema, and annotations covering the safety profile, the description is minimally adequate. It stops short of describing the returned assignment record or how site_id/vendor_id filters combine, which would round it out.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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% (page, per_page, site_id, vendor_id all documented with formats and defaults), so the schema carries the parameter burden and the baseline of 3 applies. The description adds no filtering syntax or semantics beyond what the schema already states.

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 ('vendor-to-site assignments') and clarifies the record's meaning as a vendor/site mapping. It is distinguishable from generic list_* siblings, but does not explicitly contrast with get_vendor_site_assignment or the related list_vendors/list_sites tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this versus alternatives such as get_vendor_site_assignment, list_vendors, or list_sites, and no indication of typical scenarios (e.g., auditing coverage). The agent must infer usage from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_work_categoriesList work categoriesA
Read-onlyIdempotent

List work categories used to classify work orders and requests. Each has a module: facilities, infrastructure, or null (shared by both). Pick a category whose module matches the work - infrastructure for work on a feature, facilities otherwise - or a shared one.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
moduleNoOnly categories in this workspace; none = shared categories only
searchNoSearch by name
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and non-destructive, so safety is covered. The description adds domain semantic context (the module field meaning and shared/null categories) which helps interpret results, but no pagination/return-shape or auth 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 tight sentences with the purpose front-loaded and no filler. The module concept and selection guidance are packed efficiently, though the selection advice is arguably supplementary.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

A simple read-only list tool with full schema coverage and no output schema, so return values need not be explained. The description supplies the important domain concept (module) needed to use the results correctly; missing only minor pagination notes already 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 all four parameters are already documented in the schema. The description echoes the module concept but adds no syntax or filtering detail beyond what the schema's enum and descriptions provide, 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 ('List work categories') plus the domain they serve ('used to classify work orders and requests'). It is clear and distinctive, though with many list_* siblings it does not explicitly contrast itself with an obvious alternative.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description offers module-matching advice ('infrastructure for work on a feature, facilities otherwise'), but this guides interpretation/selection of returned categories rather than when to call this tool versus alternatives. Usage context is implied, not explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_work_order_commentsList work order commentsA
Read-onlyIdempotent

List comments on work orders. Filter by work_order_id to get comments for a specific work order.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.
work_order_idNoFilter by work order ID

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is fully covered by structured data. The description adds no further behavioral context such as ordering, pagination limits, or volume expectations beyond what the schema already states.

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 brief sentences with the core purpose front-loaded and no filler. It could be marginally richer without being verbose, but it is well-sized for the task.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list tool with full schema coverage, complete annotations, and no output schema, the description covers what is needed to invoke it correctly. Only minor additions (e.g., ordering or business meaning of a comment) 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 100%, with page, per_page, and work_order_id all documented in the schema itself, including the automatic all-pages fetching behavior. The description only restates the work_order_id filter, adding no new meaning, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

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 (comments on work orders), which is clear enough to distinguish from list_work_orders and list_work_order_schedules. However, it does not explicitly name or contrast with 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 description tells the agent it can filter by work_order_id for a specific work order, implying the unfiltered call lists all comments. There is no explicit when-to-use vs. when-not guidance or reference to alternatives like get_work_order_comment.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_work_ordersList work ordersA
Read-onlyIdempotent

List work orders. Filter by status (NEW, IN_PROGRESS, ON_HOLD, COMPLETED, CANCELLED), priority (LOW, MEDIUM, HIGH, CRITICAL), type (CORRECTIVE, PREVENTIVE, EMERGENCY, INSPECTION), and site. Amounts are bare numbers with no currency: call get_organization_settings for currency_code before stating one.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
typeNoFilter by type: CORRECTIVE, PREVENTIVE, EMERGENCY, INSPECTION
searchNoSearch by name
statusNoFilter by status: NEW, IN_PROGRESS, ON_HOLD, COMPLETED, CANCELLED
site_idNoFilter by site ID
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.
priorityNoFilter by priority: LOW, MEDIUM, HIGH, CRITICAL

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), and the description adds real behavioral context beyond that: amounts are bare numbers without currency, requiring a call to get_organization_settings before stating currency. That is a non-obvious output-semantics caveat worth flagging, though return shape and pagination are left to 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?

Two dense sentences: the purpose and filter dimensions are front-loaded, and the trailing currency caveat is the one piece of information the schema cannot supply. No filler or restated boilerplate.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence 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 strong annotations and a fully documented schema, the description is sufficient: it covers scope, filter dimensions, and the currency trap. It omits nothing critical, though it says nothing about result volume or the automatic multi-page fetching 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?

Schema description coverage is 100%, so every parameter is already documented in the schema, including the same status/priority/type enumerations the description repeats. The description adds no syntax, defaults, or edge-case meaning beyond what the schema already 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.

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 work orders') and enumerates the four filterable dimensions, so the agent knows exactly what kind of query this performs versus the single-record get_work_order. It never names a sibling explicitly, so the differentiation is inferred from the verb 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?

Usage is implied by the filter enumeration, and there is one genuinely useful cross-tool instruction ('call get_organization_settings for currency_code'), but no statement of when to use this versus list_work_requests, get_work_order, or the bulk/update siblings, and no exclusions or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_work_order_schedulesList work order schedulesA
Read-onlyIdempotent

List work order schedules (technician day plans). Filter by technician_id + scheduled_date to get one technician's ordered day: rows are returned by date, then stop_order (the day-plan stop sequence; rows without stop_order sort last), then start time. travel_time_minutes is a straight-line estimate from the previous stop.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
date_toNoFilter: scheduled_date on or before (YYYY-MM-DD)
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.
date_fromNoFilter: scheduled_date on or after (YYYY-MM-DD)
technician_idNoFilter by technician (Clerk user ID)
work_order_idNoFilter by work order ID
scheduled_dateNoFilter by exact date (YYYY-MM-DD)

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish this as a safe, idempotent read, so the bar is lower. The description adds real behavioral value beyond them: the sort order (date, then stop_order with nulls last, then start time) and the caveat that travel_time_minutes is only a straight-line estimate from the previous stop.

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, no filler, and the core purpose is front-loaded before the ordering details. The second sentence is dense but every clause 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 carries the return-shape burden and does cover the key ordering rules and the travel_time_minutes semantics. It does not enumerate other returned fields, but for a filtered list tool this is largely sufficient, especially with the schema handling all 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?

Schema coverage is 100%, so the baseline is 3, but the description adds meaning beyond the schema: it explains the combined effect of technician_id + scheduled_date, the sort role of stop_order, and the estimation caveat on travel_time_minutes, rather than merely restating 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 and adds a clarifying synonym ('technician day plans'), plus describes the ordering semantics of the result set. It does not explicitly distinguish itself from the get_work_order_schedule sibling, 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?

It gives a concrete usage pattern (combine technician_id + scheduled_date to get one technician's ordered day), which implies when the tool is most useful. However, it names no alternative tool and offers no when-not guidance, leaving usage to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_work_requestsList work requestsA
Read-onlyIdempotent

List work requests (submitted by requesters). Filter by status (SUBMITTED, APPROVED, REJECTED, CONVERTED) or priority.

NameRequiredDescriptionDefault
pageNoPage number (default: all pages fetched automatically)
searchNoSearch by name
statusNoFilter by status: SUBMITTED, APPROVED, REJECTED, CONVERTED
site_idNoFilter by site ID
per_pageNoItems per page (default: 1000, max: 1000). All pages are fetched automatically.
priorityNoFilter by priority: LOW, MEDIUM, HIGH, CRITICAL

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so the safety profile is covered. The description adds the 'submitted by requesters' scope, which is useful context, but omits the notable behavior (from the schema) that all pages are fetched automatically, which materially affects call cost on a 6-param 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?

Two compact sentences with the scope statement front-loaded and the filter dimensions second; no filler and nothing redundant.

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 no-output-schema list tool this does the minimum: it names the resource and filters. It omits the auto-pagination/all-pages behavior and any sense of result scope (e.g. whether it spans the whole org), which matters for correct invocation of an unfiltered-by-default list endpoint.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 six parameters are documented in the schema itself. The description merely restates the status enum values and the priority filter, adding no syntax, defaults, or semantics beyond what the schema already provides — the baseline 3 for full 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 (work requests) and adds scoping detail ('submitted by requesters'). It does not, however, differentiate itself from siblings like list_work_orders or get_work_request, 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 Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage by naming the filterable dimensions (status, priority), which tells the agent this is a filtered bulk-retrieval tool. But it gives no explicit when-to-use guidance, no mention of when not to use it, and no pointer to list_work_orders/get_work_request as alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

show_site_fci_trendShow site FCI trendA
Read-onlyIdempotent

Show one site’s Facility Condition Index (FCI) history as a chart, in clients that render MCP Apps; other clients get the same summary as text. FCI is deferred renewal cost divided by current replacement value, a fraction where LOWER is healthier: good below 5%, fair 5-10%, poor 10% and above. It is not a 0-100 condition score. Resolve site_id with list_sites first.

NameRequiredDescriptionDefault
daysNoHow many days back to chart. Default 365.
site_idYesSite ID (required). Get it from list_sites.

TDQS

A4.4/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 important behavioral context beyond that: the dual output mode (chart vs. text), which may affect how the agent should present results. It does not mention pagination or error behavior, but for a read-only trend tool this 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?

The description is front-loaded with the core purpose, then provides metric definition and prerequisite. Every sentence earns its place, though the metric explanation could be considered slightly verbose for an agent already familiar with FCI. Still efficient overall.

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 fully explains what the tool returns (a chart or text summary of FCI history) and provides interpretation guidance for the metric values. It also covers the prerequisite for the required parameter. 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% — both site_id and days are fully documented in the schema, including defaults and bounds. The description reinforces that site_id must be resolved via list_sites, which is helpful but not additional semantic information beyond the schema. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Show) and resource (one site's FCI history), clarifies output format (chart in MCP Apps clients, text elsewhere), and defines the metric with its formula and interpretation bands. An agent can distinguish this from list_site_fci_history or get_site_fci_history_entry immediately.

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 directs the agent to resolve site_id with list_sites first, and explains what happens in non-chart-rendering clients. This is exactly the kind of prerequisite and environment-aware guidance an agent needs to invoke correctly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_assetUpdate assetA
DestructiveIdempotent

Update an existing asset by ID. Requires assets:write scope. When changing location, resolve top-down: list_sites → list_buildings (by site_id) → list_locations (by building_id). Provide all three IDs. Same for systems: list_system_classes → list_system_groups → list_systems.

NameRequiredDescriptionDefault
idYesAsset ID
nameNoAsset name
modelNoModel name/number
site_idNoSite ID - resolve first via list_sites
asset_idNoCustom asset identifier (unique per tenant)
quantityNoQuantity
image_urlNoImage URL
status_idNoStatus identifier
system_idNoSystem ID - resolve last via list_systems filtered by system_group_id
meter_unitNoMeter unit (km, miles, hours, cycles)
building_idNoBuilding ID - resolve second via list_buildings filtered by site_id
descriptionNoDescription
location_idNoLocation ID - resolve last via list_locations filtered by building_id
risk_factorNoRisk factor (CRITICAL, HIGH, MEDIUM, LOW)
asset_type_idNoAsset type ID (from asset_types)
purchase_costNoPurchase cost
purchase_dateNoPurchase date (ISO 8601)
safety_impactNoSafety impact level (LOW, MEDIUM, HIGH, CRITICAL)
salvage_valueNoSalvage value
serial_numberNoSerial number
cost_per_sq_ftNoCost per square foot
service_impactNoService impact level (LOW, MEDIUM, HIGH, CRITICAL)
condition_scoreNoCondition score (0-100)
manufacturer_idNoManufacturer ID (from manufacturers)
system_class_idNoSystem class ID - resolve first via list_system_classes
system_group_idNoSystem group ID - resolve second via list_system_groups filtered by system_class_id
unit_of_measureNoUnit of measure
regulatory_impactNoRegulatory impact level (LOW, MEDIUM, HIGH, CRITICAL)
replacement_valueNoCost to replace this asset today, in current dollars. Distinct from purchase_cost, which is what was paid and is the depreciation basis.
reputation_impactNoReputation impact level (LOW, MEDIUM, HIGH, CRITICAL)
environmental_impactNoEnvironmental impact level (LOW, MEDIUM, HIGH, CRITICAL)
current_meter_readingNoCurrent meter/odometer reading
last_maintenance_dateNoLast maintenance date (ISO 8601)
unit_replacement_valueNoUnit replacement value
expected_lifetime_yearsNoExpected lifetime in years
salvage_value_percentageNoSalvage value percentage (0-100)
likelihood_of_failure_scoreNoLikelihood of failure score
consequence_of_failure_scoreNoConsequence of failure score
replacement_value_reviewed_onNoDate replacement_value was last confirmed (ISO 8601)

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, so the safety profile is covered structurally. The description adds auth context ('Requires assets:write scope') and the cross-entity resolution requirement, both of which are beyond what the annotations expose; it stops short of explaining partial-update behavior or what the destructive hint actually affects.

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 the purpose, then the scope requirement, then the trickiest operational detail. Nothing is padded, though the final telegraphic line ('Same for systems: ...') relies on the reader mapping the analogy correctly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence 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 39-parameter update tool with no output schema and a single required field, the description covers purpose, authorization, and the highest-risk operation (relocating an asset across three hierarchical entities). It does not explicitly state that omitted fields are left unchanged, nor does it flag scope of the destructive behavior, leaving a modest 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?

With 100% schema description coverage, the per-parameter definitions are already fully documented, including the resolution chain embedded in site_id/building_id/location_id descriptions. The description's top-down recipe largely restates what the schema already says, adding emphasis but little new semantic meaning, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource identifying the target unambiguously ('Update an existing asset by ID'), which cleanly separates it from create_asset, delete_asset and the infrastructure-asset variants. It does not, however, explicitly name an alternative or clarify why one would choose update_asset over bulk_update for a given change, so sibling differentiation is left to the reader.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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 operational context: it requires assets:write scope and prescribes a top-down resolution procedure (list_sites -> list_buildings -> list_locations, and the parallel system chain) with the rule to 'provide all three IDs.' This tells the agent how to prepare a location/system change but offers no when-not-to-use or alternative-tool guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_asset_bettermentUpdate asset bettermentA
DestructiveIdempotent

Update a betterment by ID. The asset it belongs to cannot be changed - delete and re-create to move one. The row must still add either capital or life after the update. Requires asset_betterments:write scope.

NameRequiredDescriptionDefault
idYesBetterment ID
descriptionNoWhat was actually done
occurred_onNoDate the work went into service, YYYY-MM-DD
added_life_yearsNoExtra service life the work bought, in years
capitalized_amountNoAmount added to the asset value

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 real value beyond them: the immutability of the parent asset, the business invariant that the row must still contribute capital or life after the update, and the required asset_betterments:write scope.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the action and ID, then constraints and permissions. Every sentence 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.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, but the description covers the mutation semantics, the key invariant, immutability rules, and the auth scope. It does not state response shape or whether non-mentioned fields are preserved, which is a minor gap for a tool whose full parameter set is already fully documented in the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description exceeds that by stating a cross-parameter constraint absent from the schema: the row must still add either capital or life after the update, which effectively governs capitalized_amount and added_life_years together.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 betterment by ID'), which pins it precisely against siblings like create_asset_betterment, delete_asset_betterment, and list_asset_betterments within a very large CRUD family.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear when-to-use context (updating an existing betterment by ID) and notably routes around an unsupported case: 'The asset it belongs to cannot be changed - delete and re-create to move one.' It does not enumerate alternative tools by name, but the delete/re-create guidance functions as de facto routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_asset_commentUpdate asset commentA
DestructiveIdempotent

Update an existing asset comment by ID. Requires asset_comments:write scope.

NameRequiredDescriptionDefault
idYesAsset comment ID
commentNoComment text

TDQS

A3.5/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, so the safety profile is covered structurally. The description adds the required write scope, which is genuinely useful context not in the annotations, but says nothing about what is overwritten or whether omitted fields are preserved.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with the action and the key constraint front-loaded and no filler. Every clause earns its place.

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 two-parameter update with no output schema and full schema coverage, the essentials are present. However, with 'comment' being optional, the description never clarifies partial-update semantics (e.g., whether omitting comment clears it or leaves it untouched), leaving a real ambiguity unresolved.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 (id, comment) are already documented in the schema. The description adds no syntax, format, or partial-update semantics beyond the schema. 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 ('Update an existing asset comment by ID'), which lets an agent distinguish it from update_work_order_comment, update_project_comment, and update_infrastructure_asset_comment by resource. It does not explicitly name those siblings, but the resource specificity is enough to route correctly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a prerequisite ('Requires asset_comments:write scope') but no explicit when-to-use guidance or alternatives. Usage is implied by the verb+resource combination, so this is minimum-viable rather than instructive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_asset_condition_assessmentUpdate asset condition assessmentA
DestructiveIdempotent

Update an existing asset condition assessment by ID. Requires asset_condition_assessments:write scope. Note: the purchase-cost writeback is create-only and cannot be triggered by an update.

NameRequiredDescriptionDefault
idYesAssessment ID
notesNoFree-form notes
methodNoAssessment method
defectsNoStructured defect findings (JSON)
assessed_onNoAssessment date (YYYY-MM-DD, today or earlier)
assessor_idNoAssessor user ID
condition_scoreNoCondition score (0-100)
replacement_costNoCurrent replacement value / CRV

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 adds value beyond them: the required asset_condition_assessments:write scope (auth context) and the caveat that the purchase-cost writeback is create-only and cannot be triggered here — a genuine behavioral edge case not visible 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 tight sentences, front-loaded with the core action, followed by the scope prerequisite and the writeback caveat. 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.

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 100% schema coverage, no output schema, and annotations covering the safety profile, this is nearly complete: it names the resource, key, required scope, and a subtle limitation. It could still note whether unspecified fields are left unchanged (partial update semantics), which is the one remaining inference an agent must make.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 8 parameters (id, notes, method, defects, assessed_on, assessor_id, condition_score, replacement_cost) are already documented in the schema. The description adds no parameter-level meaning (e.g., partial update semantics) 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 (update), resource (asset condition assessment), and lookup key (by ID). This clearly distinguishes it from create_asset_condition_assessment, get_asset_condition_assessment, delete_asset_condition_assessment, and list_asset_condition_assessments 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?

The 'by ID' and 'existing' phrasing implies this is for modifying an already-created assessment, and the scope line gives a prerequisite. However, it never states when to prefer this over bulk_update or when not to use it, so guidance is only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_asset_costUpdate asset costA
DestructiveIdempotent

Update an existing asset cost entry by ID - the record type shown on the AssetLab "Expenses" page. Requires asset_costs:write scope.

NameRequiredDescriptionDefault
idYesAsset cost ID
amountNoCost amount
site_idNoSite ID
asset_idNoAsset ID
categoryNoCost category
cost_dateNoCost date (ISO 8601)
po_numberNoPurchase order number (free text)
building_idNoBuilding ID
descriptionNoDescription
work_order_idNoWork order ID
invoice_numberNoInvoice number (free text)
purchase_order_idNoPurchase order that paid this cost - resolve via list_purchase_orders. Counts against the order's remaining balance unless the cost belongs to a work order; null clears it.

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, destructiveHint=true, and idempotentHint=true, so the mutation/safety profile is conveyed structurally. The description contributes the authorization requirement (asset_costs:write), which is genuinely useful, but says nothing about partial vs. full update semantics or what happens to fields omitted from the payload.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the action and target, then the scope requirement. No filler, no restatement of the title, nothing that fails to earn 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 12-parameter mutation with a fully documented schema and no output schema, the description covers purpose, identifier, UI location, and auth scope. The remaining gap is update semantics (partial vs. replace) and failure modes, which is minor given annotations already flag destructive and idempotent 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?

Schema description coverage is 100%, so all 12 parameters are already documented in the input schema and the baseline is 3. The description only echoes that lookup is by ID and adds no format, default, or constraint 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 and resource ("Update an existing asset cost entry by ID") and anchors it to a concrete UI surface (the AssetLab "Expenses" page), which helps separate it from update_expense and update_infrastructure_asset_cost. It does not, however, explicitly distinguish itself from those near-name 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 description adds a clear prerequisite (asset_costs:write scope), which tells the agent a precondition for calling it. It gives no when-to-use vs. when-not guidance, no mention of the create_asset_cost / delete_asset_cost alternatives, and no note on whether the entry must already exist.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_asset_documentUpdate asset documentB
DestructiveIdempotent

Update an asset document by ID. Requires asset_documents:write scope.

NameRequiredDescriptionDefault
idYesAsset document ID
nameNoDocument name
user_idNoUploader user ID
asset_idNoAsset ID
categoryNoDocument category
file_pathNoStorage path
file_sizeNoFile size in bytes
file_typeNoMIME type
descriptionNoDescription

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false, so the safety profile is covered. The description adds a useful authorization requirement (asset_documents:write scope) but does not explain partial-update behavior or what happens to omitted fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tightly written sentences with no filler. The core action is front-loaded and the scope requirement follows immediately, making it easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that annotations cover destructive/idempotent behavior and the schema has full parameter coverage, the description is mostly complete for a simple update tool. It only omits explicit partial-update semantics, 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 description coverage is 100%, so all nine parameters are already documented in the input schema. The description only says 'by ID', which is redundant with the required id parameter and adds no extra semantic value 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 (update) and resource (asset document) and the lookup key (by ID). It does not explicitly differentiate from sibling tools like update_infrastructure_asset_document or update_project_document, but the resource name is specific enough for an agent to identify the right tool.

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?

Only says 'Update an asset document by ID' and the required scope. It provides no when-to-use guidance, no exclusions, and no indication of when to prefer this over sibling update tools such as update_infrastructure_asset_document.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_asset_lifecycle_eventUpdate asset lifecycle eventA
DestructiveIdempotent

Update a facility lifecycle strategy event by ID. Editing re-confirms the cost (cost_reviewed_on is server-set). Set is_active false to disable an event without deleting it - projections recompute immediately. Requires asset_lifecycle_events:write scope.

NameRequiredDescriptionDefault
idYesLifecycle event ID
nameNoEvent name
is_activeNoDisable/enable the event
fixed_costNoFixed cost per application (current dollars, never indexed)
sort_orderNoEvaluation order within the strategy
cost_sourceNoProvenance of the cost ("Engineering 2026", a tender reference)
event_classNoEvent type - preventative maintenance or rehabilitation
impact_methodNoEffect: add years of life, or reset condition to a value
impact_reset_toNoCondition after the event (required when impact_method is reset_condition)
work_generationNoWhat a due application of this event becomes when created from the interventions list: none (plan only, default), work_order, or project. Nothing is created on a schedule.
impact_add_yearsNoYears added (required when impact_method is add_years)
max_applicationsNoHow many times the event may fire over an asset's life (default 1)
min_years_betweenNoMinimum years between firings of a recurring event (default 1)
trigger_condition_maxNoUpper bound of the trigger window - the event fires when projected condition falls to this
trigger_condition_minNoLower bound of the trigger window (default 0); an asset already below it has missed the event
work_generation_priorityNoPriority for generated work orders. Ignored unless work_generation is work_order.
work_generation_category_idNoWork category for generated work orders - resolve with list_work_categories. Ignored unless work_generation is work_order.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructive/idempotent/write semantics, and the description adds material beyond them: editing re-confirms the cost (cost_reviewed_on is server-set, not agent-supplied), projections recompute immediately, and the required asset_lifecycle_events:write scope. It stops short of explaining what the destructiveHint actually destroys or how partial updates affect unspecified fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, purpose first, then the two most operationally important facts (soft-disable semantics and required scope). No filler or restatement of the title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

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 the essentials an agent needs before calling: identity, the server-set field caveat, the disable path, and the auth scope. What is missing is the return shape and whether unspecified fields are left untouched, which keeps it from a 5.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and every field carries its own description, so the schema does the heavy lifting. The description only adds one genuinely new parameter-level fact (cost_reviewed_on being server-set) and the is_active disable semantics, which matches the baseline 3 for high-coverage schemas.

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 ('Update a facility lifecycle strategy event by ID'), which is unambiguous. It implicitly separates itself from the closely-named sibling update_infrastructure_lifecycle_event by referring to facility lifecycle strategy events, though it never names the sibling explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives real usage direction: 'Set is_active false to disable an event without deleting it' routes the agent away from delete_asset_lifecycle_event toward a soft-disable. It also signals the write-scope prerequisite. No explicit when-not guidance beyond that, 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_asset_partUpdate asset partA
DestructiveIdempotent

Update the quantity of an asset-part association by ID. Requires asset_parts:write scope.

NameRequiredDescriptionDefault
idYesAsset-part association ID
quantityNoNew quantity

TDQS

A3.6/5.0
Behavior3/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's one addition beyond structured data is the required write scope, which is genuinely useful, but it doesn't explain what the destructive flag means here (e.g., whether setting quantity to 0 or omitting it drops the association).

Agents need to know what a tool does to the world before 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 action is front-loaded and the auth requirement follows immediately; 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 simple two-parameter field update with rich annotations and no output schema, the description covers purpose, key, and auth adequately. It stops short of noting idempotency implications or what happens on an unknown/invalid association ID, but nothing essential for invoking 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 both parameters (id, quantity) are documented in the schema with format and minimum constraints. The description restates 'quantity' and 'by ID' without adding syntax, defaults, or edge-case meaning beyond the schema, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Update), resource (asset-part association), the exact field it mutates (quantity), and the key (by ID). This clearly separates it from create_asset_part and delete_asset_part, though it does not explicitly name a sibling to route around.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides a real prerequisite in 'Requires asset_parts:write scope', which tells the agent what auth is needed before calling. However, there is no explicit when-to-use vs when-not guidance (e.g., use create_asset_part to establish an association, this only for changing quantity), 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_asset_placementUpdate asset placementA
DestructiveIdempotent

Move an asset placement to new coordinates or a different floorplan. Requires asset_placements:write scope.

NameRequiredDescriptionDefault
xNoNew x coordinate
yNoNew y coordinate
idYesAsset placement ID
region_idNoNew region (set to null to clear)
floorplan_idNoMove to a different floorplan

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare non-readOnly, destructive, idempotent, closed-world behaviour, so the safety profile is covered. The description adds genuinely new context by naming the required OAuth scope (asset_placements:write), which annotations do not carry. It does not explain the destructive side effect of relocation (removal from the previous floorplan/region), 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?

Two short sentences, operation front-loaded, prerequisite second. No filler and 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 five-parameter mutation whose annotations cover safety and whose schema covers all fields, the definition is nearly sufficient: purpose plus auth scope. It lacks partial-update semantics (whether omitted coordinates are preserved) and the consequence of moving between floorplans, which an agent would want before calling.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so param meaning is already carried by the schema; the baseline of 3 applies. The description echoes coordinates and floorplan but adds no semantics beyond the schema, and it omits the region_id null-clearing behaviour that the schema 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?

States a specific verb and resource: "Move an asset placement to new coordinates or a different floorplan." This distinguishes it from the neighbouring update_asset and create/delete_asset_placement tools without ambiguity. It stops short of explicitly naming which sibling to use for a different edit, but the operation itself is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description supplies a prerequisite (asset_placements:write scope) but no when-to-use guidance or routing to alternatives such as update_asset or update_floorplan_region. Usage is implied by the operation name rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_asset_replacement_planUpdate asset replacement planB
DestructiveIdempotent

Update an existing asset replacement plan by ID. Requires asset_replacement_plans:write scope.

NameRequiredDescriptionDefault
idYesAsset replacement plan ID
notesNoNotes
statusNoStatus
asset_idNoAsset ID
priorityNoPriority
estimated_costNoEstimated replacement cost
funding_sourceNoFunding source
planned_replacement_yearNoPlanned replacement year

TDQS

B3.4/5.0
Behavior3/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 carried structurally. The description adds real value by naming the required scope (asset_replacement_plans:write), but it does not explain the destructive semantics (e.g. whether omitted fields are cleared) despite destructiveHint being 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?

Two tight sentences with zero filler, and the primary action is front-loaded ahead of the scope requirement. Nothing is wasted, though the brevity is partly responsible for the gaps elsewhere.

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 mutated resource with full annotation coverage, 100% schema coverage and no output schema, the description is minimally sufficient: it says what it does and what authorization is needed. It stops short of describing mutation behavior, so it is adequate rather than complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all eight fields including the enum values for status and priority. The description only restates that the plan is identified 'by ID', adding nothing beyond the schema – 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 (Update) plus resource (asset replacement plan) and the lookup key (by ID), which cleanly separates it from the create_/get_/list_/delete_asset_replacement_plan siblings. No explicit sibling routing, but the naming makes the distinction unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'Update an existing ... plan' implies the precondition that a plan must already exist, and the write scope narrows who can call it. However, there is no explicit when-to-use versus alternatives such as get_asset_replacement_plan or update_asset, so usage is only inferred.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_asset_statusUpdate asset statusB
DestructiveIdempotent

Update an existing asset status by ID. Requires asset_statuses:write scope.

NameRequiredDescriptionDefault
idYesAsset status ID
nameNoStatus name
moduleNoMove the status to a workspace: facilities, infrastructure, or shared (both).
descriptionNoDescription

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already disclose the safety profile (readOnlyHint=false, destructiveHint=true, idempotentHint=true, openWorldHint=false). The description usefully adds the required scope ('asset_statuses:write'), which is not in the annotations, but it does not explain the destructive consequences of a mutation (e.g., moving a status to a different module and its effect on assets using it).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the core action and followed by the permission prerequisite. Nothing is padded or redundant.

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 four-parameter mutation tool, annotations cover most of the behavioral burden and the schema covers all parameters, so the definition is minimally adequate. It falls short on the destructive semantics of the update and any routing guidance relative to sibling status/asset 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 description coverage is 100%, so every parameter (id, name, module, description) is already documented in the schema, including the module enum semantics. The description only restates the ID requirement and adds no syntax 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 and resource ('Update an existing asset status by ID'), which is clear and unambiguous. However, it does nothing to distinguish itself from the many sibling update_* tools (e.g., update_asset_type, update_asset_type_group, update_asset), so an agent gets no help choosing among them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use, when-not-to-use, or alternative guidance. 'By ID' hints that an identifier is needed, but the description never says when this tool is the right choice versus update_asset or the status-creation sibling, 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_asset_typeUpdate asset typeB
DestructiveIdempotent

Update an existing asset type by ID. Requires asset_types:write scope.

NameRequiredDescriptionDefault
idYesAsset type ID
nameNoAsset type name
group_idNoGroup ID
descriptionNoDescription

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already disclose destructiveHint=true, idempotentHint=true, and readOnlyHint=false, so the mutation semantics are covered structurally. The description adds a genuinely useful non-schema detail, the asset_types:write scope requirement, but says nothing about partial-vs-full replacement semantics or what a destructive update can drop.

Agents need to know what a tool does to the world before 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, front-loaded sentences with no filler. Every clause carries information: the operation, the identifier, and the required scope.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, idempotent mutation with no output schema, the definition is minimal but not broken: the safety profile and scope are known. It omits whether unspecified fields are preserved or wiped, which matters for a destructiveHint=true update.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and all four fields (id, name, group_id, description) are documented in the schema itself. The description only echoes the 'by ID' requirement, adding no semantics about optionality, clearing fields, or reassignment via group_id.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Update an existing asset type') plus the addressing key ('by ID'), which is enough to distinguish it from create_asset_type and delete_asset_type. It does not explicitly differentiate from the near-neighbor update_asset_type_group, which the surrounding catalog makes a real ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this versus alternatives such as create_asset_type, update_asset_type_group, or bulk_update, and no note that the target must already exist. The only condition given is the required scope, which is an auth prerequisite 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.

update_asset_type_groupUpdate asset type groupB
DestructiveIdempotent

Update an existing asset type group by ID. Requires asset_type_groups:write scope.

NameRequiredDescriptionDefault
idYesAsset type group ID
nameNoGroup name
colorNoColor hex code (e.g., #6366f1)
descriptionNoDescription

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, idempotentHint=true, destructiveHint=true and openWorldHint=false, so the mutation and safety profile is covered. The description adds the required write scope, which is genuinely useful auth context, but says nothing about partial-update semantics or what an update overwrites — notable given destructiveHint=true.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, no filler, and the core action is front-loaded before the scope requirement. Efficient, though it is minimal enough that nothing beyond the bare minimum is present.

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 the action, the identifier, and the auth requirement. It omits whether the update is partial or full-replacement and whether unspecified fields are cleared — a meaningful gap given destructiveHint=true.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% (id, name, color, description all documented inline), so the schema carries parameter meaning. The description adds nothing beyond naming the ID as the lookup key, which matches the baseline 3 for fully covered schemas.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Update an existing asset type group by ID'), which is clearly distinguishable from the sibling update_asset_type and from create_asset_type_group. It does not explicitly call out those siblings, but the resource naming makes the target unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description supplies a prerequisite ('Requires asset_type_groups:write scope'), which is real usage guidance, but gives no when-to-use/when-not context and names no alternative for a caller unsure whether to update or create. 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.

update_attachmentUpdate attachmentB
DestructiveIdempotent

Update an attachment by ID. Requires attachments:write scope.

NameRequiredDescriptionDefault
idYesAttachment ID
file_urlNoFile URL / storage path
file_nameNoFile name
file_sizeNoFile size in bytes
file_typeNoMIME type
descriptionNoDescription
uploaded_byNoUploader user ID
work_order_idNoWork order ID
pm_schedule_idNoPM schedule ID
pm_template_idNoPM template ID
work_request_idNoWork request ID

TDQS

B3.2/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, so the safety profile is covered. The description usefully adds an explicit auth requirement (attachments:write scope), but it is silent on whether omitted fields are preserved or cleared — the critical behavior for an 11-field mutation with destructiveHint=true.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the action and its identifier. Nothing is wasted, though the second sentence is purely a permission note with no additional operational detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 11 parameters (all optional but id), no output schema, and a destructive annotation, the description should clarify update semantics — partial merge vs. replace, and whether relation FK fields can be reassigned. It covers the auth requirement but leaves those operational questions open.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 (id, file_url, file_name, file_size, file_type, description, uploaded_by, and the four entity FK ids) is already documented. The description contributes nothing 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.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a clear verb+resource ('Update an attachment by ID'), which is enough for an agent to know what it does. However, it does not differentiate from the many sibling update_* tools or from bulk_update, and 'update' remains ambiguous about partial vs. full replacement.

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?

Provides no when-to-use guidance, no conditions under which to prefer it over bulk_update or update_* siblings, and no prerequisites beyond the scope mention. Scoping is a permission note, not usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_budgetUpdate budgetB
DestructiveIdempotent

Update an existing budget by ID. Requires budgets:write scope.

NameRequiredDescriptionDefault
idYesBudget ID
yearNoBudget year
moduleNoWorkspace; null for organization-wide
site_idNoSite ID. Not read by the Budget tab.
building_idNoBuilding ID. Not read by the Budget tab.
funding_sourceNo'O&M' or 'Capital'
budgeted_amountNoBudgeted amount
allocated_amountNoAllocated amount

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare destructiveHint=true and idempotentHint=true, covering the safety profile. The description adds a genuinely useful behavioral fact the annotations lack: the required budgets:write scope. It still omits partial-vs-full update semantics and which fields are modifiable.

Agents need to know what a tool does to the world before 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, no filler, and the mutation action plus its required scope are front-loaded. Nothing extraneous.

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 full schema coverage but no output schema, the description covers what the tool does and the auth requirement. It leaves gaps on which fields are updatable, whether omitted fields are cleared or preserved, and no confirmation of return 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?

Schema description coverage is 100% with 8 documented parameters, so the schema carries the load and baseline 3 applies. The description adds only the implicit point that 'id' identifies the record, nothing 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 (update), resource (budget), and lookup key (by ID), which is clear. It does not distinguish itself from near neighbors like update_project_budget_item, but the update_budget resource name is unambiguous enough for selection.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no when-to-use guidance, no prerequisites beyond scope, and no alternatives (e.g., create_budget for new entries, bulk_update for many). The agent must infer context from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_buildingUpdate buildingA
DestructiveIdempotent

Update an existing building by ID. Requires buildings:write scope. latitude and longitude must be sent together; send both as null to clear the building position.

NameRequiredDescriptionDefault
idYesBuilding ID
nameNoBuilding name
typeNoBuilding type label
floorsNoNumber of floors
site_idNoSite ID
latitudeNoWGS 84 latitude of the building, in decimal degrees. Must be sent together with longitude.
area_sqftNoArea in square feet
longitudeNoWGS 84 longitude of the building, in decimal degrees. Must be sent together with latitude.
year_builtNoYear the building was constructed
building_type_idNoBuilding type ID (from building_types)

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, so the safety profile is covered. The description adds non-annotation value: the required 'buildings:write' auth scope and the lat/long coupling and null-clearing behavior, which 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, no filler, with the core operation front-loaded before the constraint details. Structure is efficient; slightly more could be trimmed but nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 10-parameter update with 100% schema coverage and no output schema, the description covers purpose, required scope, and the trickiest parameter interaction. It stops short of explaining partial-update behavior for the remaining optional fields, which would complete the picture.

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 semantic rule not fully captured elsewhere: latitude/longitude must be sent together and both set to null to clear the position. It doesn't clarify whether omitting a field leaves it unchanged, which limits it to a 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Update an existing building by ID'), clearly distinct from siblings like create_building and delete_building. It does not explicitly name a sibling or scope what an update can do beyond ID lookup, but the operation is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

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 (to modify an existing building) and states the 'buildings:write' prerequisite. However, it gives no explicit when-not guidance (e.g. preferring bulk_update for multiple buildings) or clarification of partial vs full update semantics, leaving context inferential.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_building_typeUpdate building typeB
DestructiveIdempotent

Update an existing building type by ID. Requires building_types:write scope.

NameRequiredDescriptionDefault
idYesBuilding type ID
nameNoBuilding type name
descriptionNoDescription

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly=false, destructiveHint=true, idempotentHint=true, and openWorld=false, so the mutation and safety profile is largely covered. The description adds one piece of value beyond them: the required building_types:write scope. It does not explain what 'destructive' means here, whether omitted fields are preserved or cleared, or how validation failures behave.

Agents need to know what a tool does to the world before 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 operation is stated first, followed by the authorization prerequisite. Nothing is buried and nothing is redundant.

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 three-parameter, single-resource update tool with full schema coverage and mutation-safe annotations, this is minimally adequate. It is missing the one thing neither structured field covers: whether this is a full replace or a partial patch and what happens to fields left out of the request.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 id, name, and description are already documented in the schema. The description only echoes the ID requirement ('by ID') and adds no format, constraint, or partial-update semantics beyond what the schema supplies, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Update an existing building type') and pins the target as an existing record identified by ID, which cleanly separates it from create_building_type, delete_building_type, and list_building_types. It does not, however, differentiate itself from the large family of other update_* tools beyond 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 Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The only guidance is a prerequisite ('Requires building_types:write scope'), which is an authorization condition rather than when-to-use guidance. There is no statement of when this tool should be chosen over create_building_type or update_building, nor any exclusion or edge-case note.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_change_orderUpdate change orderB
DestructiveIdempotent

Update an existing change order by ID. Requires change_orders:write scope.

NameRequiredDescriptionDefault
idYesChange order ID
notesNoNotes
amountNoAmount (negative for credits)
reasonNoReason
statusNoStatus
co_numberNoChange order number
vendor_idNoVendor ID
project_idNoProject ID
approved_atNoApproval date (ISO 8601)
approved_byNoApproved by (user ID)
category_idNoCost category ID
descriptionNoDescription

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=true, so the mutation and repeat-safety profile is covered structurally. The description usefully adds the change_orders:write authorization requirement, which is real context beyond the annotations, but it omits partial-update semantics (whether unspecified fields are preserved) for a 12-param update.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero filler, and the operative information (update, by ID) is front-loaded before the scope requirement.

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 12-parameter mutation tool, the description plus rich schema and annotations cover the basics, but it omits update semantics (partial vs full replacement) and any consequence of the destructive flag beyond what the annotation implies. Adequate but with a clear gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% with 12 fully documented parameters including a status enum, so the schema carries the parameter burden. The description adds no parameter-level detail (e.g. which fields are safe to change, meaning of negative amounts), consistent with the baseline 3 when the schema does the work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Update'), resource ('change order'), and lookup key ('by ID'), which cleanly distinguishes it from create_change_order, delete_change_order, and get_change_order. It does not, however, differentiate itself from the many update_* siblings in the list, so an agent still relies on the resource name to disambiguate.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description states only the mechanical precondition (must exist, updated by ID) and the required scope. It gives no guidance on when to prefer this over bulk_update or update_* alternatives, nor any exclusion conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_compliance_itemUpdate compliance itemB
DestructiveIdempotent

Update an existing compliance item by ID. Requires compliance:write scope.

NameRequiredDescriptionDefault
idYesCompliance item ID
nameNoCompliance item name
statusNoStatus
system_idNoAssociated system ID
descriptionNoDescription
regulation_referenceNoRegulation or code reference
compliance_period_monthsNoCompliance period in months

TDQS

B3.3/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, so the safety profile is covered by structured data. The description usefully adds the authorization prerequisite ('Requires compliance:write scope'), which goes beyond the annotations, but says nothing about partial-update semantics or what a destructive update affects.

Agents need to know what a tool does to the world before 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 written sentences with zero filler, and the scope prerequisite is front-loaded right after the core action.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter mutation with no output schema, the description is complete enough to invoke but thin. It names the auth scope yet omits partial-update behavior, required-field interactions, and any note on the effects of a destructive change.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and all seven parameters are documented in the schema, so the baseline is 3. The description adds no syntax, format, or field-level meaning beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Update an existing compliance item by ID'), which distinguishes it from the hundreds of other update_* siblings by resource. It does not, however, contrast it with related siblings like update_compliance_record or update_compliance_pm_schedule, 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 offers no when-to-use guidance, no exclusions, and no alternatives. 'By ID' implies the item must already exist, but this is left to inference and there is no routing logic toward sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_compliance_pm_scheduleUpdate compliance PM scheduleA
DestructiveIdempotent

Change the required frequency or weight of a compliance item to PM schedule link. Requires compliance:write scope. To point a link at a different item or schedule, delete it and create a new one.

NameRequiredDescriptionDefault
idYesLink ID - resolve via list_compliance_pm_schedules
weightNoRelative weight
required_frequency_daysNoRequired frequency in days

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, destructiveHint=true and idempotentHint=true, so the safety profile is covered structurally. The description adds a useful non-annotation fact (requires compliance:write scope), but it never explains the destructive hint for a frequency/weight update or what happens to unspecified fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences, front-loaded with the mutating action, followed by the exclusion. No filler, no 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 three-param mutation with no output schema and full schema coverage, the description covers scope, editable fields, and the association-change workaround. It leaves one real gap: only id is required by the schema, so it never says what an update containing only id, or only one of the two fields, actually does.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and all three params are documented in the schema, including that id is a link ID resolved via list_compliance_pm_schedules. The description only restates the two updatable fields, adding no format or interaction detail beyond the schema, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Change) and the exact resource and editable fields (required frequency or weight of a compliance item to PM schedule link). The follow-up sentence explicitly separates this tool from create_compliance_pm_schedule/delete_compliance_pm_schedule by naming the association change it cannot do.

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-not with a concrete alternative: to repoint a link at a different item or schedule, delete it and create a new one. Also states the prerequisite scope (compliance:write), so the agent knows both what this tool covers and what it does not.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_compliance_recordUpdate compliance recordA
DestructiveIdempotent

Update an existing compliance record by ID. Requires compliance_records:write scope.

NameRequiredDescriptionDefault
idYesCompliance record ID
completed_atNoCompletion date-time (ISO 8601)
completed_byNoUser ID who completed
required_frequency_daysNoRequired frequency in days
days_since_last_completionNoDays since last completion

TDQS

A3.6/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, idempotentHint=true, destructiveHint=true), so the description is not the sole carrier here. It does add the required OAuth scope, which is real value beyond the structured fields, but says nothing about partial-update semantics or what happens to omitted fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, no filler; the operation and target are front-loaded and the authorization requirement follows immediately. 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 5-parameter mutation with a fully-described schema and annotations covering idempotency and destructiveness, the description covers identity, action, and auth prerequisites. It could have noted that this is a partial update, but nothing essential to a correct call is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all five parameters, including the UUID pattern for id and the ISO 8601 format for completed_at, are already documented in the schema. The description adds only 'by ID', which the schema already implies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (update a compliance record) plus the identifier used to target it, and 'existing' distinguishes it from create_compliance_record. It does not differentiate itself from the many other update_* siblings in the registry, which is the only gap.

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 supplies a concrete prerequisite ('Requires compliance_records:write scope'), which tells the agent whether it is authorized to call it, but gives no when-to-use guidance or pointer to alternatives such as update_compliance_item or update_compliance_pm_schedule.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_contractUpdate contractB
DestructiveIdempotent

Update an existing contract by ID. Requires contracts:write scope.

NameRequiredDescriptionDefault
idYesContract ID
titleNoContract title
categoryNoContract category
end_dateNoEnd date (ISO 8601)
company_idNoVendor ID
extendableNoWhether contract is extendable
start_dateNoStart date (ISO 8601)
annual_costNoAnnual cost
descriptionNoDescription
quality_scoreNoQuality score (1-10)
purchase_orderNoPurchase order reference

TDQS

B3.2/5.0
Behavior3/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 mutation shape is conveyed structurally. The description adds the required contracts:write scope, which is genuine value beyond the annotations, but it does not explain partial-update semantics or why a mere field update is flagged destructive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with the operation front-loaded and no filler. Nothing is wasted, though there is little content to structure.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 11-parameter mutation with full schema coverage but no output schema, the description covers identification and auth but omits whether unspecified fields are left untouched (partial vs full replacement) and what the destructiveHint implies. Adequate but with clear gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every field (title, category, dates, annual_cost, quality_score, etc.) is already documented in the schema. The description contributes only "by ID," which the schema's required id field already conveys, 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 ("Update an existing contract") and scopes it to a single record by ID, which distinguishes it from the create/delete/get contract siblings. It doesn't differentiate from the other update_* family members, but the resource noun is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance, no prerequisites beyond the scope note, and no alternatives named. An agent gets no help deciding between this and, say, bulk_update or update_contract_document beyond the plain resource name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_contract_documentUpdate contract documentA
DestructiveIdempotent

Update a contract document by ID. Requires contract_documents:write scope.

NameRequiredDescriptionDefault
idYesContract document ID
file_nameNoFile name
file_pathNoStorage path
file_sizeNoFile size in bytes
file_typeNoMIME type
contract_idNoContract ID
uploaded_byNoUploader user ID

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, destructiveHint=true, and idempotentHint=true, so the safety profile is covered. The description adds one piece of genuine extra context — the required contract_documents:write scope — but says nothing about partial vs. full update semantics or which fields are mutable, leaving mutation behavior under-explained.

Agents need to know what a tool does to the world before 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 redundancy, and the core action plus the key constraint 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?

For a mutation tool with no output schema, the description covers the action, the lookup key, and the auth scope, while annotations carry the destructive/idempotent profile and the schema documents all fields. It is nearly complete, with only update semantics (partial vs. full) left unstated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% across all seven parameters, so the schema already documents each field, including the required id. The description only restates that lookup is 'by ID' and adds no syntax, format, or mutability meaning 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.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Update a contract document by ID'), which is unambiguous and identifies the entity precisely. It does not, however, differentiate itself from closely related siblings such as update_contract or bulk_update, so an agent gets no routing help beyond the resource name being 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?

The phrase 'by ID' implies the ID is required and the scope requirement gives a precondition, which is implied usage guidance. There is no explicit statement of when to use this versus update_contract, bulk_update, or delete_contract_document, so the agent must infer the choice.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_cost_categoryUpdate cost categoryB
DestructiveIdempotent

Update an existing cost category by ID. Requires cost_categories:write scope.

NameRequiredDescriptionDefault
idYesCost category ID
nameNoCost category name
is_activeNoWhether the category is active
parent_idNoParent cost category ID

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare destructiveHint=true, idempotentHint=true, readOnlyHint=false, and openWorldHint=false, so the safety profile is covered structurally. The description adds the auth requirement ('Requires cost_categories:write scope'), which is genuine value beyond annotations, but it omits patch semantics (does it replace or merge unspecified fields?) and any parent_id/cycle caveats.

Agents need to know what a tool does to the world before 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 front-loaded, zero filler. Every clause carries information an agent can act on.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an idempotent, non-open-world mutation with a fully-described flat schema and no output schema, the description covers purpose, identity key, and auth scope. The remaining gap is partial-update semantics for optional fields, which is minor given annotations and schema carry 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 100% – every parameter (id, name, is_active, parent_id) is documented in the schema with types, formats, and constraints. The description adds nothing about the params beyond 'by ID', 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 ('Update an existing cost category') plus the key discriminator ('by ID'), which cleanly separates it from create_cost_category and delete_cost_category. It does not, however, explicitly name any sibling or contrast with update_work_category/update_part_category for an agent weighing similar 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 Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use vs when-not guidance, no prerequisite workflow (e.g. 'fetch the id via list_cost_categories first'), and no indication of which alternative tool to pick. Only the auth scope is stated, which is a capability note 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.

update_criticality_modifierUpdate criticality modifierA
DestructiveIdempotent

Update a criticality modifier override by ID. Below 1 tightens the targets of facilities in that tier, above 1 relaxes them. Requires los_targets:write scope.

NameRequiredDescriptionDefault
idYesCriticality modifier ID
modifierNoMultiplier from 0.1 to 1.9; below 1 tightens, above 1 relaxes
criticalityNoCriticality tier

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, so the safety profile is covered structurally. The description adds value beyond them by naming the required los_targets:write scope and by explaining the direction/effect of the modifier value on facility targets.

Agents need to know what a tool does to the world before 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, followed by the semantic effect and the auth requirement. Every sentence carries distinct information with no redundancy 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 simple 3-parameter mutation with full schema coverage and annotations covering the safety profile, the description supplies the missing auth scope and the domain meaning of the modifier. It stops short of clarifying partial-update behavior (e.g. whether omitting 'modifier' or 'criticality' is allowed), which would be the last useful addition.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 'modifier' field's schema text ('below 1 tightens, above 1 relaxes') essentially duplicates the description's second sentence. The description adds no syntax, format, or partial-update behavior details beyond what the schema already provides, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Update a criticality modifier override by ID') and goes further by explaining what the modifier semantically controls (tightening/relaxing facility targets in the tier). It does not explicitly differentiate itself from sibling operations like create_criticality_modifier or bulk_update, but the name and ID-based framing make the operation unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by 'update ... by ID' (an existing override must exist), and the los_targets:write scope prerequisite is a genuinely useful gating condition. However, there is no explicit when-to-use/when-not guidance and no mention of bulk_update or the create/delete siblings for someone choosing an operation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_custom_field_definitionUpdate custom field definitionB
DestructiveIdempotent

Update an existing custom field definition by ID. Requires custom_fields:write scope.

NameRequiredDescriptionDefault
idYesCustom field definition ID
field_nameNoField name / key
field_typeNoField data type
entity_typeNoEntity type
field_labelNoDisplay label
is_requiredNoWhether the field is required
display_orderNoDisplay order
field_optionsNoOptions for select-type fields

TDQS

B3.2/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, so the safety profile is largely covered. The description adds the required 'custom_fields:write' scope, which is genuinely useful authorization context, but it omits what makes this destructive (e.g. changing field_type affecting existing values).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the core action followed by the scope requirement. No filler, though it is somewhat terse given the tool's 8 parameters.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and annotations covering safety, the main gaps are behavioral (destructive effects when field_type changes) and usage routing. The scope note helps, but for a destructive 8-param mutation the description leaves meaningful questions unanswered.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 8 documented parameters, so the schema carries the semantics and a baseline of 3 applies. The description adds no parameter detail beyond the id-reference, contributing nothing 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 ('Update an existing custom field definition by ID'), so the agent knows exactly what is being mutated. It does not, however, distinguish itself from close siblings like create_custom_field_definition, delete_custom_field_definition, or update_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 Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus the sibling update/create/delete variants or when a field definition should be edited at all. The only conditional information is the trust-level id requirement, not usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_custom_field_valueUpdate custom field valueA
DestructiveIdempotent

Update an existing custom field value by ID. Set whichever typed column matches the definition's field_type (value_text / value_number / value_date / value_boolean), or pass a single value and the server will dispatch it. Requires custom_fields:write scope.

NameRequiredDescriptionDefault
idYesCustom field value ID
valueNoLegacy single-value shim - server dispatches based on field_type
entity_idNoEntity ID
value_dateNoDate value, ISO YYYY-MM-DD
value_textNoText value
value_numberNoNumeric value
value_booleanNoBoolean value
field_definition_idNoCustom field definition ID - required when using the `value` fallback if you want to avoid the server fetching it

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, destructiveHint=true and idempotentHint=true, so the safety profile is covered. The description adds value beyond that by disclosing the required custom_fields:write scope and the server-side dispatch behavior that determines which column is written, which an agent needs in order to form a valid call.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences: identity/key first, then the value-dispatch rule, then the auth requirement. No filler and each sentence carries distinct, 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 an 8-parameter mutation tool with no output schema, the description covers the essential semantics, the write scope, and the value-dispatch behavior. It omits what happens to the typed columns not supplied (null vs. preserved) and when entity_id/field_definition_id are mandatory, which are the only remaining ambiguities.

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 goes further by explaining the mutual-exclusion rule between the typed value_* columns and the legacy single `value` shim and the dispatch criterion (the definition's field_type). It does not clarify when entity_id or field_definition_id are required, which is the main 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 ('Update an existing custom field value by ID') and immediately distinguishes itself from the create/delete/get/list custom-field-value siblings by naming the operation and the identifying key. The dispatch sentence further clarifies what the tool actually mutates.

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 two parameter styles (typed column vs. single `value` fallback) which is useful internal guidance, but it never states when an agent should choose this tool over siblings like update_custom_field_definition or create_custom_field_value, nor any preconditions beyond the scope requirement. Usage is implied rather than spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_expenseUpdate expenseA
DestructiveIdempotent

Update an existing expense by ID. Requires expenses:write scope.

NameRequiredDescriptionDefault
idYesExpense ID
notesNoNotes
amountNoExpense amount
project_idNoProject ID
category_idNoCost category ID
descriptionNoExpense description
receipt_urlNoReceipt URL
expense_dateNoExpense date (ISO 8601)
work_order_idNoWork order ID

TDQS

A3.5/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, and openWorldHint=false, so the safety profile is covered. The description usefully adds the required scope (expenses:write), which annotations cannot express, but it omits the critical partial-vs-full update semantics (are omitted fields cleared or preserved?) for a tool flagged destructive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, both front-loaded and informative: the operation and target come first, the authorization requirement second. There is no filler, hedging, or repetition of the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With a fully documented schema and annotations carrying the destructive/idempotent profile, the definition is minimally complete, and no output schema means return values need not be described. The missing piece is update semantics for optional fields, which matters given destructiveHint=true.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% across all nine parameters, so the schema documents each field adequately and the baseline is 3. The description adds nothing about parameter behavior, such as whether the nine optional fields are partial-patch or full-replace, which is the one gap the schema leaves open.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Update an existing expense by ID'), so an agent can distinguish it from create_expense, get_expense, and delete_expense without opening the schema. However, it does not name or differentiate itself from the closely related bulk_update sibling, which is the main ambiguity risk.

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 expenses:write scope') and the 'existing...by ID' phrasing implies this is for modifying already-created records, but there is no explicit when-to-use vs. bulk_update/update_project_time_entry style guidance and no when-not-to-use exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_floorplanUpdate floorplanB
DestructiveIdempotent

Update floorplan metadata (rename floor, reorder, set status). Requires floorplans:write scope.

NameRequiredDescriptionDefault
idYesFloorplan ID
statusNoDetection status
floor_labelNoNew floor label
floor_orderNoNew sort order
detection_errorNoError message if status=failed

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, destructiveHint=true, and idempotentHint=true, so the safety profile is covered. The description adds the floorplans:write scope requirement, which is genuinely useful auth context not in the annotations, but it doesn't explain why the op is marked destructive (e.g., status mutation 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight parenthetical clauses and a scope note; the verb and resource lead, and every clause carries information. 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?

Full schema coverage plus annotations make the definition callable, and the scope note is a useful add. Missing detail on the destructiveness of status transitions and on the absence of a return payload, so it is adequate rather than complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all five parameters. The description's rename/reorder/status phrasing loosely maps to floor_label, floor_order, and status, but it omits detection_error, adding little beyond structured data. 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 (floorplan) and enumerates the updatable metadata: rename, reorder, set status. The framing as 'metadata' subtly separates it from update_floorplan_region, but no sibling is named, so an agent still has to infer the boundary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

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 alternatives named. The 'Requires floorplans:write scope' line is a prerequisite, not usage selection guidance, so the agent gets no routing help.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_floorplan_regionUpdate floorplan regionB
DestructiveIdempotent

Update a floorplan region - rename, reshape polygon, link to a Location, or mark as reviewed. Requires floorplan_regions:write scope.

NameRequiredDescriptionDefault
idYesFloorplan region ID
labelNoNew label
polygonNoPolygon outline as an array of [x, y] points in normalized 0-1 coordinates (origin top-left). At least 3 points.
reviewedNoMark region as reviewed by admin
confidenceNo
location_idNoLinked Location ID (set to null to unlink)

TDQS

B3.4/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, and openWorldHint=false, so the safety profile is largely covered. The description's one addition beyond structured data is the required floorplan_regions:write scope, which is genuinely useful auth context. It does not disclose partial-update semantics or what reshaping destroys.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence naming the resource and its operations, followed by the scope requirement. No filler, though the scope sentence could arguably be part of the same claim.

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?

A six-parameter mutation tool with no output schema and no annotations gap is mostly covered: annotations supply safety, schema supplies field detail, description supplies scope and operation list. Missing is whether updates are partial or full-replacement, which matters given idempotentHint=true, so the definition is adequate but not airtight.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 83%, so the schema already documents nearly every field including polygon coordinate format and the null-to-unlink behavior on location_id. The description's enumeration of rename/reshape/link/review maps loosely to parameters but adds no syntax or edge-case detail beyond the schema, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (update) and resource (floorplan region) and enumerates the four concrete mutation kinds: rename, reshape polygon, link to a Location, mark as reviewed. This is clearly distinguishable from create_floorplan_region and delete_floorplan_region, though it does not explicitly contrast with update_floorplan, the closer sibling.

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 (mutating an existing region) and names the required floorplan_regions:write scope, but gives no explicit when-not guidance or alternative routing such as 'to edit the floorplan itself use update_floorplan'. 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.

update_form_templateUpdate form templateB
DestructiveIdempotent

Update an existing form template by ID. Requires form_templates:write scope.

NameRequiredDescriptionDefault
idYesForm template ID
nameNoForm template name
moduleNoMove the form to a workspace: facilities, infrastructure, or shared (both).
statusNoPublication status (draft, published, or archived)
descriptionNoDescription
work_category_idNoWork category ID (look up with list_work_categories)

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, destructiveHint=true and idempotentHint=true, so the agent knows this is a mutating, potentially destructive, repeatable-safe operation. The description's only added behavioral fact is the required 'form_templates:write' scope, which is genuinely useful but thin; it says nothing about partial-update semantics or what the destructive flag implies.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the action and target, with the scope requirement following. Nothing is padded and nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The schema fully documents the inputs and the annotations carry the safety profile, so the essentials are covered. For a destructive mutation with no output schema, the description still omits whether the update is partial or full-replace and what the destructiveHint risk actually means for callers.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 six parameters including the enum-constrained module and status are documented in the schema. The description only restates that the ID identifies the target and adds no format, defaulting, or omitted-field behavior beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource ('Update an existing form template by ID'), which is clear and actionable. It does not, however, distinguish itself from close siblings such as update_form_template_item or delete_form_template, which matters given the very large 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 Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives, nor any statement of preconditions beyond the scope requirement. The only usable clause is the auth scope, which is a prerequisite 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.

update_form_template_itemUpdate form template itemA
DestructiveIdempotent

Update an existing form template item by ID. template_id and item_key are immutable and cannot be changed. Requires form_template_items:write scope.

NameRequiredDescriptionDefault
idYesForm template item ID
labelNoQuestion label / prompt
configNoPer-type configuration (e.g. { min, max, unit, multiline })
optionsNoChoices for single_select / multi_select items
requiredNoWhether an answer is required
help_textNoHelp text shown under the label
item_typeNoItem type (section, checkbox, single_select, multi_select, number, text, photo)
sort_orderNoDisplay order within the template
visible_whenNoConditional-visibility rule referencing another item

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 genuinely useful context beyond that: which fields are immutable (template_id, item_key) and the required auth scope.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with no filler; the core action is front-loaded and the constraints follow 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?

For a nine-parameter mutation tool with no output schema, the description covers action, identity, immutability, and auth scope, with the fully documented schema filling in field-level detail. Only the lack of when-to-use routing keeps it from being complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with per-field descriptions, so the schema already carries parameter meaning; baseline 3 applies. The description's immutability note references template_id/item_key, which are not even inputs in this schema, so it adds only marginal parameter value.

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 an existing form template item by ID'), which is clear and distinct from update_form_template. However, it does no explicit sibling differentiation among the many update_* tools, leaving the agent to infer scope 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?

Conveys the required scope (form_template_items:write) and the immutability constraint, which implies a mutation context, but gives no explicit when-to-use guidance or pointer to alternatives such as update_form_template.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_infrastructure_assetUpdate infrastructure assetA
DestructiveIdempotent

Update an existing infrastructure asset (feature) by ID. To change geometry, provide a new GeoJSON Point/LineString matching the existing feature_type. Computed columns (length_m, slope_pct, risk_score) cannot be set. Requires infrastructure_assets:write scope.

NameRequiredDescriptionDefault
idYesInfrastructure asset ID
nameNo
lanesNo
modelNo
depth_mNo
qr_codeNo
site_idNo
width_mNo
geometryNoReplacement GeoJSON geometry
materialNo
quantityNo
image_urlNo
status_idNo
system_idNo
to_streetNo
road_classNoO. Reg. 239/02 road class 1-6 (1-2 arterial, 3-4 collector, 5-6 local)
building_idNo
data_sourceNo
descriptionNo
diameter_mmNo
from_streetNo
location_idNo
risk_factorNo
to_invert_mNo
external_idsNo
feature_codeNo
install_dateNo
asset_type_idNo
from_invert_mNo
purchase_costNo
purchase_dateNo
safety_impactNo
salvage_valueNo
serial_numberNo
to_feature_idNo
flow_directionNo
service_impactNo
condition_scoreNo
from_feature_idNo
manufacturer_idNo
system_class_idNo
system_group_idNo
unit_of_measureNo
financial_impactNo
regulatory_impactNo
reputation_impactNo
environmental_impactNo
last_maintenance_dateNo
unit_replacement_valueNo
expected_lifetime_yearsNo
salvage_value_percentageNo
positional_accuracy_classNo
likelihood_of_failure_scoreNo
consequence_of_failure_scoreNo
purchase_cost_calculation_methodNo

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already signal destructiveHint=true, idempotentHint=true and readOnlyHint=false. The description adds genuinely non-obvious behavior: the immutability of computed columns, the geometry-type constraint, and the required infrastructure_assets:write scope. It doesn't disclose whether omitted fields are cleared or preserved (partial vs full replace), which is the main remaining behavioral unknown for a destructive update.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with the operation and ID requirement, then constraints and auth. Every sentence adds information; no filler or restatement of the title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 55-property destructive mutation with no output schema, the description leaves major gaps: it doesn't say whether the update is partial or full-replace, doesn't describe any of the enum-bearing fields, and gives no sense of which of the many attributes are meaningful together. The geometry and scope notes are good but far from sufficient for a schema this large.

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 55 parameters and only 5% schema description coverage, the schema documents almost nothing, so the description carries the burden. It explains only one parameter (geometry, including the Point/LineString constraint) and names three non-settable computed columns; the remaining ~50 fields (name, lanes, model, dates, impact scores, enum fields, etc.) have no semantic help in either place.

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 an existing infrastructure asset (feature) by ID'), which is distinguishable from the create/delete/get/list siblings of the same entity. It does not explicitly contrast with near-neighbours like bulk_update or update_asset, but the entity and operation 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 concrete when-to-use detail: how to change geometry (provide a GeoJSON matching the existing feature_type) and an explicit when-not ('computed columns length_m, slope_pct, risk_score cannot be set'). It never names bulk_update or an alternative tool for multi-record edits, 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.

update_infrastructure_asset_commentUpdate infrastructure asset commentB
DestructiveIdempotent

Update an infrastructure asset comment by ID. Requires infrastructure_asset_comments:write scope.

NameRequiredDescriptionDefault
idYesComment ID
commentNoComment text

TDQS

B3.4/5.0
Behavior3/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 one genuinely useful piece of non-annotation context, the required infrastructure_asset_comments:write scope, but says nothing about how the mutation behaves (e.g. whether existing comment text is overwritten).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/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 scope requirement follows. It is efficient, though it is on the sparse side for a destructive mutation tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter update with no output schema this is roughly adequate: purpose, key, and auth scope are covered. It leaves open the semantics of a partial update (does omitting 'comment' clear it or leave it unchanged?) despite an idempotentHint that invites that question.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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% — both 'id' and 'comment' are documented in the schema, including the UUID format and 10,000 character limit — so the description's 'by ID' adds only confirmation. 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 ('Update an infrastructure asset comment') plus an addressing key ('by ID'), which is enough to distinguish it from create_infrastructure_asset_comment and get_infrastructure_asset_comment. It does not explicitly distinguish itself from the analogous update_asset_comment, so it falls short of the 5 tier.

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 — you call it when an existing comment needs modifying — but there is no explicit when/when-not guidance, no statement of prerequisites beyond scope, and no pointer to alternatives such as update_asset_comment for a different comment type.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_infrastructure_asset_costUpdate infrastructure asset costB
DestructiveIdempotent

Update an infrastructure asset cost by ID. Requires infrastructure_asset_costs:write scope.

NameRequiredDescriptionDefault
idYesCost ID
amountNoCost amount
categoryNoCost category
cost_dateNoCost date (YYYY-MM-DD)
po_numberNoPO number
work_order_idNoLinked work order ID
invoice_numberNoInvoice number
purchase_order_idNoPurchase order that paid this cost - resolve via list_purchase_orders. Counts against the order's remaining balance unless the cost belongs to a work order; null clears it.

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds the required authorization scope (infrastructure_asset_costs:write), which is genuinely useful context beyond the annotations. However, for a mutation tool flagged destructiveHint=true and idempotentHint=true, it says nothing about what mutation semantics apply — notably whether omitted fields are preserved or cleared, which matters a lot for a partial-update endpoint.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the operation and its identifier, followed by the auth requirement. Nothing is wasted and nothing is buried.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and full parameter coverage in the schema, the main remaining gap is update semantics: whether this is a full replace or a partial merge of the 7 optional fields. That is material information for a destructive-flagged update tool and is absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% across all 8 parameters, so the schema already documents each field thoroughly (including the notable 'null clears it' note on purchase_order_id). The description adds only 'by ID' and no further parameter meaning, so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb (update), resource (infrastructure asset cost), and key (by ID), so an agent knows exactly what operation it performs. It does not differentiate from the very similarly named update_asset_cost sibling, which is the only reason 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 Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no guidance on when to use this tool versus update_asset_cost or the other update_* cost variants. There are no prerequisites, exclusions, or alternative conditions beyond the bare operation statement.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_infrastructure_asset_documentUpdate infrastructure asset documentA
DestructiveIdempotent

Update infrastructure asset document metadata by ID. Requires infrastructure_asset_documents:write scope.

NameRequiredDescriptionDefault
idYesDocument ID
nameNoDocument name
categoryNoDocument category
file_pathNoStorage path
file_sizeNoFile size in bytes
file_typeNoMIME type
descriptionNoDescription

TDQS

A3.6/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, and openWorldHint=false, so the safety profile is covered structurally. The description adds the auth/scope requirement, but says nothing about whether this is a partial or full replacement, what a destructive overwrite means for omitted fields, or undo 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, the action and identifier are front-loaded, and the scope prerequisite follows with zero 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 metadata update with full schema documentation and annotations covering the safety profile, the description covers purpose and authorization adequately. The only missing piece is clarification that omitted optional fields are not changed (or are cleared, given destructiveHint).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and all six optional metadata fields plus the id are documented in the schema, so baseline 3 applies. The description adds nothing beyond 'by ID' — no mention of partial-update semantics for the optional fields.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb (update) and resource (infrastructure asset document metadata) with an ID-based scope. It doesn't distinguish itself from near-siblings like update_asset_document or update_project_document, but the resource is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

States the required scope (infrastructure_asset_documents:write), which is a real usage prerequisite. It gives no when-to-use vs. alternatives guidance and no indication of which fields can be updated or when to prefer bulk_update.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_infrastructure_asset_inspectionUpdate infrastructure asset inspectionB
DestructiveIdempotent

Update an existing infrastructure asset inspection by ID. Requires infrastructure_asset_inspections:write scope.

NameRequiredDescriptionDefault
idYesInspection ID
notesNoNotes
methodNoInspection method
defectsNoDefect observations
attachmentsNoAttachment URLs/paths
inspector_idNoInspector user ID
condition_scoreNoCondition score
inspection_dateNoInspection date (YYYY-MM-DD)

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this is a mutating (readOnlyHint=false), destructive (destructiveHint=true), idempotent operation, so the safety profile is covered. The description adds a genuinely useful behavior detail not in the annotations: the required 'infrastructure_asset_inspections:write' scope. It does not explain what is destroyed, or partial-update semantics.

Agents need to know what a tool does to the world before 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 padding, with the core action and its required identifier front-loaded before the permission requirement. Nothing could be removed without losing information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 8-parameter mutation tool with a nested 'defects' object and no output schema, the description covers the essentials (what, key, auth) but omits update semantics: whether omitted fields are preserved or cleared, and what the response contains. 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.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every one of the 8 parameters (notes, method, defects, attachments, inspector_id, condition_score, inspection_date) is already documented in the schema. The description only echoes 'by ID', adding no semantics beyond the schema. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

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 (infrastructure asset inspection) plus the identifying key (by ID), which cleanly separates it from create_infrastructure_asset_inspection and get_infrastructure_asset_inspection. It does not, however, differentiate itself from the many other update_* siblings in this large tool family.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives such as update_infrastructure_asset or bulk_update, nor any prerequisites like 'the inspection must already exist'. The agent must infer usage entirely from the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_infrastructure_asset_partUpdate infrastructure asset partB
DestructiveIdempotent

Update an infrastructure asset part association by ID. Requires infrastructure_asset_parts:write scope.

NameRequiredDescriptionDefault
idYesAssociation ID
part_idNoPart ID
quantityNoDesign/installed quantity
feature_idNoInfrastructure feature ID

TDQS

B3.2/5.0
Behavior3/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), so the safety picture is largely covered structurally. The description adds a genuinely useful non-annotation detail — the required infrastructure_asset_parts:write scope — but omits update semantics such as whether omitted fields are preserved or cleared.

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 with no filler, and the core action is front-loaded before the permission requirement. It is appropriately tight, though for a destructive multi-field mutation it borders on under-specified rather than optimally sized.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, non-readOnly update with four fields and no output schema, an agent still lacks the partial-update contract (are unspecified fields left intact?), error behavior on unknown ID, and any sibling disambiguation. Annotations carry the safety profile and the schema carries the fields, so the omission is not severe, but the definition is not 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 the schema already documents id, part_id, quantity, and feature_id. The description only restates that the association is addressed by ID and adds no format or constraint detail beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource ("Update an infrastructure asset part association") and states the identifier-based addressing ("by ID"), which is clearer than the bare title alone. It does not, however, distinguish this tool from the near-identical sibling update_asset_part, nor explain the infrastructure-vs-standard-asset distinction.

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 is provided, and no sibling alternatives are referenced despite update_asset_part, create_infrastructure_asset_part, and delete_infrastructure_asset_part existing. The only context offered is the required scope, which is a prerequisite 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.

update_infrastructure_feature_classUpdate infrastructure feature classA
DestructiveIdempotent

Update a tenant-defined infrastructure feature class (addressed by code). The code, category, and is_builtin fields are immutable; attempts to change them on a builtin class return 409. Requires infrastructure_feature_classes:write scope.

NameRequiredDescriptionDefault
codeYesAsset class code (lowercase snake_case, 1-50 chars)
iconNoIcon name
labelNoDisplay name
color_hexNoDisplay colour as hex, e.g. #3B82F6
sort_orderNoSort order

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes beyond the annotations by disclosing auth requirements (infrastructure_feature_classes:write scope), which fields are immutable (code, category, is_builtin), and the concrete failure mode (409 for builtin classes). It does not clarify whether omitted fields are left unchanged (partial update) or cleared, which matters given destructiveHint=true.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with what the tool does, followed by immutability and auth facts. 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 and full schema coverage, the remaining burden is behavioral, and the description covers scope, immutability and the 409 case. It still leaves update semantics (partial vs full replace, effect on dependent assets) unstated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so icon, label, color_hex and sort_order are already documented in the schema; the description adds no syntax or constraint detail for them. It does flag code as the addressing/immutable key and mentions category/is_builtin, but those two are not accepted parameters, so the guidance is only partly usable.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 (infrastructure feature class) plus the addressing key (code) and the scope restriction (tenant-defined). Combined with the update_/create_/delete_/get_/list_ sibling naming, an agent can select this tool without inspecting the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implicitly the tool is for modifying an existing class addressed by code, and the description supplies prerequisites (write scope, immutability). However, it names no alternative tools and never states when not to use it (e.g. use create_infrastructure_feature_class to define new classes, or update_* for asset-level changes).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_infrastructure_lifecycle_eventUpdate infrastructure lifecycle eventA
DestructiveIdempotent

Update a lifecycle strategy event by ID. Editing re-confirms the cost (cost_reviewed_on is server-set). Set is_active false to disable an event without deleting it - projections recompute immediately. Requires infrastructure_lifecycle_events:write scope.

NameRequiredDescriptionDefault
idYesLifecycle event ID
nameNoEvent name
is_activeNoDisable/enable the event
unit_costNoCost per unit (current dollars, never indexed)
fixed_costNoFixed cost (current dollars)
sort_orderNoEvaluation order within the strategy
cost_methodNoCosting: per unit (uses the feature's measured quantity and unit) or a fixed amount (default per_unit)
cost_sourceNoProvenance of the cost ("Engineering 2026", a tender reference)
event_classNoEvent type - preventative maintenance or rehabilitation
impact_methodNoEffect: add years of life, or reset condition to a value
impact_reset_toNoCondition after the event (required when impact_method is reset_condition)
work_generationNoWhat a due application of this event becomes when created from the interventions list: none (plan only, default), work_order, or project. Nothing is created on a schedule.
impact_add_yearsNoYears added (required when impact_method is add_years)
max_applicationsNoHow many times the event may fire over a feature's life (default 1)
min_years_betweenNoMinimum years between firings of a recurring event (default 1)
trigger_condition_maxNoUpper bound of the trigger window - the event fires when projected condition falls to this
trigger_condition_minNoLower bound of the trigger window (default 0); a feature already below it has missed the event
work_generation_priorityNoPriority for generated work orders. Ignored unless work_generation is work_order.
work_generation_category_idNoWork category for generated work orders - resolve with list_work_categories. Ignored unless work_generation is work_order.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds real context beyond the annotations: editing re-confirms cost with cost_reviewed_on server-set, disabling recomputes projections immediately, and the call requires infrastructure_lifecycle_events:write scope. These disclose side effects and auth needs that the destructive/idempotent hints do not convey, though it does not explain why a mere update is flagged destructive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences, each carrying distinct value (purpose, cost side effect, disable semantics, scope), and the core action is front-loaded. Nothing is wasted, though it could be slightly tighter.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 19-parameter mutation with no output schema and annotations present, the description covers the non-obvious behaviors an agent needs. It omits partial-update semantics (only the one required id plus supplied fields change), which would be useful given the wide optional parameter set.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 19 parameters are already documented in the schema and the baseline is 3. The description only adds semantics for cost_reviewed_on (server-set) and is_active=false, which are marginal 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 ('Update a lifecycle strategy event by ID'), which cleanly separates it from the create/delete/list siblings that share the same resource. However, it never explicitly names or contrasts with a sibling (e.g., update vs create), leaving differentiation to inference from the verb.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a concrete usage rule: set is_active false to disable an event without deleting it, which routes the agent away from the delete sibling for a common case. It lacks general when-to-use framing or prerequisites beyond the scope note, so it stops short of explicit alternatives guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_infrastructure_los_targetUpdate infrastructure LoS targetA
DestructiveIdempotent

Update an infrastructure LoS target by ID. base_target stays on 0-100. Requires los_targets:write scope.

NameRequiredDescriptionDefault
idYesInfrastructure LoS target ID
activeNoWhether the target is scored
metricNoMetric the target tracks
base_targetNoBase target, 0-100
feature_classNoFeature class code - resolve first via list_infrastructure_feature_classes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, destructiveHint=true, and idempotentHint=true, so the safety profile is largely covered. The description usefully adds the required auth scope, but leaves the surprising destructiveHint=true unexplained (an update flagged destructive) and says nothing about partial-vs-full update behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences that are front-loaded with the core purpose, then constraint, then permission. Tight and readable, with only the base_target restatement being slightly redundant against 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 5-param, no-output-schema mutation tool with full schema coverage and full annotations, the description supplies the extra auth requirement needed to call it correctly. The main omission is failing to clarify what the destructiveHint implies for this update.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The one description-level parameter claim ('base_target stays on 0-100') merely restates the schema's min/max, adding no new semantics beyond structured data.

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 an infrastructure LoS target by ID'), which is clear enough to distinguish it from the sibling update_system_los_target and read paths like list_infrastructure_los_targets. It doesn't explicitly name what it is not, but the resource scoping is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It surfaces one prerequisite ('Requires los_targets:write scope'), which is genuine usage context, but gives no when-to-use/when-not guidance and does not point to an alternative (e.g., resolving feature_class via list_infrastructure_feature_classes, which only the schema mentions). 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.

update_infrastructure_networkUpdate infrastructure networkA
DestructiveIdempotent

Update an existing infrastructure network by ID. Requires infrastructure_networks:write scope.

NameRequiredDescriptionDefault
idYesInfrastructure network ID
nameNoNetwork name
metadataNoFree-form JSON metadata
criticalityNoHow strictly the network is held to its feature class's Level of Service targets: critical, high, medium or low. Unset is treated as medium; send null on update to clear it
descriptionNoDescription
color_schemeNoDisplay color scheme
feature_classNoAsset class code

TDQS

A3.5/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/idempotency profile is covered. The description adds the auth scope requirement, which is genuinely beyond the annotations. However, it does not disclose the destructive semantics (what the destructiveHint implies, e.g. field clearing) nor whether the update is partial or full-replace.

Agents need to know what a tool does to the world before 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 terse sentences, zero filler, with the action and the auth requirement front-loaded. Nothing extraneous to trim.

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 update tool with 100% schema coverage, no output schema, and annotations carrying the safety profile, the essentials are present. The key remaining gap is update semantics: the schema explicitly supports sending null to clear criticality, implying partial-update behavior, yet the description never confirms this, which matters given destructiveHint=true.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all 7 parameters are documented in the schema itself (including the criticality null-clears behavior). The description adds no parameter-level meaning, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb+resource ('Update an existing infrastructure network by ID'), which cleanly separates it from create_infrastructure_network, delete_infrastructure_network, and get_infrastructure_network. It doesn't explicitly name a sibling or distinguishing scope, but the verb+resource pairing is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It names the required scope (infrastructure_networks:write), which is a useful precondition, but gives no guidance on when to use this update versus related updates (update_infrastructure_zone, update_infrastructure_asset) or when-not-to-use it. Usage is only implied by the tool name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_infrastructure_zoneUpdate infrastructure zoneA
DestructiveIdempotent

Update an infrastructure zone by ID. Pass boundary as a GeoJSON Polygon or MultiPolygon to replace the geometry. Requires infrastructure_zones:write scope.

NameRequiredDescriptionDefault
idYesZone ID
codeNoOptional short code
kindNoZone kind
nameNoZone name
notesNoFree-form notes
boundaryNoGeoJSON Polygon or MultiPolygon (EPSG:4326). Each ring is closed; coordinates are [lon, lat]. Use MultiPolygon for a boundary in separate pieces - an area split by a rail corridor, or one containing an island.
network_idNoInfrastructure network ID

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare destructiveHint=true and idempotentHint=true, so the safety profile is already covered. The description adds real value beyond that: the required infrastructure_zones:write scope and the fact that boundary replaces the existing geometry, which is the key destructive behavior an agent needs to 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?

Three short sentences with no filler: the action, the notable update semantic (geometry replacement), and the authorization requirement. Front-loaded 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?

Covers the operation, the one non-obvious mutation semantic, and the auth scope, with annotations supplying safety hints and no output schema to explain. The remaining gap is partial-update semantics: it never says whether omitted optional fields (name, code, kind) are preserved or cleared, which matters for a 7-parameter update 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 100% and the boundary schema already documents GeoJSON Polygon/MultiPolygon, EPSG:4326, ring closure and MultiPolygon use cases in detail. The description's boundary sentence largely restates the schema, and the other five parameters get no description-level context. 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 ('Update an infrastructure zone by ID'), which is clear enough to distinguish it from the create/delete/get/list zone siblings. It stops short of explicitly naming how it differs from bulk_update or create_infrastructure_zone, but the resource is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance: nothing about when to prefer this over bulk_update, or when a zone must exist first. 'By ID' weakly implies an existing zone, but that is inference rather than stated guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_invoiceUpdate invoiceB
DestructiveIdempotent

Update an existing invoice by ID. Requires invoices:write scope.

NameRequiredDescriptionDefault
idYesInvoice ID
notesNoNotes
amountNoInvoice amount
statusNoInvoice status
due_dateNoDue date (ISO 8601)
paid_dateNoPaid date (ISO 8601)
vendor_idNoVendor ID
project_idNoProject ID
tax_amountNoTax amount
category_idNoCost category ID
descriptionNoDescription
invoice_dateNoInvoice date (ISO 8601)
work_order_idNoWork order ID
invoice_numberNoInvoice number
purchase_order_idNoPurchase order ID

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, destructiveHint=true, and idempotentHint=true, so the safety profile is covered. The description adds one genuinely useful behavioral fact not in the annotations: the required 'invoices:write' auth scope. However, it doesn't clarify partial-update semantics (are omitted fields left unchanged or cleared?), which matters a lot for a 15-parameter mutable resource flagged destructive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the action and then the prerequisite. No filler or restated boilerplate.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With a rich 15-param schema, full schema coverage, and annotations carrying the safety profile, the definition is minimally adequate. It falls short for a destructive, high-parameter mutation tool: no statement about update semantics, no mention of what happens to unset fields, and no output/return behavior (no output schema exists), which an agent would want before calling.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all 15 parameters are self-documented in the schema; the baseline of 3 applies. The description adds only 'by ID', which is already evident from the required id field, and gives no hints about which updateable fields are meaningful together (e.g. status vs paid_date) or about the 'description' field name colliding with the tool's own description concept.

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?

Clear specific verb+resource: 'Update an existing invoice by ID.' The sibling set is a large CRUD matrix where each tool names a distinct resource (update_invoice vs update_expense, update_purchase_order), so differentiation is mostly inherent in the name, though the description doesn't explicitly distinguish this from create_invoice or delete_invoice beyond the verb.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this versus siblings such as create_invoice, update_expense, bulk_update, or get_invoice for reads. The only context is a scope requirement, which is a prerequisite 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.

update_locationUpdate locationB
DestructiveIdempotent

Update an existing location by ID. Requires locations:write scope.

NameRequiredDescriptionDefault
idYesLocation ID
areaNoArea (sq ft or sq m)
nameNoLocation name
typeNoLocation type label
floorNoFloor identifier
building_idNoBuilding ID
location_type_idNoLocation type ID (from location_types)

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=true, so the mutation and repeat-safety profile is covered structurally. The description adds the write-scope authorization requirement, which is genuinely useful context, but says nothing about partial-update semantics (whether omitted fields are cleared) or what exactly 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with zero filler, and the core action is front-loaded ahead of the scope constraint. It is efficient, though arguably too terse to be maximally useful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, idempotent update with a fully-documented 7-param schema and no output schema, the description covers the essential scope requirement. However, it omits the key semantic question for updates: whether this is a full replace or a partial patch, which matters given the destructive hint.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 7 well-documented parameters, so the schema does the heavy lifting. The description adds no parameter-level meaning beyond what the schema already provides. 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 ('Update an existing location') and anchors it to the identifier ('by ID'), so the agent knows exactly what entity is being modified. It does not distinguish itself from siblings like update_location_type or create_location, but the name/scope pair is clear enough to route correctly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description names a prerequisite ('Requires locations:write scope') but gives no when-to-use guidance, no exclusions, and no pointer to alternatives such as update_location_type or bulk_update. Usage is implied by the verb but not elaborated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_location_typeUpdate location typeA
DestructiveIdempotent

Update an existing location type by ID. Requires location_types:write scope.

NameRequiredDescriptionDefault
idYesLocation type ID
nameNoLocation type name
descriptionNoDescription

TDQS

A3.5/5.0
Behavior3/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 largely covered. The description adds the 'location_types:write' scope requirement, which is genuinely useful and not present in the structured fields. It omits important behavior such as whether unset fields are preserved (partial update) or cleared, which matters for a destructive-flagged mutation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with no filler, and the core action plus its identifier are front-loaded ahead of the scope requirement. Every sentence carries 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 three-parameter mutation with no output schema, the description covers the essential action and the authorization scope. However, with destructiveHint=true it should clarify the partial-vs-full update behavior and whether omitted fields are erased, leaving a meaningful gap for a write operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 id, name, and description are already documented in the schema. The description only reinforces that lookup is 'by ID' and adds no format, constraint, or update-semantics detail beyond what the schema provides, which matches the 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 states a specific verb and resource ('Update an existing location type by ID'), which lets an agent distinguish it from create_location_type, delete_location_type, and list_location_types. It does not explicitly reference those siblings, but the verb+resource pairing is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied by the verb and the 'by ID' qualifier — the agent can infer this is for modifying existing records rather than creating them. There is no explicit statement of when to prefer this over update_location or update_location_type-adjacent tools, and no prerequisites or exclusions beyond the scope note.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_los_consequenceUpdate LoS consequenceA
DestructiveIdempotent

Update a LoS consequence by ID. Changing scope_type to global clears scope_ref; changing it to anything else needs a scope_ref that fits the new type. Advisory only: no notification is sent. Requires los_consequences:write scope.

NameRequiredDescriptionDefault
idYesLoS consequence ID
activeNoWhether the consequence is shown
metricNoLimit to one metric; null matches any metric
severityNoMinimum severity shown
scope_refNoWhat the scope points at: null for global; critical, high, medium or low for criticality_tier; a system ID (resolve first via list_systems) for system; a feature class code (resolve first via list_infrastructure_feature_classes) for feature_class
statementNoThe consequence, as a statement
scope_typeNoWhat the consequence applies to
notify_rolesNoRoles named as owning the consequence. Recorded only; nothing is sent

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, so the safety profile is covered. The description adds genuinely useful context beyond that: changing scope_type to 'global' clears scope_ref, other scope_type values require a matching scope_ref, and notification is advisory only. It also discloses the required 'los_consequences:write' scope, 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?

Four short sentences, front-loaded with the purpose, then the non-obvious field interaction, then the notification caveat, then the auth requirement. Every sentence carries information an agent needs and none 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 an 8-parameter mutation tool with no output schema, the description covers the risky field interaction, the auth scope, and the notification side effect. It does not say whether unspecified fields are left untouched (partial vs full update) or what the response contains, which are minor but real gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description goes beyond the schema by documenting the cross-field contract between scope_type and scope_ref (including the clearing behavior), which is exactly the kind of relational semantics a schema of independent field descriptions cannot express.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Update a LoS consequence by ID'), which immediately distinguishes it from create_los_consequence, delete_los_consequence, and get_los_consequence. It doesn't explicitly name any sibling, but the resource+verb pairing is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implied usage is clear (this is the mutation path for an existing consequence, addressed by ID), and the scope_type/scope_ref rules give conditional guidance for one field. However, there is no explicit statement of when to use this versus e.g. bulk_update or delete_los_consequence, and no prerequisite workflow (resolve IDs first, etc.) is described beyond what the schema already says.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_los_measureUpdate LoS measureB
DestructiveIdempotent

Update an existing LoS measure by ID. Requires los_measures:write scope.

NameRequiredDescriptionDefault
idYesLoS measure ID
nameNoMeasure name
typeNoMeasure type
unitNoUnit of measurement
weightNoWeight for composite score calculation
categoryNoMeasure category
is_activeNoActive status
sort_orderNoSort order
data_sourceNoData source type
descriptionNoDescription
stretch_goalNoStretch goal value
target_valueNoTarget value
trend_directionNoWhich direction is better
data_source_configNoData source configuration (JSONB)
minimum_acceptableNoMinimum acceptable value
community_statementNoCommunity-facing statement

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, destructiveHint=true, and idempotentHint=true, so the mutation/idempotency profile is covered structurally. The description contributes the non-obvious auth requirement (los_measures:write). It omits the one thing that matters most for a 16-field update: whether omitted fields are preserved or cleared.

Agents need to know what a tool does to the world before 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, and the identifying operation ('by ID') comes before the scope prerequisite. Nothing to trim.

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, non-readonly tool with 16 parameters, a nested object, and no output schema, the description is thin: it never states partial-update semantics, whether updates are full-replacement, or any return/confirmation behavior. The scope note is welcome but does not fill the gap an agent faces when deciding which fields to send.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and all 16 parameters (including enums and theB data_source_config) are documented inline. The description adds no parameter-level detail, so the schema-disclosed 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 ('Update') and resource ('LoS measure') and disambiguates by ID, which cleanly separates it from create/delete/get_los_measure. However it does not distinguish itself from the very similarly named sibling update_los_measurement, leaving that pair to be told apart by name inspection alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description adds a real prerequisite ('Requires los_measures:write scope'), which is genuine usage guidance an agent needs before calling. But it offers no when-to-use vs. when-not context and no routing to alternatives such as update_los_measurement for measurement records.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_los_measurementUpdate LoS measurementA
DestructiveIdempotent

Update an existing LoS measurement by ID. Requires los_measurements:write scope.

NameRequiredDescriptionDefault
idYesLoS measurement ID
notesNoNotes or context
is_autoNoWhether this is auto-calculated
period_endNoPeriod end date (ISO 8601)
period_typeNoPeriod type
actual_valueNoMeasured value
period_startNoPeriod start date (ISO 8601)

TDQS

A3.6/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, so the safety profile is largely covered by structured data. The description adds the auth-scope requirement, which is genuine value beyond annotations, but says nothing about whether updates replace or merge fields or what is affected.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two terse sentences with zero filler; the operation and its precondition are front-loaded, and nothing in the text is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With full schema coverage and annotations covering destructiveness and idempotency, the description supplies what is missing for a simple update: the write scope and the ID-based addressing. Only ambiguity around partial vs full update semantics remains, and the idempotent hint partially resolves that.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so all seven parameters are already documented in the schema, including the enum and the required id. The description's phrase 'by ID' merely restates the required parameter and adds no syntax or semantic detail beyond the schema. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Update an existing LoS measurement by ID'), so the operation is unambiguous. However, it offers no differentiation from the many closely-named siblings such as update_los_measure, update_los_consequence, and update_los_proposed_target, leaving the agent to infer the distinction from the ID format alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description names a prerequisite scope (los_measurements:write), which is useful context, but gives no guidance on when to use this versus update_los_measure or other sibling update tools, and no when-not or alternative routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_los_proposed_targetUpdate LoS proposed targetB
DestructiveIdempotent

Update an existing LoS proposed target by ID. Requires los_proposed_targets:write scope.

NameRequiredDescriptionDefault
idYesLoS proposed target ID
yearNoTarget year, 2000-2200
target_valueNoProposed value for a technical measure, in the measure's own unit
target_statementNoProposed level of service for a community measure, as a statement

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, destructiveHint=true, and idempotentHint=true, so the safety profile is largely covered. The description adds real value with the required write scope, which annotations do not express. It stops short of explaining partial-update behavior or what happens to unspecified fields, so it is adequate but not 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?

Two short sentences, front-loaded with purpose and followed by the constraint. Nothing is wasted, though it is almost too terse for a four-parameter mutation tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no output schema and strong annotation coverage, the description supplies purpose, the ID-based target, and the permission requirement. Missing only update semantics (partial vs full) and any routing versus sibling LoS target tools, which the rich annotation set partly offsets.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 id, year, target_value, and target_statement with ranges and units. The description adds no parameter-level meaning 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.

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 ('Update an existing LoS proposed target') plus the targeting key ('by ID'), so an agent knows exactly what entity is being mutated. It does not, however, distinguish itself from the many near-neighbor update tools such as update_los_measure, update_los_consequence, or update_infrastructure_los_target.

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 only guidance offered is a permission prerequisite ('Requires los_proposed_targets:write scope'), which is not a when-to-use signal. There is no statement of when this tool is appropriate versus update_infrastructure_los_target, update_system_los_target, or the bulk_update/create siblings, leaving alternative selection entirely to inference from the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_manufacturerUpdate manufacturerA
DestructiveIdempotent

Update an existing manufacturer by ID. Requires manufacturers:write scope.

NameRequiredDescriptionDefault
idYesManufacturer ID
nameNoManufacturer name
notesNoNotes
websiteNoWebsite URL
contact_nameNoPrimary contact name
contact_emailNoContact email address
contact_phoneNoContact phone number

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=true, readOnlyHint=false and openWorldHint=false, so the safety profile is largely covered. The description adds the auth scope requirement, which is genuinely useful context, but it omits what a destructive update destroys or whether unspecified fields are cleared.

Agents need to know what a tool does to the world before 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 operation and its scope prerequisite are front-loaded and there is no filler or restatement of the title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

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 plus rich annotations and complete parameter documentation cover what an agent needs to invoke it. The one remaining gap is the partial-vs-full update contract, which the idempotentHint implies but the text never states.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and all seven parameters carry descriptions, so the schema does the heavy lifting; baseline 3 applies. The description adds nothing about partial-update semantics (e.g. that omitted fields are left unchanged), which is the main ambiguity for a 7-param update.

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 (an existing manufacturer) plus the lookup key (by ID). It is clear enough to distinguish from create_manufacturer and delete_manufacturer, though it does not explicitly name those 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?

Adds one concrete prerequisite, the manufacturers:write scope, which tells the agent when the call will be permitted. However, it gives no guidance on when to prefer this over bulk_update or update_part, and no when-not conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_partUpdate partB
DestructiveIdempotent

Update an existing part/inventory item by ID. Requires parts:write scope.

NameRequiredDescriptionDefault
idYesPart ID
costNoUnit cost
nameNoPart name
site_idNoSite ID
categoryNoCategory label
quantityNoCurrent stock quantity
supplierNoDEPRECATED - legacy free-text supplier name. Use supplier_id instead.
building_idNoBuilding ID
location_idNoLocation ID
part_numberNoPart number / SKU
supplier_idNoVendor ID (resolve via list_vendors)
desired_quantityNoTarget / reorder quantity
specific_locationNoStorage location description

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false, so the safety profile is covered structurally. The description adds genuinely new context with the parts:write scope requirement, but says nothing about partial-vs-replace semantics or what happens to fields left unspecified.

Agents need to know what a tool does to the world before 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 operation and target front-loaded and the prerequisite attached immediately after. Nothing is padded.

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 13-parameter destructive mutation with 12 optional fields, the description never clarifies whether omitted fields are preserved or cleared, nor how conflicts are resolved. No output schema exists to answer this, so the sparse description leaves a real operational 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 all 13 parameters including the deprecated 'supplier' and the 'specific_location' nuance are documented in the schema itself. The description adds no parameter-level meaning beyond the ID being the target, fitting the baseline for fully-documented schemas.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Update an existing part/inventory item by ID'), which clearly separates it from create_part, delete_part, and update_part_category. It does not explicitly name a sibling alternative, but the resource is unambiguous enough for an agent to route correctly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a prerequisite ('Requires parts:write scope') but no when-to-use or when-not-to-use guidance, and no mention of bulk_update as an alternative for multi-record edits. Usage is only implied by 'existing'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_part_categoryUpdate part categoryB
DestructiveIdempotent

Update an existing part category by ID. Requires part_categories:write scope.

NameRequiredDescriptionDefault
idYesPart category ID
nameNoPart category name
moduleNoMove the category to a workspace: facilities, infrastructure, or shared (both).
descriptionNoDescription

TDQS

B3.2/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, and openWorldHint=false, so the safety profile is largely covered. The description adds genuinely new context by naming the required OAuth scope (part_categories:write), which annotations do not convey. It does not, however, explain the destructive implications flagged by the annotation or what happens to nested/related data when a category is modified.

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 with the action front-loaded and the permission requirement second; no filler. It is slightly under-developed for a destructive mutation, but nothing in the text is wasted.

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 with no output schema, the description covers the action, the identifying key, and the auth requirement, and the schema carries the field-level detail and enum semantics. It omits any note on partial-update behavior (are unspecified fields left alone?), reversibility, or what the destructive hint means in practice, leaving real gaps for an agent acting on a 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%, so all four parameters (id, name, module, description) are already documented in the schema, including the module enum semantics. The description adds nothing beyond the schema, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Update an existing part category by ID'), which clearly separates it from create_part_category, delete_part_category, get_part_category, and list_part_categories in the sibling set. It stops short of naming the sibling it operates against for reads, but the verb+resource pairing is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The only guidance is a permission prerequisite ('Requires part_categories:write scope'). There is no statement of when to use this tool versus update_part, get_part_category, or the bulk_update sibling, and no note about which conditions warrant an update over a create.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_pm_scheduleUpdate PM scheduleA
DestructiveIdempotent

Update an existing PM schedule by ID. Requires pm_schedules:write scope. When changing location, resolve top-down: list_sites → list_buildings (by site_id) → list_locations (by building_id). Provide all three IDs.

NameRequiredDescriptionDefault
idYesPM schedule ID
tasksNoChecklist of tasks for this PM schedule
titleNoPM schedule title
statusNoSchedule status
site_idNoSite ID - resolve first via list_sites
asset_idNoAsset ID
floatingNoFloating schedule (due date based on completion)
next_dueNoNext due date (ISO 8601)
asset_idsNoAssets this schedule covers - use instead of asset_id when there is more than one.
frequencyNoFrequency
meter_unitNoMeter unit (km, miles, hours, cycles)
start_dateNoStart date (ISO 8601)
system_idsNoSystems this schedule covers. Systems have no singular field; this array is the only way to associate them.
building_idNoBuilding ID - resolve second via list_buildings filtered by site_id
descriptionNoDescription
location_idNoLocation ID - resolve last via list_locations filtered by building_id
meter_basedNoWhether this PM triggers at meter intervals
location_idsNoLocations this schedule covers - use instead of location_id when there is more than one. Sending location_id alone replaces this with that single id.
schedule_typeNoSchedule type
work_categoryNoWork category label
estimated_costNoEstimated cost
lead_time_daysNoLead time in days
meter_intervalNoMeter interval - trigger every N units
estimated_hoursNoEstimated hours
auto_generate_woNoAuto-generate work orders
form_template_idNoForm template ID to attach to every work order this generates - resolve via list_form_templates. Use a PUBLISHED template: generation resolves the current published version of the form, so a draft attaches nothing until it is published.
grace_period_daysNoGrace period in days
safety_requirementsNoSafety requirements
custom_interval_weeksNoCustom interval in weeks (when frequency is CUSTOM)
infrastructure_asset_idsNoInfrastructure features this schedule covers - resolve via list_infrastructure_assets. One schedule over several features generates one work order per cycle covering all of them. Mutually exclusive with asset/location/system targets.

TDQS

A3.5/5.0
Behavior3/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 usefully adds the required pm_schedules:write scope and the dependency chain for location resolution, but does not explain what a destructive update overwrites (e.g. whether omitted fields are nulled) or how array fields like tasks/systems are replaced.

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 core action and scope, followed by the non-obvious location workflow. No filler; every sentence carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 30-parameter mutation with full schema coverage and no output schema, the description covers the two hardest points (auth scope and the hierarchical location resolution). Remaining gaps around array replacement semantics and partial-update behavior are minor given the rich schema and annotations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 30 parameters are already documented in the schema, including the site/building/location resolution steps and the array-vs-singular replacement rules. The description reinforces the location chain and 'provide all three IDs' but adds little beyond the schema baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Update) plus resource (PM schedule) and identifies the key parameter (by ID). It is clearly distinguishable from create_pm_schedule and delete_pm_schedule in the sibling list, though it doesn't name 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?

Provides the write-scope prerequisite and a concrete resolution workflow (list_sites → list_buildings → list_locations) for the location-change case. However, it gives no guidance on when to prefer this over bulk_update or update_pm_template, and no when-not conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_pm_templateUpdate PM templateA
DestructiveIdempotent

Update an existing PM template by ID. Requires pm_templates:write scope.

NameRequiredDescriptionDefault
idYesPM template ID
tasksNoChecklist of tasks baked into this template
titleNoPM template title
asset_idsNoDefault asset IDs
documentsNoDocument references
frequencyNoSuggested maintenance frequency
resourcesNoResource references (parts, tools, materials, equipment)
descriptionNoDescription
location_idsNoDefault location IDs
work_categoryNoWork category label (free text)
estimated_costNoEstimated cost
estimated_hoursNoEstimated hours
form_template_idNoForm template ID to attach to every work order this generates - resolve via list_form_templates. Use a PUBLISHED template: generation resolves the current published version of the form, so a draft attaches nothing until it is published.
work_category_idNoWork category ID
safety_requirementsNoSafety requirements
custom_interval_weeksNoCustom interval in weeks (when frequency is CUSTOM)

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this as a non-read-only, destructive, idempotent, closed-world mutation, so the safety profile is covered. The description adds the required write scope, but is silent on what "destructive" means here — e.g. whether omitted fields are cleared or whether the tasks array replaces the existing checklist wholesale.

Agents need to know what a tool does to the world before 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 action/scope statement is front-loaded and the permission requirement follows immediately. Nothing could be removed without losing information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 16-parameter destructive update with no output schema, the description is serviceable but thin: only 1 of 16 fields is required, yet there is no mention of patch-vs-replace semantics, partial-update behavior, or what gets discarded. The annotations mitigate this somewhat by signaling destructiveness, keeping it at minimum-viable rather than inadequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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% across all 16 properties, including unusually rich notes on form_template_id (PUBLISHED-only) and enum values, so the schema carries parameter semantics. The description adds nothing beyond the schema, 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?

States a specific verb (Update), resource (PM template), and identifies the target by ID, so an agent can immediately tell it apart from create_pm_template/delete_pm_template. It does not, however, contrast itself against update_pm_schedule or list_pm_templates, which a reader might confuse with the same domain.

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 supplies a precondition ("Requires pm_templates:write scope") which is useful operational context, but gives no guidance on when to use this versus create_pm_template or update_pm_schedule, and no exclusions or alternatives are named. Usage is only implied by the verb.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_projectUpdate projectB
DestructiveIdempotent

Update an existing project by ID. Requires projects:write scope.

NameRequiredDescriptionDefault
idYesProject ID
nameNoProject name
budgetNoTotal budget
statusNoProject status
end_dateNoEnd date (ISO 8601)
image_urlNoImage URL
start_dateNoStart date (ISO 8601)
descriptionNoDescription
project_codeNoProject code
project_typeNoProject type
budget_statusNoBudget status
current_phaseNoCurrent phase
health_statusNoHealth status
progress_statusNoProgress status
project_managerNoProject manager name
progress_percentageNoProgress percentage (0-100)

TDQS

B3.4/5.0
Behavior3/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 largely covered. The description usefully adds the required write scope, but it never explains partial-update semantics (whether omitted fields are preserved or cleared) nor why the operation is flagged destructive, which is the key behavioral question for a 16-field updater.

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 ahead of the precondition, with no wasted phrasing. It is perhaps briefer than ideal given 16 parameters, but nothing in it is extraneous.

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 16 optional fields and no output schema, the description should at minimum state update semantics, e.g., that only supplied fields change. The scope requirement is good, but the agent is left to guess how omissions are handled on a destructive-flagged update.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all 16 parameters are documented in the schema itself, including enums and numeric ranges. The description adds nothing about parameters, which is acceptable at this coverage level but earns no credit beyond the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb (update) plus resource (project) and a 'by ID' identifier, so the operation is immediately clear. However, with dozens of update_project_* siblings and update siblings in the list, the description does not differentiate itself from those alternatives or clarify that it targets the top-level project entity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The prerequisite 'Requires projects:write scope' gives a real usage condition, which is useful context. But there is no statement of when to pick this over bulk_update or the many update_project_* siblings, and no exclusions, so guidance is only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_project_budget_itemUpdate project budget itemB
DestructiveIdempotent

Update an existing project budget item by ID. Requires project_budget_items:write scope.

NameRequiredDescriptionDefault
idYesProject budget item ID
categoryNoBudget category
project_idNoProject ID
descriptionNoDescription
actual_amountNoActual amount
planned_amountNoPlanned amount

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, destructiveHint=true, and idempotentHint=true, so the safety profile is covered structurally. The description adds the required write scope, which is genuinely useful auth context, but says nothing about partial-vs-full update semantics or what happens to fields that are omitted — notable for a tool flagged destructive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the action and identifier and followed by the authorization prerequisite. No filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no output schema, the description covers identity and authorization but leaves meaningful gaps: whether the update is partial or full replacement, and what the destructiveHint implies for existing values. Adequate but not complete for an update operation flagged destructive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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% across all 6 parameters, so the schema already documents each field including the category enum. The description only echoes that the item is identified 'by ID' and adds no field-level meaning beyond the schema, making the baseline 3 appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Update), resource (project budget item), and lookup key (by ID), which cleanly separates it from create_project_budget_item, delete_project_budget_item, and get_project_budget_item. It does not explicitly name a sibling, but the verb+resource combination is unambiguous in this large 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 Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this versus the create/delete/bulk_update siblings, nor any precondition such as retrieving the item first or which fields are updatable. The only stated condition is the required scope, which is an authorization fact 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.

update_project_commentUpdate project commentA
DestructiveIdempotent

Update an existing project comment by ID. Requires project_comments:write scope.

NameRequiredDescriptionDefault
idYesProject comment ID
contentNoComment content
parent_idNoParent comment ID

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this is a write operation (readOnlyHint=false), destructive (destructiveHint=true), idempotent, and closed-world. The description adds the required authorization scope ('project_comments:write'), which is useful beyond annotations, but it does not clarify partial-update behavior, which fields are replaced, or what happens to omitted fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the operation and target, followed immediately by the authorization prerequisite. Every sentence earns its place with no redundant or vague phrasing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence 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 three-parameter update tool with full schema coverage, rich annotations, and no output schema, the description is nearly complete: it names the operation, lookup key, and required scope. The main remaining gap is partial-update semantics, but the structured fields already cover most of what an agent needs to invoke it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents id, content, and parent_id. The description only reinforces that the target is identified by ID; it adds no semantics for content or parent_id beyond what the schema provides. 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?

The description states a specific verb ('Update') and resource ('existing project comment') with a clear lookup key ('by ID'). This distinguishes it from sibling operations such as create_project_comment, delete_project_comment, and get_project_comment 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 Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage by saying 'Update an existing project comment by ID' and adds a prerequisite scope requirement. However, it does not explicitly say when to use this over alternatives like update_asset_comment, update_work_order_comment, or create_project_comment, nor does it state exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_project_documentUpdate project documentB
DestructiveIdempotent

Update a project document by ID. Requires project_documents:write scope.

NameRequiredDescriptionDefault
idYesProject document ID
nameNoDocument name
file_pathNoStorage path
file_sizeNoFile size in bytes
file_typeNoMIME type
folder_idNoFolder ID
project_idNoProject ID
descriptionNoDescription
uploaded_byNoUploader user ID

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare non-read-only, destructive, idempotent, and closed-world, so the safety profile is covered structurally. The description adds a genuinely useful non-structured fact, the required write scope, but says nothing about partial-update behavior (whether omitted fields are cleared or preserved), which matters given destructiveHint=true.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with the operation first and the permission requirement second. No filler, no repetition of the title, nothing wasted.

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 9-parameter mutation with no output schema and destructive/idempotent annotations, the description covers identity and authorization but omits update semantics — whether it is a partial patch, whether unspecified fields are preserved, and what it returns. 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 description coverage is 100% across all 9 parameters, so the schema already names and describes every field. The description adds only the fact that 'id' is the lookup key, which is already implied by the required list, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Update a project document') plus the identifying key ('by ID'), which is enough to distinguish it from the many other update_* siblings and from update_project_document_folder_template. It stops short of explicitly contrasting with the closest sibling, 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 Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The only guidance is a prerequisite ('Requires project_documents:write scope'). There is no statement of when to reach for this tool versus create_project_document, delete_project_document, or list_project_documents, and no exclusions or conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_project_document_folder_templateUpdate project document folder templateB
DestructiveIdempotent

Update a project document folder template by ID. Requires project_document_folder_templates:write scope.

NameRequiredDescriptionDefault
idYesTemplate ID
nameNoTemplate name
structureNoFolder hierarchy as JSON array
is_defaultNoWhether this is the default template
descriptionNoTemplate description

TDQS

B3.2/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, so the safety profile is covered. The description adds one piece of value the annotations lack: the required write scope. However, it does not disclose what 'destructive' means here — whether omitted fields are cleared, whether replacing 'structure' rewrites the folder hierarchy, or how is_default conflicts are resolved.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the action and the identifier, no filler. It is efficient, though it is efficient at conveying very little.

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 rich annotations and a fully documented schema, the scope note plus the action statement is minimally sufficient. The missing piece is update semantics: whether this is a partial patch or a full replace, and what happens to unspecified fields.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so id, name, structure, is_default and description are all documented in the schema itself. The description adds nothing about parameter behavior (e.g., partial vs full update semantics), so this sits at the baseline of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Update a project document folder template') and identifies the identifier used ('by ID'). The resource name matches the sibling naming family (get_/delete_/list_/create_project_document_folder_template), so an agent can distinguish it from the read and list variants, though no explicit sibling routing is given.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no when-to-use guidance, no prerequisites beyond the scope string, and no exclusions (e.g., use the list tool to find IDs first, or use create_ for new templates). It is purely a restatement of the action.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_project_infrastructure_assetUpdate project infrastructure assetB
DestructiveIdempotent

Update a project ↔ infrastructure feature link by ID. Requires project_infrastructure_assets:write scope.

NameRequiredDescriptionDefault
idYesLink ID
notesNoFree-form notes
feature_idNoInfrastructure feature ID
project_idNoProject ID

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, destructiveHint=true, and idempotentHint=true, so safety semantics are partly covered. The description usefully adds the required auth scope (project_infrastructure_assets:write), which annotations do not carry, but it omits update semantics such as whether omitted fields are cleared or preserved, which matters for a destructive-flagged mutation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the action and resource, then the scope requirement. No filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a low-complexity, non-nested, four-parameter mutation with no output schema, the description covers identity and auth but leaves update semantics and the meaning of destructiveHint unexplained. Adequate but with a clear gap for a tool flagged as destructive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 all four parameters (id, notes, feature_id, project_id) documented inline, so the schema carries the parameter burden. The description adds only the notion that 'id' is a link ID, which is already implied by the schema; baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Update a project ↔ infrastructure feature link') and identifies the keying field ('by ID'), which is enough to separate it from the many update_project_* siblings. It does not, however, explicitly contrast itself against close relatives like update_infrastructure_asset or delete_project_infrastructure_asset.

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 names a required scope but gives no guidance on when to choose this tool versus alternatives (e.g., create_project_infrastructure_asset for new links, delete_* for removal, or update_infrastructure_asset for the feature itself). There is no statement of prerequisites or exclusions beyond the scope string.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_project_milestoneUpdate project milestoneA
DestructiveIdempotent

Update an existing project milestone by ID. Requires project_milestones:write scope.

NameRequiredDescriptionDefault
idYesProject milestone ID
nameNoMilestone name
statusNoMilestone status
due_dateNoDue date (ISO 8601)
project_idNoProject ID
descriptionNoDescription
completed_dateNoCompleted date (ISO 8601)

TDQS

A3.5/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, so the mutation risk profile is covered. The description adds the required auth scope, which is real value beyond the annotations, but it never explains whether unspecified fields are preserved (partial update) or cleared, nor what happens on an invalid ID.

Agents need to know what a tool does to the world before 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, no filler; the operation and its identifier come first and the authorization requirement follows. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, idempotent mutation with no output schema, the description covers the identifier and the scope requirement but omits update semantics (partial vs full replacement) and any error/failure behavior. Combined with annotations it is roughly adequate, but leaves a meaningful gap for a 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% with 7 documented properties including the enum on status, so the schema carries parameter meaning. The description only reinforces that id is the lookup key and adds nothing about updatable fields or date formats beyond what the schema already says.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Update an existing project milestone') plus the identifying key ('by ID'). It does not distinguish itself from siblings like update_project_task or update_project_risk, but the resource is unambiguous so an agent can match it to the right entity.

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 prerequisite (project_milestones:write scope), which is useful, but gives no when-to-use versus alternatives such as bulk_update or update_project, and no guidance on when a milestone should be edited vs recreated. Usage is only implied by the verb.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_project_phaseUpdate project phaseA
DestructiveIdempotent

Update an existing project phase by ID. Requires project_phases:write scope.

NameRequiredDescriptionDefault
idYesProject phase ID
nameNoPhase name
statusNoPhase status
end_dateNoEnd date (ISO 8601)
project_idNoProject ID
start_dateNoStart date (ISO 8601)
descriptionNoDescription
sequence_orderNoOrder within the project

TDQS

A3.5/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, and openWorldHint=false, so the safety profile is covered. The description adds the auth scope requirement, which is genuinely useful, but it does not explain partial-update semantics or what destructiveness entails for this resource.

Agents need to know what a tool does to the world before 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, front-loading the core operation and 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.

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, the description covers the identifier and write scope but omits important behavioral context such as whether the update is partial or full-replacement and what side effects the destructive hint implies. Annotations and the rich schema compensate partially, leaving this adequate but incomplete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all 8 parameters (id, name, status, dates, etc.) are already documented in the input schema. The description only restates the required 'by ID' parameter and adds no syntax, format, or update-semantics detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Update') and resource ('project phase') and adds the 'by ID' identifier constraint, which makes the operation concrete. It does not distinguish itself from the many sibling update_* tools (e.g., update_project, update_project_task) beyond naming the 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 only contextual guidance is the required scope ('Requires project_phases:write scope'), which is useful but is a prerequisite rather than a when-to-use vs alternatives rule. No exclusions or alternative tools are named, leaving usage implied by the verb.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_project_phase_categoryUpdate project phase categoryA
DestructiveIdempotent

Update an existing project phase category by ID. Requires project_phase_categories:write scope.

NameRequiredDescriptionDefault
idYesProject phase category ID
nameNoPhase name
sort_orderNoDisplay order (lower = first)
descriptionNoDescription

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

It adds the auth requirement (project_phase_categories:write scope), which is genuinely useful context beyond the annotations. However, annotations already declare destructiveHint=true and idempotentHint=true, and the description never explains what 'destructive' means here or whether omitted fields are cleared or preserved — a significant gap for a mutation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact sentences, zero filler, with the core action front-loaded and the permission requirement second. Nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, idempotent mutation with no output schema, the description covers identity and authorization but omits partial-update semantics (are name/sort_order/description optional and what happens if omitted) and any note on reversibility. Adequate but with clear gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so name, sort_order, description, and id are all documented in the schema itself. The description adds only the phrase 'by ID', which reinforces but does not extend the schema's semantics. 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), resource (project phase category), and identification method (by ID). It clearly distinguishes itself from create_project_phase_category and delete_project_phase_category, though it does not explicitly differentiate from update_project_phase, the nearest sibling.

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 (modify an existing category identified by ID) and adds a required scope, but gives no explicit when-to-use or when-not-to-use guidance relative to siblings like update_project_phase or bulk_update.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_project_riskUpdate project riskB
DestructiveIdempotent

Update an existing project risk by ID. Requires project_risks:write scope.

NameRequiredDescriptionDefault
idYesProject risk ID
titleNoRisk title
impactNoImpact level
statusNoRisk status
categoryNoRisk category
due_dateNoDue date (ISO 8601)
owner_idNoRisk owner (Clerk user ID)
project_idNoProject ID
descriptionNoRisk description
probabilityNoProbability level
mitigation_planNoMitigation plan
contingency_planNoContingency plan

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare destructiveHint=true, idempotentHint=true and readOnlyHint=false, so the write/idempotent/no-return nature is covered structurally. The description adds one genuinely useful fact beyond that: the required project_risks:write scope. It omits mutation semantics such as whether omitted fields are preserved or cleared, which matters for a 12-parameter update.

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 with no filler, and the action plus the ID requirement are front-loaded. It is efficient, though arguably too terse for a mutation tool with twelve parameters.

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?

Auth scope is covered and annotations carry the safety profile, but for a 12-param update with only id required the description should clarify partial-update behavior and confirm that the target risk must already exist. Those gaps keep it at minimum-viable rather than complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% with enums on impact, status, category and probability, so the schema fully documents the parameters. The description contributes nothing about field-level behavior (e.g. partial vs full replacement), which is the baseline-3 case when 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 (Update) and resource (project risk) plus the identifying key (by ID), so an agent can distinguish it from create_project_risk and delete_project_risk. It does not differentiate itself from bulk_update or update_project, but the resource-level naming is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no mention of the alternative bulk_update for multi-record edits, and no note that a risk ID must first be obtained from list_project_risks or get_project_risk. Usage is only implied by 'existing...by ID'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_project_taskUpdate project taskB
DestructiveIdempotent

Update an existing project task by ID. Requires project_tasks:write scope.

NameRequiredDescriptionDefault
idYesProject task ID
titleNoTask title
statusNoTask status
due_dateNoDue date (ISO 8601)
phase_idNoPhase ID
priorityNoPriority
project_idNoProject ID
start_dateNoStart date (ISO 8601)
assigned_toNoAssigned user
descriptionNoDescription
estimated_costNoEstimated cost
estimated_hoursNoEstimated hours

TDQS

B3.2/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 and openWorldHint=false, so the safety profile is covered. The description adds useful context by naming the required OAuth scope (project_tasks:write), which annotations do not convey, but it omits what "destructive" means here and whether omitted fields are preserved.

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, zero filler, with the action front-loaded and the authorization requirement second. It is efficient, though the brevity is partly under-specification rather than pure concision.

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 12-parameter mutation with 11 optional fields and no output schema, the description covers identity and authorization but leaves the critical semantics of a partial update (are unspecified fields left alone? are empty values treated as clears?) unstated. Combined with annotations that carry the safety profile, it is adequate but incomplete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% across all 12 parameters, including enum values for status and priority and ISO 8601 format notes for dates, so the schema does the heavy lifting. The description adds no syntax, format, or partial-update semantics beyond what is already documented.

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 an existing project task") and the lookup key ("by ID"), so the agent immediately knows this is a targeted mutation rather than a create/bulk operation. It does not differentiate itself from neighbors like update_project_task_dependency or update_project_milestone beyond the resource name, 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 gives a precondition ("Requires project_tasks:write scope") but no when-to-use guidance, no mention of partial vs. full update, and no routing to alternatives such as bulk_update for multiple tasks. The agent gets no help deciding between this tool and its many update_* siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_project_team_memberUpdate project team memberB
DestructiveIdempotent

Update a project team member by ID. Requires project_team_members:write scope.

NameRequiredDescriptionDefault
idYesProject team member ID
roleNoRole on the project
user_idNoClerk user ID
end_dateNoEnd date (ISO 8601)
is_activeNoWhether member is currently active
project_idNoProject ID
start_dateNoStart date (ISO 8601)
responsibilitiesNoDescription of responsibilities

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, destructiveHint=true, and idempotentHint=true, so the safety profile is covered structurally. The description adds the required authorization scope (project_team_members:write), which is genuinely useful context not present in the annotations, but it says nothing about partial-update semantics or what 'destructive' means here.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the operation and target, with the scope requirement as a secondary clause. Nothing is wasted, though it is sparse for an 8-parameter mutation tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers identity and authorization but leaves open the key behaviors of a destructive mutation: whether omitted fields are preserved or cleared, and what side effects result from deactivating or ending a team member. With no output schema, a little more behavioral detail would be warranted.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all eight parameters are already documented in the schema, and the description's 'by ID' merely echoes the required id field. Baseline 3 is appropriate when the schema carries the parameter burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

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 ('project team member') plus the identifier used to target it. It does not distinguish itself from the many sibling update_* tools, but the purpose itself is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

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 is given. It does not say whether unspecified fields are left unchanged, nor how this differs from delete_project_team_member or list_project_team_members in a workflow.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_project_time_entryUpdate project time entryB
DestructiveIdempotent

Update an existing project time entry by ID. Requires project_time_entries:write scope.

NameRequiredDescriptionDefault
idYesProject time entry ID
task_idNoTask ID
user_idNoUser ID
end_timeNoEnd time (ISO 8601 datetime)
user_nameNoDisplay name of the user
project_idNoProject ID
start_timeNoStart time (ISO 8601 datetime)
descriptionNoDescription
is_billableNoWhether the time is billable
duration_minutesNoDuration worked, in minutes

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, destructiveHint=true, and idempotentHint=true, so the safety profile is covered externally. The description usefully adds the authorization scope requirement, but with 10 optional fields and a destructive hint it omits critical update semantics: whether this is a partial (PATCH) or full-replace (PUT) update and what happens to fields left out.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with the purpose front-loaded and the precondition second; no filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Annotations cover the safety profile and the schema documents all fields, so the definition is minimally adequate. However, for a destructive mutation with 10 partial fields and no output schema, the absence of update semantics (partial vs full replacement) is a 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 every field is documented in the schema itself. The description adds no parameter detail beyond confirming the ID key, so the baseline of 3 for high-coverage schemas 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 (existing project time entry) with the keying mechanism (by ID). It is clear what the tool does, though it does not explicitly contrast itself with siblings like create_project_time_entry or get_project_time_entry.

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 explicit when-to-use, when-not-to-use, or alternative tools are given. The only context is a precondition ('Requires project_time_entries:write scope'), which is a prerequisite rather than usage guidance for selecting among the many update_* siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_project_updateUpdate project updateB
DestructiveIdempotent

Update an existing project update by ID. Requires project_updates:write scope.

NameRequiredDescriptionDefault
idYesProject update ID
titleNoOptional custom title
contentNoUpdate content
author_idNoAuthor Clerk user ID
timeframeNoUpdate timeframe
project_idNoProject ID
period_yearNoYear for this update period
period_valueNoPeriod value

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=true, idempotentHint=true), so the bar is lower. The description usefully adds the required auth scope, which is not in the structured fields, but it never explains the destructiveHint=true flag or what an update can overwrite — an odd omission for a tool flagged destructive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two terse sentences with no filler, and the 'by ID' identifier is front-loaded. It is appropriately sized, though its brevity reflects missing content rather than tight editing.

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 rich annotations, no output schema, and full schema coverage, the definition is minimally adequate. The auth scope is covered, but the destructive semantics and partial-update behavior are not addressed, leaving a gap that annotations alone don't close.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all eight parameters (including the required id and the timeframe enum) are already documented in the schema. The description adds no parameter-level meaning beyond this, 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?

The description states a specific verb and resource ('Update an existing project update by ID'), which is clear and precise. It doesn't differentiate itself from the many sibling update_* tools, but the resource name 'project update' is unambiguous enough that an agent can identify it.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states the required scope (project_updates:write) but gives no guidance on when to use this versus update_project or create_project_update, nor any conditions or exclusions. The only usage signal is a permission prerequisite, which is thin.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_purchase_orderUpdate purchase orderB
DestructiveIdempotent

Update an existing purchase order by ID. Requires purchase_orders:write scope.

NameRequiredDescriptionDefault
idYesPurchase order ID
notesNoNotes
amountNoPO amount
statusNoPO status
po_numberNoPO number
vendor_idNoVendor ID
project_idNoProject ID
category_idNoCost category ID
descriptionNoDescription
issued_dateNoIssued date (ISO 8601)
expected_dateNoExpected delivery date (ISO 8601)
work_order_idNoWork order ID

TDQS

B3.3/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, so the safety profile is covered. The description contributes the auth requirement ('Requires purchase_orders:write scope'), which is genuinely useful, but says nothing about whether omitted fields are preserved or cleared and gives no warning about the destructive nature beyond the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the action and followed by the permission requirement. No redundant restatement of the title or name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 12-parameter mutation with no output schema, the description covers identity and auth but omits the behavior an agent most needs: whether the call is a partial or full update and what happens to fields left unspecified. Adequate but with a clear gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all 12 parameters are documented in the schema and the baseline is 3. The description adds only that updates are keyed by ID, which is already implied by the required 'id' property; it adds no partial-update semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Update an existing purchase order by ID'), so the agent knows exactly which entity is mutated. However, in a sibling set containing update_purchase_order_line and update_purchase_order_link, it never distinguishes itself from those near-neighbors.

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?

'by ID' implies an existing record is required, but there is no guidance on when to choose this over bulk_update, update_purchase_order_line, or create_purchase_order. No prerequisites or exclusions are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_purchase_order_lineUpdate purchase order lineA
DestructiveIdempotent

Update a purchase order line item. Requires purchase_orders:write scope. To receive goods, set quantity_received; for a line with a part, the change is added to (or taken from) that part's stock. A line with stock received cannot change its part.

NameRequiredDescriptionDefault
idYesPurchase order line ID
part_idNoPart from inventory
quantityNoQuantity ordered
unit_costNoPrice per unit, in the organization currency
descriptionNoWhat is being ordered
line_numberNoPosition on the order
quantity_receivedNoQuantity received so far, 0 to quantity

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds meaningful behavior beyond the annotations: the required purchase_orders:write scope, the inventory side effect (quantity changes propagate to the part's stock), and the immutability rule that a line with received stock cannot change its part. The annotations only supply the generic destructive/idempotent profile, so this extra context is genuinely additive.

Agents need to know what a tool does to the world before 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 auth requirement, then the two operational rules. Every sentence carries information and nothing is repeated.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter mutation tool with no output schema, the description covers authorization, side effects, and a key business constraint. It could still say more about what the response returns or what happens to line fields after partial receipt, but nothing needed to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

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 goes further by explaining the intended use of quantity_received (goods receipt) and the interaction between part_id and already-received stock. That adds semantics the schema's terse 'Part from inventory' text does not 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?

The description opens with a specific verb+resource ('Update a purchase order line item'), which cleanly separates it from create_purchase_order_line, delete_purchase_order_line, and list_purchase_order_lines. It does not differentiate itself from the other update_* siblings in the family, but the resource is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives one concrete usage recipe ('To receive goods, set quantity_received'), which is a real when-to-use cue. However it never says when to prefer this over bulk_update or update_purchase_order, and no exclusions or prerequisites beyond the scope string are stated, 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.

update_service_areaUpdate service areaB
DestructiveIdempotent

Update an existing service area by ID. Requires service_areas:write scope.

NameRequiredDescriptionDefault
idYesService area ID
iconNoIcon name
nameNoService area name
colorNoHex color code
is_activeNoActive status
sort_orderNoSort order
descriptionNoDescription

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the write/destructive/idempotent profile, so the description doesn't need to restate safety. It does add real value by naming the required authorization scope (service_areas:write), but it never says whether this is a partial or full replace, or what happens to fields omitted from the payload.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with zero filler; the operation and its precondition are front-loaded and immediately actionable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With annotations covering the safety profile and a fully documented schema, the description is adequate but leaves two gaps an agent would want: partial vs. full update semantics and whether the updated entity is returned (no output schema exists to answer that).

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 every one of the 7 parameters documented inline, so the baseline is 3. The description adds nothing beyond the schema's own documentation and does not clarify which fields are updatable or how partial updates behave.

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 (service area) plus the lookup key (by ID), so an agent knows exactly what the call does. It does not differentiate from nearby siblings such as bulk_update or update_site, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no statement of prerequisites beyond scope, and no routing to alternatives (e.g. bulk_update for multiple areas, get_service_area to read first). Usage must be inferred purely from the verb.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_siteUpdate siteA
DestructiveIdempotent

Update an existing site by ID. Requires sites:write scope.

NameRequiredDescriptionDefault
idYesSite ID
cityNoCity
nameNoSite name
addressNoStreet address
countryNoCountry
provinceNoProvince/state
year_builtNoYear built
descriptionNoDescription
postal_codeNoPostal/zip code
contact_nameNoPrimary contact name
contact_emailNoContact email
contact_phoneNoContact phone
cost_per_sqftNoBase cost per square foot
lease_detailsNoFree-text lease details / notes
lease_end_dateNoLease end date (YYYY-MM-DD)
owner_landlordNoProperty owner or landlord
ownership_typeNoOwnership type
renewal_optionNoLease renewal option details
square_footageNoSquare footage
lease_start_dateNoLease start date (YYYY-MM-DD)
insurance_providerNoInsurance provider name
insurance_policy_numberNoInsurance policy number
additional_cost_per_sqftNoAdditional cost per square foot
property_manager_companyNoProperty management company name
operational_cost_per_sqftNoOperational cost per square foot
property_manager_contact_nameNoProperty management contact name
property_manager_contact_emailNoProperty management contact email
property_manager_contact_phoneNoProperty management contact phone

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this is not read-only, is idempotent, and is destructive. The description adds useful auth context with 'Requires sites:write scope,' but it does not explain partial-update semantics, what happens to omitted fields, or how destructive the operation may be beyond the annotation hint.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the core action and followed by the prerequisite scope. There is no wasted language.

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?

Given a 28-parameter update tool, the description is minimal. It covers purpose and authorization, and annotations cover safety, but it leaves out whether this is a full or partial update and what happens to omitted fields, which are important for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema documents all 28 parameters. The description only adds that the update is performed 'by ID,' which slightly reinforces the required id parameter but does not enrich field meanings or update semantics 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?

The description states a clear verb+resource: 'Update an existing site by ID.' It distinguishes this from its many siblings by resource (site vs. building, system, etc.), though it does not explicitly name an alternative or clarify scope beyond 'existing site.'

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 the required auth scope ('Requires sites:write scope') and implies the site must already exist, but it does not say when to use this tool versus alternatives such as create_site, delete_site, or update_building, nor does it give exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_systemUpdate systemB
DestructiveIdempotent

Update an existing system by ID. Requires systems:write scope.

NameRequiredDescriptionDefault
idYesSystem ID
nameNoSystem name
descriptionNoDescription
crv_multiplierNoCRV multiplier
system_group_idNoSystem group ID

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, destructiveHint=true, and idempotentHint=true, so the mutation/safety profile is covered. The description adds a genuinely useful non-annotation fact — 'Requires systems:write scope' — but omits whether an update is partial or full-replacement, which matters a lot given destructiveHint=true.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the action and resource, with zero filler. Nothing in the text is redundant or padded.

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 needn't explain returns, and the schema plus annotations carry most of the burden. Still, for a destructive update tool in a family of near-identical updaters, the description should say more about partial-update behavior and how it differs from its siblings.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 five parameters (id, name, description, crv_multiplier, system_group_id) are fully documented structurally and the baseline is 3. The description only echoes the 'by ID' concept and adds no semantics about which fields are updatable or how crv_multiplier/system_group_id are interpreted.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Update an existing system by ID'), which cleanly identifies the operation among a large sibling set that includes create_system, delete_system, and list_systems. It does not, however, differentiate itself from update_system_class, update_system_group, or update_system_los_target beyond naming the resource.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no guidance on when to use this tool versus siblings, nor any exclusions. The only contextual detail is the auth scope requirement, which is a prerequisite rather than usage direction, so an agent gets no help choosing between update_system and update_system_class.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_system_classUpdate system classB
DestructiveIdempotent

Update an existing system class by ID. Requires systems:write scope.

NameRequiredDescriptionDefault
idYesSystem class ID
nameNoSystem class name
descriptionNoDescription

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds the auth prerequisite (systems:write), which annotations do not convey, and that is genuinely useful. However, annotations already declare destructiveHint=true and idempotentHint=true, and the description does not explain what makes this destructive or whether omitted fields (name/description) are cleared or preserved — a meaningful gap for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with no filler, front-loading the action and following with the permission requirement. Lean to the point of leaving behavioral questions unanswered, but nothing in the text is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers identity, action, and authorization, which is the minimum for a three-parameter mutation tool, and no output schema exists to explain returns. Still missing update semantics (partial vs full replacement, effect of omitted fields), which an agent needs before invoking a destructive-flagged update.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and all three parameters (id, name, description) are self-documented with types, formats, and length bounds. The description only restates "by ID" and adds no syntax or semantic detail beyond the schema, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb (update) plus resource (system class) plus the keying field (by ID). An agent can distinguish it from create_system_class / delete_system_class / update_system_group on name and verb alone, though the description does not name those siblings explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Update an existing system class by ID" implies the tool operates on an already-persisted record rather than creating one, and the scope requirement signals a permission precondition. Beyond that there is no explicit when-to-use vs when-to-use-something-else guidance or exclusion.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_system_groupUpdate system groupB
DestructiveIdempotent

Update an existing system group by ID. Requires systems:write scope.

NameRequiredDescriptionDefault
idYesSystem group ID
nameNoSystem group name
descriptionNoDescription
system_class_idNoParent system class ID

TDQS

B3.2/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 openWorldHint=false, so the safety profile is covered structurally. The description contributes the required auth scope, which is genuinely useful, but says nothing about partial-update semantics or what happens to fields left out.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the action and then the precondition; no filler. It is perhaps overly terse for a mutation tool, but nothing is wasted.

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 four-parameter mutation tool with full annotation coverage and full schema coverage, the description is minimally viable. The notable gap is whether unspecified fields are left untouched or cleared, which matters for an idempotent, destructive update.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with each of the four fields (id, name, description, system_class_id) documented in the schema, so the baseline is 3. The description's 'by ID' adds nothing beyond the schema's required id 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?

Specific verb (update) plus resource (system group) and identification method (by ID), so the operation is unambiguous. It does not distinguish itself from close siblings like update_system, update_system_class, or update_project_system_group, which the name alone is left to carry.

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 states a prerequisite (systems:write scope) but gives no guidance on when to choose this tool over update_system_class or update_project_system_group, nor when updating is preferable to recreating. Prerequisite info is not the same as usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_system_los_targetUpdate system LoS targetA
DestructiveIdempotent

Update a system LoS target by ID. base_target must sit on the scale of the metric in force (0-100, or 0-25 for risk_score_avg), so send a new base_target when changing to a metric with a smaller scale. Direction follows the metric automatically. Requires los_targets:write scope.

NameRequiredDescriptionDefault
idYesSystem LoS target ID
activeNoWhether the target is scored
metricNoMetric the target tracks
system_idNoSystem ID - resolve first via list_systems
base_targetNoBase target on the metric's scale: fci, asset_condition_avg and asset_past_useful_life_pct run 0-100; risk_score_avg runs 0-25

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. The description adds value beyond that by disclosing the required los_targets:write scope and the automatic direction-follows-metric behavior, plus the base_target scale constraint. It stops short of describing response or side effects on linked records.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, front-loaded with the core action, then the two operational caveats, then the scope requirement. Little waste, though the scale-constraint sentence is slightly dense 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 mutation tool with no output schema and full schema coverage, the description covers the essential gaps: authorization scope, parameter interaction, and metric-driven direction. It is complete enough to call correctly, though it omits whether the ID lookup path (list vs get) is expected first.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 100% schema coverage the baseline is 3, but the description goes further by explaining the cross-parameter interaction between metric and base_target — that changing to a smaller-scale metric requires resending base_target — which the schema's per-field descriptions don't capture. This adds genuine interpretive 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 uses a precise verb+resource ('Update a system LoS target by ID'), which cleanly distinguishes it from the sibling update_infrastructure_los_target, update_los_proposed_target, and the create/get/delete variants of the same resource. An agent can identify the operation and target entity 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 offers real operational guidance ('send a new base_target when changing to a metric with a smaller scale') but never states when to choose this tool over alternatives or that the ID must be resolved first. The usage context is implied by the update verb and the identified resource rather than spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_vendorUpdate vendorA
DestructiveIdempotent

Update an existing vendor by ID. Requires vendors:write scope.

NameRequiredDescriptionDefault
idYesVendor ID
cityNoCity
nameNoVendor name
stateNoState/province
statusNoVendor status
addressNoStreet address
countryNoCountry
websiteNoWebsite URL (protocol and www prefix are stripped automatically)
categoriesNoVendor categories (e.g. ["HVAC", "Plumbing"])
descriptionNoDescription
contact_nameNoContact person name
contact_emailNoContact email
contact_phoneNoContact phone

TDQS

A3.5/5.0
Behavior3/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 agent knows this is a repeatable mutating call. The description usefully surfaces the required auth scope, but it does not explain what makes the call 'destructive' — e.g. whether omitted fields are cleared or the record is fully replaced.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, no filler, with the operation and its key front-loaded ahead of the scope prerequisite.

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-parameter mutation with destructiveHint=true and no output schema, the description omits the critical replace-vs-merge semantics: whether unlisted fields are wiped. That single missing detail leaves an agent unable to safely invoke the tool on a partially supplied payload.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 parameter carries its own description, so the schema handles parameter meaning. The description adds only the fact that 'id' is the addressing key, which the schema's required list and uuid format already imply.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Update an existing vendor') plus the lookup key ('by ID'), which cleanly separates it from create_vendor, get_vendor and delete_vendor on the surface. It stops short of naming the obvious alternative sibling (bulk_update) for multi-record edits.

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 only guidance is a precondition ('Requires vendors:write scope'), which is genuinely useful. There is no statement of when to prefer this over bulk_update or how partial edits are expected to be made.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_work_categoryUpdate work categoryA
DestructiveIdempotent

Update an existing work category by ID. Requires work_categories:write scope.

NameRequiredDescriptionDefault
idYesWork category ID
nameNoWork category name
moduleNoMove the category to a workspace: facilities, infrastructure, or shared (both).
descriptionNoDescription

TDQS

A3.6/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, so the safety profile is covered. The description adds the required OAuth scope, which is valuable, but says nothing about partial updates, error behavior, or what exactly gets modified.

Agents need to know what a tool does to the world before 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, front-loading the action and then the prerequisite. 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?

The description covers the core action, identifier requirement, and authorization scope, while the schema covers fields and annotations cover mutation safety. A minor gap remains around partial-update semantics (whether omitted fields are preserved), but overall it is nearly complete for a straightforward update 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 fully documents all four parameters. The description only mentions 'by ID' and otherwise adds no syntax or behavior detail beyond structured fields, matching the baseline for complete 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 (Update), resource (work category), and identifier (by ID). The word 'existing' distinguishes it from create_work_category and delete_work_category 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 Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides only a scope prerequisite ('Requires work_categories:write scope') but no when-to-use guidance, no alternatives, and no exclusions. An agent gets no help deciding between this and sibling update tools or bulk_update.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_work_orderUpdate work orderA
DestructiveIdempotent

Update an existing work order by ID. Requires work_orders:write scope. When changing location, resolve top-down: list_sites → list_buildings (by site_id) → list_locations (by building_id). Provide all three IDs. To complete a work order, set status COMPLETED and say what was done in completion_notes; completed_at is stamped automatically.

NameRequiredDescriptionDefault
idYesWork order ID
typeNoWork order type
titleNoWork order title
statusNoStatus
site_idNoSite ID - resolve first via list_sites
asset_idNoAsset this work order is for - resolve via list_assets. The server mirrors it into asset_ids.
due_dateNoDue date (ISO 8601)
priorityNoPriority level
asset_idsNoAssets this work order covers - use instead of asset_id when there is more than one.
assigneesNoArray of assigned user IDs (alternative to assigned_to for multiple assignees)
image_urlNoImage storage path (upload via create_upload_url with bucket "attachments", then set this to the returned path)
meter_unitNoMeter unit (km, miles, hours, cycles)
start_dateNoStart date (ISO 8601)
system_idsNoSystems this work order covers - resolve via list_systems. Systems have no singular field; this array is the only way to associate them.
assigned_toNoAssigned user ID (mapped to assignees array)
building_idNoBuilding ID - resolve second via list_buildings filtered by site_id
descriptionNoDetailed description
location_idNoLocation this work order is for - resolve last via list_locations filtered by building_id. The server mirrors it into location_ids, so send this OR location_ids, not a conflicting pair.
location_idsNoLocations this work order covers - use instead of location_id when there is more than one. Sending location_id alone replaces this with that single id.
meter_readingNoMeter/odometer reading at time of service
estimated_costNoEstimated cost
estimated_timeNoEstimated time in hours
completion_notesNoWhat was done, recorded on the work order when it is completed
work_category_idNoWork category ID
purchase_order_idNoPurchase order that paid this work order's actual cost - resolve via list_purchase_orders. Counts against the order's remaining balance; null clears it.
infrastructure_asset_idsNoInfrastructure features this work order covers - resolve via list_infrastructure_assets. Use this when one job covers several features (a round of hydrant flushing); the whole selection is one work order with one completion and one cost, split across the features. Mutually exclusive with asset/location/system targets.

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. The description adds genuinely new behavior: the work_orders:write scope requirement and the fact that completed_at is stamped automatically on completion, which the agent cannot infer from schema or annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, each load-bearing: identity, auth scope, the location-resolution procedure, and the completion procedure. Front-loaded with the mutating verb and ID, with no filler or restated schema fields.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 26-parameter mutation tool with no output schema and destructive semantics, the description covers the highest-risk workflows (hierarchy resolution, completion stamping). It omits the mutual exclusivity of singular vs. plural target fields and conflict behavior, though the schema handles those fields individually.

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 goes beyond it by spelling out the required order of resolution for the site/building/location trio and the completion pairing (status COMPLETED + completion_notes), which a flat schema cannot convey as a workflow.

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 the identifying key: 'Update an existing work order by ID.' This clearly separates it from create_work_order / get_work_order / delete_work_order in the sibling set. It stops short of explicitly naming a sibling or scoping which fields are updatable, keeping it just below 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 actionable context for the two non-obvious flows: location changes require top-down resolution through list_sites → list_buildings → list_locations, and completion requires status COMPLETED plus completion_notes. It does not address when to prefer this over bulk_update or a schedule tool, so no exclusions are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_work_order_commentUpdate work order commentB
DestructiveIdempotent

Update an existing work order comment by ID. Requires work_order_comments:write scope.

NameRequiredDescriptionDefault
idYesWork order comment ID
commentNoComment text

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, destructiveHint=true, and idempotentHint=true, so the agent knows this is a mutating but repeat-safe operation. The description adds the one piece of behavior not in structured data — the required write scope. However, it never explains that the destructive profile means the existing comment text is replaced, which is the operationally important detail.

Agents need to know what a tool does to the world before 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 brief sentences, front-loaded with the action and followed by the prerequisite. No filler, no restatement 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 mutation with no output schema and annotations that already carry the safety profile, the description covers the essentials plus the required scope. It is slightly thin on what the update actually replaces, but nothing critical for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both the id and comment parameters are already documented in the schema, and the description adds only 'by ID'. Baseline 3 applies since the schema does the heavy lifting and the description contributes nothing new about parameter format or semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource ('Update an existing work order comment by ID'), which cleanly separates it from the sibling verbs create_, get_, delete_, and list_ work_order_comment. It stops short of stating what distinguishes an update from e.g. the bulk_update sibling, but the purpose itself is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states a permission prerequisite ('Requires work_order_comments:write scope') but gives no when-to-use context, no conditions under which an agent should prefer this over create_work_order_comment or bulk_update, and no guidance on what state must already exist.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_work_order_scheduleUpdate work order scheduleA
DestructiveIdempotent

Update a work order schedule entry by ID (date, times, stop_order, notes). work_order_id is immutable. Requires work_order_schedules:write scope.

NameRequiredDescriptionDefault
idYesWork order schedule ID
stop_orderNo1-based stop position in the day plan
technician_idNoTechnician Clerk user ID
scheduled_dateNoDate (YYYY-MM-DD)
duration_minutesNoPlanned duration in minutes
scheduling_notesNoScheduling notes
scheduled_end_timeNoEnd time (HH:MM)
travel_time_minutesNoTravel time from previous stop
scheduled_start_timeNoStart time (HH:MM)

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, so the safety profile is covered. The description usefully adds the required OAuth-style scope (work_order_schedules:write) and the immutability constraint on work_order_id, which are not in the structured fields. It stops short of explaining what 'destructive' means for a schedule update.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight clauses: the action and ID, the mutable fields, the immutability constraint, and the scope requirement. Front-loaded with the core operation and free of 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 nine fully schema-documented parameters, the description supplies the key constraints an agent needs: target by ID, which fields are updatable, that work_order_id cannot change, and the required write scope. It could say more about the destructive nature of the update, but coverage is solid.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 nine parameters in detail; the description only echoes a handful (date, times, stop_order, notes). It also references work_order_id as immutable even though no such parameter exists in the schema, adding slight noise rather than 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 ('Update a work order schedule entry') and specifies the operation is by ID, which is enough to distinguish it from create/delete/get/list siblings. It does not explicitly name any sibling as an alternative, keeping it just short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'by ID' framing and the scope requirement imply this is the tool for modifying an existing schedule entry, but there is no explicit when-to-use guidance, no mention of when to prefer bulk_update or create_work_order_schedule instead. 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_work_requestUpdate work requestA
DestructiveIdempotent

Update an existing work request by ID. Requires work_requests:write scope. When changing location, resolve top-down: list_sites → list_buildings (by site_id) → list_locations (by building_id). Provide all three IDs.

NameRequiredDescriptionDefault
idYesWork request ID
titleNoWork request title
statusNoStatus
site_idNoSite ID - resolve first via list_sites
asset_idNoAsset ID
priorityNoPriority level
system_idNoSystem ID
building_idNoBuilding ID - resolve second via list_buildings filtered by site_id
descriptionNoDescription
location_idNoLocation ID - resolve last via list_locations filtered by building_id
work_category_idNoWork category ID

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, idempotentHint=true, destructiveHint=true, covering the safety profile. The description adds value beyond them by disclosing the required auth scope and the location-resolution dependency. It does not explain what is 'destructive' about the update, 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tightly written sentences, front-loaded with the action and the scope precondition, followed by the one non-obvious workflow. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 11-parameter mutation with full schema coverage, no output schema, and annotations covering the safety profile, the description supplies the essentials: action, auth scope, and the tricky location resolution. It could note status-transition constraints or the effect of destructiveHint, but nothing critical 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 schema baseline is 3. The description earns an extra point by adding the cross-parameter constraint that all three location IDs must be supplied together after top-down resolution, which the schema only partially implies per-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?

The description states a specific verb and resource ('Update an existing work request by ID'), which is unambiguous against siblings like update_work_order or update_asset. It does not explicitly differentiate itself from the other update_* tools beyond the name, so it falls just short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a clear precondition ('Requires work_requests:write scope') and a concrete workflow for the location-related parameters (list_sites → list_buildings → list_locations). It stops short of a 5 because it never states when not to use this tool or points to an alternative such as bulk_update.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

upload_fileUpload fileA

Upload a file to AssetLab storage by sending its bytes inline (base64). The AssetLab backend performs the storage upload server-side - use this tool when the client cannot PUT directly to Supabase Storage (e.g. Claude integrations whose outbound network blocks arbitrary supabase.co hosts). Returns { path, bucket, file_size, content_type }. After uploading, pass path to the appropriate record tool (update_asset image_url, create_asset_document file_path, update_work_order image_url, create_attachment file_path, create_project_document file_path, create_contract_document file_path). Server limit is ~10 MB decoded; MCP arg ceiling effectively caps file size around 700 KB-1 MB. For larger files, use create_upload_url instead. Requires upload_urls:write scope.

NameRequiredDescriptionDefault
bucketYesStorage bucket (required). Use "asset-images" for asset photos, "attachments" for work-order/PM attachments.
file_nameYesFile name including extension (required)
content_typeNoMIME type (e.g. image/jpeg, application/pdf). Defaults to application/octet-stream.
content_base64YesFile contents base64-encoded (required). Data URI prefixes like "data:image/png;base64," are stripped automatically.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only cover the safety profile (readOnly=false, destructive=false, idempotent=false, openWorld=false). The description goes well beyond that: ~10 MB decoded server limit, effective ~700 KB–1 MB MCP arg ceiling, required upload_urls:write scope, and the returned fields { path, bucket, file_size, content_type }.

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 mechanism are front-loaded, then constraints and follow-up routing. Dense but every sentence carries information (mechanism, return shape, routing, limits, scope). Slightly long for a single paragraph, but nothing 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 4-param upload tool with no output schema, the description supplies the return shape, size ceilings, auth scope, decoding behavior, and the full downstream workflow. Nothing needed to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so all four parameters (including the bucket enum and content_type default) are already fully documented in the schema. The description only reiterates base64 inline encoding and the data-URI stripping rule that the schema already states, 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+resource ('Upload a file to AssetLab storage') and immediately explains the mechanism ('sending its bytes inline (base64)', server-side upload). It distinguishes itself from create_upload_url, so an agent can pick 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?

Explicit when-to-use ('use this tool when the client cannot PUT directly to Supabase Storage, e.g. Claude integrations whose outbound network blocks arbitrary supabase.co hosts'), explicit when-not/alternative ('For larger files, use create_upload_url instead'), and it names the exact follow-up record tools to call with the returned path.

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. 481 tool updatesv3.0.0
    • First observedbulk_create
    • First observedbulk_update
    • First observedcreate_asset
    • First observedcreate_asset_betterment
    • First observedcreate_asset_comment
    • First observedcreate_asset_condition_assessment
    • First observedcreate_asset_cost
    • First observedcreate_asset_document
    • First observedcreate_asset_lifecycle_event
    • First observedcreate_asset_part
    • First observedcreate_asset_placement
    • First observedcreate_asset_replacement_plan
    • First observedcreate_asset_status
    • First observedcreate_asset_type
    • First observedcreate_asset_type_group
    • First observedcreate_attachment
    • First observedcreate_budget
    • First observedcreate_building
    • First observedcreate_building_type
    • First observedcreate_change_order
    • First observedcreate_compliance_item
    • First observedcreate_compliance_pm_schedule
    • First observedcreate_compliance_record
    • First observedcreate_contract
    • First observedcreate_contract_document
    • First observedcreate_contract_site
    • First observedcreate_cost_category
    • First observedcreate_criticality_modifier
    • First observedcreate_custom_field_definition
    • First observedcreate_custom_field_value
    • First observedcreate_expense
    • First observedcreate_floorplan
    • First observedcreate_floorplan_region
    • First observedcreate_form_response
    • First observedcreate_form_template
    • First observedcreate_form_template_item
    • First observedcreate_infrastructure_asset
    • First observedcreate_infrastructure_asset_comment
    • First observedcreate_infrastructure_asset_cost
    • First observedcreate_infrastructure_asset_document
    • First observedcreate_infrastructure_asset_inspection
    • First observedcreate_infrastructure_asset_part
    • First observedcreate_infrastructure_feature_class
    • First observedcreate_infrastructure_lifecycle_event
    • First observedcreate_infrastructure_los_target
    • First observedcreate_infrastructure_network
    • First observedcreate_infrastructure_zone
    • First observedcreate_invoice
    • First observedcreate_location
    • First observedcreate_location_type
    • First observedcreate_los_consequence
    • First observedcreate_los_measure
    • First observedcreate_los_measurement
    • First observedcreate_los_proposed_target
    • First observedcreate_manufacturer
    • First observedcreate_part
    • First observedcreate_part_category
    • First observedcreate_pm_schedule
    • First observedcreate_pm_template
    • First observedcreate_project
    • First observedcreate_project_asset
    • First observedcreate_project_budget_item
    • First observedcreate_project_building
    • First observedcreate_project_comment
    • First observedcreate_project_cost_snapshot
    • First observedcreate_project_document
    • First observedcreate_project_document_folder_template
    • First observedcreate_project_infrastructure_asset
    • First observedcreate_project_location
    • First observedcreate_project_milestone
    • First observedcreate_project_phase
    • First observedcreate_project_phase_category
    • First observedcreate_project_risk
    • First observedcreate_project_site
    • First observedcreate_project_system
    • First observedcreate_project_system_class
    • First observedcreate_project_system_group
    • First observedcreate_project_task
    • First observedcreate_project_task_dependency
    • First observedcreate_project_team_member
    • First observedcreate_project_time_entry
    • First observedcreate_project_update
    • First observedcreate_purchase_order
    • First observedcreate_purchase_order_line
    • First observedcreate_purchase_order_link
    • First observedcreate_service_area
    • First observedcreate_service_area_site
    • First observedcreate_service_area_system_class
    • First observedcreate_site
    • First observedcreate_system
    • First observedcreate_system_class
    • First observedcreate_system_group
    • First observedcreate_system_los_target
    • First observedcreate_upload_url
    • First observedcreate_vendor
    • First observedcreate_vendor_site_assignment
    • First observedcreate_work_category
    • First observedcreate_work_order
    • First observedcreate_work_order_comment
    • First observedcreate_work_order_schedule
    • First observedcreate_work_request
    • First observeddelete_asset
    • First observeddelete_asset_betterment
    • First observeddelete_asset_comment
    • First observeddelete_asset_condition_assessment
    • First observeddelete_asset_cost
    • First observeddelete_asset_document
    • First observeddelete_asset_lifecycle_event
    • First observeddelete_asset_part
    • First observeddelete_asset_placement
    • First observeddelete_asset_replacement_plan
    • First observeddelete_asset_status
    • First observeddelete_asset_type
    • First observeddelete_asset_type_group
    • First observeddelete_attachment
    • First observeddelete_budget
    • First observeddelete_building
    • First observeddelete_building_type
    • First observeddelete_change_order
    • First observeddelete_compliance_item
    • First observeddelete_compliance_pm_schedule
    • First observeddelete_compliance_record
    • First observeddelete_contract
    • First observeddelete_contract_document
    • First observeddelete_contract_site
    • First observeddelete_cost_category
    • First observeddelete_criticality_modifier
    • First observeddelete_custom_field_definition
    • First observeddelete_custom_field_value
    • First observeddelete_expense
    • First observeddelete_floorplan
    • First observeddelete_floorplan_region
    • First observeddelete_form_response
    • First observeddelete_form_template
    • First observeddelete_form_template_item
    • First observeddelete_infrastructure_asset
    • First observeddelete_infrastructure_asset_comment
    • First observeddelete_infrastructure_asset_cost
    • First observeddelete_infrastructure_asset_document
    • First observeddelete_infrastructure_asset_inspection
    • First observeddelete_infrastructure_asset_part
    • First observeddelete_infrastructure_feature_class
    • First observeddelete_infrastructure_lifecycle_event
    • First observeddelete_infrastructure_los_target
    • First observeddelete_infrastructure_network
    • First observeddelete_infrastructure_zone
    • First observeddelete_invoice
    • First observeddelete_location
    • First observeddelete_location_type
    • First observeddelete_los_consequence
    • First observeddelete_los_measure
    • First observeddelete_los_measurement
    • First observeddelete_los_proposed_target
    • First observeddelete_manufacturer
    • First observeddelete_part
    • First observeddelete_part_category
    • First observeddelete_pm_schedule
    • First observeddelete_pm_template
    • First observeddelete_project
    • First observeddelete_project_asset
    • First observeddelete_project_budget_item
    • First observeddelete_project_building
    • First observeddelete_project_comment
    • First observeddelete_project_cost_snapshot
    • First observeddelete_project_document
    • First observeddelete_project_document_folder_template
    • First observeddelete_project_infrastructure_asset
    • First observeddelete_project_location
    • First observeddelete_project_milestone
    • First observeddelete_project_phase
    • First observeddelete_project_phase_category
    • First observeddelete_project_risk
    • First observeddelete_project_site
    • First observeddelete_project_system
    • First observeddelete_project_system_class
    • First observeddelete_project_system_group
    • First observeddelete_project_task
    • First observeddelete_project_task_dependency
    • First observeddelete_project_team_member
    • First observeddelete_project_time_entry
    • First observeddelete_project_update
    • First observeddelete_purchase_order
    • First observeddelete_purchase_order_line
    • First observeddelete_purchase_order_link
    • First observeddelete_service_area
    • First observeddelete_service_area_site
    • First observeddelete_service_area_system_class
    • First observeddelete_site
    • First observeddelete_system
    • First observeddelete_system_class
    • First observeddelete_system_group
    • First observeddelete_system_los_target
    • First observeddelete_vendor
    • First observeddelete_vendor_site_assignment
    • First observeddelete_work_category
    • First observeddelete_work_order
    • First observeddelete_work_order_comment
    • First observeddelete_work_order_schedule
    • First observeddelete_work_request
    • First observedget_asset
    • First observedget_asset_betterment
    • First observedget_asset_comment
    • First observedget_asset_condition_assessment
    • First observedget_asset_cost
    • First observedget_asset_document
    • First observedget_asset_lifecycle_event
    • First observedget_asset_part
    • First observedget_asset_placement
    • First observedget_asset_replacement_plan
    • First observedget_asset_risk_history_entry
    • First observedget_asset_status
    • First observedget_attachment
    • First observedget_budget
    • First observedget_change_order
    • First observedget_compliance_item
    • First observedget_compliance_pm_schedule
    • First observedget_compliance_record
    • First observedget_contract_document
    • First observedget_criticality_modifier
    • First observedget_custom_field_definition
    • First observedget_custom_field_value
    • First observedget_dashboard_snapshot
    • First observedget_dashboard_summary
    • First observedget_expense
    • First observedget_floorplan
    • First observedget_floorplan_region
    • First observedget_form_response
    • First observedget_form_response_answer
    • First observedget_form_template
    • First observedget_form_template_item
    • First observedget_infrastructure_asset
    • First observedget_infrastructure_asset_comment
    • First observedget_infrastructure_asset_cost
    • First observedget_infrastructure_asset_document
    • First observedget_infrastructure_asset_inspection
    • First observedget_infrastructure_asset_part
    • First observedget_infrastructure_asset_risk_history_entry
    • First observedget_infrastructure_feature_class
    • First observedget_infrastructure_lifecycle_event
    • First observedget_infrastructure_los_target
    • First observedget_infrastructure_network
    • First observedget_infrastructure_zone
    • First observedget_invoice
    • First observedget_los_consequence
    • First observedget_los_measure
    • First observedget_los_measurement
    • First observedget_los_proposed_target
    • First observedget_los_status_snapshot
    • First observedget_los_targets_history_entry
    • First observedget_manufacturer
    • First observedget_organization_settings
    • First observedget_part
    • First observedget_part_category
    • First observedget_pm_schedule
    • First observedget_project
    • First observedget_project_asset
    • First observedget_project_budget_item
    • First observedget_project_building
    • First observedget_project_comment
    • First observedget_project_cost_snapshot
    • First observedget_project_document
    • First observedget_project_document_folder_template
    • First observedget_project_infrastructure_asset
    • First observedget_project_location
    • First observedget_project_milestone
    • First observedget_project_phase
    • First observedget_project_risk
    • First observedget_project_site
    • First observedget_project_system
    • First observedget_project_system_class
    • First observedget_project_system_group
    • First observedget_project_task
    • First observedget_project_task_dependency
    • First observedget_project_team_member
    • First observedget_project_time_entry
    • First observedget_project_update
    • First observedget_purchase_order
    • First observedget_purchase_order_line
    • First observedget_purchase_order_link
    • First observedget_service_area
    • First observedget_site
    • First observedget_site_fci_history_entry
    • First observedget_system_los_target
    • First observedget_user
    • First observedget_vendor
    • First observedget_vendor_site_assignment
    • First observedget_work_order
    • First observedget_work_order_comment
    • First observedget_work_order_schedule
    • First observedget_work_request
    • First observedlist_asset_betterments
    • First observedlist_asset_comments
    • First observedlist_asset_condition_assessments
    • First observedlist_asset_costs
    • First observedlist_asset_documents
    • First observedlist_asset_lifecycle_events
    • First observedlist_asset_parts
    • First observedlist_asset_placements
    • First observedlist_asset_replacement_plans
    • First observedlist_asset_risk_history
    • First observedlist_asset_statuses
    • First observedlist_asset_type_groups
    • First observedlist_asset_types
    • First observedlist_assets
    • First observedlist_attachments
    • First observedlist_budgets
    • First observedlist_building_types
    • First observedlist_buildings
    • First observedlist_change_orders
    • First observedlist_compliance_items
    • First observedlist_compliance_pm_schedules
    • First observedlist_compliance_records
    • First observedlist_contract_documents
    • First observedlist_contract_sites
    • First observedlist_contracts
    • First observedlist_cost_categories
    • First observedlist_criticality_modifiers
    • First observedlist_custom_field_definitions
    • First observedlist_custom_field_values
    • First observedlist_dashboard_snapshots
    • First observedlist_expenses
    • First observedlist_floorplan_regions
    • First observedlist_floorplans
    • First observedlist_form_response_answers
    • First observedlist_form_responses
    • First observedlist_form_template_items
    • First observedlist_form_templates
    • First observedlist_infrastructure_asset_comments
    • First observedlist_infrastructure_asset_costs
    • First observedlist_infrastructure_asset_documents
    • First observedlist_infrastructure_asset_inspections
    • First observedlist_infrastructure_asset_parts
    • First observedlist_infrastructure_asset_risk_history
    • First observedlist_infrastructure_assets
    • First observedlist_infrastructure_feature_classes
    • First observedlist_infrastructure_lifecycle_events
    • First observedlist_infrastructure_los_targets
    • First observedlist_infrastructure_networks
    • First observedlist_infrastructure_zones
    • First observedlist_invoices
    • First observedlist_location_types
    • First observedlist_locations
    • First observedlist_los_consequences
    • First observedlist_los_measurements
    • First observedlist_los_measures
    • First observedlist_los_proposed_targets
    • First observedlist_los_status_snapshots
    • First observedlist_los_targets_history
    • First observedlist_manufacturers
    • First observedlist_part_categories
    • First observedlist_parts
    • First observedlist_pm_schedules
    • First observedlist_pm_templates
    • First observedlist_project_assets
    • First observedlist_project_budget_items
    • First observedlist_project_buildings
    • First observedlist_project_comments
    • First observedlist_project_cost_snapshots
    • First observedlist_project_document_folder_templates
    • First observedlist_project_documents
    • First observedlist_project_infrastructure_assets
    • First observedlist_project_locations
    • First observedlist_project_milestones
    • First observedlist_project_phase_categories
    • First observedlist_project_phases
    • First observedlist_project_risks
    • First observedlist_project_sites
    • First observedlist_project_system_classes
    • First observedlist_project_system_groups
    • First observedlist_project_systems
    • First observedlist_project_task_dependencies
    • First observedlist_project_tasks
    • First observedlist_project_team_members
    • First observedlist_project_time_entries
    • First observedlist_project_updates
    • First observedlist_projects
    • First observedlist_purchase_order_lines
    • First observedlist_purchase_order_links
    • First observedlist_purchase_orders
    • First observedlist_service_area_sites
    • First observedlist_service_area_system_classes
    • First observedlist_service_areas
    • First observedlist_site_fci_history
    • First observedlist_sites
    • First observedlist_system_classes
    • First observedlist_system_groups
    • First observedlist_system_los_targets
    • First observedlist_systems
    • First observedlist_users
    • First observedlist_vendor_site_assignments
    • First observedlist_vendors
    • First observedlist_work_categories
    • First observedlist_work_order_comments
    • First observedlist_work_order_schedules
    • First observedlist_work_orders
    • First observedlist_work_requests
    • First observedshow_site_fci_trend
    • First observedupdate_asset
    • First observedupdate_asset_betterment
    • First observedupdate_asset_comment
    • First observedupdate_asset_condition_assessment
    • First observedupdate_asset_cost
    • First observedupdate_asset_document
    • First observedupdate_asset_lifecycle_event
    • First observedupdate_asset_part
    • First observedupdate_asset_placement
    • First observedupdate_asset_replacement_plan
    • First observedupdate_asset_status
    • First observedupdate_asset_type
    • First observedupdate_asset_type_group
    • First observedupdate_attachment
    • First observedupdate_budget
    • First observedupdate_building
    • First observedupdate_building_type
    • First observedupdate_change_order
    • First observedupdate_compliance_item
    • First observedupdate_compliance_pm_schedule
    • First observedupdate_compliance_record
    • First observedupdate_contract
    • First observedupdate_contract_document
    • First observedupdate_cost_category
    • First observedupdate_criticality_modifier
    • First observedupdate_custom_field_definition
    • First observedupdate_custom_field_value
    • First observedupdate_expense
    • First observedupdate_floorplan
    • First observedupdate_floorplan_region
    • First observedupdate_form_template
    • First observedupdate_form_template_item
    • First observedupdate_infrastructure_asset
    • First observedupdate_infrastructure_asset_comment
    • First observedupdate_infrastructure_asset_cost
    • First observedupdate_infrastructure_asset_document
    • First observedupdate_infrastructure_asset_inspection
    • First observedupdate_infrastructure_asset_part
    • First observedupdate_infrastructure_feature_class
    • First observedupdate_infrastructure_lifecycle_event
    • First observedupdate_infrastructure_los_target
    • First observedupdate_infrastructure_network
    • First observedupdate_infrastructure_zone
    • First observedupdate_invoice
    • First observedupdate_location
    • First observedupdate_location_type
    • First observedupdate_los_consequence
    • First observedupdate_los_measure
    • First observedupdate_los_measurement
    • First observedupdate_los_proposed_target
    • First observedupdate_manufacturer
    • First observedupdate_part
    • First observedupdate_part_category
    • First observedupdate_pm_schedule
    • First observedupdate_pm_template
    • First observedupdate_project
    • First observedupdate_project_budget_item
    • First observedupdate_project_comment
    • First observedupdate_project_document
    • First observedupdate_project_document_folder_template
    • First observedupdate_project_infrastructure_asset
    • First observedupdate_project_milestone
    • First observedupdate_project_phase
    • First observedupdate_project_phase_category
    • First observedupdate_project_risk
    • First observedupdate_project_task
    • First observedupdate_project_team_member
    • First observedupdate_project_time_entry
    • First observedupdate_project_update
    • First observedupdate_purchase_order
    • First observedupdate_purchase_order_line
    • First observedupdate_service_area
    • First observedupdate_site
    • First observedupdate_system
    • First observedupdate_system_class
    • First observedupdate_system_group
    • First observedupdate_system_los_target
    • First observedupdate_vendor
    • First observedupdate_work_category
    • First observedupdate_work_order
    • First observedupdate_work_order_comment
    • First observedupdate_work_order_schedule
    • First observedupdate_work_request
    • First observedupload_file

TDQS

B3.4/5.0

Scored across 481 tools

Disambiguation5/5

Each tool has a clearly distinct resource+action purpose, with detailed descriptions that explicitly differentiate similar-sounding tools (e.g., list_expenses vs list_asset_costs). No true overlap exists despite the large surface.

Naming Consistency5/5

All tools follow a consistent snake_case verb_noun pattern (list_, get_, create_, update_, delete_ + resource). The few generic tools (bulk_create, bulk_update, upload_file, create_upload_url) also adhere to readable snake_case conventions.

Tool Count1/5

481 tools is an extreme mismatch for an MCP server; the guideline flags 50+ as a level 1. While the domain is broad, this volume is overwhelming and impractical for effective agent use.

Completeness4/5

The surface provides near-complete CRUD coverage for most entities, including complex domains like infrastructure, LoS, and compliance. Minor gaps exist: some classification types (building types, location types, cost categories) lack a single-record get, and some junction tables have no update.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    B
    maintenance
    Enables AI agents to securely discover, execute, and observe tools with role-based access control and audit logging. Serves tools over MCP stdio and HTTP for integration with Claude Desktop, Cursor, and other clients.
    1
    -
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables AI assistants like Claude, Cursor, VS Code, and Windsurf to manage workspaces, projects, tasks, and AI agents through natural language, with a hosted OAuth server or a local stdio package. Also supports generating MCP tools from any OpenAPI spec.
    1,244 npm
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables AI clients such as Claude, Cursor, VS Code, and Windsurf to list and manage workspaces, projects, tasks, AI agents, and automations through a hosted OAuth-secured endpoint or a local stdio package. Also generates MCP tools from any OpenAPI spec.
    1,244 npm
    MIT
  • F
    license
    Not graded
    quality
    A
    maintenance
    Exposes a governed suite of 38 tools over a single OAuth-gated MCP endpoint, letting web AI chat clients such as Claude, ChatGPT, and Grok operate on a local machine — reading and editing files, running whitelisted shell commands, searching, querying SQLite, driving browsers and DevTools, managing background jobs, ports, and clipboard. Local IDEs and Postman can also connect directly over localhost for offline, low-latency access.
    -