Skip to main content
Glama

Contractor Foreman by Cotlet

Server Details

Projects, estimates, daily logs and invoices in Contractor Foreman.

Ownership verified
Status
Healthy
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
cotletdev/contractor-foreman-api-mcp-server
GitHub Stars
1
Server Listing
Contractor Foreman MCP Server

TDQS

C2.7/5.0

Scored across 109 tools

Disambiguation4/5

The construction-domain tools target mostly distinct entities and actions (create_invoice vs get_invoice vs list_invoices), so an agent can usually pick correctly. However, near-duplicates like create_change_order vs add_change_order_items and create_estimate vs add_estimate_items require reading descriptions, and the ~20 cotlet_* browser/credit tools sit in a completely separate namespace that clutters the selection space.

Naming Consistency3/5

Everything is snake_case, which is good, but verb conventions are inconsistent: create_/add_/remove_/record_/send_/update_/get_/list_ all appear for related operations (add_estimate_items alongside remove_estimate_items, record_payment vs create_expense). The cotlet_* prefix group is internally consistent but mixes with the domain tools.

Tool Count1/5

109 tools is an extreme surface, far beyond a well-scoped set, and roughly 20 of them (cotlet_browser_*, cotlet_balance, cotlet_upload_file) are a separate browser-automation/credits product unrelated to construction management. The sheer volume makes it hard for an agent to navigate.

Completeness2/5

Several entities have only create/get/list with no update or delete (contact, bill, lead, opportunity, submittal), RFIs have no answer/update tool, schedule tasks have list/update but no create, and punchlists can be created but there is no tool to add punchlist items—a major dead end. Core invoicing/estimate/change-order flows are covered, but these gaps will cause agent failures.

Available Tools

109 tools
add_change_order_itemsAdd change order itemsC
Destructive
Inspect

Adds priced line items to a change order or change order request.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemsYes
change_order_idYesFrom list_change_orders.

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare destructiveHint=true, idempotentHint=false and openWorldHint=true, so the description owes context on the risk: it does not say whether items are appended to or replace existing line items, whether retries duplicate rows, or whether change order totals/markups are recalculated. 'Adds' is the only behavioral signal, and it does not resolve the append-vs-replace question critical for a destructive call.

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

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 it is efficient partly because so little is said.

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-idempotent write with no output schema, the definition omits the essentials: append vs overwrite semantics, duplicate-on-retry behavior, permissions, and what is returned (created item ids or the updated change order). An agent cannot call this safely and predictably from the current text 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 coverage is 50% and the nested item properties (name, unit, unit_cost, cost_code_id, description) are already documented inline, so the schema carries most of the load. The description adds only the word 'priced', hinting that unit_cost is required, and says nothing about batching limits (maxItems 100) or the change_order_id source.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 (Adds) plus resource (priced line items) and target (change order / change order request), which separates it from siblings like add_estimate_items and add_invoice_items. The ambiguity between 'change order' and 'change order request' is never reconciled with the single change_order_id parameter.

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 statement of when to use this versus add_estimate_items/add_invoice_items, nor prerequisites such as needing an existing change order id. The reader must infer that a change order must already exist and that this is the follow-up to create_change_order.

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

add_estimate_itemsAdd estimate itemsC
Destructive
Inspect

Adds priced line items to an existing estimate.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemsYes
section_idNoFrom get_estimate. Default: the first section.
estimate_idYesFrom list_estimates or create_estimate.

TDQS

C2.8/5.0
Behavior2/5

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

Annotations already declare destructiveHint=true and idempotentHint=false, so the description should clarify what that means here — e.g. that repeated calls append duplicates rather than replacing items, and whether estimate totals are recalculated. It says none of this; 'Adds' is the only hint at append semantics.

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?

A single front-loaded sentence with zero filler, so nothing is wasted — but the brevity comes at the cost of substance for a nested, up-to-100-item mutation. Efficient, not adequate.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn 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-purpose append tool with no output schema, one sentence stating the verb and target is genuinely enough; the description needn't explain return values or list every field. The main omission is that it doesn't distinguish this from its near-identical siblings.

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 67% schema coverage and no parameter discussion in the description, nothing is added beyond the schema. The description doesn't explain the section_id default ('first section'), the 100-item cap, or how quantity/unit_cost/markup_percent combine into the priced line — all behaviors the schema alone leaves implicit.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid 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: 'Adds priced line items to an existing estimate.' The word 'existing' implicitly separates it from create_estimate, but it never names add_change_order_items or add_invoice_items, which are near-identical siblings an agent could easily confuse it with.

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

Usage 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 add_change_order_items or add_invoice_items, no prerequisite checks (does the estimate need to be in draft?), and no mention of what happens on repeated calls despite idempotentHint=false. The agent must infer everything from the name.

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

add_invoice_itemsAdd invoice itemsC
Destructive
Inspect

Adds priced line items to an invoice.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemsYes
invoice_idYesFrom list_invoices or create_invoice.

TDQS

C2.7/5.0
Behavior2/5

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

Annotations already disclose that the tool is destructive, non-idempotent, and open-world. The description adds no behavioral context beyond restating that it adds items: it does not explain whether items are appended, whether duplicate calls create duplicates, how invoice totals are affected, 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.

Conciseness4/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 efficiently structured, though its brevity contributes to information gaps that are better assessed under other dimensions.

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-idempotent mutation accepting a nested array of priced items with a 50% schema coverage and no output schema, the description is far too thin. It omits item requirements, quantity limits, append behavior, and any caveats an agent needs to invoke it correctly.

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

Parameters2/5

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

Schema description coverage is only 50%, so the description should compensate by explaining parameter semantics. Instead, it only says “priced line items” and does not mention the required item fields (name and unit_cost), the 100-item maximum, or the meaning of invoice_id. The schema carries most of the load, but coverage gaps remain unaddressed.

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

Purpose4/5

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

The description states a specific verb and resource: adding priced line items to an invoice. This is clear and distinguishes it from broader invoice tools like create_invoice or update_invoice, though it does not explicitly differentiate it from sibling tools such as add_change_order_items or add_estimate_items.

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 prerequisites such as the invoice needing to exist, and no mention of related tools like create_invoice or list_cost_codes. The usage context is only weakly implied by the tool name and description.

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

add_project_noteAdd project noteC
Destructive
Inspect

Adds a note to a project's Notes tab.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYes
titleNo
project_idYesThe project's numeric id (list_projects).

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already declare readOnly=false, destructive=true, openWorld=true and non-idempotent, so the safety profile is carried by structured data. The description adds only the 'Notes tab' destination and says nothing about permissions, whether the note is append-only, or whether a title is required — adequate but thin 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.

Conciseness4/5

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

A single efficient sentence with zero padding and the resource front-loaded. Its brevity is close to under-specification rather than verbosity, but structurally it is sound.

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-idempotent write with no output schema and one-third parameter coverage, the description should say what is created/returned and note that the target project must exist. Neither is present, leaving real gaps an agent must guess at.

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

Parameters2/5

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

Schema coverage is only 33%: project_id is documented in the schema and echoed nowhere in the description, while text (1-10000 chars) and the optional title (max 200) are undocumented in both. The description fails to compensate for the coverage gap by explaining what text should contain or that title is optional.

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

Purpose4/5

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

States a specific verb (adds) and resource (a note on a project) plus where it lands ('Notes tab'), which distinguishes it from the read-side sibling list_project_notes. It stops short of explicitly naming that sibling, so it is clear but not maximally differentiating.

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_project_notes or other create_* siblings, no prerequisites (e.g. needing a valid project_id from list_projects), and no exclusions. Usage is only inferable from the verb itself.

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

cotlet_appsCotlet: apps I can useA
Read-only
Inspect

The apps of the user's workspace and whether each works now: access granted or requested, the app account in the user's Cloud Browser (connected, signed out, not enabled for agents), and the one step the user has to take, with the console link. Free. Needs the user's Cotlet API key or sign-in.

ParametersJSON Schema
NameRequiredDescriptionDefault
appNoOnly this app, e.g. skool.

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, non-destructive), and the description adds real context beyond them: it is free, it requires the user's Cotlet API key or sign-in, and it enumerates the status fields returned. Auth and cost disclosure are exactly the kind of extra behavioral facts that earn credit here; transport/pagination is the only minor gap.

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

Conciseness4/5

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

The return content is front-loaded in the first sentence, with cost and auth as short trailing clauses. It is dense but not padded; every clause (statuses, cost, auth) conveys 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 tool with annotations and no output schema, the description adequately describes what comes back (per-app access and browser-account state plus the required user step and console link) and states auth needs. The missing piece is any pointer to the related request/browser tools, but nothing essential to calling it correctly 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?

With 100% schema description coverage and a single optional 'app' filter, the schema carries parameter meaning. The description never references the filter, so it adds nothing over the structured field; 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 clearly states the resource (the apps in the user's workspace) and what is reported per app: access status, Cloud Browser account state, and next step. It does not name or distinguish itself from the closest sibling, cotlet_request_apps, so an agent must infer which one to call when it wants to request access.

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

Usage Guidelines3/5

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

'Free. Needs the user's Cotlet API key or sign-in.' gives a prerequisite but not a when-to-use rule. There is no explicit routing to cotlet_request_apps (for requesting an app) or to the cotlet_browser_* tools (for acting once an app is connected), 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.

cotlet_balanceCotlet: credit balanceA
Read-only
Inspect

The user's current credit balance. Free. Needs the user's Cotlet API key or sign-in.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

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 and destructiveHint=false, so the safety profile is covered. The description still adds non-obvious context beyond them: that the call costs nothing ('Free') and that authentication is required, which are genuine behavioral facts an agent needs.

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

Conciseness4/5

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

Three short sentences with the main purpose front-loaded and no padding. The 'Free.' fragment is terse but conveys a meaningful fact 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 zero-parameter, read-only lookup with no output schema, the description covers what it returns, what it costs, and what auth it needs. Only minor gaps remain (e.g., currency/format of the balance), which is acceptable at this complexity.

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

Parameters4/5

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

The tool takes zero parameters, so the baseline is 4; there is nothing for the description to clarify and it does not attempt to misdescribe inputs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter 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 specific resource returned: the user's current credit balance. The verb ('get'/'retrieve') is implied rather than stated, and it doesn't differentiate from cotlet_whoami or other cotlet_* account tools by name, 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?

'Free' signals there is no cost/credit consumption to calling it, and the auth prerequisite ('needs the user's Cotlet API key or sign-in') tells the agent what is required before calling. There is no explicit when-to-use vs. alternative guidance, leaving usage implied.

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

cotlet_browser_clickClick on the pageA
Destructive
Inspect

Clicks a link, button or other element of the current page in the user's browser on Cotlet, by its number in the page's element list, and returns the URL and title after the click. It acts as the user on that site. Buttons that pay or buy and buttons on account or sign-in pages are refused. Every started minute of the session costs credits; it ends when closed or 3 minutes after the last call in that browser.

ParametersJSON Schema
NameRequiredDescriptionDefault
elementYesThe element's number in the element list of the current page.

TDQS

A4.4/5.0
Behavior5/5

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

Beyond the destructive/openWorld/non-idempotent annotations, it discloses that the tool acts as the user on the site, that certain action classes (payment, account/sign-in) are blocked, what is returned after the click, and the billing model with a 3-minute idle expiry. These are exactly the operational constraints an agent cannot infer from structured fields.

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

Conciseness4/5

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

Four sentences, all load-bearing: action, side-effect return, refusal policy, and cost/lifetime. The final sentence packs two distinct facts (credit cost and 3-minute idle expiry) into one long clause, which slightly hurts scanability.

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 covers the return value (URL and title), the side-effect profile, refusal conditions, and the session/cost lifecycle. An agent has everything needed to decide and invoke correctly.

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

Parameters3/5

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

The single parameter is fully documented in the schema (100% coverage), and the description's 'by its number in the page's element list' merely restates the schema text. No extra guidance on how to obtain valid element numbers, 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 (clicks) and resource (a link, button or other element of the current page in the user's browser) plus the addressing mechanism (its number in the element list) and the return (URL and title). This clearly separates it from siblings like cotlet_browser_press, cotlet_browser_type, cotlet_browser_select and cotlet_browser_navigate 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?

Gives explicit exclusion rules: pay/buy buttons and buttons on account or sign-in pages are refused, which tells the agent when this call will fail. It also frames the cost/session lifecycle (credits per started minute, session ends 3 minutes after the last call), but it never explicitly routes the agent among alternatives such as press vs select vs type for a given widget.

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

cotlet_browser_closeClose the browserA
Idempotent
Inspect

Ends the session in the user's browser on Cotlet (with app, that app's browser): the browser keeps its cookies, goes to sleep and the per-minute charge stops. Returns the session's minutes and credits.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior5/5

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

Adds substantial detail beyond annotations: cookies are retained, the browser sleeps, billing stops, and the tool returns session minutes and credits. This is consistent with destructiveHint=false because no cookies or session history are described as destroyed.

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

Conciseness5/5

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

The description is a single front-loaded sentence that states the action, side effects, and return value without filler. Every clause contributes useful invocation 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 zero-parameter close tool with no output schema, the description is largely complete: it explains side effects and return values and aligns with the annotations. The only gap is the undefined `app` reference, which slightly undermines 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?

The schema has zero parameters and full coverage, which normally supports a baseline of 4. However, the description references `app` even though no such parameter exists in the input schema, creating a small ambiguity about how app scope is selected.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid 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: ending the browser session on Cotlet, with app-specific scope noted. This distinguishes it from siblings like cotlet_browser_open, cotlet_browser_connect, and cotlet_browser_sessions without needing their schemas.

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

Usage 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 explaining that the per-minute charge stops, but it does not explicitly contrast this with cotlet_browser_sessions or explain when not to close a session. 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.

cotlet_browser_connectCotlet: drive the user's Cloud BrowserAInspect

Wakes the user's Cloud Browser of one app (a real Chrome on Cotlet, signed in to that app as the user) and returns cdp_url, a Chrome DevTools Protocol WebSocket that gives a CDP client full control of the browser. It works in one open tab, the app's: the user watches it live, and new tabs are refused. Every started minute of an open connection costs credits. Needs the user's Cotlet API key or sign-in.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior5/5

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

Goes well past the annotations: it discloses that only one tab exists, that new tabs are refused, that the user watches live, that credits accrue per started minute of an open connection, and that a Cotlet API key or sign-in is required. These are exactly the operational facts an agent needs before opening a metered, user-visible session, and nothing contradicts the declared 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?

Four tight sentences, front-loaded with the action and return value, then constraints, then cost and auth. Minor awkwardness in "It works in one open tab, the app's:" but no sentence 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 return value, auth, cost, and tab restrictions, which is strong for a tool with no output schema. The gap is the missing link between "one app" and the zero-parameter schema: an agent is never told how the target app is chosen, nor that cotlet_browser_close should be called to stop the metered session.

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

Parameters4/5

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

The tool takes zero parameters, so the 4 baseline applies. The description adds the useful note that the browser is tied to "one app" and signed in as the user, which is context the empty schema cannot convey, though it never explains how that app is determined.

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

Purpose4/5

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

A specific verb and resource ("Wakes the user's Cloud Browser") plus a concrete return value (cdp_url) makes the operation unambiguous. It distinguishes itself from interaction siblings like cotlet_browser_click/navigate by saying it hands over a CDP WebSocket, but it never names the closest alternative (cotlet_browser_open) so the boundary 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?

"Gives a CDP client full control" implies the use case (you need raw CDP rather than the click/type/navigate helpers), and the auth/cost constraints hint at prerequisites. However, there is no explicit when-to-use versus cotlet_browser_open or cotlet_browser_sessions, and no when-not-to-use guidance despite a crowded browser sibling family.

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

cotlet_browser_navigateGo to a pageA
Read-only
Inspect

Opens a public http or https address in the user's browser on Cotlet and returns the URL and title it ended on. An app's browser opens only that app's pages. Every started minute of the session costs credits; it ends when closed or 3 minutes after the last call in that browser.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesA public http or https address, e.g. https://example.com. In an app's browser, a page of that app.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already cover the read-only, non-destructive, open-world profile, so the description is not obligated to repeat that. What it adds is genuinely useful and non-obvious: billing behavior (every started minute costs credits) and session lifetime (ends on close or 3 minutes after the last call), 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?

Three short sentences, each carrying distinct information: what it does, the app-browser scoping rule, and the cost/session-lifetime caveat. No filler and the core action 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?

There is no output schema, and the description compensates by stating it returns the resulting URL and title. Session termination and credit cost are covered. Only failure behavior (invalid URL, non-public address, cross-app access) and the distinction from cotlet_browser_open are left unstated.

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

Parameters3/5

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

With a single parameter at 100% schema description coverage, the schema already fully documents the url format and its app-browser meaning. The description restates the http/https constraint but adds no format, validation, or edge-case detail beyond the schema.

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

Purpose4/5

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

The description gives a concrete verb and resource ("Opens a public http or https address in the user's browser on Cotlet") and notes the return value (final URL and title). It clarifies the app-scoped variant ("An app's browser opens only that app's pages"), though it never distinguishes itself from the closely named sibling cotlet_browser_open, leaving some 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?

It implies usage by constraining the address to public http/https and explaining the app-browser scope, but never states when to pick this over cotlet_browser_open, cotlet_browser_connect, or cotlet_browser_sessions. The agent must infer the routing from name similarity alone.

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

cotlet_browser_openOpen the browserA
Read-only
Inspect

Wakes the user's own browser on Cotlet, a real Chrome hosted for them: their web browser with the sites they signed in to there, or with app that app's browser, signed in to the app. Opens url when given and returns the page's URL and title. The user watches every step live. Every started minute of the session costs credits; it ends when closed or 3 minutes after the last call in that browser.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoA public http or https address, e.g. https://example.com. In an app's browser, a page of that app.

TDQS

A3.9/5.0
Behavior5/5

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

The annotations only declare read-only, open-world, non-idempotent and non-destructive. Beyond them, the description discloses that the user watches every step live, that every started minute costs credits, and that the session ends on close or three minutes after the last call. That billing and expiry model is exactly the context an agent needs before invoking the tool.

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

Conciseness4/5

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

Four dense sentences with no filler, and the core identification of what is being opened comes first. The lifecycle/cost details are clustered at the end, which reads a bit run-on but is still well-ordered.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence 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 appropriately states that the page URL and title are returned, and it covers cost and session expiry. The remaining gaps are the error behavior and routing to related session tools.

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

Parameters3/5

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

Schema coverage is 100%, so the single url parameter is fully documented in the schema, and the baseline is 3. The description does explain the two browsing contexts (the user's signed-in browser versus an app's browser), but it refers to an `app` parameter that does not exist in the schema, which can confuse an agent about what it can pass.

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

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: it wakes the user's own hosted Chrome on Cotlet and opens a URL. That is clear and concrete. However, it never contrasts itself with siblings like cotlet_browser_connect or cotlet_browser_navigate, which an agent must distinguish when starting a browsing session.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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 agent can infer that this is the entry point for starting a browsing session, and the closing sentence hints at session lifecycle. But there is no explicit 'use this when' versus connect/navigate, nor any guidance on whether to open the browser before calling click/type/read.

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

cotlet_browser_pressPress a keyA
Destructive
Inspect

Presses one key on the current page in the user's browser on Cotlet, on the element that has focus: Tab to the next field, Enter to send, Escape to close a dialog or pop-up, arrows to move through a suggestion list. Returns the URL and title after it. Enter on account pages is refused. Every started minute of the session costs credits; it ends when closed or 3 minutes after the last call in that browser.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYesThe key.

TDQS

A4.7/5.0
Behavior5/5

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

Goes well beyond the annotations (destructive, openWorld, non-idempotent) by disclosing a safety guardrail (Enter refused on account pages), the return payload (URL and title after the press), and the billing/session model (every started minute costs credits, session ends on close or 3 minutes after the last call). Those are exactly the non-obvious traits an agent needs before deciding to act.

Agents need to know what a tool does to the world before 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 and scope first, key semantics second, then constraints and side effects. No filler, and the credit/session warning is placed after the operational content where it belongs.

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 one enum-constrained parameter and no output schema, the description still names the return value, the refusal case, and the session lifetime. Nothing material for correct invocation is missing.

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

Parameters4/5

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

Schema coverage is 100% with a fully enumerated key list, so the baseline is 3; the description adds real meaning by mapping keys to intents (Tab to next field, Enter to send, arrows for suggestion lists), which the bare enum 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 ('Presses one key on the current page in the user's browser on Cotlet') and scopes it to the focused element. The concrete key examples (Tab, Enter, Escape, arrows) separate it cleanly from cotlet_browser_type and cotlet_browser_select without needing their schemas.

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

Usage Guidelines4/5

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

Gives concrete when-to-use guidance per key ('Tab to the next field, Enter to send, Escape to close a dialog or pop-up') plus an explicit refusal rule ('Enter on account pages is refused'). It never explicitly says when to prefer cotlet_browser_type or cotlet_browser_select instead, so it stops short of full alternative routing.

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

cotlet_browser_readRead the pageA
Read-onlyIdempotent
Inspect

Returns the current page of the user's browser on Cotlet: its readable text, up to 20,000 characters, and a numbered list of its links, buttons and fields. Field values, cookies and storage are never returned. On a page longer than that, both start near where it is scrolled to. Every started minute of the session costs credits; it ends when closed or 3 minutes after the last call in that browser.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior5/5

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

Adds significant behavioral context beyond annotations: limits (20,000 chars), exclusions (field values, cookies, storage), scroll-relative start on long pages, and cost model (credits per started minute, session ends after 3 minutes idle or on close). No contradiction with readOnly/idempotent hints.

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

Conciseness5/5

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

Four sentences, front-loaded with what the tool returns, then limits, scroll behavior, and cost. Every sentence earns its place and 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?

No output schema, but the description fully explains return values (text, numbered list) and key operational details (size limits, exclusions, cost, session lifetime). Complete for a 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?

Zero parameters, so baseline is 4. The description need not explain parameter semantics; it correctly focuses on return behavior and constraints instead.

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

Purpose5/5

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

States a specific verb ('Returns') and resource ('current page of the user's browser on Cotlet'), and enumerates what is returned (readable text, numbered list of links/buttons/fields). This clearly distinguishes it from sibling browser tools like screenshot or click.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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 (read the page's text and interactive elements), but provides no explicit when-to-use guidance or alternatives among the many browser tools (e.g., screenshot, navigate). An agent must infer the appropriate context.

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

cotlet_browser_screenshotSee the pageA
Read-onlyIdempotent
Inspect

Returns a JPEG image of the visible part of the current page in the user's browser on Cotlet, with its URL and title: boards, canvases and layouts that the page text does not show. Every started minute of the session costs credits; it ends when closed or 3 minutes after the last call in that browser.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior5/5

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

Beyond the annotations (all of which it is consistent with), the description discloses two things an agent could not otherwise know: cost ('Every started minute of the session costs credits') and session lifecycle ('ends when closed or 3 minutes after the last call in that browser'). For a metered, session-bound tool this is exactly the right kind of added 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 dense sentences; the core output is front-loaded before the cost/lifecycle caveats. The colon-introduced list ('boards, canvases and layouts') is slightly awkward but each clause carries real information rather than restating 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 and no parameters, the burden falls on the description, and it covers output form, cost, and timeout. It does not state prerequisites (an active browser session) or what happens when no browser is connected, which is the main remaining gap for a session-scoped 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?

There are zero parameters, so no parameter semantics are required — the baseline for a parameterless tool applies. The description correctly adds nothing spurious about inputs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 ('Returns a JPEG image of the visible part of the current page') and even flags the return payload as URL + title. The clause 'boards, canvases and layouts that the page text does not show' indirectly distinguishes it from cotlet_browser_read, but it never names that sibling, so the differentiation is inferred rather than stated.

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

Usage Guidelines4/5

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

The phrase 'that the page text does not show' gives a usable heuristic for choosing screenshots over the text-reading sibling. What is missing is an explicit instruction such as 'use cotlet_browser_read for text' or a note that a browser session must already be connected via cotlet_browser_open/connect.

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

cotlet_browser_scrollScroll the pageA
Read-onlyIdempotent
Inspect

Scrolls the current page in the user's browser on Cotlet with the mouse wheel, as a person does: down or up by screens viewport heights (default 0.8), to the top or the bottom, or until element element is in view. Content that loads on scroll appears, and the next read lists it. Returns the URL, title and scroll position (at_top, at_bottom). Every started minute of the session costs credits; it ends when closed or 3 minutes after the last call in that browser.

ParametersJSON Schema
NameRequiredDescriptionDefault
elementNoScroll until this element of the element list is in view.
screensNoHow far, in viewport heights, for down and up. Default: 0.8.
directionNoWhere to scroll. Default: down.

TDQS

A4.6/5.0
Behavior5/5

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

Goes well past the annotations by disclosing the cost model ('every started minute of the session costs credits'), the session lifecycle ('ends when closed or 3 minutes after the last call'), the implicit lazy-load side effect, and the exact return payload (URL, title, at_top, at_bottom). These are operational facts an agent cannot get from readOnly/idempotent hints 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?

One dense but front-loaded paragraph: mode enumeration first, then side effect/return, then billing. Every sentence carries information, though the billing clause is appended to a long sentence and could have been separated for scanability.

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

Completeness5/5

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

No output schema exists, and the description compensates by naming the returned fields and their meaning (at_top, at_bottom). Combined with the three-mode explanation and session-cost warning, an agent has everything needed to call this 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; the description adds cross-parameter meaning the schema does not, namely that `screens` describes distance for the down/up modes while `element` selects the scroll-until-visible mode. It restates the 0.8 default and the direction set, which is mildly redundant with 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?

Starts with a specific verb+resource ('Scrolls the current page in the user's browser') and enumerates the three distinct modes of operation (by screens, to top/bottom, until element). An agent can distinguish it from siblings like cotlet_browser_read or cotlet_browser_navigate without opening any schema.

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

Usage Guidelines4/5

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

The phrase 'Content that loads on scroll appears, and the next read lists it' effectively tells the agent when to use this tool (to reach lazy-loaded content, then call cotlet_browser_read). It does not explicitly name a when-not condition or state that element-based scrolling supersedes the screens/direction parameters, so the routing is clear but not exhaustive.

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

cotlet_browser_selectChoose from a listA
Destructive
Inspect

Chooses an option of a drop-down list on the current page in the user's browser on Cotlet, by the list's number in the element list and the option's label as read lists it (or its value). Returns the URL and title after it. Card fields and account pages are refused. Every started minute of the session costs credits; it ends when closed or 3 minutes after the last call in that browser.

ParametersJSON Schema
NameRequiredDescriptionDefault
optionYesThe option.
elementYesThe element's number in the element list of the current page.

TDQS

A4.1/5.0
Behavior5/5

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

Annotations only flag the operation as destructive, non-idempotent, and open-world; the description goes well beyond that by disclosing the return payload (URL and title after selection), the refusal of card fields and account pages, and the credit/session economics including the 3-minute inactivity timeout. That is exactly the kind of context an agent needs before spending money and mutating page state.

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

Conciseness4/5

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

The core action is front-loaded in the first clause and each following sentence carries distinct information (return values, refusals, billing). It is dense rather than wasteful, though the session-cost sentence is boilerplate that inflates the definition relative to the two-parameter operation.

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

Completeness4/5

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

For a mutation tool with no output schema, the description covers what is returned, what is blocked, and the session lifecycle cost, which is nearly everything an agent needs. The one remaining gap is what happens on an unsuccessful match (error vs. silent no-op), 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?

With 100% schema coverage, the schema already documents both parameters, so the baseline is 3. The description does add a little meaning by clarifying that 'option' can be matched by the label as the list renders it or by its value, but it says nothing about partial matching, case sensitivity, or failure behavior for an unmatched label.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 ('Chooses an option') and resource ('drop-down list on the current page') and scopes it to Cotlet's browser session, which cleanly separates it from navigation or screenshot siblings. It does not explicitly name the neighboring tools (click/type/read) that an agent might confuse with selection, so it stops just 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 Guidelines4/5

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

'On the current page' establishes the precondition that a page must already be loaded, and 'Card fields and account pages are refused' gives an explicit when-not boundary. It stops short of a 5 because it never names the alternative action (e.g., use click or type when the element is not a select).

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

cotlet_browser_sessionsCotlet: browser sessions and closing themA
DestructiveIdempotent
Inspect

Open Chrome DevTools connections to the user's Cloud Browsers with the minutes and credits each has cost so far, and the cdp_url links still valid. With close: true it ends the open connections and takes back the unused links, of one app or of all. Needs the user's Cotlet API key or sign-in.

ParametersJSON Schema
NameRequiredDescriptionDefault
closeNoEnd the connections and revoke the links.

TDQS

A3.6/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: it discloses the authentication requirement, that costs and minutes are reported, that only still-valid cdp_url links are returned, and that closing revokes unused links. This is consistent with destructiveHint=true and readOnlyHint=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?

The description is compact and front-loads the main behavior, with the close behavior following immediately. The phrase 'of one app or of all' is unnecessary and confusing given the one-parameter schema, but overall there is little 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 low-complexity tool with rich annotations and no output schema, the description covers the main return data and authentication. The unresolved 'one app or all' scope is a real gap because the schema cannot express app selection, leaving the agent unsure how to interpret that claim.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 close parameter is already documented. The description adds that close=true ends connections and takes back unused links, but it also mentions 'of one app or of all' even though the schema exposes no app-targeting parameter, which creates ambiguity rather than clarity.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 clearly identifies the resource as Cloud Browser sessions and explains that it exposes cost, minutes, and valid cdp_url links, with an optional close behavior. It does not explicitly distinguish itself from sibling tools such as cotlet_browser_close or cotlet_browser_connect, and the opening verb 'Open' is slightly ambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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 useful condition for the close parameter ('With close: true') and states the authentication prerequisite. However, it does not explain when to use this tool versus cotlet_browser_close or other browser siblings, and the 'of one app or of all' scope is not actionable through the schema.

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

cotlet_browser_typeType on the pageA
Destructive
Inspect

Types text into a field of the current page in the user's browser on Cotlet, by the field's number in the page's element list, and with submit presses Enter. Returns the URL and title after it. Password, card and one-time code fields and sign-in pages are refused: the user fills those in themselves. Every started minute of the session costs credits; it ends when closed or 3 minutes after the last call in that browser.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesThe text to type.
submitNoPress Enter after typing, e.g. to search.
elementYesThe element's number in the element list of the current page.

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 return value (URL and title after typing), a security refusal policy for sensitive fields and sign-in pages, a credit cost per started minute, and session lifetime ('ends when closed or 3 minutes after the last call'). The mutation/destructive framing is consistent with destructiveHint=true and openWorldHint=true.

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

Conciseness4/5

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

Front-loads the action and addressing scheme, then layers behaviour, refusals and cost in three tight clauses. The billing sentence is slightly off-topic for a typing tool but is genuinely useful context, so only a minor deduction.

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

Completeness5/5

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

For a destructive, open-world browser mutation with no output schema, the description covers the action, how elements are addressed, the return value, safety refusals, and session/cost lifecycle — everything an agent needs to call it without surprises.

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

Parameters3/5

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

Schema description coverage is 100%, so all three parameters are already documented, and the description largely restates them (`submit` presses Enter, element numbering from the page's element list). Baseline 3 is appropriate; it adds no constraints or gotchas 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 ('types text into a field of the current page') plus the addressing scheme ('by the field's number in the page's element list'), which cleanly separates it from siblings like cotlet_browser_press, cotlet_browser_select and cotlet_browser_click.

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

Usage Guidelines4/5

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

Gives clear when-to-use context via the `submit` note ('presses Enter after typing, e.g. to search') and an explicit when-not: password, card, one-time code fields and sign-in pages are refused and left to the user. It does not name the sibling to use instead for keystrokes like Tab/Escape, so it stops just short of 5.

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

cotlet_browser_uploadUpload a fileA
Destructive
Inspect

Puts files into a file field of the current page in the user's browser on Cotlet, or into the file picker that an upload button opens, by its number in the element list. A file is given as {"url": "https://..."} for a file online or {"file_id": "..."} for one uploaded to Cotlet first; up to 10 files, 20 MB each. Returns the URL and title after it. Every started minute of the session costs credits; it ends when closed or 3 minutes after the last call in that browser.

ParametersJSON Schema
NameRequiredDescriptionDefault
filesYesThe files.
elementYesThe element's number in the element list of the current page.

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already flag destructive, open-world, non-idempotent behavior, and the description adds real value on top: accepted file source shapes, the 10-file / 20 MB limits, the returned URL and title, and the per-minute credit cost with the 3-minute idle timeout. It does not say what happens on partial failure or whether existing field content is replaced, which keeps it short of a 5.

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

Conciseness4/5

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

Two dense sentences, purpose and input shape front-loaded, with cost/session policy last. Every clause carries information, though the credit-and-timeout clause sits somewhat awkwardly in a tool-purpose description.

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

Completeness4/5

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

With no output schema, the description correctly states the return value (URL and title), and it covers input forms and limits. The main gap is the missing reference to how a browser session must already exist and how this differs from cotlet_upload_file.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 restates the url/file_id alternatives and the element-number meaning that the schema already documents, adding limits (10 files, 20 MB) but no genuinely new semantics such as how the element list is obtained or what happens if element is not a file input.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 ('puts files into a file field of the current page in the user's browser'), plus the targeting mechanism (element number). It distinguishes itself from generic upload behavior by naming the browser/session context, but it never contrasts itself with the sibling cotlet_upload_file, which an agent could easily confuse it with.

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

Usage Guidelines3/5

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

The browser-session framing and the note that the session ends on close or 3 minutes after the last call imply when this tool fits, but there is no explicit 'use this instead of cotlet_upload_file when...' guidance, and no prerequisites (e.g. needing an open browser session from cotlet_browser_open/connect) are stated.

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

cotlet_get_callCotlet: check a callA
Read-only
Inspect

Status of an earlier Cotlet call, by its call_id: pending (waits for the owner's approval in the Cotlet console), approved, running, success, rejected, expired, blocked or failed. For a call that answered with status pending or running.

ParametersJSON Schema
NameRequiredDescriptionDefault
call_idYescall_id from the earlier call

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, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description contributes the status vocabulary and the polling context, but says nothing about behavior for an unknown or expired call_id, retention window, or whether repeated polling is rate-limited.

Agents need to know what a tool does to the world before 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 key, with the status set inlined rather than padded into separate sentences. The trailing 'answered with status pending or running' is slightly awkward phrasing but earns its place as scoping 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 read tool with no output schema, the description supplies the crucial return-value information (the full status enum) that the structured fields omit. Only minor gaps remain, such as what accompanies the status in the response.

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

Parameters3/5

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

There is a single required parameter with 100% schema description coverage, so the schema already carries the semantics. The description's 'by its call_id' merely restates the schema and adds no format or sourcing detail (e.g. where the call_id came from).

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

Purpose4/5

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

States a specific resource (an earlier Cotlet call) and a specific retrieval (its status, keyed by call_id), and enumerates every terminal and intermediate state so the agent knows exactly what it will get back. No sibling tool overlaps this resource, so the lack of an explicit 'not for X' does not create ambiguity.

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

Usage Guidelines4/5

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

The closing clause scopes it to calls whose prior response was pending or running, which effectively tells the agent this is a polling tool rather than a general history lookup. It stops short of naming an alternative or saying what to do once a terminal status is reached.

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

cotlet_report_issueCotlet: report a bug or a missing featureAInspect

Sends a report straight to the Cotlet team: a tool that failed or returned wrong data, an error you could not get past, or a tool, field or app the task needed and Cotlet lacks. The report carries the error text and call_id when there is one, never passwords or tokens. Needs the user's Cotlet API key or sign-in.

ParametersJSON Schema
NameRequiredDescriptionDefault
appNoApp slug the report is about, e.g. 'skool'.
kindYesbug: a tool did the wrong thing or returned wrong data. error: a call failed or returned an error you could not get past. feature_request: something new the user wants. missing_feature: an app is here but lacks a tool, field or option the task needed. other: anything else.
toolNoTool or endpoint name, e.g. 'skool_list_members'.
titleYesOne line, e.g. 'skool_list_members stops after 50 members'.
clientNoAgent or tool sending this, e.g. 'Claude Code'.
call_idNocall_id of the call that went wrong, if any.
descriptionYesWhat you tried, what you expected and what happened, with the error text if there was one. No passwords, tokens or other secrets.

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-destructive, non-idempotent write, so the description only needs to add context. It does: it states where the report goes, that error text and call_id are attached when available, that secrets are never included, and that an API key or sign-in is required. It does not mention what happens on duplicate submissions, consistent with idempotentHint=false but not 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?

Three dense sentences, front-loaded with the action and its goal, then the trigger scenarios, then the content and auth constraints. No filler and nothing repeated from 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 mutation tool with no output schema, the description covers purpose, triggers, attached payload, secret handling and authentication, which is enough to call it correctly. It omits what the caller receives back or whether filing duplicates creates separate reports, a minor gap for a write 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%, so enum values for `kind` and field meanings for `tool`, `app` and `call_id` are already documented in the schema. The description adds only marginal meaning, clarifying that call_id and error text are picked up automatically when present, which is the baseline expectation given full schema documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 ('Sends a report straight to the Cotlet team') and enumerates the concrete situations it covers: failed or wrong-data tools, blockers, missing tools/fields/apps. It stops short of explicitly distinguishing itself from the sibling cotlet_request_apps, which plausibly overlaps with the 'app the task needed and Cotlet lacks' case.

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

Usage Guidelines4/5

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

Clear contextual triggers are given ('failed or returned wrong data', 'an error you could not get past', 'needed and Cotlet lacks'), which is enough for an agent to decide when to file a report. It offers no explicit exclusion or pointer to cotlet_request_apps / cotlet_get_call, so edge-case routing is left to inference.

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

cotlet_request_appsCotlet: request access to appsAInspect

Requests access to apps for the user's workspace, as Request access in the console: a live app is granted at once, any other goes to the Cotlet team, who answer within 72 hours. Takes app slugs as listed at https://cotlet.dev/api/v1/apps. Free. Needs the user's Cotlet API key or sign-in.

ParametersJSON Schema
NameRequiredDescriptionDefault
appsYesApp slugs, e.g. ["skool", "substack"].

TDQS

A4.7/5.0
Behavior5/5

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

Adds substantial behavior beyond the annotations: a live app is granted immediately, other requests go to the Cotlet team with a 72-hour response window, the operation is free, and authentication via Cotlet API key or sign-in is required. The mutation-like but non-destructive nature is consistent with 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 with the core action front-loaded, followed by outcome behavior, slug source, cost, and authentication. No wasted words.

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 one-parameter request tool with no output schema, the description provides everything needed to call it correctly: what it does, how outcomes differ, where to get valid slugs, and what credentials are required.

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

Parameters4/5

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

Schema coverage is 100%, so the schema already documents the apps parameter and slug examples. The description adds useful context by pointing to https://cotlet.dev/api/v1/apps as the canonical slug list, though it does not mention the maxItems limit.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid 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: request access to apps for the user's workspace. It distinguishes this from informational siblings like cotlet_apps and cotlet_balance by describing an action that submits an access request and explains the two possible outcomes.

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

Usage Guidelines4/5

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

The description clearly frames the tool as the programmatic equivalent of 'Request access' in the console, which implies when to use it. It does not explicitly say to use cotlet_apps first to discover slugs, so a small inference remains.

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

cotlet_upload_fileCotlet: upload a file for a toolAInspect

Returns a one-time upload_url and a file_id for a local file (an image for a post, an attachment). The file is sent to upload_url with an HTTP PUT; an argument that takes a file accepts {"file_id": "..."}. Up to 25 MB, the URL works once. Free. Needs the user's Cotlet API key or sign-in.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoFile name, e.g. photo.jpg.
content_typeNoMIME type, e.g. image/jpeg.

TDQS

A4.3/5.0
Behavior5/5

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

The description adds substantial behavioral detail beyond the annotations: it returns a one-time upload_url and file_id, requires an HTTP PUT to upload_url, enforces a 25 MB limit, states the URL works only once, and notes the Cotlet API key/sign-in requirement. These details are consistent with the non-read-only, non-destructive annotation profile and materially help the agent understand the workflow.

Agents need to know what a tool does to the world before 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 most important fact—what is returned and how it is used—is front-loaded in the first sentence. The remaining sentences cover upload method, size limit, one-time behavior, and auth without wasted words.

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

Completeness5/5

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

There is no output schema, and the description fully explains the return values, the upload workflow, the file size constraint, one-time URL behavior, and authentication needs. An agent has enough information to invoke and chain this tool correctly.

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

Parameters3/5

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

Schema description coverage is 100%, with both name and content_type documented with examples in the schema itself. The description does not add parameter-specific syntax or constraints beyond that, so the baseline score of 3 is appropriate.

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

Purpose4/5

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

The description states a specific verb and resource: it returns a one-time upload_url and file_id for a local file. It also clarifies the intended use cases (an image for a post, an attachment), but it does not explicitly distinguish this helper from sibling tools such as cotlet_browser_upload.

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

Usage Guidelines4/5

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

The description gives clear usage context: call this to obtain upload_url and file_id, PUT the file to upload_url, then pass file_id to any argument that accepts a file. It does not name when-not-to-use cases or alternative tools, so it falls short of the top score.

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

cotlet_whoamiCotlet: who am IA
Read-only
Inspect

The Cotlet account this connection acts as: email, workspace, access status, the API key or OAuth client in use with its scope, the apps the workspace may call and its credit balance. Free. Needs the user's Cotlet API key or sign-in.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already establish readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description still adds genuine value beyond them: it declares the call is credit-free ('Free') and that authentication via the user's Cotlet API key or sign-in is required, which matters for failure handling. It does not say what shape/format the response takes, but the field list largely compensates.

Agents need to know what a tool does to the world before calling 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 front-loads the substantive return contents, the second carries the cost and auth facts. No filler, no restatement of the title, and 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, so the description must carry the return contract — and it does, enumerating each field the agent will receive. Combined with the required-auth note, an agent has enough to call it correctly. Only minor gaps remain, such as how failures look when the key is missing or what access-status values are possible.

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

Parameters4/5

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

The tool takes zero parameters, so there is nothing for the description to disambiguate and the baseline of 4 applies. Nothing in the text conflicts with the empty 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 concrete resource — the Cotlet account identity for this connection — and enumerates exactly what comes back (email, workspace, access status, API key/OAuth client scope, callable apps, credit balance). That is far more specific than the bare 'who am I' title. It stops short of explicitly distinguishing itself from siblings like cotlet_balance and cotlet_apps, which overlap on the balance and app-list portions of the response.

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

Usage Guidelines3/5

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

Usage context is implied rather than stated: an agent can infer this is the pre-flight identity/permission check, and 'Needs the user's Cotlet API key or sign-in' plus 'Free' tells it the prerequisites and that no credits are consumed. However there is no explicit 'call this before cotlet_apps or cotlet_balance to verify access' routing, and no stated conditions under which this tool should be skipped.

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

create_billCreate billC
Destructive
Inspect

Records a vendor bill with its line items, optionally against a project.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemsYesLine items. The total is the sum of quantity times unit cost.
notesNo
numberYesThe vendor's invoice number.
subjectNo
due_dateNoYYYY-MM-DD.
bill_dateNoYYYY-MM-DD. Default: today.
vendor_idYesA vendor's contact_id (list_contacts type vendor).
project_idNoThe project the cost belongs to.

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare this is a non-idempotent, destructive write with open-world effects. The description adds nothing beyond that: no mention of permission requirements, whether the invoice number must be unique per vendor, whether posting affects accounting/GL, or whether duplicate submissions create duplicate bills.

Agents need to know what a tool does to the world before 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 the resource and key qualifier front-loaded; nothing is wasted. It is arguably under-specified rather than verbose, but structurally clean.

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?

This is a destructive 8-parameter mutation with no output schema, yet the description says nothing about what is returned (e.g., the new bill ID), how totals are derived, or what preconditions must hold. For a create tool of this complexity it leaves significant 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 75%, so most parameters (vendor_id, number, bill_date, due_date, unit_cost, items) are already documented in the schema. The description only restates 'line items' and 'optionally against a project', adding no new semantics for nested item fields or the vendor_id lookup path 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 ('Records a vendor bill with its line items') and notes the optional project association. It does not distinguish this from sibling creation tools like create_invoice, create_purchase_order, or create_expense, which occupy adjacent accounting concepts.

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 create_invoice, create_purchase_order, or create_expense, which are the closest siblings. The only conditional ('optionally against a project') describes a field, not a usage condition.

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 orderC
Destructive
Inspect

Creates a change order or change order request on a project, with line items.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNoDefault: today.
kindNorequest = a change order request (COR) to price before it becomes a change order.change_order
itemsNo
titleYes
numberNoYour own number. Default: the app's next, or COR-<requests on the project + 1>.
project_idYesFrom list_projects.
descriptionNoWhy it changes: who asked, when, what.

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare destructiveHint=true, openWorldHint=true, and non-idempotent, so the safety profile is known — but the description adds nothing beyond that: no mention of side effects, that duplicate calls create duplicates (non-idempotent), auto-numbering behavior, or whether the created document is sent to anyone. For a destructive write with 7 params, this is 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?

A single front-loaded sentence with no waste. It is efficient but arguably too short for the tool's complexity, which is a completeness issue rather than a structure one.

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

Completeness2/5

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

With 7 parameters, nested line items, no output schema, and destructive/non-idempotent annotations, the description should cover at minimum the create-vs-append workflow and what the tool returns (e.g., an id usable by send_change_order). None of that 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 71% with nested item fields well documented, so the schema does most of the work. The description only gestures at line items and adds no meaning beyond the schema for kind, number, or date defaults — 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 (creates) and resource (change order or change order request) scoped to a project, plus the notable inclusion of line items. It doesn't distinguish itself from siblings like add_change_order_items or update_change_order, but the core 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 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 add_change_order_items (for adding items later), update_change_order, or create_estimate. The change_order vs request choice is only explained inside the schema's kind enum, not in the description, so the agent gets no explicit routing advice.

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

create_contactCreate contactC
Destructive
Inspect

Adds a customer, employee, contractor, vendor or misc contact to the Directory.

ParametersJSON Schema
NameRequiredDescriptionDefault
zipNo
cellNo
cityNo
typeYesWhat kind of contact.
emailNo
phoneNo
stateNo
address1No
address2No
last_nameNo
first_nameNo
company_nameNoRequired for contractors and vendors.

TDQS

C2.7/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=false, destructiveHint=true, openWorldHint=true, and idempotentHint=false, so the safety profile is covered structurally. The description adds nothing beyond that — no mention of duplicate handling, whether a returned ID is needed downstream, or rate/permission considerations — leaving behavior opaque for a destructive, non-idempotent write.

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

Conciseness4/5

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

A single front-loaded sentence with zero wasted words. Brevity is appropriate, though the space freed up should have been spent on usage and behavioral context.

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 12-parameter, destructive, non-idempotent creation tool with no output schema, the description is far too thin: it does not explain return values (e.g., whether a contact ID comes back), required-field combinations, or what 'the Directory' entails. An agent could call it, but not confidently.

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

Parameters2/5

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

Schema description coverage is only 17% across 12 parameters, so the description carries the burden and fails to: it only names the contact categories (already enumerated in the schema) and gives no meaning to the 10 address/name/phone fields. The single documented param (company_name) is described in the schema, not the description, so the description compensates for essentially none of the coverage gap.

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

Purpose4/5

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

The description states a specific verb ('Adds') and resource ('contact ... to the Directory') and enumerates the contact categories, which helps an agent understand the scope. It does not explicitly differentiate itself from siblings like list_contacts/get_contact, but the create-vs-read distinction is self-evident 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 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, no prerequisites (e.g., that company_name is required for contractors and vendors), and no warning about duplicate creation. The agent must infer the entire 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_daily_logCreate daily logC
Destructive
Inspect

New daily log on a project: work notes, people, deliveries, weather notes and delays.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYesLog date.
notesYesWork done and site notes (the log's Work Performed).
peopleNoCrews, subcontractors and visitors on site: headcount per crew, or free text.
visitorsNoVisitors on site (inspector, owner, architect).
project_idYesproject_id from list_projects.
arrival_timeNoArrival on site, e.g. 07:00 or 7:00 AM.
jobsite_notesNoJobsite condition notes.
weather_delayNoWhat the weather delayed. Marks a weather delay.
weather_notesNoYour own notes next to the recorded weather.
departure_timeNoDeparture from site, e.g. 15:30.
schedule_delayNoWhat else held the schedule up. Marks a schedule delay.
materials_deliveredNoMaterials delivered or used, one line each.

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=false, destructiveHint=true, idempotentHint=false and openWorldHint=true, so the safety profile is covered. The description adds nothing about the non-idempotent duplicate risk, whether a log already exists for that project/date, or what is returned after creation — for a destructive, non-idempotent create this is a real gap.

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

Conciseness4/5

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

One compact sentence, front-loaded with the action and resource, with no filler. The telegraphic fragment style costs a little readability 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?

With 12 parameters fully described in schema and no output schema, the minimum needed to call it is present. However, for a destructive, non-idempotent creation tool the description omits return/verification behavior and duplicate-handling, which an agent would reasonably 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%, so every parameter is already documented. The description loosely echoes the payload ('people, deliveries, weather notes and delays') but adds no format, dependency, or precedence information beyond the schema — baseline 3.

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

Purpose4/5

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

States a clear verb ('New daily log') plus the resource and enumerates the content it captures (work notes, people, deliveries, weather notes, delays). An agent can tell this is a creation tool for daily logs, though it never distinguishes itself from update_daily_log or get_daily_log.

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 near-siblings update_daily_log / list_daily_logs / get_daily_log that an agent would need to choose between. Usage is only inferable from the name and 'New'.

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

create_estimateCreate estimateB
Destructive
Inspect

Creates a draft estimate on a project or for a customer, with priced line items.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemsNo
titleYes
exclusionsNo
inclusionsNo
project_idNoFrom list_projects. Its customer is used.
customer_idNoDirectory customer id. Needed without a project.
descriptionNoScope shown on the estimate.
expire_dateNo

TDQS

B3.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=true, idempotentHint=false, and openWorldHint=true, so the safety profile is covered. The description adds the useful state fact that the object is created as a *draft* (not sent) and that it carries priced line items. It says nothing about required permissions, side effects on the project, or whether duplicates result from retries, which would be valuable given non-idempotency.

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

Conciseness4/5

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

One front-loaded sentence with no filler; the verb and scope lead. It is on the terse end for a destructive 8-parameter tool, but nothing is wasted.

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

Completeness2/5

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

For a destructive, non-idempotent create with an 8-parameter schema, a nested item array of up to 100 entries, low schema coverage, and no output schema, the description is too thin. It omits the draft lifecycle (needs send_estimate to deliver), the title requirement, and any hint about returning an id for follow-up calls like add_estimate_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?

Coverage is 38%, so the description must carry weight. It explains the two creation modes (project vs customer) and that line items are priced, which clarifies the items/unit_cost relationship. But exclusions, inclusions, expire_date, and description are undocumented in both schema and prose, and the required title (the only required param) is not called out.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid 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 ("Creates a draft estimate") and scopes it to two targets, "on a project or for a customer," which maps cleanly to project_id/customer_id. It does not differentiate from adjacent create tools (create_change_order, create_invoice) or from follow-ups like add_estimate_items/send_estimate, but the core 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 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 named alternatives. The word "draft" is the only implicit signal, hinting the estimate is not finalized or sent (unlike send_estimate), but the agent must infer that on its own. Sibling tools such as add_estimate_items and update_estimate are never mentioned.

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

create_expenseCreate expenseC
Destructive
Inspect

Records an expense (receipt, purchase, fee) with amount, date, vendor and project.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNoYYYY-MM-DD. Default: today.
nameYesWhat was bought or paid.
typeNomaterial
amountYesIn the account currency.
reasonNo
billableNoBill it on to the customer.
vendor_idNoThe vendor's contact_id (list_contacts type vendor).
project_idYesThe project the cost belongs to (list_projects). The app refuses an expense without one.

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already disclose that this is a non-read-only, open-world, non-idempotent operation with destructiveHint=true. The description adds no behavioral context beyond listing the main fields; it does not explain side effects, permission requirements, or what the destructive hint means for an expense-creation tool.

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

Conciseness4/5

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

The description is a single efficient sentence, front-loading the core action and main fields. It is concise and contains no waste, though its brevity contributes to gaps elsewhere.

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 eight parameters, openWorldHint=true, destructiveHint=true, and no output schema, the description is thin. It does not address usage boundaries, required project enforcement beyond what the schema states, or behavioral implications of the 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 75%, and the schema itself documents key parameters including vendor_id, project_id, amount currency, and date default. The description names amount, date, vendor, and project but adds no semantics beyond what the schema already provides, and omits type, billable, and reason.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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: 'Records an expense', with examples of what counts (receipt, purchase, fee). It clearly identifies the tool's purpose, though it does not explicitly differentiate it from siblings such as create_bill, create_purchase_order, or add_invoice_items.

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_bill, create_purchase_order, or add_invoice_items, nor any prerequisites such as required project association. Usage must be inferred entirely from the tool name and schema.

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

create_inspectionCreate inspectionC
Destructive
Inspect

Logs an inspection on a project with type, date, agency, inspector and notes.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNoInspection day, YYYY-MM-DD. Default: today.
typeYese.g. Framing, Rough Electrical.
notesNo
agencyNo
project_idYesThe project being inspected.
inspected_byNoInspector or office.

TDQS

C2.7/5.0
Behavior2/5

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

The annotations already declare readOnlyHint=false, destructiveHint=true, idempotentHint=false and openWorldHint=true; the description adds nothing about duplicate-submission behavior, required permissions, or side effects. It restates what the schema fields already say rather than extending the behavioral picture.

Agents need to know what a tool does to the world before 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 verb and resource front-loaded and no wasted clauses. Its brevity, however, borders on under-specification for a six-parameter creation 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?

A destructive, non-idempotent creation tool with six parameters, no output schema, and no explanation of what is returned or what happens on duplicate submissions. The description does not carry enough for an agent to call it confidently in edge cases.

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 schema description coverage at 67%, the description only re-lists field names ("type, date, agency, inspector and notes") that are already visible in the schema, and never mentions project_id despite it being required. It adds no meaning for the undocumented parameters such as notes or the agency enum 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 names a specific verb plus resource ("Logs an inspection") and lists the captured attributes, so an agent knows this creates an inspection record on a project. It does not, however, distinguish it from the closely related record_inspection_result sibling, leaving the create-vs-record boundary for the agent to 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?

There is no guidance on when to use this versus record_inspection_result, nor any mention of prerequisites such as the project existing or needing an inspection scheduled first. Usage is only implied by the tool's name.

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

create_invoiceCreate invoiceB
Destructive
Inspect

Creates a draft invoice for a project or customer, with priced line items.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemsNo
numberNoYour own number. Default: the app's next.
due_dateNo
project_idNoFrom list_projects. Its customer is billed.
customer_idNoDirectory customer id. Needed without a project.
descriptionNoShown on the invoice. Needs due_date in the same call.
invoice_dateNoDefault: today.

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare mutation, non-idempotency, open-world behavior, and destructiveHint=true. The description usefully adds that the result is a draft and that line items are priced, but it does not disclose authorization needs, side effects, or why the destructive hint applies.

Agents need to know what a tool does to the world before 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 efficient sentence with no filler. The core meaning is front-loaded and appropriately sized for this 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 definition covers the core action and schema supports the parameters, but it lacks usage routing, prerequisites, and mutation side-effect context. For a seven-parameter create operation with destructive/open-world annotations, that leaves noticeable 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 71%, so many parameters are already documented in the schema. The description adds only high-level context about project/customer billing and priced line items, without clarifying precedence between project_id and customer_id or dependency details already handled by 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 gives a specific verb and resource ("Creates a draft invoice") plus scope ("for a project or customer, with priced line items"). It is clearly about invoice creation, though it does not explicitly distinguish itself from siblings such as add_invoice_items or send_invoice.

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, nor any prerequisites or exclusions. The phrase "for a project or customer" hints at the project_id/customer_id choice, but the agent must infer all workflow conditions.

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

create_leadCreate leadC
Destructive
Inspect

Adds a sales lead with contact details and a pipeline stage.

ParametersJSON Schema
NameRequiredDescriptionDefault
zipNo
cellNo
cityNo
emailNo
phoneNo
stageNoreceived
stateNo
address1No
address2No
last_nameNo
first_nameNo
company_nameNo

TDQS

C2.7/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=false, destructiveHint=true, openWorldHint=true, and idempotentHint=false, so the agent knows this is a non-idempotent write that touches external systems. The description adds nothing beyond that: no note on duplicates, failure modes, required permissions, or what the response contains (e.g., new lead ID).

Agents need to know what a tool does to the world before 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 redundancy. It is efficient, though its brevity contributes to the missing information elsewhere rather than being a pure strength.

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 12-parameter mutation with no output schema and no documentation of any field, the description is far too thin. It should at minimum state that all fields are optional, how the default stage behaves, and what happens on duplicate or invalid input; none of that is covered.

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 12 parameters at 0% schema description coverage and zero required fields, the description is the only place to explain that every field is optional, that first_name/last_name/email are the meaningful identity fields, or what the stage enum values mean. Instead it only says "contact details and a pipeline stage," which merely restates parameter names without adding format, default, or validation 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?

The description states a specific verb and resource ("Adds a sales lead") and mentions the two main content areas (contact details, pipeline stage), so the purpose is unambiguous. It does not distinguish itself from sibling creation tools such as create_contact or create_opportunity, leaving the agent to infer which entity type this creates.

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 create_lead versus create_contact or create_opportunity, and no prerequisites or follow-up steps are mentioned. 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.

create_opportunityCreate opportunityC
Destructive
Inspect

Adds a sales opportunity for a customer with stage, score, budget and expected sale date.

ParametersJSON Schema
NameRequiredDescriptionDefault
zipNo
cityNo
nameYes
scoreNo
stageNoreceived
stateNo
budgetNoExpected value in the account currency.
numberNoYour opportunity number. Left out: OPP- and the UTC date and time, as OPP-261021-1213.
address1No
customer_idYesA customer's contact_id (list_contacts type customer).
project_typeNocommercial
est_sales_dateNoExpected sale date, YYYY-MM-DD.

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare destructiveHint=true, openWorldHint=true and idempotentHint=false, so the safety profile is covered structurally. The description adds nothing behavioral: no mention that creates are non-idempotent (duplicate submissions create duplicate opportunities), no note on the destructive flag, no confirmation of what number/ID is generated.

Agents need to know what a tool does to the world before 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 action and resource, zero filler. It is efficient but arguably too thin for a 12-parameter creation 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 12-parameter mutation with no output schema and low schema coverage, the description omits what a successful call returns (opportunity ID), defaults behavior for stage/score/project_type, and any error conditions. It is not sufficient on its own.

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

Parameters3/5

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

Schema description coverage is only 33%, so the description should compensate but only names stage, score, budget and expected sale date; it ignores project_type, number, address fields and the customer_id contact_id nuance, which is documented only in the schema. It adds some field-level meaning but leaves half the parameters opaque.

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

Purpose4/5

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

Clear verb+resource: 'Adds a sales opportunity for a customer', with the main fields enumerated. It is distinguishable from creation siblings such as create_lead or create_project by resource name alone, though it never explicitly contrasts with 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 guidance on when to create an opportunity versus a lead, project, or estimate, and no prerequisites beyond the implied customer. An agent must infer the routing decision entirely from 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_projectCreate projectC
Destructive
Inspect

New project for a customer, with number, type, stage, address and dates.

ParametersJSON Schema
NameRequiredDescriptionDefault
zipNo
cityNo
nameYesProject name, e.g. Kitchen remodel - Oak St.
typeNoresidential
stateNo
numberNoProject number. Default: the next number when the account numbers projects itself.
statusNopending
streetNo
street2No
end_dateNo
start_dateNo
customer_idYesThe customer's contact_id from list_contacts.
descriptionNo

TDQS

C2.7/5.0
Behavior2/5

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

Annotations already declare write/destructive/open-world and non-idempotent behavior, but the description adds no consequences, permission requirements, idempotency caveats, or effects of creation. It lists fields rather than disclosing behavior, so it provides little 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 short front-loaded sentence with no filler. The terseness is efficient, though it borders on under-specification, so 4 rather than 5.

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

Completeness2/5

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

For a destructive create operation with 13 parameters and low schema documentation, the description leaves too much unspecified: required fields, enum/default behavior, and what creation returns are all absent. It is a high-level summary, not enough context for confident invocation.

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 only 23% schema description coverage across 13 parameters, the description would need to compensate, but it only groups 'number, type, stage, address and dates' and omits required name/customer_id semantics, defaults, enums, and the description field. It also calls the status field 'stage,' which could mislead.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 phrase 'New project for a customer' makes the create-project intent clear, and the listed fields scope it beyond a generic create sibling. It does not explicitly distinguish create from update_project, get_project, or list_projects, so it stops short of top marks.

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 sentence tells the agent when to call this instead of update_project or another create_* tool, nor are prerequisites or exclusions stated. The intended use is only implied by 'New project'.

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

create_punchlistCreate punchlistC
Destructive
Inspect

New, empty punchlist on a project.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesPunchlist name, e.g. Final walkthrough - kitchen.
project_idYesproject_id from list_projects.

TDQS

C2.6/5.0
Behavior2/5

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

Annotations already declare destructiveHint=true, idempotentHint=false, and openWorldHint=true, so the safety profile is covered. The description adds only the word "empty" (a new punchlist contains no items) — it says nothing about what happens on duplicate names, whether the caller needs project write access, or what is returned, so value beyond annotations is minimal.

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?

Four words with zero filler, and the key fact (empty) is front-loaded. However, it is an incomplete sentence fragment rather than a structured statement of action and effect, which makes it read as under-specified rather than deliberately 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?

For a two-parameter creation tool with full schema documentation and rich annotations, the description is barely sufficient. It omits what the call returns (e.g., the new punchlist's ID, which an agent would need for subsequent operations), the most notable gap 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 description coverage is 100%: name has an example and project_id is tied to list_projects with a numeric pattern. The description only hints at the project association ("on a project") and adds nothing the schema does not already say, so the baseline of 3 applies.

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

Purpose3/5

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

"New, empty punchlist on a project" conveys the creation of a punchlist scoped to a project, so the resource and effect are inferable, but it is a noun phrase with no explicit verb and no differentiation from siblings like get_punchlist or list_punchlists. An agent can guess the intent but must rely on the name to confirm 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?

There is no statement of when to use this tool versus list_punchlists or get_punchlist, no prerequisites (must the project already exist? are there permission requirements?), and no mention of follow-up steps. The agent gets no routing guidance beyond the tool name itself.

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
Destructive
Inspect

Creates a draft purchase order to a supplier with line items, optionally for a project.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemsYesLine items. The total is the sum of quantity times unit cost.
notesNo
subjectYes
vendor_idYesThe supplier's contact_id (list_contacts type vendor).
order_dateNoYYYY-MM-DD. Default: today.
project_idNoThe project the order is for.

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare write semantics (readOnlyHint=false, destructiveHint=true, idempotentHint=false, openWorldHint=true), so the safety profile is covered. The description's main added value is the word 'draft', implying the order is created in an unsent/unapproved state, but it says nothing about retry behavior, whether the total is computed server-side, or what is returned for follow-up.

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

Conciseness4/5

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

A single front-loaded sentence with no filler. It is efficient, though the brevity leaves room that could have been spent on the when-to-use signal without bloating.

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 with no output schema and strong annotations, the description covers the core shape but omits what happens on success (created PO id/status), the 50-item cap, and the draft-to-send lifecycle. Adequate but with clear gaps an agent would hit on the first call.

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

Parameters3/5

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

Schema coverage is 67% and the schema itself documents every parameter well, including the vendor_id→contact_id relationship and line-item semantics. The description restates the items/supplier/project shape but adds no formatting or validation insight beyond the schema, so baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource ('creates a draft purchase order') plus key scope details (supplier, line items, optional project). It is immediately clear what the tool produces. It doesn't differentiate itself from adjacent crates like create_bill or create_estimate, which is the only thing 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 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 create_bill, create_estimate, or create_sub_contract, and no stated prerequisites (e.g. that vendor_id must come from list_contacts). The word 'draft' implies the order isn't sent, but the agent must infer that and infer what the next step would be.

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

create_rfiCreate RFIC
Destructive
Inspect

Drafts a request for information on a project, with the question and a reply-by date.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYes
questionYesThe information requested.
plan_sheetNoPlan sheet number.
project_idYesThe project the question is about.
reference_areaNoArea or element it refers to.
response_needed_byNoYYYY-MM-DD.

TDQS

C2.9/5.0
Behavior2/5

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

Annotations declare destructiveHint=true, openWorldHint=true and idempotentHint=false, but the description says only 'drafts', which reads as a low-impact staging action and gives no hint that the RFI is created for real, may notify outside parties, or that repeat calls create duplicates. Nothing is said about what state the RFI lands in or what is returned. This understates the annotated behavior rather than clarifying it.

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

Conciseness4/5

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

A single well-formed sentence that front-loads the verb and resource with no filler. It is appropriately sized, though the brevity is bought at the cost of behavioral detail.

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?

A six-parameter mutation with no output schema and an open-world, destructive annotation profile needs more than one sentence: required vs optional fields, whether the reply-by date is mandatory, what identifier comes back, and whether recipients are notified are all 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 coverage is 83%, so the schema already documents project_id, question, plan_sheet, reference_area and the YYYY-MM-DD format for response_needed_by. The description only echoes 'question' and 'reply-by date' and adds no format, default, or constraint information 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 — drafting a request for information on a project — and names the two key content fields, which cleanly separates it from get_rfi and list_rfis. It stops short of any scope or sibling differentiation beyond that, so it is clear but not maximally sharp.

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 create an RFI versus a submittal, punchlist, or note, and no mention that this is the write counterpart to get_rfi/list_rfis. The agent must infer the workflow entirely.

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

create_service_ticketCreate service ticketB
Destructive
Inspect

Opens a service ticket for a customer, optionally scheduled for a date and time.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYes
project_idNoLinks the ticket to a project. The service address is then the project's.
customer_idYesA customer's contact_id (list_contacts type customer).
descriptionNoWhat the customer reported.
service_dateNoPlanned visit, YYYY-MM-DD. The ticket is then Scheduled.
service_timeNoPlanned time on the 24-hour clock, like 13:30.

TDQS

B3.1/5.0
Behavior3/5

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

Annotations already declare it is a non-read-only, non-idempotent, open-world write with destructiveHint=true, so the safety profile is covered. The description adds that the ticket is opened for a customer and scheduling is optional, but says nothing about side effects, duplicate creation on retry, or what happens when no service_date is supplied. It does not contradict the write annotations, though 'opens' sits uneasily 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?

A single front-loaded sentence with no filler. It is efficient, though arguably under-specified rather than genuinely concise.

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?

This is a six-parameter mutation with no output schema, and the description never says whether the new ticket (and its identifier) is returned, nor what happens if customer_id is invalid. Given the destructive/non-idempotent annotations, an agent needs more than one sentence to invoke this 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 83%, so the schema already explains project_id, customer_id, description, service_date, and service_time. The description only restates the optional date/time, 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.

Purpose4/5

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

States a specific verb and resource ('Opens a service ticket') plus the scope of the optional scheduling. An agent can tell it creates a service ticket rather than fetching or listing one, though it never names the creation-vs-update siblings (create_work_order, create_lead) 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 guidance on when to use this instead of create_work_order, create_lead, or create_project, and no preconditions (e.g. that customer_id must come from list_contacts). The word 'optionally' hints that scheduling is not required, but nothing tells the agent what conditions select this tool.

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

create_sub_contractCreate sub-contractB
Destructive
Inspect

Creates a draft sub-contract with a subcontractor on a project.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNoYYYY-MM-DD. Default: today.
subjectYes
project_idYesThe project the work is for.
contractor_idYesThe subcontractor's contact_id (type contractor).
agreement_numberYesYour agreement number, e.g. the project number and a sequence (BP-2001-07).

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already disclose readOnlyHint=false, destructiveHint=true, idempotentHint=false, and openWorldHint=true, carrying most of the safety profile. The description adds genuinely useful context with 'draft', signaling the record is not finalized and implying a follow-up finalization step. It does not state permission requirements, reversibility, side effects, or the response shape, which is a moderate gap for a destructive mutation.

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

Conciseness4/5

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

A single sentence with no wasted words, front-loading the core action and resource. It is compact and readable. It earns its place but offers no structural aids like a when-to-use 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?

With rich annotations and high schema coverage, the definition is adequate: an agent knows it creates a draft mutation and what parameters to supply. However, no output schema exists, and the description does not explain what a 'draft' means operationally or what the caller gets back, leaving a gap for a create 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 80%, so project_id, contractor_id, agreement_number, and date are already documented in the schema. The description does not elaborate on any parameter, such as the format of agreement_number or the draft's default status, so the schema does the heavy lifting. 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 pairs a specific verb (creates) with a specific resource (draft sub-contract) and adds scope (with a subcontractor on a project). The 'draft' qualifier is a meaningful distinction. It does not explicitly contrast itself with get_sub_contract, list_sub_contracts, or update tools, so sibling differentiation is implicit rather than stated.

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

Usage 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 (e.g. does the contractor need to exist as a contact first?), and no mention of alternatives like get_sub_contract or list_sub_contracts. The usage is only inferable from the name and verb.

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

create_todoCreate to-doA
Destructive
Inspect

New to-do, optionally on a project, with due date, priority and assignees. Waits for the owner's approval.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesWhat has to be done.
due_dateNo
due_timeNoe.g. 09:00 or 2:30 PM.
priorityNomedium
project_idNoProject from list_projects.
descriptionNo
assignee_idsNocontact_id values from list_contacts of the employees or contacts who should do it.

TDQS

A3.5/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 openWorldHint=true, so the safety profile is covered. The description adds genuinely non-obvious behavior — "Waits for the owner's approval" — telling the agent the to-do is created but not live until approved, which no structured field conveys. It stops short of describing any auth or identity requirement.

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

Conciseness5/5

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

Two short sentences, no filler; the creation scope comes first and the non-obvious approval behavior is surfaced second. Every clause 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?

With 7 parameters and no output schema, the description is a reasonable summary but leaves the agent guessing about the field-level distinctions (name vs description) and about what identifier the created to-do returns. For a mutation tool that will presumably be chained into update_todo, that is a meaningful hole.

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

Parameters3/5

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

Schema coverage is 57%, with name, project_id, and assignee_ids well documented, so the description appropriately sits in the baseline range. However, it adds nothing to disambiguate the undescribed `description` parameter from `name`, nor to explain the priority enum/default or due_time format — gaps that persist at this coverage level.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid 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 ("New to-do") and enumerates the main optional facets (project, due date, priority, assignees), so the agent knows exactly what will be created. It does not differentiate itself from the neighboring update_todo or list_todos beyond the verb, leaving that separation 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 explicit guidance on when to choose this tool over siblings such as update_todo, or on prerequisites (e.g. needing a project_id from list_projects, which only appears in the schema). "Optionally on a project" hints at scope but is not a usage rule.

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 orderB
Destructive
Inspect

Creates an Open work order on a project with subject, description and dates.

ParametersJSON Schema
NameRequiredDescriptionDefault
subjectYes
end_dateNoYYYY-MM-DD, not before start_date. Default: today.
project_idYesThe project the work is on.
start_dateNoYYYY-MM-DD. Default: today.
descriptionNoWhat has to be done.

TDQS

B3.1/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, openWorldHint=true, idempotentHint=false and readOnlyHint=false, so the safety profile is covered without description help. The description adds one real behavioral fact beyond that: the record is created in 'Open' status. It says nothing about side effects (notifications to assignees), whether the call is retry-safe, or that work orders apparently cannot be deleted by any sibling 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?

One front-loaded sentence with no filler or repetition. It is arguably too terse rather than too long — nothing is wasted, but little is added.

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-idempotent creation tool with no output schema, the description never says what comes back — presumably the new work order or its id, which the agent needs to chain into update_work_order_status or get_work_order. No auth, rate-limit, or failure-mode context is provided either, so the definition under-serves a tool of this 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 coverage is 80% and the schema itself documents the date formats, defaults to today, the end_date >= start_date constraint, and the meaning of project_id and description. The description only restates the field list, adding no syntax, constraint, or default information the schema does not already 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?

States a specific verb (creates) and resource (work order) plus the initial status ('Open') and the fields it carries, so the agent knows exactly what is produced. It does not compare itself to nearby creation siblings such as create_change_order, create_rfi or create_punchlist, so the resource differentiation 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 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 create a work order versus a service ticket, punchlist item, or change order, and no mention of prerequisites such as the project needing to exist or any permission requirement. The only usage-adjacent information is the implicit 'Open' status default.

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 orderB
Destructive
Inspect

Deletes a change order or change order request for good.

ParametersJSON Schema
NameRequiredDescriptionDefault
change_order_idYesFrom list_change_orders.

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, readOnlyHint=false, and idempotentHint=false, so the safety profile is covered. The description usefully reinforces permanence with "for good," but does not explain cascading effects, permissions, 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?

A single, front-loaded sentence with no wasted words. "For good" adds meaningful permanence context 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 one-parameter destructive tool with rich annotations and a fully described schema, the description is nearly complete. It could say more about cascade or authorization, but "for good" covers the key irreversibility signal.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales 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 coming from list_change_orders. The description adds no parameter syntax or constraint details beyond the schema, so baseline 3 is appropriate.

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

Purpose4/5

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

States a specific verb (deletes) and resource (change order or change order request), making the operation clear. It does not explicitly differentiate itself from sibling tools like update_change_order or send_change_order, 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?

The description says the deletion is permanent ("for good") but gives no guidance on when to choose this tool versus list_change_orders, get_change_order, update_change_order, or send_change_order. Usage is implied by the operation name rather than explained.

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

delete_estimateDelete estimateB
Destructive
Inspect

Deletes an estimate for good.

ParametersJSON Schema
NameRequiredDescriptionDefault
estimate_idYesFrom list_estimates.

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=false, so permanence is partly specified. The description adds 'for good', reinforcing irreversibility, but says nothing about what happens to line items, whether permissions or confirmations are required, or whether a deleted estimate can be recovered.

Agents need to know what a tool does to the world before 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 the key qualifier front-loaded. It is efficient, though its brevity leaves little room for operational context.

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, annotations carry the safety profile and the schema documents the ID source. Still missing is any note on side effects (linked items, totals) or failure conditions, which an agent deleting an estimate would want to know.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 estimate_id parameter is documented with 'From list_estimates.' The description contributes no additional 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?

States a specific verb (deletes) and resource (an estimate), and the phrase 'for good' clarifies the operation is permanent rather than archival. The name and title already distinguish it from siblings, but the description itself does not mention alternatives such as delete_change_order or remove_estimate_items.

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 delete versus update_estimate or remove_estimate_items, and no stated preconditions. The reader 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.

delete_invoiceDelete invoiceA
Destructive
Inspect

Deletes an invoice that has no payments, for good.

ParametersJSON Schema
NameRequiredDescriptionDefault
invoice_idYesFrom list_invoices.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already flag destructiveHint=true and idempotentHint=false, so the safety profile is covered; the description adds the non-obvious constraint that the invoice must have no payments and reinforces permanence with 'for good'. It stops short of describing failure behavior or whether dependent records block 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?

A single short sentence that front-loads the action and tacks on the two constraints that matter. Nothing is wasted 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 one-parameter destructive tool with full annotation and schema coverage, the description supplies the essential precondition and irreversibility. The main remaining gap is what happens when the precondition fails, but an agent has enough to call it correctly.

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

Parameters3/5

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

Only one parameter, and the schema already documents it fully (100% coverage) including the 'From list_invoices' provenance hint. The description adds nothing about the identifier format or constraints, 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 ('Deletes an invoice') and adds a meaningful precondition ('that has no payments'). It doesn't distinguish itself from sibling delete tools like delete_change_order or delete_estimate, 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 'no payments' clause implies a validity condition, but it never says what to do when the invoice does have payments, nor does it point to an alternative (e.g., voiding or updating via update_invoice). Usage is inferable but not explicitly routed.

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

get_billGet billA
Read-onlyIdempotent
Inspect

One vendor bill with its line items, dates, total, balance due and status.

ParametersJSON Schema
NameRequiredDescriptionDefault
bill_idYesbill_id from list_bills.

TDQS

A3.5/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so the description doesn't need to re-state safety. It instead adds value by disclosing what comes back — line items, dates, total, balance due, status — which matters because no output schema exists. It doesn't cover failure behavior (e.g. unknown bill_id).

Agents need to know what a tool does to the world before 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 identifying noun leads. It reads as a fragment rather than a statement of action, which slightly blunts front-loading but wastes nothing.

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

Completeness4/5

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

For a simple single-record read with full annotation coverage, the description plus schema covers what an agent needs to call it. Only the not-found/error case and the relationship to get_invoice are left unstated.

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

Parameters3/5

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

Schema coverage is 100% and the schema already says bill_id comes from list_bills, so the single parameter is fully documented. The description adds no format or validation detail beyond that, making a 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?

Identifies the resource precisely (a single vendor bill, contrasted with the sibling list_bills) and enumerates the payload it returns. No explicit verb, but 'One vendor bill' plus the required bill_id makes retrieval 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?

Gives no when-to-use guidance and never names the relevant siblings (list_bills, get_invoice, get_purchase_order) as alternatives. The only routing hint, 'bill_id from list_bills', lives in the schema rather than the description.

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 orderB
Read-onlyIdempotent
Inspect

One change order or request with description, status, total and line items.

ParametersJSON Schema
NameRequiredDescriptionDefault
change_order_idYesFrom list_change_orders.

TDQS

B3/5.0
Behavior3/5

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

Annotations already declare readOnly, idempotent, non-destructive and closed-world, so safety is covered. The description adds return-content context (status, total, line items), which matters because there is no output schema, but says nothing about not-found/error behavior 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?

A single front-loaded clause with no filler that puts the returned fields first. Slight loss for being a fragment that omits the action verb entirely.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn 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 rich annotations and a fully documented single parameter, this covers the essentials plus a return-field summary in lieu of an output schema. Only error/not-found handling and the list-vs-get routing are left implicit.

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

Parameters3/5

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

Schema coverage is 100% and the lone parameter is documented as "From list_change_orders," so the schema does the work. The description adds nothing about the ID format or provenance, which is the expected baseline for full coverage.

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 names the resource and its returned fields ("One change order or request with description, status, total and line items"), and the singular framing implicitly separates it from the list_change_orders sibling. However it never states the verb explicitly or mentions lookup by identifier, so the retrieval action must be inferred from the tool 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 statement of when to use this versus list_change_orders (which is referenced only indirectly via the ID param) or get_job_costing. No prerequisites, no mention of what to do when 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_clock_statusGet clock statusA
Read-onlyIdempotent
Inspect

Who is clocked in right now, whether you are, and this and last week's crew hours.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered. The description adds useful temporal scope (real-time plus current and prior week) and a self-scoped component, but says nothing about response shape, aggregation basis, or timezone boundaries for 'this week'.

Agents need to know what a tool does to the world before 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 most time-sensitive fact ('who is clocked in right now'), with no redundant restatement of 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?

With no parameters and no output schema, the description carries the burden of indicating what comes back, and it does list three distinct result components. It stops short of describing record structure or whether inactive/no-clock users appear, which is a minor remaining gap.

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

Parameters4/5

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

The tool takes zero parameters, so there is nothing for the description to disambiguate; baseline 4 applies. The description's implicit promise of a fixed, unfiltered result is consistent with the empty 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 resource and scope: real-time clocked-in roster, the caller's own status, and this/last week's crew hours. It's concrete rather than tautological, though it doesn't name a contrasting sibling such as list_time_cards or list_project_crew_hours, which cover overlapping crew-hours data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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 temporal phrases 'right now' and 'this and last week' implicitly frame when to reach for this over a historical query, but no alternative is named and no 'use X instead when...' routing is given. The agent must infer usage 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.

get_contactGet contactA
Read-onlyIdempotent
Inspect

One Directory record in full: contact details, status, services, terms and additional contacts.

ParametersJSON Schema
NameRequiredDescriptionDefault
contact_idYescontact_id from list_contacts or list_leads.

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 (read-only, idempotent, non-destructive, closed-world), so the description's real contribution is disclosing what the record contains; with no output schema, the list of returned facets is genuinely useful behavioral context. It stops short of noting error behavior (e.g., what happens for an unknown contact_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?

A single compact sentence with no filler; the record scope is front-loaded and every clause names a distinct returned facet.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn 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, annotated, single-parameter read tool, the definition is nearly complete: safety is covered by annotations, the parameter by the schema, and return content by the description in lieu of an output schema. Minor gaps are error handling and pagination/size 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?

There is a single parameter with 100% schema description coverage ('contact_id from list_contacts or list_leads'), so the schema already does the heavy lifting. The description adds nothing about the parameter, 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 states a specific verb and resource ('One Directory record in full') and enumerates the returned facets (contact details, status, services, terms, additional contacts), which clearly separates it from list_contacts. However it never names a sibling explicitly to sharpen the get-vs-list distinction.

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

Usage Guidelines3/5

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

Usage is only implied: 'one record in full' hints at fetching a single contact's complete details, but there is no explicit when-to-use or when-not-to-use guidance and no mention of the obvious alternative list_contacts.

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

get_daily_logGet daily logA
Read-onlyIdempotent
Inspect

One daily log: work notes, people and visitors, materials, equipment, weather and delays.

ParametersJSON Schema
NameRequiredDescriptionDefault
daily_log_idYesdaily_log_id from list_daily_logs.

TDQS

A3.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so safety is covered. The description adds genuine value by previewing the returned data sections, which matters because there is no output schema. It does not mention error behavior for a missing/invalid ID, so it stops short of a 5.

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

Conciseness4/5

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

One tightly packed sentence with the resource identified up front and zero filler. It is grammatically a fragment with no verb, which slightly weakens the front-loading of action.

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

Completeness4/5

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

For a single-parameter read tool with no output schema, the description's enumeration of returned sections gives the agent a usable expectation of the payload, and annotations cover the safety profile. Only the behavior on an unknown ID is unaddressed.

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

Parameters3/5

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

Schema coverage is 100% and the single parameter is documented with its source ('daily_log_id from list_daily_logs.'), so the baseline of 3 applies. The description adds no additional meaning about the identifier 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?

The description names the specific resource ('One daily log') and enumerates its contents (work notes, people/visitors, materials, equipment, weather, delays), which clearly separates it from the sibling list_daily_logs. The retrieval verb is implied by the name rather than stated, 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 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 in the description. The connection to list_daily_logs exists only in the schema field text ('daily_log_id from list_daily_logs.'), not in the description itself.

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

get_estimateGet estimateA
Read-onlyIdempotent
Inspect

One estimate with customer, dates, terms, totals and every line item.

ParametersJSON Schema
NameRequiredDescriptionDefault
estimate_idYesFrom list_estimates.

TDQS

A3.5/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), so the description's added value is the disclosure that the response is a complete single-estimate payload including all line items — useful because there is no output schema. It stops short of stating behavior for missing or invalid IDs, but that is a minor gap against strong annotation coverage.

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

Conciseness4/5

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

One short sentence with zero filler, and the payload enumeration is front-loaded. It is a noun phrase rather than a full sentence, which is terse but not ambiguous.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence 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 summarizes the return contents, and the single required param is fully documented in-schema with annotations covering safety. Missing only edge-case behavior (nonexistent ID, permissions), which is modest for a simple read-by-ID tool.

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

Parameters3/5

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

Schema description coverage is 100% and the single parameter is documented as coming from list_estimates, so the schema carries the weight. The description adds no further semantics about the identifier format or scope, which is acceptable at 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 pairs an implicit retrieval verb with a specific resource and enumerates the payload ('customer, dates, terms, totals and every line item'), so an agent knows exactly what comes back. It does not explicitly contrast with list_estimates or update_estimate, relying on the get_/list_ naming convention to make 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 statement of when to call this versus list_estimates, update_estimate, or send_estimate. The only routing hint lives in the schema ('From list_estimates.'), which tells the agent where the ID comes from but not when this tool is the right choice.

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

get_expenseGet expenseC
Read-onlyIdempotent
Inspect

One expense with amount, date, vendor, project, cost type, cost code and reason.

ParametersJSON Schema
NameRequiredDescriptionDefault
expense_idYesexpense_id from list_expenses.

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and a closed-world scope, so the safety profile is covered. The description does add value by enumerating the returned fields, which matters because there is no output schema, but it says nothing about what happens for an unknown expense_id or whether the lookup is scoped to a company/project.

Agents need to know what a tool does to the world before 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 returned-field list is front-loaded. It is efficient, though the missing verb means the brevity comes partly at the cost of clarity.

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-entity read tool with full annotation and schema coverage, the essentials are present and the field list substitutes for a missing output schema. It still omits any statement of error behavior or scope limits that would make the definition 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?

There is a single parameter with 100% schema description coverage, so the schema already explains that expense_id comes from list_expenses. The description adds nothing about the identifier's format or provenance, leaving the baseline 3 appropriate.

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 phrase 'One expense with amount, date, vendor...' implies fetching a single expense record, but it never states a verb and reads as a field inventory rather than a purpose statement. It loosely distinguishes itself from list_expenses by saying 'one', but an agent must infer that this is the single-record counterpart.

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_expenses or the other get_* siblings. The only routing hint lives in the schema ('expense_id from list_expenses'), not in the description, so the description itself gives no alternatives or preconditions.

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

get_inspectionGet inspectionC
Read-onlyIdempotent
Inspect

One inspection with type, project, date, result, agency, inspector and notes.

ParametersJSON Schema
NameRequiredDescriptionDefault
inspection_idYesinspection_id from list_inspections.

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so safety behavior is fully covered structurally. The description adds value only by enumerating the returned fields (type, project, date, result, agency, inspector, notes), which partially compensates for the absence of an output schema, but nothing is said about missing-record behavior or response shape.

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

Conciseness4/5

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

A single short sentence with no filler, and the key qualifier ('One inspection') is front-loaded. It is terse to the point of being a fragment, 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 trivial single-record read with full annotation coverage and a 100%-documented parameter, the listing of returned fields is the main useful addition since there is no output schema. However, an agent still cannot tell from the description how the call behaves for a non-existent ID or whether related records are expanded.

Complex tools with many parameters or behaviors need more documentation. Simple tools 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, and the schema already explains where to obtain inspection_id. The description adds no additional meaning about the identifier format or constraints, 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 phrase "One inspection" implies retrieval of a single record, which distinguishes it from list_inspections, but there is no verb and no explicit statement that this fetches an inspection by ID. The remaining text is a field inventory rather than a statement of purpose.

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_inspections or any other sibling, and no prerequisites or error conditions are mentioned. The only routing hint ('inspection_id from list_inspections') lives in the schema, not the description.

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

get_invoiceGet invoiceA
Read-onlyIdempotent
Inspect

One invoice with customer, dates, terms, line items, payments and balance due.

ParametersJSON Schema
NameRequiredDescriptionDefault
invoice_idYesFrom list_invoices.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare read-only, idempotent, non-destructive, closed-world behavior. The description adds useful context about what the response includes: customer, dates, terms, line items, payments, and balance due.

Agents need to know what a tool does to the world before 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 names the resource and its key contents without filler. Every phrase contributes to the agent's understanding of what is returned.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence 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, listing the returned components gives the agent a useful picture of the response. Annotations cover the safety profile and the schema covers the sole parameter, though error behavior is not 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?

There is one parameter with 100% schema description coverage, already documented as 'From list_invoices.' The description adds no additional meaning about the invoice_id format or expected value 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 identifies the resource as a single invoice and enumerates the returned components, so the agent can distinguish it from list_invoices. It lacks an explicit verb such as retrieve/get, but the purpose is still 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 singular 'One invoice' implies retrieval by ID and the schema notes the ID comes from list_invoices, so the usage is inferable. However, the description itself gives no explicit when-to-use guidance, exclusions, or alternative routing.

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

get_job_costingGet job costingA
Read-onlyIdempotent
Inspect

Estimated and actual cost per cost code for one project, with the difference and totals.

ParametersJSON Schema
NameRequiredDescriptionDefault
labor_rateNoRate that prices time card hours as labor cost.burden_rate
project_idYesproject_id from list_projects.
budget_fromNoEstimated cost from the Schedule of Values or the approved estimates. Default: the project's own setting.

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), so the description doesn't need to restate that. It does add real value by disclosing what the response contains — estimate, actual, variance, and totals — which matters given there is no output schema. It does not mention how labor_rate or budget_from reshape the numbers, which is the main remaining gap.

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

Conciseness5/5

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

A single tight sentence with zero filler, front-loading the resource (estimated and actual cost per cost code) and the scope (one project) before the returned 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?

Because there is no output schema, describing the returned fields is essential, and the description does so. The remaining shortfall is a lack of routing guidance against the many sibling read tools that an agent could plausibly pick for cost data.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales 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 documented enums for labor_rate and budget_from, so the schema carries the parameter burden. The description adds no syntax, default, or format meaning beyond what the schema already provides — 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: returns estimated and actual cost per cost code for one project, including variance and totals. It is clearly distinguishable from data-source siblings such as list_cost_codes or list_cost_items, 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 Guidelines2/5

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

There is no statement of when this tool should be preferred over list_cost_items, list_cost_codes, or get_estimate, nor any prerequisites. The only implicit scoping is 'for one project', derived from the required project_id 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_opportunityGet opportunityA
Read-onlyIdempotent
Inspect

One opportunity in full: customer contact, stage, score, budget, notes and last activity.

ParametersJSON Schema
NameRequiredDescriptionDefault
opportunity_idYesopportunity_id from list_opportunities.

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 safety profile is fully covered. The description's only added behavior is the payload shape (contact, stage, score, budget, notes, last activity), which is useful but modest; nothing is said about error behavior for 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?

One short sentence, front-loaded with the resource identity and immediately followed by the returned fields. Every clause earns its place with no filler.

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

Completeness4/5

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

With no output schema, the field enumeration is exactly what the agent needs to decide whether this call supplies the data it wants. Combined with annotations covering safety and the schema covering the ID, the definition is essentially complete; only failure/not-found behavior is unstated.

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

Parameters3/5

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

There is a single required parameter with 100% schema description coverage, and the schema already names its source (opportunity_id from list_opportunities). The description adds no format, type, or sourcing 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?

Names the resource precisely ('one opportunity in full') and enumerates the fields returned, so an agent knows it retrieves a single record rather than a collection. The verb is only implicit ('Get' via title), and it does not name list_opportunities as the counterpart, so it stops short of full sibling differentiation.

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

Usage Guidelines3/5

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

Usage is implied by 'one opportunity' versus the list-oriented siblings, and the schema's parameter note ('opportunity_id from list_opportunities') hints at a list-then-fetch flow. There is no explicit statement of when to call this instead of list_opportunities or another entity getter.

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

get_projectGet projectC
Read-onlyIdempotent
Inspect

One project: customer, address, stage, dates, contract amounts, costs, billing and retainage.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idYesproject_id from list_projects.

TDQS

C2.7/5.0
Behavior2/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 only a field inventory and says nothing about missing-record behavior, permissions, or completeness of the returned project — for a fetch tool with no output schema, more was warranted.

Agents need to know what a tool does to the world before 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 core scoping term ("One project") front-loaded. The fragment lacks a verb, which costs a little clarity 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 one-parameter read tool with rich annotations this is nearly sufficient, and the field list partly substitutes for the absent output schema. It still omits what the agent should expect on an invalid ID or whether the response covers all listed sections.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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 parameter already documents its source ("project_id from list_projects") plus a numeric pattern. The description contributes nothing 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.

Purpose3/5

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

"One project" signals single-record retrieval and implicitly contrasts with list_projects, and the field list hints at scope. But there is no verb ("get"/"return") and no explicit statement that it fetches one project by ID, so the purpose must be inferred from the name and the noun phrase.

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_projects or get_job_costing, no prerequisites, and no mention of what happens with an invalid or unknown project_id. 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.

get_punchlistGet punchlistB
Read-onlyIdempotent
Inspect

One punchlist: project, address, customer and how many items are open and completed.

ParametersJSON Schema
NameRequiredDescriptionDefault
punchlist_idYespunchlist_id from list_punchlists.

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, non-destructive and closed-world behavior, so the safety profile is covered. The description adds useful context by listing the returned fields, but does not disclose error behavior, permissions, or what happens if the ID is invalid.

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

Conciseness4/5

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

The description is a single, front-loaded sentence that efficiently lists the key returned fields. It avoids fluff but is slightly fragmentary, relying on the name and title for the verb.

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

Completeness4/5

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

For a simple read-only tool with one fully documented parameter and no output schema, the description provides adequate context by specifying the returned fields. It does not cover error cases or output format, but those are less critical given the tool's simplicity and 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 parameter punchlist_id is fully documented in the schema ('punchlist_id from list_punchlists'). The description adds no additional meaning about the parameter, which is acceptable given the schema's completeness.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 it returns 'one punchlist' and enumerates the fields (project, address, customer, item counts), making the resource and scope clear. However, it does not explicitly contrast with the sibling list_punchlists, so an agent must infer the single-record use case 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 guidance is given about when to use this tool versus alternatives like list_punchlists or get_project. The description only describes output fields, leaving the agent to infer that this is the tool for fetching a single punchlist by ID.

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 orderB
Read-onlyIdempotent
Inspect

One purchase order with supplier, dates, status and its line items.

ParametersJSON Schema
NameRequiredDescriptionDefault
purchase_order_idYespurchase_order_id from list_purchase_orders.

TDQS

B3.4/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 description is free to add return-shape context: it discloses that line items are expanded inline along with supplier, dates and status. It doesn't state what happens for a missing ID, but the expansion behavior is genuinely useful information not available elsewhere.

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

Conciseness4/5

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

One compact sentence with no filler, front-loading the resource ('One purchase order') before the contents. It is arguably too terse to be maximally useful, 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 simple single-record read with full annotation coverage, the essential facts are present. With no output schema, however, the description only gestures at the response ('dates') and says nothing about not-found behavior or the shape of the returned line 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?

There is a single required parameter with 100% schema description coverage, including the instruction to source it from list_purchase_orders. The description adds nothing about the ID's type or origin, 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 sentence names a specific resource ('One purchase order') and enumerates what it includes (supplier, dates, status, line items), which distinguishes it from the sibling list_purchase_orders by scope. There is no explicit verb, but 'One purchase order ... and its line items' clearly implies a single-record retrieval.

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 never names list_purchase_orders as the alternative for browsing or finding an ID. The only routing hint ('purchase_order_id from list_purchase_orders') lives in the schema, not the description.

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

get_rfiGet RFIB
Read-onlyIdempotent
Inspect

One RFI with its question, dates, answer and status.

ParametersJSON Schema
NameRequiredDescriptionDefault
rfi_idYesrfi_id from list_rfis.

TDQS

B3.1/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 fully covered structurally. The description's own contribution is naming the fields returned (question, dates, answer, status), which is useful context given there is no output schema, but it says nothing about not-found behavior or error cases.

Agents need to know what a tool does to the world before 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 fragment with zero filler and the distinguishing detail (what is returned) front-loaded. It is efficient, though the terseness crosses into under-specification rather than tight precision.

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 trivial one-parameter read tool with full annotation coverage and no output schema; the description names the salient returned fields, which is the main thing an agent needs to decide whether to call it. Nothing essential is missing for correct invocation.

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

Parameters3/5

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

Schema coverage is 100% with a single documented parameter, and the schema already explains that rfi_id comes from list_rfis. The description adds no constraint, format, or validity detail beyond that, so this is the baseline case where the schema does all the work.

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 fragment 'One RFI with its question, dates, answer and status' does identify the resource and implies single-record retrieval (contrasting with the sibling list_rfis), but it supplies no verb and never explicitly says this is a fetch-by-id operation. An agent can infer the intent but must do the work 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?

There is no statement of when to use this versus list_rfis, create_rfi, or any other sibling. The only routing hint ('rfi_id from list_rfis') lives in the schema property description, not the tool description, so the description itself provides no usage guidance.

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

get_service_ticketGet service ticketB
Read-onlyIdempotent
Inspect

One service ticket with customer, service address, schedule, technicians and priority.

ParametersJSON Schema
NameRequiredDescriptionDefault
service_ticket_idYesservice_ticket_id from list_service_tickets.

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 without prose. The description's contribution is disclosing what data comes back (customer, address, schedule, technicians, priority), which is genuinely useful since no output schema exists, but it says nothing about missing-record behavior or data freshness.

Agents need to know what a tool does to the world before 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 resource leads the sentence. It sits close to under-specification rather than over-verbosity, but nothing in it 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 simple single-record getter with full schema coverage and complete annotations, the description is adequate but thin: with no output schema, the field list carries the entire burden of describing the return shape, and it omits any mention of not-found or permission behavior.

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

Parameters3/5

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

There is a single parameter with 100% schema description coverage, and that schema description already explains provenance ('from list_service_tickets'). The description adds no further meaning about the ID format or validity, so the baseline of 3 for a fully documented schema 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 conveys that this returns a single service ticket along with its associated entities (customer, service address, schedule, technicians, priority), which is specific enough to distinguish it from the plural list_service_tickets and the status-mutating update_service_ticket_status. However, it is a noun phrase rather than a verb+resource statement, so the retrieval action itself is only implied.

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

Usage 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, and no explicit alternative. The only routing hint is in the schema ('service_ticket_id from list_service_tickets'), which tells an agent where the ID comes from but is structured-field content rather than description text.

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

get_sub_contractGet sub-contractC
Read-onlyIdempotent
Inspect

One sub-contract with subcontractor, amounts, retainage, scope of work and items.

ParametersJSON Schema
NameRequiredDescriptionDefault
sub_contract_idYessub_contract_id from list_sub_contracts.

TDQS

C2.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 safety is covered. The description adds value by revealing the shape of the return payload (subcontractor, amounts, retainage, scope, items) in the absence of an output schema, though it says nothing about error behavior when the id is not found.

Agents need to know what a tool does to the world before 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 resource and lists of return fields without filler. It is efficient, though the missing verb makes it read as a fragment rather than a statement of 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 simple single-record read with full annotation coverage and one well-documented parameter, the description is adequate. The main residual gap is that it only gestures at the response contents and says nothing about not-found behavior, which matters 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?

There is one parameter with 100% schema description coverage, and the schema already explains where the id comes from. The description adds nothing about the parameter, which is the expected baseline when the schema carries the burden.

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 names the resource (a sub-contract) and enumerates what it contains (subcontractor, amounts, retainage, scope of work, items), which distinguishes it from list_sub_contracts. However it is a noun phrase with no verb ('One sub-contract with...'), so the retrieval action is only 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 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_sub_contracts or the create/update siblings. The only routing hint ('sub_contract_id from list_sub_contracts') lives in the schema, not the description, so the description itself offers no usage context or prerequisites.

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

get_submittalGet submittalB
Read-onlyIdempotent
Inspect

One submittal with plan sheet, specification section, status, dates and its items.

ParametersJSON Schema
NameRequiredDescriptionDefault
submittal_idYessubmittal_id from list_submittals.

TDQS

B3.2/5.0
Behavior3/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 value by disclosing what the response contains (plan sheet, spec section, status, dates, items), but says nothing about behavior on a nonexistent or inaccessible ID.

Agents need to know what a tool does to the world before 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 zero filler, and the returned-content list is front-loaded. It reads as a noun phrase rather than a sentence, 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 simple single-record read with rich annotations, the essentials are nearly covered: the safety profile comes from annotations and the payload contents from the description. However, with no output schema, the description does not clarify the return structure (e.g. how items are nested) or failure behavior, leaving minor but real 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?

With a single parameter at 100% schema coverage, the schema fully documents submittal_id and even points at list_submittals as its source. The description adds no additional meaning 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?

The description names a specific resource (a single submittal) and enumerates its contents (plan sheet, specification section, status, dates, items), which makes the tool's job clear. It lacks an explicit verb and does not differentiate itself from the adjacent list_submittals 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 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_submittals, and no mention of prerequisites such as needing a valid submittal_id. The only routing clue lives in the schema ('from list_submittals'), not the description.

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

get_time_cardGet time cardB
Read-onlyIdempotent
Inspect

One time card or crew sheet with hours per employee and cost code.

ParametersJSON Schema
NameRequiredDescriptionDefault
timecard_idYestimecard_id from list_time_cards.

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 safety behavior is covered structurally. The description adds that the result aggregates hours per employee and cost code, which is useful behavioral context, but says nothing about missing-record behavior, pagination, 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.

Conciseness4/5

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

A single front-loaded fragment with zero filler, and the key noun (one time card) leads. It is slightly clipped to the point of reading as a label rather than a 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?

For a one-parameter, read-only getter with full schema coverage and no output schema, describing the returned contents is the main remaining need, and the description does that. Missing are failure modes and a pointer to list_time_cards for discovering IDs.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales 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 its source ('timecard_id from list_time_cards'). 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?

The description names the specific resource (a single time card / crew sheet) and its contents (hours per employee, cost code), which distinguishes it from the sibling list_time_cards by being singular. It never uses an explicit verb, but 'one time card' plus the get_ name makes retrieval 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 appears in the description. The only workflow hint — that timecard_id comes from list_time_cards — lives in the schema, not the description, and there is no statement about alternatives or prerequisites.

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

get_todoGet to-doB
Read-onlyIdempotent
Inspect

One to-do: description, project, priority, status, due date, assignees and checklist.

ParametersJSON Schema
NameRequiredDescriptionDefault
todo_idYestodo_id from list_todos.

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 covered. The description adds a useful list of returned fields, but does not describe error behavior, missing-record handling, or other behavioral context 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?

The description is a single efficient fragment that front-loads the resource and returned fields. It is appropriately sized for a simple get tool, though the fragmentary wording is slightly less structured than a full 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?

For a low-complexity read tool with full schema coverage and rich annotations, the description is largely complete: it signals single-record retrieval and lists the expected fields in the absence of an output schema. It could be improved with explicit when-to-use guidance or missing-record behavior, but the core definitional content 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%, and the sole parameter todo_id is documented with 'todo_id from list_todos.' The description does not mention the parameter at all, so it adds no meaning beyond the schema. Baseline 3 is appropriate given the high schema 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?

The description identifies the resource as a single to-do and enumerates the fields it contains (description, project, priority, status, due date, assignees, checklist), which is clear enough to distinguish it from list_todos. It lacks an explicit verb and does not name sibling alternatives, but the scope 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?

The description gives no explicit guidance on when to use this tool versus list_todos or other get_* tools. The phrase 'One to-do' implies retrieval by ID, but no alternatives, 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.

get_work_orderGet work orderB
Read-onlyIdempotent
Inspect

One work order with project, customer, status, dates, location, notes and items.

ParametersJSON Schema
NameRequiredDescriptionDefault
work_order_idYeswork_order_id from list_work_orders.

TDQS

B3/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 profile, so the safety story is fully covered elsewhere. The description's one contribution is disclosing that the response aggregates related entities (project, customer, items), which is useful shape information not present in the schema.

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

Conciseness4/5

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

A single tight sentence with no filler. The weakness is structural rather than length: it leads with a noun fragment instead of an action, so the agent has to reconstruct the verb from 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 read-only getter with no output schema and fully documented params, the description carries the return-value burden and discharges it by naming the fields returned. Missing only the explicit link to list_work_orders and any note on not-found 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?

With a single parameter at 100% schema description coverage, the schema already explains that work_order_id comes from list_work_orders. The description adds nothing about the identifier, which is acceptable given full coverage but earns no bonus.

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 sentence identifies the resource ('One work order') and enumerates the data it bundles (project, customer, status, dates, location, notes, items), which distinguishes it from a bare list. But it is a noun phrase with no verb and never explicitly contrasts itself with list_work_orders, so an agent must infer that this is the single-record fetch.

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 an alternative, and no stated prerequisite. The only routing hint ('work_order_id from list_work_orders') lives in the input schema, not the description, so the description itself contributes nothing here.

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

list_billsList billsC
Read-onlyIdempotent
Inspect

Vendor bills with vendor, project, dates, total, balance due and status.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
cursorNonext_cursor from the previous call.
searchNoWords to look for.
project_idNoOnly this project's records.

TDQS

C2.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint, so safety behavior is covered. The description adds useful context about which bill fields are returned, but it does not disclose ordering, pagination behavior, or rate limits.

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

Conciseness3/5

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

The description is very concise, but it is a sentence fragment and is under-specified for a list tool with filtering and pagination parameters. It front-loads returned fields, but lacks an actionable verb or usage 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?

Given no output schema, the field list provides useful information about returned data. However, the description omits filtering, pagination, and sibling-tool context, leaving the definition only minimally complete for a list operation with four optional parameters.

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

Parameters3/5

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

Schema description coverage is 75%, with cursor, search, and project_id documented in the schema; only limit lacks a description. The tool description adds no parameter meaning beyond the schema, but because the schema already covers most parameters, this is near the baseline acceptable level.

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 identifies the resource (vendor bills) and enumerates returned fields, but it is a noun phrase rather than a clear action statement. It does not explicitly distinguish listing bills from getting a single bill or creating a bill, so purpose is inferable mainly from the tool name and title.

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 siblings such as get_bill, list_invoices, or create_bill. It also does not explain how or when to use search, project_id, or pagination.

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 ordersB
Read-onlyIdempotent
Inspect

Change orders and change order requests, newest first, with status, project and total.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNorequest = change order requests (COR) not yet turned into a change order.all
limitNo
cursorNonext_cursor from the previous call.
searchNoMatches the title or number.
statusNoWith kind all or change_order, a change order status. Request statuses need kind request.
project_idNoOnly this project's (list_projects).
include_archivedNo

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnly, idempotent, non-destructive, and closed-world, so safety is covered. The description adds the sort order and the returned fields, but says nothing about pagination via cursor, the maximum page size of 100, or that archived records are excluded by default.

Agents need to know what a tool does to the world before 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 zero filler, and the ordering and return fields are front-loaded. The only weakness is that it is a fragment with no explicit verb, so a scanning agent relies on the title for the 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 list tool with no output schema, the description should at minimum signal pagination behavior and default result-set scoping (limit 25, archived excluded). It names returned fields but leaves those operational facts 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 coverage is 71%, so the schema already documents the kind enum, cursor, status validity rules, and project_id. The description contributes no additional parameter meaning, which is acceptable at this coverage level but not additive.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 the resource (change orders and change order requests), states default ordering (newest first), and lists the salient returned fields (status, project, total). It is clearly distinct from singular get_change_order and from the write-side create/update siblings, though the listing verb itself lives only in the name/title.

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_change_order, list_projects-style filtering, or the other list_* tools. The only implied usage cue is the coverage of both change orders and requests in one call, which the agent must infer from the description text.

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

list_contactsList contactsC
Read-onlyIdempotent
Inspect

Customers, employees, contractors, vendors and misc contacts from the Directory.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoOnly this kind of contact. Left out: all of them, leads excluded.
limitNo
cursorNonext_cursor from the previous call.
searchNoName, company, email or phone to look for.

TDQS

C2.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 covered structurally. The description adds nothing beyond that — no result ordering, no default page size, and no indication that responses are cursor-paginated, which matters 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?

A single short sentence with no filler, front-loaded on the resource. It is efficient, though the brevity is under-specification rather than disciplined concision.

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 4-parameter, paginated list tool with no output schema and no description of return shape, the definition is thin. It omits pagination behavior, the leads exclusion, and any distinction from the many other `list_*` siblings, leaving meaningful gaps.

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

Parameters2/5

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

Schema coverage is 75% and the description only mirrors the `type` enum values with no added semantics. It says nothing about `limit` defaults/caps, `cursor` continuation, or how `search` fields are matched — all of which the description could have clarified but does not.

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 sentence names the resource (contacts from the Directory) and enumerates the contact categories, but it never actually says it returns a list, nor does it say anything about pagination or scope. It largely restates the `type` enum and the tool title rather than stating a distinct verb+resource action.

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_contact` (single record) or `create_contact`, and no mention of the notable exclusion of leads (that fact lives only in the schema, and `list_leads` is a sibling that an agent could easily confuse). The agent is left to infer usage entirely.

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

list_cost_codesList cost codesB
Read-onlyIdempotent
Inspect

The company's cost codes, to put on estimate, change order and invoice items.

ParametersJSON Schema
NameRequiredDescriptionDefault
searchNoMatches the code or the name.

TDQS

B3.2/5.0
Behavior2/5

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

Annotations already declare readOnly, idempotent, non-destructive, and closed-world, so safety is covered. The description adds nothing beyond that — no return shape, ordering, pagination, or volume context for a list 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.

Conciseness4/5

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

A single compact sentence fragment with no waste, though it is not front-loaded with a verb phrase and reads more like a label than guidance.

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 trivial read-only list tool, but with no output schema the description should at least hint at what each returned cost code contains (code, name) and whether the list is complete or paginated.

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

Parameters3/5

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

Schema coverage is 100% and the single optional 'search' param is fully documented as matching code or name, so the baseline of 3 applies. The description contributes no additional meaning about filtering behavior.

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

Purpose4/5

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

Identifies the resource (cost codes) and grounds it in purpose (to put on estimate, change order and invoice items), which partially separates it from the similarly named list_cost_items. The verb is only implicit (from the name/title), and no explicit sibling contrast 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 Guidelines3/5

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

Usage is implied by the mention that these are codes to place on estimate, change order, and invoice items, but there is no explicit when-to-use statement or reference to alternatives such as list_cost_items.

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

list_cost_itemsList cost itemsC
Read-onlyIdempotent
Inspect

Saved cost items with unit, unit cost and markup, to price estimate and change order lines.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNo
limitNo
cursorNonext_cursor from the previous call.
searchNoMatches the item name.

TDQS

C2.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. The description adds only content fields and a broad use case; it does not disclose pagination behavior, ordering, global scope of saved items, or what the returned list contains beyond field names.

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 description is a single short sentence with no wasted words, but it is a sentence fragment with no leading verb and does not front-load the action or key usage context.

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 list tool with four parameters, no output schema, and pagination via limit/cursor, the description is incomplete. It describes the data fields but not the return structure, pagination behavior, filtering semantics, or how the saved items relate to estimates and change orders.

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

Parameters2/5

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

Schema description coverage is 50%, with only cursor and search documented in the schema. The description mentions no parameters at all, leaving type and limit semantics unexplained and failing to compensate for the coverage gap.

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

Purpose3/5

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

The description identifies the resource as saved cost items with unit, unit cost, and markup, and hints at their use for pricing estimate and change order lines. However, it never states the action (listing/returning) and does not distinguish this tool from siblings such as list_cost_codes or add_estimate_items.

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. The phrase 'to price estimate and change order lines' suggests a use case but does not explain when to call this list endpoint, how to filter, or when not to use it.

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

list_daily_logsList daily logsC
Read-onlyIdempotent
Inspect

Daily logs by date, optionally for one project and a date range.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoLast log date.
fromNoFirst log date.
limitNo
cursorNonext_cursor from the previous call.
searchNoText to match, as the search box of the Daily Logs list.
project_idNoOnly logs of this project.

TDQS

C2.7/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 elsewhere. The description adds no behavioral context of its own: nothing about default page size (schema default 30), cursor-based pagination flow, ordering, or the absence of results when no filters are supplied.

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

Conciseness4/5

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

A single short sentence with no filler, and the date scoping is front-loaded. Its economy comes at the cost of under-specification rather than verbosity, so it is efficient but 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?

With 6 optional parameters, pagination via cursor, and no output schema, the description should at least convey that results are paginated and what a log record represents. The well-annotated schema covers most parameter meaning, leaving the description minimally 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 83%, so the schema already explains to/from/project_id/cursor/search, and the description only echoes the date-range and project filters without adding format or interaction detail. Baseline 3 applies when the schema carries the explanatory load.

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 sentence identifies the resource (daily logs) and the primary scoping axis (date, optional project), but it is a verbless fragment that reads close to a restatement of the title 'List daily logs'. It never says that it returns a collection nor contrasts itself with the sibling get_daily_log, which retrieves a single log.

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 that this is the discovery step before get_daily_log or update_daily_log, no statement that all filters are optional, and no exclusion of other list tools. The agent must infer usage entirely from the name and schema.

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

list_estimatesList estimatesC
Read-onlyIdempotent
Inspect

Estimates, newest first, with status, project, customer and total.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
cursorNonext_cursor from the previous call.
searchNoMatches the title, number or customer.
statusNo
project_idNoOnly estimates of this project (list_projects).
include_archivedNo

TDQS

C2.8/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 and the description earns credit only for the sort order ('newest first') and the returned field set. It says nothing about pagination behavior or how the cursor/limit interact, which is the one behavioral detail an agent would still need.

Agents need to know what a tool does to the world before 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 waste, and the key ordering information is front-loaded. Its terseness is close to under-specification (no verb, fragment structure), which keeps it below 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?

With no output schema, listing the returned fields is a genuine contribution, and annotations cover safety. But for a 6-parameter paginated list tool with only 50% schema description coverage, the absence of any pagination or filtering guidance leaves real gaps.

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

Parameters2/5

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

Schema coverage is only 50%: limit, status and include_archived carry no schema descriptions, and the description does not fill that gap — it never mentions filtering by status, archiving, or page size. The phrase 'with status, project, customer and total' refers to returned fields and can be confused with the project_id and status filters rather than clarifying them.

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 names the resource (estimates) and states the ordering ('newest first') plus the fields returned, which implicitly distinguishes it from the singular get_estimate. However, it is a noun-phrase fragment with no verb, so the listing action is only inferred from the title rather than stated in the description 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?

There is no guidance on when to use this tool versus get_estimate, list_projects, or the many other list_* siblings, and no mention of prerequisites or conditions. The only usable context (that it returns multiple estimates) is implicit.

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

list_expensesList expensesC
Read-onlyIdempotent
Inspect

Expenses with amount, date, vendor, project, cost type and who paid.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
cursorNonext_cursor from the previous call.
searchNoWords to look for.
project_idNoOnly this project's records.

TDQS

C2.3/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 no behavioral context at all — no pagination semantics despite the cursor parameter, no default-page-size note, no indication of result ordering or volume.

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?

It is a single short clause with no wasted words, but the brevity comes from under-specification rather than efficient front-loading. There is no lead sentence stating the operation.

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

Completeness2/5

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

With 4 optional parameters, no output schema, and no description of pagination or filtering, the definition leaves the agent guessing on how to page and how filters combine. Naming the returned fields is a partial substitute for a missing output schema, but it does not cover the gaps.

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

Parameters3/5

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

Schema coverage is 75%, so the baseline is 3. The description lightly maps to the project filter ('project') but does not explain limit, cursor or search behavior, and most of the listed terms (amount, vendor, cost type) are return fields rather than parameters.

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

Purpose2/5

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

The text is a noun phrase fragment — 'Expenses with amount, date, vendor, project, cost type and who paid' — that enumerates attributes but never states an action. The verb 'list' exists only in the tool name, and nothing distinguishes this from get_expense or the many sibling list_* tools beyond the resource word.

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 get_expense as the alternative for a single record, and no indication of what the filters are for. The agent must infer from the schema that project_id and search narrow results.

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

list_inspectionsList inspectionsC
Read-onlyIdempotent
Inspect

Inspections with project, type, date, result, agency and permit number.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
cursorNonext_cursor from the previous call.
searchNoWords to look for.
project_idNoOnly this project's records.

TDQS

C2.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, openWorldHint=false, and destructiveHint=false, so the safety profile is covered. The description adds the returned field inventory, but does not explain pagination behavior despite cursor/limit parameters.

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?

It is very short and has no filler, but it is a sentence fragment rather than a front-loaded statement of purpose. The terseness comes at the cost of clarity.

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

Completeness3/5

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

For a read-only list tool, the annotations and schema cover most needs, and the description lists returned fields. However, it does not state pagination/default-limit behavior or clarify the listing versus single-record retrieval distinction, leaving an agent to infer those from the tool name and 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 75%, with cursor, search, and project_id documented in the schema while limit is self-explanatory from its type/default/min/max. The description adds no parameter semantics beyond the schema.

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 identifies the resource (inspections) and enumerates included fields, but it is a noun-phrase fragment without a verb such as 'list' or 'retrieve'. It does not distinguish this tool from siblings like get_inspection, create_inspection, or record_inspection_result.

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 instead of get_inspection, create_inspection, or other list_* tools. It provides neither usage context nor exclusions.

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

list_invoicesList invoicesB
Read-onlyIdempotent
Inspect

Invoices, newest first, with status, totals, balance due and an overdue flag.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
cursorNonext_cursor from the previous call.
searchNoMatches the number, project or customer.
statusNo
due_beforeNoOnly invoices due before this date.
project_idNoOnly this project's (list_projects).
customer_idNoOnly this customer's.
unpaid_onlyNoOnly submitted or on-hold invoices with a balance due.

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, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds useful behavioral context by stating the default sort order and the fields returned, but it does not mention pagination behavior, filtering effects, 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?

The description is a single, front-loaded sentence with no wasted words. It efficiently conveys the resource, ordering, and returned fields.

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 helpfully names the returned fields and ordering. However, it lacks usage guidance relative to siblings and does not elaborate on filtering or pagination behavior, leaving some gaps for an agent selecting and invoking the 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 75%, so most parameters are documented in the schema itself. The description adds no parameter-specific meaning, and for the eight optional parameters it does not clarify how filters interact or what limit/cursor behavior is beyond the schema defaults.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 clearly identifies the resource (invoices), the ordering (newest first), and the key fields returned (status, totals, balance due, overdue flag). It implies a list operation but does not explicitly differentiate this from sibling single-record tools like get_invoice or from list_payments.

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 get_invoice for a single invoice or list_payments for payment records. Usage is only implied by the tool name and resource description.

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

list_leadsList leadsC
Read-onlyIdempotent
Inspect

Sales leads with contact details, stage and quality score.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
cursorNonext_cursor from the previous call.
searchNoName, company, email or phone to look for.

TDQS

C2.6/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 pagination/ordering behavior, no default page size, no note on result caps — which is where value could have been added given the 25/100 limit.

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?

A single short fragment with no filler, but it is under-specified rather than concise — the brevity comes at the cost of a verb, usage context, and pagination notes. Nothing is front-loaded because there is only one 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?

There is no output schema, and the description's enumeration of returned fields (contact details, stage, quality score) partially compensates for that. However, for a paginated list tool it omits result ordering, page size defaults, and how cursor consumption works end-to-end, leaving the agent to infer the call pattern.

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

Parameters3/5

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

Schema description coverage is 67% (cursor and search documented; limit undocumented), so the baseline is 3. The description's mention of 'contact details' loosely corresponds to the search fields but adds no syntax, matching behavior, or guidance on the undocumented limit parameter.

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 is a noun phrase naming the resource ('Sales leads') plus the fields returned (contact details, stage, quality score), so the resource is identifiable. But there is no verb and no explicit statement that it lists/filters leads, so it largely restates the name. It does not distinguish itself from list_opportunities or create_lead.

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 at all: nothing says when to call this versus list_opportunities (a closely related sibling) or get_contact. The only hint of usage is implicit in the pagination cursor schema field.

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

list_opportunitiesList opportunitiesC
Read-onlyIdempotent
Inspect

Sales opportunities with customer, stage, score, budget and expected sale date.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
cursorNonext_cursor from the previous call.
searchNoWords in the name, number or customer.

TDQS

C2.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the safety profile is covered. The description's one addition is the field list returned (customer, stage, score, budget, expected sale date), which is useful since there is no output schema, but it says nothing about pagination, result size, or empty-result behavior.

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

Conciseness3/5

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

It is a single short fragment with no waste, but it is under-specified rather than concise: no verb, no front-loaded statement of the operation. The field list consumes the whole budget without routing or behavioral content.

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 paginated list tool with a cursor parameter and no output schema, the description should at minimum mention that results are paged/limited and that search narrows the set. Neither is stated, so the agent lacks the information needed to call it repeatedly and correctly.

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

Parameters3/5

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

Schema coverage is 67% — cursor and search are documented in the schema, limit is not. The description contributes nothing about parameters (notably never mentions that results are limited or paged), so the undocumented limit and the pagination contract are left to inference. Baseline-adjacent score given most parameters are covered by the schema.

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 is a noun phrase naming the resource ('Sales opportunities') plus the fields it carries, which is enough to infer a listing operation, but it never states a verb and gives no differentiation from siblings like get_opportunity (single item) or list_leads (adjacent resource). An agent could reasonably confuse it with get_opportunity based on 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?

There is no when-to-use guidance at all: no mention of paging, no mention of when to choose this over get_opportunity for a single record, and no note that search/cursor select a subset. The agent must infer usage entirely from the name and schema.

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

list_paymentsList paymentsB
Read-onlyIdempotent
Inspect

Payments received on invoices, newest first, with amount, method and invoice.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
cursorNonext_cursor from the previous call.
project_idNoOnly this project's (list_projects).
customer_idNoOnly this customer's.

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 sort order and returned fields, which is useful because no output schema exists, but it omits pagination behavior, default limit and auth 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?

One front-loaded sentence with no filler. It could be slightly clearer as a full clause, but every part contributes useful information.

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

Completeness4/5

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

For a four-optional-param read-only list tool, the description plus annotations and schema give enough to call it correctly: ordering and return fields are named, while filters and cursor are documented in the schema. Only pagination semantics and the default limit remain implicit.

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

Parameters3/5

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

Schema coverage is 75% and already describes cursor, project_id and customer_id; limit is defined by constraints. The description adds no parameter meaning beyond the schema, so the baseline 3 applies even though limit lacks a textual description.

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

Purpose4/5

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

The fragment names the resource (payments received on invoices), the ordering (newest first) and the fields returned, so an agent knows what this tool returns. It does not explicitly contrast with list_invoices or other list_* siblings, so sibling differentiation is absent.

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 sentence states when to choose this over list_invoices or record_payment, nor any prerequisite or exclusion. Usage is only inferable from the resource name.

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

list_project_crew_hoursList project crew hoursA
Read-onlyIdempotent
Inspect

Hours and labor cost logged on one project, per employee and per day and cost code.

ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateNoHours up to this day, YYYY-MM-DD.
project_idYesThe project's numeric id (list_projects).
start_dateNoHours from this day on, YYYY-MM-DD.

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnly, idempotent, non-destructive, and closed-world behavior, so the safety profile is covered. The description adds the useful detail that results are labor cost as well as hours and are grouped by employee/day/cost code. It says nothing about aggregation rules, whether all time cards or only approved ones are included, or volume/pagination.

Agents need to know what a tool does to the world before 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 packs scope, metric, and grain with no filler. Nothing is repeated 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 three-parameter read-only reporting tool with rich annotations and no output schema, the description conveys enough: what is returned, at what grain, and for what scope. A note on aggregation or data freshness 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%, with each parameter documented including format and a pointer to list_projects for the id, so the baseline is 3. The description's 'per employee and per day and cost code' hints at the output grain but adds no semantics about the date parameters beyond what the schema 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 the resource precisely: hours and labor cost for a single project, broken down per employee, per day, and per cost code. The grain of the data is stated, which meaningfully distinguishes it from a flat list of time cards. It does not name the neighboring tools (list_time_cards, get_job_costing) it should be contrasted with, so it falls short of a 5.

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

Usage Guidelines3/5

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

Usage is only implied: the required project_id and the start_date/end_date filters suggest a single-project date-range query. There is no explicit 'use this instead of X when...' statement, nor any exclusion guidance against list_time_cards or get_job_costing, which cover adjacent concepts.

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

list_project_filesList project filesA
Read-onlyIdempotent
Inspect

Photos and documents on a project, with name, size and a download link.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idYesThe project's numeric id (list_projects).

TDQS

A3.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so safety is covered. The description adds genuinely new behavioral information by disclosing the shape of the result (name, size, download link), which matters because there is no output schema. It does not mention pagination, sorting, or result limits.

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

Conciseness4/5

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

A single compact clause with zero filler, front-loading the resource and then the returned fields. It is a sentence fragment rather than a complete statement, but 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 one-parameter, read-only list tool, the description covers the resource and the return contents, compensating for the absent output schema. Missing pagination/ordering notes and the prerequisite of obtaining project_id from list_projects keep 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% and the single project_id parameter is documented in-schema with a pointer to list_projects. The description adds nothing about the parameter, 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 names a clear resource scope — photos and documents attached to a project — and states the fields returned (name, size, download link). It lacks an explicit verb ('list'/'retrieve') and does not distinguish itself from siblings, but no sibling covers project files, so 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 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 alternatives (e.g., list_projects to obtain the project_id, or cotlet_upload_file for the inverse operation). Usage must be inferred entirely from the name and the phrase 'on a project'.

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

list_project_notesList project notesC
Read-onlyIdempotent
Inspect

The notes on a project's Notes tab, with author and time.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idYesThe project's numeric id (list_projects).

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and non-open-world, so the safety profile is covered. The description adds that each note includes author and time, which is genuinely useful beyond the annotations, but says nothing about ordering, pagination, or behavior when a project has no notes.

Agents need to know what a tool does to the world before 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 fragment with no waste, and the useful detail (author and time) is placed up front. It is terse to the point of under-specification rather than bloated.

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-only list tool with full annotation coverage and no output schema, the description is close to adequate. However, with no output schema the agent gets no sense of result shape beyond 'author and time', and ordering or empty-result 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 the single project_id parameter is documented in the schema, including the hint to obtain it from list_projects. The description adds nothing about the parameter, which is the expected baseline when the schema already covers it.

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 phrase 'The notes on a project's Notes tab' identifies the resource and its scope, but there is no verb and the wording largely restates the name list_project_notes. It does add that results carry author and time, and the distinction from the write sibling add_project_note is implied by the name 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 guidance on when to use this versus add_project_note or other project-related list tools, and no prerequisites mentioned. The agent must infer from the name alone that this is the read path for a project's Notes tab.

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

list_projectsList projectsC
Read-onlyIdempotent
Inspect

Projects with customer, stage, dates, contract amount, costs and percent complete.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
cursorNonext_cursor from the previous call.
searchNoMatch on project name, number or customer.
statusNoOnly projects in this stage.
include_completedNoInclude completed projects. Ignored when status is set.

TDQS

C2.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 nothing beyond naming some returned fields, and omits notable behavior (results are paginated via limit/cursor, completed projects are hidden by default).

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

Conciseness2/5

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

It is short, but it is a sentence fragment that is not front-loaded with what the tool does. The one clause present is a field inventory rather than a purpose statement, so the brevity reflects under-specification rather than efficiency.

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, listing the returned fields (customer, stage, dates, contract amount, costs, percent complete) is genuinely useful return-value information. However, it says nothing about pagination, default exclusion of completed projects, or ordering, which an agent needs to call this correctly.

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

Parameters3/5

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

Schema description coverage is 80%, so the schema already documents cursor, search, status and include_completed. The description only echoes 'stage' (the status filter) and re-states return fields; 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.

Purpose2/5

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

The text is a noun-phrase field list ('Projects with customer, stage, dates, contract amount, costs and percent complete') with no verb and no statement that it returns a list. It leans on the name/title for the actual purpose and does nothing to separate it from siblings like get_project or list_contacts.

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 alternatives such as get_project for a single record, and no exclusion rules. The only hint of usage behavior — that completed projects are excluded unless include_completed is set — lives in the schema, not the description.

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

list_punchlistsList punchlistsB
Read-onlyIdempotent
Inspect

Punchlists with project, status, open and completed item counts and who the items are assigned to.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
cursorNonext_cursor from the previous call.
searchNoText to match, as the search box of the Punchlists list.
project_idNoOnly punchlists of this project.

TDQS

B3.2/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 clear. The description adds useful return-field context by listing project, status, counts, and assignees, but it does not disclose pagination behavior or any other operational detail beyond what is already in the schema and annotations.

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

Conciseness4/5

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

The description is a single compact sentence fragment with no wasted words and it leads with the resource. It is slightly under-specified but well sized for a tool whose schema carries most of the 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?

For a low-complexity list tool with no output schema, the description usefully states what fields are returned. However, it omits filtering and pagination context and does not explain when to use this listing versus retrieving a single punchlist, 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 75%, with cursor, search, and project_id documented in the schema. The description itself adds no parameter meaning and does not mention the limit parameter, so it does not compensate for the remaining gap, but the schema carries most of the parameter documentation 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?

The description identifies the resource (punchlists) and the fields returned (project, status, open/completed item counts, assignees). It is clear this is a punchlist listing tool, but it does not explicitly distinguish itself from get_punchlist or create_punchlist beyond the plural 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 get_punchlist or other list tools. The description does not mention filtering, pagination, or any context that would help an agent choose this tool over alternatives.

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 ordersB
Read-onlyIdempotent
Inspect

Purchase orders with supplier, project, order date, total and status.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
cursorNonext_cursor from the previous call.
searchNoWords to look for.
project_idNoOnly this project's records.

TDQS

B3.1/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 closed-world, so the safety profile is fully covered. The description's only added context is the set of fields returned, which is useful given there is no output schema, but it says nothing about pagination behavior or result ordering.

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

Conciseness4/5

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

A single front-loaded phrase with zero waste, but it is a fragment rather than a sentence and is arguably under-specified rather than genuinely concise. Nothing is padded, though.

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 cursor-paginated list tool with no output schema, the description should at least signal that results are paginated via limit/cursor and that the field list is the row shape. It is adequate to identify the tool but leaves pagination behavior for the agent to discover.

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

Parameters4/5

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

Schema coverage is 75% and the three documented parameters (cursor, search, project_id) already explain themselves, so the baseline of 3 applies. The description adds a bit by naming 'project' and 'supplier' as the salient dimensions of a purchase order, which reinforces what project_id filters on.

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 is a noun phrase naming the resource (purchase orders) and the fields returned, so the agent can infer a list operation, but it never states a verb and never distinguishes itself from get_purchase_order (single record) or list_invoices/list_bills. The sibling name does most of the disambiguating work.

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 call this versus get_purchase_order or the other list_* tools, and no mention of prerequisites, scoping expectations, or how to page through results. 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.

list_rfisList RFIsC
Read-onlyIdempotent
Inspect

Requests for information with question, project, dates, answer and status.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
cursorNonext_cursor from the previous call.
searchNoWords to look for.
project_idNoOnly this project's records.

TDQS

C2.5/5.0
Behavior2/5

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

Annotations already establish readOnlyHint, idempotentHint, destructiveHint=false and closed-world behavior, so safety is covered. The description adds only a field enumeration and says nothing about pagination, default limit, search behavior, or project scoping. It therefore adds little behavioral context beyond the structured annotations.

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

Conciseness3/5

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

The description is a single short sentence with no wasted words, so it is concise. However, it is structured as a noun phrase rather than a verb-led definition, and its terseness leaves important list behavior unstated.

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 four-parameter list tool with no output schema, the description should explain pagination, filtering, and what is returned. It only lists RFI fields, omitting how limit/cursor/search/project_id affect results. The annotations cover the safety profile, but the description does not fill the remaining behavioral 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 75%, with cursor, search and project_id well documented in the schema; limit is self-explanatory through its default and bounds. The description does not explain limit, cursor, search, or project_id at all. With most parameters already handled by the schema, a baseline 3 is appropriate.

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 identifies the resource (RFIs) and enumerates fields such as question, project, dates, answer and status. However, it never states the operation is a list/search, and it does not distinguish this from get_rfi or create_rfi. The purpose is inferable from the name and title, but the description itself is vague about what the tool does.

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

Usage 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 list_rfis versus get_rfi or the other list_* siblings, and no mention of filtering or prerequisites. The agent gets no explicit usage conditions from the description.

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

list_schedule_tasksList schedule tasksA
Read-onlyIdempotent
Inspect

Gantt schedule tasks of a project: dates, duration, dependencies, assignees, percent complete.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idYesproject_id from list_projects.

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 the returned field set, which is useful context, but says nothing about pagination, ordering, or whether tasks are returned flat or as a dependency tree.

Agents need to know what a tool does to the world before 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 fragment with zero filler; the returned-field list is the highest-value information and comes immediately. Only the missing verb keeps it from being exemplary.

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

Completeness4/5

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

With only one required parameter and no output schema, enumerating the returned fields is exactly the compensation needed. The remaining gap is structural: it doesn't say whether results are paginated or hierarchical, which matters for Gantt data with dependencies.

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

Parameters3/5

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

Schema coverage is 100% and the schema itself documents project_id as coming from list_projects, so the description need not repeat it. It adds no extra syntax or constraints beyond what the schema already states, 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?

Identifies the exact resource ('Gantt schedule tasks of a project') and enumerates the fields returned, so an agent knows what it gets without opening a schema. It is a noun-phrase fragment rather than a verb+resource statement, and it doesn't name the related sibling update_schedule_task, 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?

Usage is only implied: the project_id requirement makes clear it is per-project retrieval. There is no explicit 'use this when' statement, no mention of when to prefer get_project or update_schedule_task, 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_service_ticketsList service ticketsC
Read-onlyIdempotent
Inspect

Service tickets with customer, status, service date and time and technicians.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
cursorNonext_cursor from the previous call.
searchNoWords to look for.
project_idNoOnly this project's records.

TDQS

C2.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint=false, so the safety profile is fully covered. The description adds the returned field set (customer, status, service date/time, technicians), which is useful because there is no output schema, but says nothing about ordering, pagination, or result volume.

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?

A single short fragment with no waste, but it is an under-specified noun phrase rather than a front-loaded statement of action. Brevity here reflects omission rather than efficiency.

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 paginated list tool with four parameters and no output schema, the description should explain pagination (limit/cursor) and filtering behavior. It only enumerates fields, so an agent must read the schema to learn how to page or filter.

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

Parameters3/5

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

Schema description coverage is 75% (cursor, search, project_id documented; limit undocumented), so the schema does most of the work. The description contributes nothing about what 'search' matches or how project_id scopes results, leaving it at baseline.

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 phrase 'Service tickets with customer, status, service date and time and technicians' identifies the resource and hints at returned fields, but contains no verb and never distinguishes this listing tool from get_service_ticket, create_service_ticket, or list_work_orders. Purpose is only inferable from the tool 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 get_service_ticket for a single record, or versus other list_* siblings. Nothing about filters, pagination workflow, or prerequisites is offered.

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

list_sub_contractsList sub-contractsC
Read-onlyIdempotent
Inspect

Sub-contracts with subcontractor, project, amount, billed, paid, balance and status.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
cursorNonext_cursor from the previous call.
searchNoWords to look for.
project_idNoOnly this project's records.

TDQS

C2.4/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 field list hints at what comes back, but there is no mention of pagination behavior (limit default 25, cursor continuation) or result ordering, which is the main behavioral detail this read-only list tool actually needs.

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?

It is a single short fragment with no filler, but the terseness comes at the cost of specification rather than being economically front-loaded. There is no leading verb or scope statement to anchor the sentence.

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 filterable, paginated list tool with no output schema, the description should cover paging and filtering; instead it only enumerates fields. The 75% schema coverage and existing annotations partially compensate, but an agent still cannot tell how to page through results or how the filters narrow the list.

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 75% and the bare `limit` property (default 25, max 100) is undocumented in both schema and description. The description mentions none of the four parameters, adding zero meaning beyond the schema for search, project_id, cursor or limit.

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 is a noun phrase listing returned fields ("Sub-contracts with subcontractor, project, amount, billed, paid, balance and status") rather than a verb+resource statement. Combined with the title 'List sub-contracts' an agent can infer it enumerates sub-contracts, but nothing distinguishes it from sibling get_sub_contract, and the tool's own verb never appears in 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?

There is no when-to-use guidance, no mention of the paging model, and no routing to alternatives. An agent gets no signal about when to reach for this rather than get_sub_contract or the many other list_* siblings.

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

list_submittalsList submittalsC
Read-onlyIdempotent
Inspect

Submittals with project, status, date received, due date and approver.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
cursorNonext_cursor from the previous call.
searchNoWords to look for.
project_idNoOnly this project's records.

TDQS

C2.7/5.0
Behavior3/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 the returned fields (project, status, dates, approver), but does not mention pagination via limit/cursor or filtering behavior.

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?

It is short with no filler, but it is a single sentence fragment and is under-specified rather than effectively front-loaded. The terseness sacrifices clarity about the tool's action.

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 paginated list tool with four optional parameters and no output schema, the description should clarify listing behavior, pagination and filtering. It only enumerates some fields, leaving key call context 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 75% – cursor, search and project_id are described in schema; limit is not. The description lists output fields rather than explaining parameters, so it adds no parameter semantics beyond the schema, matching baseline 3.

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 fragment identifies the resource (submittals) and lists returned attributes, but never states the verb 'list' or scope, and does not distinguish this from sibling get_submittal. The name/title supply the action, so it is not misleading, but the description itself is vague.

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 or when-not-to-use guidance, no mention of alternatives such as get_submittal, and no explanation of filtering by project/search. It leaves usage 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_time_cardsList time cardsA
Read-onlyIdempotent
Inspect

Time cards with employee or crew, project, clock-in and clock-out times and hours, newest first.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
cursorNonext_cursor from the previous call.
end_dateNoCards up to this day, YYYY-MM-DD.
project_idNoOnly this project's cards.
start_dateNoCards from this day on, YYYY-MM-DD.
employee_idNoOnly this employee's cards (contact_id).

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, non-destructive behavior. The description adds meaningful behavioral context: it discloses that results are ordered newest first and specifies which data fields are included. It does not cover pagination or empty-result behavior, but that is a minor gap given 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?

A single, front-loaded sentence that efficiently conveys the resource, key fields, and ordering with 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 list tool with no output schema and rich annotations, the description is nearly complete: it tells the agent what data to expect and how results are ordered. The only missing piece is explicit usage guidance relative to siblings, 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?

Schema description coverage is 83%, so the schema already documents five of six parameters with clear descriptions. The description adds no parameter-level information, which is acceptable at this coverage level; 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 clearly states the resource (time cards) and the fields returned (employee/crew, project, clock-in/out, hours) plus ordering (newest first). It distinguishes from a single-card getter implicitly, but does not explicitly differentiate from siblings like list_project_crew_hours or get_clock_status.

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 is given on when to use this tool versus alternatives such as get_time_card or list_project_crew_hours. The description only describes the output, not the selection criteria or exclusions.

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

list_todosList to-dosC
Read-onlyIdempotent
Inspect

To-dos with project, priority, status, due date and assignees.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
cursorNonext_cursor from the previous call.
searchNoText to match, as the search box of the To-Do list.
statusNo
mine_onlyNoOnly to-dos assigned to this account's user.
project_idNoOnly to-dos of this project.

TDQS

C2.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 covered. The description adds nothing beyond that: no mention of the default page size of 30, the 100 cap, ordering, or whether cursor paging is expected to reach all results. For a list tool whose main behavioral risk is incomplete retrieval, that is a real gap.

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?

It is a single short sentence with no filler or redundancy, but the brevity comes from under-specification rather than discipline. There is no front-loaded statement of what the call does.

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

Completeness2/5

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

With six optional parameters, a cursor-based pagination model, and no output schema, the description should explain what is returned and how paging works. It provides none of that, leaving the agent unable to predict the response shape or confirm that the field list is output rather than filter input.

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

Parameters2/5

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

Schema coverage is 67%, leaving limit, status (enum open/incomplete/complete) and the required/optional semantics undocumented. The description only echoes 'status' and 'project' and says nothing about search text matching, mine_only scoping, or cursor/limit interplay, so it does not compensate for the coverage gap and arguably muddies whether the listed fields are inputs or outputs.

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

Purpose2/5

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

The description is a noun fragment ('To-dos with project, priority, status, due date and assignees') that essentially restates the name and title. It never uses a verb like 'list' or 'retrieve', and it is ambiguous whether the enumerated fields are returned fields or available filters (status and project map to params, priority/due date/assignees do not). A reader must infer the operation 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?

There is no guidance on when to call this versus get_todo (single record) or the other list_* siblings, and no mention of pagination workflow despite a cursor parameter. The agent gets context only implicitly 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_work_ordersList work ordersC
Read-onlyIdempotent
Inspect

Work orders with project, customer, status, dates, total and assignee.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
cursorNonext_cursor from the previous call.
searchNoWords to look for.
project_idNoOnly this project's records.

TDQS

C2.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, so the safety profile is covered. The description adds only a partial list of returned fields and says nothing about pagination, result ordering, or behavior when filters match nothing, so it adds little beyond 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.

Conciseness2/5

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

The description is a single sentence fragment that is short but under-specified rather than concise. It is front-loaded with returned fields but lacks a complete predicate, making it read like a schema excerpt rather than an instruction.

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

Completeness2/5

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

With no output schema and many sibling tools, the description should explain the return shape and how this list differs from get_work_order and other list_* tools. It only lists some fields, omitting pagination behavior and filter effects, so an agent lacks enough context to invoke it confidently.

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

Parameters2/5

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

Schema description coverage is 75%, with cursor, search, and project_id documented but limit left undescribed. The description does not explain any parameter semantics, including the default limit of 25 or the maximum of 100, so it fails to compensate for the remaining gap.

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 fragment names the resource (work orders) and lists some returned fields, but it omits an explicit verb like "list" and does not distinguish the tool from siblings such as get_work_order or create_work_order. An agent can infer it returns a collection, but the purpose is only implied.

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

Usage 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 use this tool versus get_work_order for a single record or the various filtered list_* siblings. There is no guidance on filtering, pagination, or prerequisites.

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

record_inspection_resultRecord inspection resultC
Destructive
Inspect

Marks an inspection passed, failed or to re-inspect, optionally with notes.

ParametersJSON Schema
NameRequiredDescriptionDefault
notesNoReplaces the inspection's notes.
resultYes
inspection_idYesinspection_id from list_inspections.

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare destructiveHint=true and idempotentHint=false, so the safety profile is carried by structured data. The description adds nothing beyond that: it never says the previous result is overwritten, whether re-recording is allowed, or what happens to downstream state, which matters for a destructive, non-idempotent mutation.

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

Conciseness4/5

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

A single tight sentence that front-loads the mutation and its outcome set with no filler. It is efficient, though the brevity comes at the cost of the usage and behavioral detail noted above.

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-idempotent write with no output schema, an agent still cannot tell what the call returns, whether the result is reversible, or whether recording requires an inspection in a particular state. Annotations cover safety flags but not these operational 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 67% and the two documented parameters already explain the id lookup and that notes replaces existing notes. The description's only added value is framing notes as optional, and its partial value list (omitting "draft") is less complete than the enum itself, so it does not meaningfully exceed 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 and resource ("Marks an inspection") plus the outcome values, which cleanly separates it from create_inspection, get_inspection and list_inspections. However, it enumerates only three of the four enum values and silently omits "draft", so the stated purpose is slightly narrower than what the tool actually accepts.

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 create_inspection or update-style siblings, and no prerequisites stated (e.g. that the inspection must already exist and be in a state that permits recording). The only routing hint, "inspection_id from list_inspections", lives in the schema rather than the description.

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

record_paymentRecord paymentB
Destructive
Inspect

Records a payment you received against an invoice.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNoDefault: today.
notesNoe.g. the check number.
amountYesDollars, at most the balance due.
methodYes
statusNoreceived
invoice_idYesFrom list_invoices.

TDQS

B3.1/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, openWorldHint=true and idempotentHint=false, so the safety profile is covered. The description adds only the directional context that this records an incoming payment versus an outgoing one; it does not explain side effects such as altering the invoice balance or the duplicate-submission risk implied by non-idempotency.

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

Conciseness4/5

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

A single front-loaded sentence with no waste. It is efficient, though for a 6-parameter destructive 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.

Completeness2/5

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

This is a destructive, non-idempotent mutation with no output schema, and the description omits what an agent most needs: the effect on the invoice (balance/paid state), duplicate-payment risk, and the semantics of the status field. The annotations signal danger but the description does not fill the remaining gaps.

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

Parameters3/5

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

With 67% schema coverage, the schema itself documents date, notes, amount and invoice_id, while method and status rely on enums. The description contributes essentially nothing beyond the schema – it does not clarify the balance cap on amount, the meaning of status values, or the date default.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 (records a payment) and its scope (against an invoice), which clearly distinguishes it from list_payments or create_invoice without opening a schema. It falls short of 5 only because it never explicitly names 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?

Beyond the phrase 'you received' implying an incoming payment, there is no when-to-use guidance, no prerequisites (does the invoice need to be sent/open?), and no pointer to alternatives like list_payments or update_invoice.

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

remove_estimate_itemsRemove estimate itemsC
Destructive
Inspect

Deletes line items from an estimate.

ParametersJSON Schema
NameRequiredDescriptionDefault
item_idsYesitem_id values from get_estimate.
estimate_idYesFrom list_estimates.

TDQS

C2.8/5.0
Behavior2/5

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

Annotations already declare destructiveHint=true, idempotentHint=false, and openWorldHint=true, so the safety profile is covered externally. The description adds nothing beyond that: no statement about irreversibility, whether removal is atomic across a batch, or what happens when an item_id is invalid.

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 single sentence is front-loaded and free of padding, but it is terse to the point of under-specification for a destructive batch operation. Brevity here is a byproduct of omission rather than disciplined editing.

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?

This is a destructive, non-idempotent batch mutation (1–100 item ids) with no output schema, yet the description says nothing about partial-failure behavior, rollback semantics, or the effect on estimate totals. For a deletion tool of this shape, the description does far too little.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales 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 (item_ids sourced from get_estimate, estimate_id from list_estimates) and min/max bounds encoded in the schema. The description contributes no additional 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?

The description states a specific verb ('Deletes') and resource ('line items from an estimate'), so the operation is immediately identifiable. It does not, however, distinguish itself from the close siblings delete_estimate (removes the whole estimate) or add_estimate_items (the inverse operation), leaving that distinction to 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?

No guidance is given on when to use this versus delete_estimate or update_estimate, nor on prerequisites such as whether the estimate must be in a draft/editable state. The agent must infer everything from the name.

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

send_change_orderSend change orderA
Destructive
Inspect

Emails the change order as a PDF to the customer or to the addresses you give. Waits for the owner's approval.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoRecipient emails. Default: the project's customer.
copy_meNo
messageNoEmail text above the PDF.
subjectNoDefault: the app's 'Change Order #n'.
change_order_idYesFrom list_change_orders.

TDQS

A3.8/5.0
Behavior4/5

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

Adds real behavior beyond the annotations: the payload is a PDF email and the call 'waits for the owner's approval', which signals an approval gate not captured by destructiveHint/openWorldHint. It does not clarify whether the call blocks, what a rejection returns, or whether re-sending is possible.

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

Conciseness5/5

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

Two tight sentences, front-loaded with the action and followed by the key operational caveat. 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 5-param mutation tool with full annotations and no output schema, the safety and workflow essentials are covered. The one meaningful gap is the ambiguity of 'waits for approval' — whether the call blocks, times out, or returns a pending state.

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

Parameters3/5

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

Coverage is 80%, so the schema already documents `to`, `message`, `subject`, and `change_order_id`. The description only restates the `to` default already present in the schema and adds nothing about `copy_me` or subject/message interplay; 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?

Concrete verb+resource ('Emails the change order as a PDF') with the recipient scope stated. It is implicitly distinguished from send_estimate/send_invoice by the resource name, but the description never names those siblings to prevent confusion.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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 recipient default ('the customer or the addresses you give') implies when to pass `to`, but there is no explicit statement of when to use this versus send_estimate/send_invoice, nor prerequisites such as the change order needing to be in a sendable state.

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

send_estimateSend estimateA
Destructive
Inspect

Emails the estimate as a PDF to the customer or to the addresses you give. Waits for the owner's approval.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoRecipient emails. Default: the estimate's customer.
copy_meNoSend a copy to you.
messageNoEmail text above the PDF.
subjectNoDefault: the app's 'Estimate: <title> (#n)'.
estimate_idYesFrom list_estimates or create_estimate.

TDQS

A3.8/5.0
Behavior4/5

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

With destructiveHint=true and openWorldHint=true already declared, the description still adds genuinely new context: the outbound email has an external recipient and the call blocks waiting for owner approval. It does not say what happens on rejection/timeout, or that repeated calls produce duplicate sends (relevant to 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, zero filler, with the core action first and the blocking-approval caveat 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?

A five-parameter mutation tool with full schema coverage and no output schema; the description covers delivery target and the approval gate. The main remaining gap is post-approval behavior — whether a failure surfaces as an error and whether the sent PDF is persisted — which an agent would want before relying on the result.

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

Parameters3/5

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

Schema description coverage is 100% with sensible defaults for `to`, `subject`, and `copy_me`, so the schema carries the load. The description only echoes the `to` default behavior and adds no formatting, address-validation, or `message` 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 and resource: emails the estimate as a PDF. The resource name implicitly separates it from the sibling send_invoice and send_change_order tools, but it never explicitly contrasts them or mentions whether alternate delivery paths (e.g. create_share_link) exist.

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

Usage Guidelines3/5

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

"To the customer or to the addresses you give" implies when the `to` override applies, but there is no explicit when-to-use vs. when-not guidance, no prerequisite that the estimate be finalized/approved, and no mention of what to do if the owner rejects.

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

send_invoiceSend invoiceA
Destructive
Inspect

Emails the invoice as a PDF to the customer or to the addresses you give. Waits for the owner's approval.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoRecipient emails. Default: the invoice's customer.
copy_meNo
messageNoEmail text above the PDF.
subjectNoDefault: the app's 'Invoice #n'.
invoice_idYesFrom list_invoices or create_invoice.

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and openWorldHint=true, so the description earns credit for adding the non-obvious approval gate ('Waits for the owner's approval') — an agent otherwise might assume the email goes out immediately. It does not say what happens if approval is denied, whether a second call resends, or how the pending state is observed.

Agents need to know what a tool does to the world before calling 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 delivery behavior front-loaded before the approval caveat.

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 and no return value described; more importantly, an approval-gated side effect needs to say what the caller gets back and how to check whether the invoice was actually sent. Adequate for invoking correctly, thin for understanding the outcome.

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

Parameters3/5

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

Schema coverage is 80%, so the baseline is 3. The description restates the `to` default (customer) and 'PDF' delivery, but adds nothing for copy_me, which is the one parameter left undocumented by the schema, and gives no syntax guidance for the address array.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 (emails as PDF) plus resource (the invoice) and delivery targets ('the customer or to the addresses you give'). It does not differentiate itself from the parallel siblings send_estimate and send_change_order, 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 Guidelines3/5

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

The invoice_id schema note ('From list_invoices or create_invoice') plus the description imply the prerequisite (an existing invoice), and the approval caveat hints at the workflow. But there is no explicit when-to-use/when-not guidance or comparison against send_estimate or send_change_order.

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 orderC
Destructive
Inspect

Changes a change order's status, title, reason or date.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNo
titleNo
statusNo
descriptionNo
change_order_idYesFrom list_change_orders.

TDQS

C2.9/5.0
Behavior3/5

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

The annotations already declare destructiveHint=true, openWorldHint=true, and idempotentHint=false, so the safety profile is largely covered. The description adds field-level mutation scope by naming the attributes that can change, but it does not add context about reversibility, permissions, or side effects beyond that.

Agents need to know what a tool does to the world before 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 definition is a single front-loaded sentence with no padding or repetition. It is efficient, though its terseness leaves several semantic gaps that are better assessed under other dimensions.

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 mutation tool with five parameters and no output schema, the description is too sparse. It does not compensate for low schema description coverage, omits the 'description' field, and leaves the 'reason' mismatch unresolved, so an agent must rely heavily on schema and annotations.

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

Parameters2/5

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

Schema description coverage is only 20%, so the description should compensate, but it only lists field names. It mentions 'reason' while the schema exposes a 'description' parameter, creating a semantic mismatch, and it gives no detail on the status enum, date format, or title constraints.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 (Changes) and resource (a change order), and it names the fields affected. It is clear enough to distinguish from create/delete/get/list siblings, but it does not explicitly differentiate itself from 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?

Usage is only implied by the verb 'Changes'; there is no explicit guidance on when to use this tool versus alternatives such as create_change_order, delete_change_order, or send_change_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_daily_logUpdate daily logC
Destructive
Inspect

Change the notes, times, people, deliveries, weather notes or delays of a daily log.

ParametersJSON Schema
NameRequiredDescriptionDefault
notesNoWork done and site notes (the log's Work Performed).
peopleNoCrews, subcontractors and visitors on site: headcount per crew, or free text.
visitorsNoVisitors on site (inspector, owner, architect).
arrival_timeNoArrival on site, e.g. 07:00 or 7:00 AM.
daily_log_idYesdaily_log_id from list_daily_logs.
jobsite_notesNoJobsite condition notes.
weather_delayNoWhat the weather delayed. Marks a weather delay.
weather_notesNoYour own notes next to the recorded weather.
departure_timeNoDeparture from site, e.g. 15:30.
schedule_delayNoWhat else held the schedule up. Marks a schedule delay.
materials_deliveredNoMaterials delivered or used, one line each.

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare destructiveHint=true and idempotentHint=false, so the description needs to add what is actually at risk — it doesn't. It never says whether omitted fields are wiped or preserved, whether setting weather_delay/schedule_delay has side effects (they 'mark' a delay), or that changes are not reversible. Restating the field list duplicates the schema rather than adding behavioral context.

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

Conciseness4/5

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

A single sentence with no filler, but it front-loads the field enumeration before establishing the resource and omits a short 'partial update' qualifier that would have cost only a few 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?

This is a destructive, non-idempotent mutation across 11 parameters with no output schema, and the description covers none of the consequential behavior: partial-update semantics, side effects of the delay fields, or what the caller gets back. As written an agent could reasonably call it with only daily_log_id plus one field and be unsure whether the rest is cleared.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales 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 only paraphrases a subset of parameters ('notes, times, people, deliveries, weather notes or delays') and omits visitors, jobsite_notes, schedule_delay and the materials_delivered array, adding no syntax or format 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 ('Change') and resource (daily log) plus the categories of fields it touches, which separates it from create_daily_log, get_daily_log and list_daily_logs. It does not explicitly name those siblings, so the agent must infer the split from the 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?

There is no guidance on when to use this versus create_daily_log or update_project, and no statement of the key operational rule for an 11-param tool with one required field: that only supplied fields change and everything else is preserved. The 'daily_log_id from list_daily_logs' hint lives in the schema, not the description.

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

update_estimateUpdate estimateC
Destructive
Inspect

Changes an estimate's status, title, dates, description, inclusions or exclusions.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleNo
statusNo
exclusionsNo
inclusionsNo
descriptionNo
estimate_idYesFrom list_estimates.
expire_dateNo
estimate_dateNo

TDQS

C2.6/5.0
Behavior2/5

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

Annotations already declare destructiveHint=true, idempotentHint=false, and openWorldHint=true, so the safety profile is carried structurally, but the description adds nothing beyond that baseline: it never says the operation overwrites existing values, that it is non-idempotent, or which status transitions are meaningful. For a destructive mutation tool, this is a thin description.

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?

One efficient sentence with no padding, but it is under-specified rather than tight – the brevity comes at the cost of missing update semantics. Adequate but not earning its place against what an agent needs.

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?

An 8-parameter destructive mutation with no output schema and near-zero schema documentation needs far more: whether it's a patch or full replace, what the response contains, and what a status change implies. The single sentence leaves the agent guessing on the key behavioral question.

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

Parameters2/5

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

Schema description coverage is only 13% (just estimate_id), so the description should compensate, but it merely re-lists fields already visible in the schema (title, status, dates, description, inclusions, exclusions) without clarifying that unspecified fields are left unchanged, how the status enum behaves, or anything about date formats. It adds negligible 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?

Names a specific verb+resource ('Changes an estimate's status, title, dates...') and enumerates the mutable fields, which distinguishes it from create_estimate, delete_estimate, and get_estimate. The verb 'changes' is vague about whether it is a full replace or a partial update, 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 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 update_change_order, send_estimate, or add_estimate_items, and no prerequisites (permissions, whether the estimate must be in a certain status, or that estimate_id comes from list_estimates). The schema hints at list_estimates but the description provides no routing logic.

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

update_invoiceUpdate invoiceC
Destructive
Inspect

Changes an invoice's status, invoice date, due date or description.

ParametersJSON Schema
NameRequiredDescriptionDefault
statusNo
due_dateNo
invoice_idYesFrom list_invoices.
descriptionNo
invoice_dateNo

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare destructiveHint=true, idempotentHint=false and openWorldHint=true, so the safety profile is carried structurally; the description adds nothing about what a status change actually does, whether transitions are restricted (e.g. paid back to draft), or whether changes sync downstream. For a destructive, non-idempotent mutation, that is a real gap.

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

Conciseness4/5

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

One sentence, front-loaded with the verb and resource, with no filler. It is efficient but borders on over-terse given the mutation risk involved.

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?

A five-parameter destructive mutation with 20% schema coverage, no output schema, and no annotations-level context supplied in the description leaves the agent without the details it needs — partial-update semantics, status transition rules, and side effects are all 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 coverage is only 20% (just invoice_id carries 'From list_invoices'), but the description compensates partly by naming the four other parameters and their purpose. It adds no detail on status transition validity or what clearing a field means, so it hovers at a minimum-viable level.

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

Purpose4/5

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

States a specific verb (changes) and resource (invoice) plus the four mutable fields, which cleanly separates it from create_invoice, delete_invoice and send_invoice. It does not explicitly distinguish itself from sibling status-only updaters like update_service_ticket_status, but the field list makes the scope 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 delete_invoice, send_invoice, or list_invoices, and no mention that only invoice_id is required while the other four fields are optional partial updates. The agent must infer usage entirely from the field list.

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

update_projectUpdate projectC
Destructive
Inspect

Change a project's name, stage, type, address, dates or description.

ParametersJSON Schema
NameRequiredDescriptionDefault
zipNo
cityNo
nameNo
typeNo
stateNo
statusNoNew stage, e.g. started or completed.
streetNo
street2No
end_dateNo
project_idYesproject_id from list_projects.
start_dateNo
descriptionNo

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare destructiveHint=true, idempotentHint=false, and openWorldHint=true, so the safety profile is known. However, the description adds nothing beyond that: it never explains why the call is destructive (overwriting existing field values?), whether omitted fields are preserved, whether partial updates are supported, or whether permission/published-state constraints apply. For a flagged-destructive mutation, this is a meaningful gap.

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

Conciseness5/5

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

A single front-loaded sentence with no filler or restatement of the tool name. Nothing in it is wasted, even though the definition as a whole is under-specified.

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 12-parameter mutation tool with no output schema and only 17% schema description coverage, one sentence is not enough. The agent is left without partial-update semantics, return/confirmation behavior, or any note of why a destructive hint is attached, all of which it would need to call this 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 only 17%, so the description must compensate, and it does partially: 'name, stage, type, address, dates or description' maps to name, status, type, street/city/state/zip, start_date/end_date, and description. But it omits the required project_id (documented only in the schema), does not clarify that 'address' means four separate fields, and says nothing about whether unlisted parameters are left untouched.

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

Purpose4/5

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

States a specific verb ('change') and resource ('project') and enumerates the mutable fields (name, stage, type, address, dates, description), which maps well onto the schema's properties. It does not distinguish itself from the many sibling update_* tools or from create_project/get_project, 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?

There is no statement of when to use this tool versus alternatives such as create_project, get_project, or the domain-specific update_work_order_status/update_service_ticket_status tools. The agent must infer that this is the mutation counterpart to get_project 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_schedule_taskUpdate schedule taskC
Destructive
Inspect

Change the name, dates, length or percent complete of a task on the project schedule.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
task_idYestask_id from list_schedule_tasks.
end_dateNoNew last day.
project_idYesproject_id from list_projects.
start_dateNoNew first day. Alone, it moves the task and keeps its length.
duration_daysNoNew length in days, from the start.
percent_completeNo

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already tell the agent this is destructive, non-idempotent, and open-world, so the description's main remaining job is to explain consequences of a destructive write. It does not say whether omitted fields are left unchanged, whether changing dates shifts dependent tasks, or what happens when dates conflict with duration.

Agents need to know what a tool does to the world before 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 covering the resource and all updatable fields with no filler. Brevity only costs it in what it leaves out, not in wasted 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 destructive, non-idempotent mutation with seven parameters and no output schema, the description omits field-level interactions, side effects on the schedule, and the result of the call. Key behavior an agent needs to invoke it safely is missing.

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

Parameters3/5

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

Schema coverage is 71%, so a baseline of 3 applies. The description echoes the schema's field labels (name, dates, length, percent complete) but adds no extra meaning, notably omitting the important start_date/duration_days interaction 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?

A clear verb-plus-resource statement ('Change ... of a task on the project schedule') that also names every updatable field. It distinguishes itself from list_schedule_tasks implicitly through the schema, but the description itself does not call out the sibling relationship.

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

Usage Guidelines2/5

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

The description says nothing about when to use this versus list_schedule_tasks or other update tools, and gives no prerequisites such as first fetching task_id via list_schedule_tasks. The only usage hint ('task_id from list_schedule_tasks') lives in the schema, not in the description.

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

update_service_ticket_statusUpdate service ticket statusC
Destructive
Inspect

Moves a service ticket to scheduled, en route, checked in, completed, closed and so on.

ParametersJSON Schema
NameRequiredDescriptionDefault
statusYes
service_ticket_idYesservice_ticket_id from list_service_tickets.

TDQS

C2.8/5.0
Behavior2/5

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

Annotations already declare destructiveHint=true, idempotentHint=false and openWorldHint=true, but the description adds nothing to that profile: it doesn't say whether transitions are validated, what happens to the prior status, or whether canceled/closed are terminal. The description restates the annotation-level effect without adding behavioral context.

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

Conciseness3/5

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

A single short sentence that is front-loaded, but the trailing 'and so on' is filler and costs more clarity than it saves in length.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn 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 status mutation with a complete enum in the schema, the description covers the core action. Gaps remain around transition validity and return behavior, but with no output schema and a self-documenting enum, the missing pieces are modest.

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 50% (only service_ticket_id is documented, pointing at list_service_tickets). The description's partial enumeration omits unscheduled, requires_followup and canceled, making it less complete than the schema enum, and adds nothing about the id 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 ('moves') and resource ('a service ticket') plus the dimension being changed (status), so an agent can tell what it does. It does not differentiate from the sibling update_work_order_status, and the open-ended 'and so on' weakens the scope statement.

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_service_tickets/get_service_ticket to resolve a ticket, or versus update_work_order_status for the parallel workflow. Only implicit usage is conveyed 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_todoUpdate to-doA
Destructive
Inspect

Change a to-do's name, description, due date, priority or status, e.g. mark it complete.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
statusNocomplete closes the to-do.
todo_idYestodo_id from list_todos.
due_dateNo
due_timeNoe.g. 09:00 or 2:30 PM.
priorityNo
descriptionNo

TDQS

A3.5/5.0
Behavior3/5

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

The description is consistent with the annotations (readOnlyHint=false, destructiveHint=true) but adds no behavioral context beyond them. It does not clarify the key question for a 7-parameter update tool with only one required parameter: whether omitted fields are preserved (partial update) or cleared. The destructiveHint risk of overwriting existing values is left undisclosed.

Agents need to know what a tool does to the world before 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 verb and affected fields first and a concrete example trailing. Every clause carries information; 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 mutation tool with 7 parameters, no output schema, and destructive semantics, the definition should explain partial-update behavior and the effect of 'complete'. The description covers the field surface but leaves the most consequential behavior 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 low (43%), so the description should compensate, but it only lists field names already present in the schema and omits due_time entirely. It adds no semantics for priority levels, valid status transitions, or date/time format expectations beyond the schema's own inline notes.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 ('Change') and resource (a to-do) and enumerates the mutable fields, distinguishing it from create_todo/get_todo/list_todos by implication. It does not explicitly name a sibling or state that it modifies existing records only, 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?

'e.g. mark it complete' hints at the most common invocation, which is useful context for usage. However, there is no explicit statement of when to use this versus create_todo or delete_change_order, and no prerequisites (e.g. that todo_id must come from list_todos) are stated in the description.

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

update_work_order_statusUpdate work order statusC
Destructive
Inspect

Moves a work order to open, estimating, submitted, approved, canceled or completed.

ParametersJSON Schema
NameRequiredDescriptionDefault
statusYes
work_order_idYeswork_order_id from list_work_orders.

TDQS

C2.6/5.0
Behavior2/5

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

Annotations already flag destructiveHint=true, idempotentHint=false and openWorldHint=true, but the description adds nothing about what those mean here: whether the transition is irreversible, whether history/timestamps are recorded, or what side effects (notifications, billing) fire. For a destructive mutation, 'Moves' is too soft a verb and the description omits all consequence information.

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?

One short, front-loaded sentence with no padding, which is good. But the brevity is achieved by omitting necessary information rather than by efficient phrasing, so it reads as under-specified for a destructive state change.

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?

No output schema, a destructive non-idempotent annotation profile, and only two parameters — the bar is low, yet the description still says nothing about the result (does it return the updated work order?), error behavior on invalid transitions, or irreversibility. An agent could call it but cannot anticipate consequences.

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 50% and work_order_id already carries its own description pointing at list_work_orders. The sentence re-lists exactly the six status enum values without adding transition rules, ordering, or which of the states are terminal — 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 ('Moves') and resource ('a work order') plus the target state field, which is unambiguous. It distinguishes itself from the many update_*/create_* siblings by naming the status transition, though it never explicitly contrasts with update_change_order or update_service_ticket_status.

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 prerequisites, and no mention that transitions may be restricted (e.g. cannot go from canceled back to completed). The agent gets no help deciding whether this is the right tool versus update_work_order-style edits or list_work_orders.

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. 109 tool updates
    • First observedadd_change_order_items
    • First observedadd_estimate_items
    • First observedadd_invoice_items
    • First observedadd_project_note
    • First observedcotlet_apps
    • First observedcotlet_balance
    • First observedcotlet_browser_click
    • First observedcotlet_browser_close
    • First observedcotlet_browser_connect
    • First observedcotlet_browser_navigate
    • First observedcotlet_browser_open
    • First observedcotlet_browser_press
    • First observedcotlet_browser_read
    • First observedcotlet_browser_screenshot
    • First observedcotlet_browser_scroll
    • First observedcotlet_browser_select
    • First observedcotlet_browser_sessions
    • First observedcotlet_browser_type
    • First observedcotlet_browser_upload
    • First observedcotlet_get_call
    • First observedcotlet_report_issue
    • First observedcotlet_request_apps
    • First observedcotlet_upload_file
    • First observedcotlet_whoami
    • First observedcreate_bill
    • First observedcreate_change_order
    • First observedcreate_contact
    • First observedcreate_daily_log
    • First observedcreate_estimate
    • First observedcreate_expense
    • First observedcreate_inspection
    • First observedcreate_invoice
    • First observedcreate_lead
    • First observedcreate_opportunity
    • First observedcreate_project
    • First observedcreate_punchlist
    • First observedcreate_purchase_order
    • First observedcreate_rfi
    • First observedcreate_service_ticket
    • First observedcreate_share_link
    • First observedcreate_sub_contract
    • First observedcreate_todo
    • First observedcreate_work_order
    • First observeddelete_change_order
    • First observeddelete_estimate
    • First observeddelete_invoice
    • First observedget_bill
    • First observedget_change_order
    • First observedget_clock_status
    • First observedget_contact
    • First observedget_daily_log
    • First observedget_estimate
    • First observedget_expense
    • First observedget_inspection
    • First observedget_invoice
    • First observedget_job_costing
    • First observedget_opportunity
    • First observedget_project
    • First observedget_punchlist
    • First observedget_purchase_order
    • First observedget_rfi
    • First observedget_service_ticket
    • First observedget_sub_contract
    • First observedget_submittal
    • First observedget_time_card
    • First observedget_todo
    • First observedget_work_order
    • First observedlist_bills
    • First observedlist_change_orders
    • First observedlist_contacts
    • First observedlist_cost_codes
    • First observedlist_cost_items
    • First observedlist_daily_logs
    • First observedlist_estimates
    • First observedlist_expenses
    • First observedlist_inspections
    • First observedlist_invoices
    • First observedlist_leads
    • First observedlist_opportunities
    • First observedlist_payments
    • First observedlist_project_crew_hours
    • First observedlist_project_files
    • First observedlist_project_notes
    • First observedlist_projects
    • First observedlist_punchlists
    • First observedlist_purchase_orders
    • First observedlist_rfis
    • First observedlist_schedule_tasks
    • First observedlist_service_tickets
    • First observedlist_sub_contracts
    • First observedlist_submittals
    • First observedlist_time_cards
    • First observedlist_todos
    • First observedlist_work_orders
    • First observedrecord_inspection_result
    • First observedrecord_payment
    • First observedremove_estimate_items
    • First observedsend_change_order
    • First observedsend_estimate
    • First observedsend_invoice
    • First observedupdate_change_order
    • First observedupdate_daily_log
    • First observedupdate_estimate
    • First observedupdate_invoice
    • First observedupdate_project
    • First observedupdate_schedule_task
    • First observedupdate_service_ticket_status
    • First observedupdate_todo
    • First observedupdate_work_order_status

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    Enables construction teams to create local projects, record sourced field evidence, run deterministic quantity calculations, and draft daily logs, estimates, and change orders with visible assumptions and human approval gates. Keeps all data local and portable with no external side effects.
    10
    Apache 2.0
  • F
    license
    Not graded
    quality
    D
    maintenance
    Provides construction cost estimation tools using data from a public Google Sheet for items like concrete, framing, and electrical. It allows users to search items, filter by category, and calculate total project costs including labor and material expenses.
    -
  • A
    license
    A
    quality
    B
    maintenance
    Enables trades and field service work to be tracked per job: logging labor hours at worker rates and materials used, keeping running totals in integer cents per currency, and moving each job through a status machine from open to invoiced or archived. It also produces daily or weekly summaries of hours and value, and renders a printable card with a signature line for client sign-off.
    11
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.