Contractor Foreman by Cotlet
Server Details
Projects, estimates, daily logs and invoices in Contractor Foreman.
- 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
Scored across 109 tools
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.
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.
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.
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 toolsadd_change_order_itemsAdd change order itemsCDestructiveInspect
Adds priced line items to a change order or change order request.
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | ||
| change_order_id | Yes | From list_change_orders. |
TDQS
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.
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.
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.
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.
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.
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 itemsCDestructiveInspect
Adds priced line items to an existing estimate.
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | ||
| section_id | No | From get_estimate. Default: the first section. | |
| estimate_id | Yes | From list_estimates or create_estimate. |
TDQS
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.
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.
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.
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.
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.
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 itemsCDestructiveInspect
Adds priced line items to an invoice.
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | ||
| invoice_id | Yes | From list_invoices or create_invoice. |
TDQS
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.
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.
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.
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.
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.
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 noteCDestructiveInspect
Adds a note to a project's Notes tab.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | ||
| title | No | ||
| project_id | Yes | The project's numeric id (list_projects). |
TDQS
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.
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.
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.
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.
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.
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 useARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| app | No | Only this app, e.g. skool. |
TDQS
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.
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.
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.
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.
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.
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 balanceARead-onlyInspect
The user's current credit balance. Free. Needs the user's Cotlet API key or sign-in.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and 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.
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.
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.
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.
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.
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 pageADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| element | Yes | The element's number in the element list of the current page. |
TDQS
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.
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.
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.
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.
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.
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 browserAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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_openOpen the browserARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | A public http or https address, e.g. https://example.com. In an app's browser, a page of that app. |
TDQS
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.
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.
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.
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.
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.
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 keyADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | The key. |
TDQS
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.
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.
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.
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.
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.
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 pageARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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 pageARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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 pageARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| element | No | Scroll until this element of the element list is in view. | |
| screens | No | How far, in viewport heights, for down and up. Default: 0.8. | |
| direction | No | Where to scroll. Default: down. |
TDQS
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.
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.
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.
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.
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.
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 listADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| option | Yes | The option. | |
| element | Yes | The element's number in the element list of the current page. |
TDQS
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.
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.
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.
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.
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.
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 themADestructiveIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| close | No | End the connections and revoke the links. |
TDQS
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.
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.
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.
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.
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.
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 pageADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The text to type. | |
| submit | No | Press Enter after typing, e.g. to search. | |
| element | Yes | The element's number in the element list of the current page. |
TDQS
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.
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.
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.
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.
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.
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 fileADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| files | Yes | The files. | |
| element | Yes | The element's number in the element list of the current page. |
TDQS
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.
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.
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.
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.
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.
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 callARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| call_id | Yes | call_id from the earlier call |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description 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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| app | No | App slug the report is about, e.g. 'skool'. | |
| kind | Yes | bug: 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. | |
| tool | No | Tool or endpoint name, e.g. 'skool_list_members'. | |
| title | Yes | One line, e.g. 'skool_list_members stops after 50 members'. | |
| client | No | Agent or tool sending this, e.g. 'Claude Code'. | |
| call_id | No | call_id of the call that went wrong, if any. | |
| description | Yes | What you tried, what you expected and what happened, with the error text if there was one. No passwords, tokens or other secrets. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| apps | Yes | App slugs, e.g. ["skool", "substack"]. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | File name, e.g. photo.jpg. | |
| content_type | No | MIME type, e.g. image/jpeg. |
TDQS
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.
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.
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.
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.
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.
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 IARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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 billCDestructiveInspect
Records a vendor bill with its line items, optionally against a project.
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | Line items. The total is the sum of quantity times unit cost. | |
| notes | No | ||
| number | Yes | The vendor's invoice number. | |
| subject | No | ||
| due_date | No | YYYY-MM-DD. | |
| bill_date | No | YYYY-MM-DD. Default: today. | |
| vendor_id | Yes | A vendor's contact_id (list_contacts type vendor). | |
| project_id | No | The project the cost belongs to. |
TDQS
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.
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.
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.
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.
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.
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 orderCDestructiveInspect
Creates a change order or change order request on a project, with line items.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Default: today. | |
| kind | No | request = a change order request (COR) to price before it becomes a change order. | change_order |
| items | No | ||
| title | Yes | ||
| number | No | Your own number. Default: the app's next, or COR-<requests on the project + 1>. | |
| project_id | Yes | From list_projects. | |
| description | No | Why it changes: who asked, when, what. |
TDQS
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.
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.
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.
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.
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.
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 contactCDestructiveInspect
Adds a customer, employee, contractor, vendor or misc contact to the Directory.
| Name | Required | Description | Default |
|---|---|---|---|
| zip | No | ||
| cell | No | ||
| city | No | ||
| type | Yes | What kind of contact. | |
| No | |||
| phone | No | ||
| state | No | ||
| address1 | No | ||
| address2 | No | ||
| last_name | No | ||
| first_name | No | ||
| company_name | No | Required for contractors and vendors. |
TDQS
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.
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.
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.
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.
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.
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 logCDestructiveInspect
New daily log on a project: work notes, people, deliveries, weather notes and delays.
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | Log date. | |
| notes | Yes | Work done and site notes (the log's Work Performed). | |
| people | No | Crews, subcontractors and visitors on site: headcount per crew, or free text. | |
| visitors | No | Visitors on site (inspector, owner, architect). | |
| project_id | Yes | project_id from list_projects. | |
| arrival_time | No | Arrival on site, e.g. 07:00 or 7:00 AM. | |
| jobsite_notes | No | Jobsite condition notes. | |
| weather_delay | No | What the weather delayed. Marks a weather delay. | |
| weather_notes | No | Your own notes next to the recorded weather. | |
| departure_time | No | Departure from site, e.g. 15:30. | |
| schedule_delay | No | What else held the schedule up. Marks a schedule delay. | |
| materials_delivered | No | Materials delivered or used, one line each. |
TDQS
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.
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.
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.
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.
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.
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 estimateBDestructiveInspect
Creates a draft estimate on a project or for a customer, with priced line items.
| Name | Required | Description | Default |
|---|---|---|---|
| items | No | ||
| title | Yes | ||
| exclusions | No | ||
| inclusions | No | ||
| project_id | No | From list_projects. Its customer is used. | |
| customer_id | No | Directory customer id. Needed without a project. | |
| description | No | Scope shown on the estimate. | |
| expire_date | No |
TDQS
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.
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.
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.
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.
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.
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 expenseCDestructiveInspect
Records an expense (receipt, purchase, fee) with amount, date, vendor and project.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | YYYY-MM-DD. Default: today. | |
| name | Yes | What was bought or paid. | |
| type | No | material | |
| amount | Yes | In the account currency. | |
| reason | No | ||
| billable | No | Bill it on to the customer. | |
| vendor_id | No | The vendor's contact_id (list_contacts type vendor). | |
| project_id | Yes | The project the cost belongs to (list_projects). The app refuses an expense without one. |
TDQS
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.
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.
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.
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.
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.
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 inspectionCDestructiveInspect
Logs an inspection on a project with type, date, agency, inspector and notes.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Inspection day, YYYY-MM-DD. Default: today. | |
| type | Yes | e.g. Framing, Rough Electrical. | |
| notes | No | ||
| agency | No | ||
| project_id | Yes | The project being inspected. | |
| inspected_by | No | Inspector or office. |
TDQS
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.
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.
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.
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.
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.
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 invoiceBDestructiveInspect
Creates a draft invoice for a project or customer, with priced line items.
| Name | Required | Description | Default |
|---|---|---|---|
| items | No | ||
| number | No | Your own number. Default: the app's next. | |
| due_date | No | ||
| project_id | No | From list_projects. Its customer is billed. | |
| customer_id | No | Directory customer id. Needed without a project. | |
| description | No | Shown on the invoice. Needs due_date in the same call. | |
| invoice_date | No | Default: today. |
TDQS
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.
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.
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.
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.
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.
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 leadCDestructiveInspect
Adds a sales lead with contact details and a pipeline stage.
| Name | Required | Description | Default |
|---|---|---|---|
| zip | No | ||
| cell | No | ||
| city | No | ||
| No | |||
| phone | No | ||
| stage | No | received | |
| state | No | ||
| address1 | No | ||
| address2 | No | ||
| last_name | No | ||
| first_name | No | ||
| company_name | No |
TDQS
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.
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.
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.
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.
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.
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 opportunityCDestructiveInspect
Adds a sales opportunity for a customer with stage, score, budget and expected sale date.
| Name | Required | Description | Default |
|---|---|---|---|
| zip | No | ||
| city | No | ||
| name | Yes | ||
| score | No | ||
| stage | No | received | |
| state | No | ||
| budget | No | Expected value in the account currency. | |
| number | No | Your opportunity number. Left out: OPP- and the UTC date and time, as OPP-261021-1213. | |
| address1 | No | ||
| customer_id | Yes | A customer's contact_id (list_contacts type customer). | |
| project_type | No | commercial | |
| est_sales_date | No | Expected sale date, YYYY-MM-DD. |
TDQS
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.
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.
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.
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.
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.
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 projectCDestructiveInspect
New project for a customer, with number, type, stage, address and dates.
| Name | Required | Description | Default |
|---|---|---|---|
| zip | No | ||
| city | No | ||
| name | Yes | Project name, e.g. Kitchen remodel - Oak St. | |
| type | No | residential | |
| state | No | ||
| number | No | Project number. Default: the next number when the account numbers projects itself. | |
| status | No | pending | |
| street | No | ||
| street2 | No | ||
| end_date | No | ||
| start_date | No | ||
| customer_id | Yes | The customer's contact_id from list_contacts. | |
| description | No |
TDQS
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.
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.
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.
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.
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.
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 punchlistCDestructiveInspect
New, empty punchlist on a project.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Punchlist name, e.g. Final walkthrough - kitchen. | |
| project_id | Yes | project_id from list_projects. |
TDQS
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.
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.
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.
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.
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.
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 orderBDestructiveInspect
Creates a draft purchase order to a supplier with line items, optionally for a project.
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | Line items. The total is the sum of quantity times unit cost. | |
| notes | No | ||
| subject | Yes | ||
| vendor_id | Yes | The supplier's contact_id (list_contacts type vendor). | |
| order_date | No | YYYY-MM-DD. Default: today. | |
| project_id | No | The project the order is for. |
TDQS
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.
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.
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.
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.
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.
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 RFICDestructiveInspect
Drafts a request for information on a project, with the question and a reply-by date.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | ||
| question | Yes | The information requested. | |
| plan_sheet | No | Plan sheet number. | |
| project_id | Yes | The project the question is about. | |
| reference_area | No | Area or element it refers to. | |
| response_needed_by | No | YYYY-MM-DD. |
TDQS
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.
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.
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.
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.
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.
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 ticketBDestructiveInspect
Opens a service ticket for a customer, optionally scheduled for a date and time.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | ||
| project_id | No | Links the ticket to a project. The service address is then the project's. | |
| customer_id | Yes | A customer's contact_id (list_contacts type customer). | |
| description | No | What the customer reported. | |
| service_date | No | Planned visit, YYYY-MM-DD. The ticket is then Scheduled. | |
| service_time | No | Planned time on the 24-hour clock, like 13:30. |
TDQS
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.
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.
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.
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.
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.
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-contractBDestructiveInspect
Creates a draft sub-contract with a subcontractor on a project.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | YYYY-MM-DD. Default: today. | |
| subject | Yes | ||
| project_id | Yes | The project the work is for. | |
| contractor_id | Yes | The subcontractor's contact_id (type contractor). | |
| agreement_number | Yes | Your agreement number, e.g. the project number and a sequence (BP-2001-07). |
TDQS
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.
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.
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.
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.
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.
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-doADestructiveInspect
New to-do, optionally on a project, with due date, priority and assignees. Waits for the owner's approval.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | What has to be done. | |
| due_date | No | ||
| due_time | No | e.g. 09:00 or 2:30 PM. | |
| priority | No | medium | |
| project_id | No | Project from list_projects. | |
| description | No | ||
| assignee_ids | No | contact_id values from list_contacts of the employees or contacts who should do it. |
TDQS
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.
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.
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.
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.
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.
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 orderBDestructiveInspect
Creates an Open work order on a project with subject, description and dates.
| Name | Required | Description | Default |
|---|---|---|---|
| subject | Yes | ||
| end_date | No | YYYY-MM-DD, not before start_date. Default: today. | |
| project_id | Yes | The project the work is on. | |
| start_date | No | YYYY-MM-DD. Default: today. | |
| description | No | What has to be done. |
TDQS
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.
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.
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.
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.
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.
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 orderBDestructiveInspect
Deletes a change order or change order request for good.
| Name | Required | Description | Default |
|---|---|---|---|
| change_order_id | Yes | From list_change_orders. |
TDQS
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.
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.
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.
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.
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.
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 estimateBDestructiveInspect
Deletes an estimate for good.
| Name | Required | Description | Default |
|---|---|---|---|
| estimate_id | Yes | From list_estimates. |
TDQS
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.
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.
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.
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.
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.
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 invoiceADestructiveInspect
Deletes an invoice that has no payments, for good.
| Name | Required | Description | Default |
|---|---|---|---|
| invoice_id | Yes | From list_invoices. |
TDQS
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.
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.
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.
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.
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.
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 billARead-onlyIdempotentInspect
One vendor bill with its line items, dates, total, balance due and status.
| Name | Required | Description | Default |
|---|---|---|---|
| bill_id | Yes | bill_id from list_bills. |
TDQS
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.
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.
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.
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.
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.
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 orderBRead-onlyIdempotentInspect
One change order or request with description, status, total and line items.
| Name | Required | Description | Default |
|---|---|---|---|
| change_order_id | Yes | From list_change_orders. |
TDQS
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.
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.
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.
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.
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.
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 statusARead-onlyIdempotentInspect
Who is clocked in right now, whether you are, and this and last week's crew hours.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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 contactARead-onlyIdempotentInspect
One Directory record in full: contact details, status, services, terms and additional contacts.
| Name | Required | Description | Default |
|---|---|---|---|
| contact_id | Yes | contact_id from list_contacts or list_leads. |
TDQS
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.
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.
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.
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.
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.
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 logARead-onlyIdempotentInspect
One daily log: work notes, people and visitors, materials, equipment, weather and delays.
| Name | Required | Description | Default |
|---|---|---|---|
| daily_log_id | Yes | daily_log_id from list_daily_logs. |
TDQS
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.
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.
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.
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.
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.
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 estimateARead-onlyIdempotentInspect
One estimate with customer, dates, terms, totals and every line item.
| Name | Required | Description | Default |
|---|---|---|---|
| estimate_id | Yes | From list_estimates. |
TDQS
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.
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.
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.
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.
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.
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 expenseCRead-onlyIdempotentInspect
One expense with amount, date, vendor, project, cost type, cost code and reason.
| Name | Required | Description | Default |
|---|---|---|---|
| expense_id | Yes | expense_id from list_expenses. |
TDQS
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.
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.
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.
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.
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.
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 inspectionCRead-onlyIdempotentInspect
One inspection with type, project, date, result, agency, inspector and notes.
| Name | Required | Description | Default |
|---|---|---|---|
| inspection_id | Yes | inspection_id from list_inspections. |
TDQS
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.
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.
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.
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.
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.
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 invoiceARead-onlyIdempotentInspect
One invoice with customer, dates, terms, line items, payments and balance due.
| Name | Required | Description | Default |
|---|---|---|---|
| invoice_id | Yes | From list_invoices. |
TDQS
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.
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.
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.
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.
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.
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 costingARead-onlyIdempotentInspect
Estimated and actual cost per cost code for one project, with the difference and totals.
| Name | Required | Description | Default |
|---|---|---|---|
| labor_rate | No | Rate that prices time card hours as labor cost. | burden_rate |
| project_id | Yes | project_id from list_projects. | |
| budget_from | No | Estimated cost from the Schedule of Values or the approved estimates. Default: the project's own setting. |
TDQS
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.
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.
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.
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.
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.
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 opportunityARead-onlyIdempotentInspect
One opportunity in full: customer contact, stage, score, budget, notes and last activity.
| Name | Required | Description | Default |
|---|---|---|---|
| opportunity_id | Yes | opportunity_id from list_opportunities. |
TDQS
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.
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.
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.
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.
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.
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 projectCRead-onlyIdempotentInspect
One project: customer, address, stage, dates, contract amounts, costs, billing and retainage.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | project_id from list_projects. |
TDQS
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.
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.
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.
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.
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.
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 punchlistBRead-onlyIdempotentInspect
One punchlist: project, address, customer and how many items are open and completed.
| Name | Required | Description | Default |
|---|---|---|---|
| punchlist_id | Yes | punchlist_id from list_punchlists. |
TDQS
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.
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.
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.
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.
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.
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 orderBRead-onlyIdempotentInspect
One purchase order with supplier, dates, status and its line items.
| Name | Required | Description | Default |
|---|---|---|---|
| purchase_order_id | Yes | purchase_order_id from list_purchase_orders. |
TDQS
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.
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.
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.
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.
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.
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 RFIBRead-onlyIdempotentInspect
One RFI with its question, dates, answer and status.
| Name | Required | Description | Default |
|---|---|---|---|
| rfi_id | Yes | rfi_id from list_rfis. |
TDQS
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.
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.
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.
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.
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.
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 ticketBRead-onlyIdempotentInspect
One service ticket with customer, service address, schedule, technicians and priority.
| Name | Required | Description | Default |
|---|---|---|---|
| service_ticket_id | Yes | service_ticket_id from list_service_tickets. |
TDQS
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.
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.
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.
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.
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.
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-contractCRead-onlyIdempotentInspect
One sub-contract with subcontractor, amounts, retainage, scope of work and items.
| Name | Required | Description | Default |
|---|---|---|---|
| sub_contract_id | Yes | sub_contract_id from list_sub_contracts. |
TDQS
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.
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.
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.
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.
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.
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 submittalBRead-onlyIdempotentInspect
One submittal with plan sheet, specification section, status, dates and its items.
| Name | Required | Description | Default |
|---|---|---|---|
| submittal_id | Yes | submittal_id from list_submittals. |
TDQS
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.
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.
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.
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.
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.
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 cardBRead-onlyIdempotentInspect
One time card or crew sheet with hours per employee and cost code.
| Name | Required | Description | Default |
|---|---|---|---|
| timecard_id | Yes | timecard_id from list_time_cards. |
TDQS
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.
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.
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.
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.
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.
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-doBRead-onlyIdempotentInspect
One to-do: description, project, priority, status, due date, assignees and checklist.
| Name | Required | Description | Default |
|---|---|---|---|
| todo_id | Yes | todo_id from list_todos. |
TDQS
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.
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.
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.
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.
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.
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 orderBRead-onlyIdempotentInspect
One work order with project, customer, status, dates, location, notes and items.
| Name | Required | Description | Default |
|---|---|---|---|
| work_order_id | Yes | work_order_id from list_work_orders. |
TDQS
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.
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.
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.
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.
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.
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 billsCRead-onlyIdempotentInspect
Vendor bills with vendor, project, dates, total, balance due and status.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| cursor | No | next_cursor from the previous call. | |
| search | No | Words to look for. | |
| project_id | No | Only this project's records. |
TDQS
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.
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.
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.
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.
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.
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 ordersBRead-onlyIdempotentInspect
Change orders and change order requests, newest first, with status, project and total.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | request = change order requests (COR) not yet turned into a change order. | all |
| limit | No | ||
| cursor | No | next_cursor from the previous call. | |
| search | No | Matches the title or number. | |
| status | No | With kind all or change_order, a change order status. Request statuses need kind request. | |
| project_id | No | Only this project's (list_projects). | |
| include_archived | No |
TDQS
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.
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.
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.
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.
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.
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 contactsCRead-onlyIdempotentInspect
Customers, employees, contractors, vendors and misc contacts from the Directory.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Only this kind of contact. Left out: all of them, leads excluded. | |
| limit | No | ||
| cursor | No | next_cursor from the previous call. | |
| search | No | Name, company, email or phone to look for. |
TDQS
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.
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.
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.
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.
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.
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 codesBRead-onlyIdempotentInspect
The company's cost codes, to put on estimate, change order and invoice items.
| Name | Required | Description | Default |
|---|---|---|---|
| search | No | Matches the code or the name. |
TDQS
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.
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.
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.
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.
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.
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 itemsCRead-onlyIdempotentInspect
Saved cost items with unit, unit cost and markup, to price estimate and change order lines.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | ||
| limit | No | ||
| cursor | No | next_cursor from the previous call. | |
| search | No | Matches the item name. |
TDQS
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.
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.
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.
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.
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.
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 logsCRead-onlyIdempotentInspect
Daily logs by date, optionally for one project and a date range.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | Last log date. | |
| from | No | First log date. | |
| limit | No | ||
| cursor | No | next_cursor from the previous call. | |
| search | No | Text to match, as the search box of the Daily Logs list. | |
| project_id | No | Only logs of this project. |
TDQS
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.
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.
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.
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.
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.
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 estimatesCRead-onlyIdempotentInspect
Estimates, newest first, with status, project, customer and total.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| cursor | No | next_cursor from the previous call. | |
| search | No | Matches the title, number or customer. | |
| status | No | ||
| project_id | No | Only estimates of this project (list_projects). | |
| include_archived | No |
TDQS
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.
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.
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.
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.
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.
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 expensesCRead-onlyIdempotentInspect
Expenses with amount, date, vendor, project, cost type and who paid.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| cursor | No | next_cursor from the previous call. | |
| search | No | Words to look for. | |
| project_id | No | Only this project's records. |
TDQS
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.
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.
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.
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.
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.
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 inspectionsCRead-onlyIdempotentInspect
Inspections with project, type, date, result, agency and permit number.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| cursor | No | next_cursor from the previous call. | |
| search | No | Words to look for. | |
| project_id | No | Only this project's records. |
TDQS
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.
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.
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.
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.
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.
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 invoicesBRead-onlyIdempotentInspect
Invoices, newest first, with status, totals, balance due and an overdue flag.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| cursor | No | next_cursor from the previous call. | |
| search | No | Matches the number, project or customer. | |
| status | No | ||
| due_before | No | Only invoices due before this date. | |
| project_id | No | Only this project's (list_projects). | |
| customer_id | No | Only this customer's. | |
| unpaid_only | No | Only submitted or on-hold invoices with a balance due. |
TDQS
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.
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.
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.
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.
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.
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 leadsCRead-onlyIdempotentInspect
Sales leads with contact details, stage and quality score.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| cursor | No | next_cursor from the previous call. | |
| search | No | Name, company, email or phone to look for. |
TDQS
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.
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.
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.
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.
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.
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 opportunitiesCRead-onlyIdempotentInspect
Sales opportunities with customer, stage, score, budget and expected sale date.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| cursor | No | next_cursor from the previous call. | |
| search | No | Words in the name, number or customer. |
TDQS
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.
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.
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.
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.
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.
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 paymentsBRead-onlyIdempotentInspect
Payments received on invoices, newest first, with amount, method and invoice.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| cursor | No | next_cursor from the previous call. | |
| project_id | No | Only this project's (list_projects). | |
| customer_id | No | Only this customer's. |
TDQS
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.
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.
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.
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.
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.
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 hoursARead-onlyIdempotentInspect
Hours and labor cost logged on one project, per employee and per day and cost code.
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | No | Hours up to this day, YYYY-MM-DD. | |
| project_id | Yes | The project's numeric id (list_projects). | |
| start_date | No | Hours from this day on, YYYY-MM-DD. |
TDQS
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.
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.
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.
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.
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.
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 filesARead-onlyIdempotentInspect
Photos and documents on a project, with name, size and a download link.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | The project's numeric id (list_projects). |
TDQS
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.
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.
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.
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.
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.
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 notesCRead-onlyIdempotentInspect
The notes on a project's Notes tab, with author and time.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | The project's numeric id (list_projects). |
TDQS
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.
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.
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.
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.
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.
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 projectsCRead-onlyIdempotentInspect
Projects with customer, stage, dates, contract amount, costs and percent complete.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| cursor | No | next_cursor from the previous call. | |
| search | No | Match on project name, number or customer. | |
| status | No | Only projects in this stage. | |
| include_completed | No | Include completed projects. Ignored when status is set. |
TDQS
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.
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.
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.
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.
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.
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 punchlistsBRead-onlyIdempotentInspect
Punchlists with project, status, open and completed item counts and who the items are assigned to.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| cursor | No | next_cursor from the previous call. | |
| search | No | Text to match, as the search box of the Punchlists list. | |
| project_id | No | Only punchlists of this project. |
TDQS
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.
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.
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.
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.
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.
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 ordersBRead-onlyIdempotentInspect
Purchase orders with supplier, project, order date, total and status.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| cursor | No | next_cursor from the previous call. | |
| search | No | Words to look for. | |
| project_id | No | Only this project's records. |
TDQS
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.
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.
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.
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.
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.
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 RFIsCRead-onlyIdempotentInspect
Requests for information with question, project, dates, answer and status.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| cursor | No | next_cursor from the previous call. | |
| search | No | Words to look for. | |
| project_id | No | Only this project's records. |
TDQS
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.
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.
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.
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.
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.
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 tasksARead-onlyIdempotentInspect
Gantt schedule tasks of a project: dates, duration, dependencies, assignees, percent complete.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | project_id from list_projects. |
TDQS
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.
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.
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.
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.
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.
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 ticketsCRead-onlyIdempotentInspect
Service tickets with customer, status, service date and time and technicians.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| cursor | No | next_cursor from the previous call. | |
| search | No | Words to look for. | |
| project_id | No | Only this project's records. |
TDQS
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.
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.
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.
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.
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.
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-contractsCRead-onlyIdempotentInspect
Sub-contracts with subcontractor, project, amount, billed, paid, balance and status.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| cursor | No | next_cursor from the previous call. | |
| search | No | Words to look for. | |
| project_id | No | Only this project's records. |
TDQS
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.
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.
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.
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.
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.
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 submittalsCRead-onlyIdempotentInspect
Submittals with project, status, date received, due date and approver.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| cursor | No | next_cursor from the previous call. | |
| search | No | Words to look for. | |
| project_id | No | Only this project's records. |
TDQS
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.
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.
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.
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.
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.
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 cardsARead-onlyIdempotentInspect
Time cards with employee or crew, project, clock-in and clock-out times and hours, newest first.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| cursor | No | next_cursor from the previous call. | |
| end_date | No | Cards up to this day, YYYY-MM-DD. | |
| project_id | No | Only this project's cards. | |
| start_date | No | Cards from this day on, YYYY-MM-DD. | |
| employee_id | No | Only this employee's cards (contact_id). |
TDQS
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.
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.
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.
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.
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.
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-dosCRead-onlyIdempotentInspect
To-dos with project, priority, status, due date and assignees.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| cursor | No | next_cursor from the previous call. | |
| search | No | Text to match, as the search box of the To-Do list. | |
| status | No | ||
| mine_only | No | Only to-dos assigned to this account's user. | |
| project_id | No | Only to-dos of this project. |
TDQS
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.
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.
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.
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.
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.
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 ordersCRead-onlyIdempotentInspect
Work orders with project, customer, status, dates, total and assignee.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| cursor | No | next_cursor from the previous call. | |
| search | No | Words to look for. | |
| project_id | No | Only this project's records. |
TDQS
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.
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.
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.
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.
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.
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 resultCDestructiveInspect
Marks an inspection passed, failed or to re-inspect, optionally with notes.
| Name | Required | Description | Default |
|---|---|---|---|
| notes | No | Replaces the inspection's notes. | |
| result | Yes | ||
| inspection_id | Yes | inspection_id from list_inspections. |
TDQS
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.
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.
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.
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.
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.
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 paymentBDestructiveInspect
Records a payment you received against an invoice.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Default: today. | |
| notes | No | e.g. the check number. | |
| amount | Yes | Dollars, at most the balance due. | |
| method | Yes | ||
| status | No | received | |
| invoice_id | Yes | From list_invoices. |
TDQS
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.
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.
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.
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.
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.
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 itemsCDestructiveInspect
Deletes line items from an estimate.
| Name | Required | Description | Default |
|---|---|---|---|
| item_ids | Yes | item_id values from get_estimate. | |
| estimate_id | Yes | From list_estimates. |
TDQS
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.
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.
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.
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.
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.
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 orderADestructiveInspect
Emails the change order as a PDF to the customer or to the addresses you give. Waits for the owner's approval.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | Recipient emails. Default: the project's customer. | |
| copy_me | No | ||
| message | No | Email text above the PDF. | |
| subject | No | Default: the app's 'Change Order #n'. | |
| change_order_id | Yes | From list_change_orders. |
TDQS
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.
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.
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.
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.
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.
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 estimateADestructiveInspect
Emails the estimate as a PDF to the customer or to the addresses you give. Waits for the owner's approval.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | Recipient emails. Default: the estimate's customer. | |
| copy_me | No | Send a copy to you. | |
| message | No | Email text above the PDF. | |
| subject | No | Default: the app's 'Estimate: <title> (#n)'. | |
| estimate_id | Yes | From list_estimates or create_estimate. |
TDQS
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.
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.
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.
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.
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.
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 invoiceADestructiveInspect
Emails the invoice as a PDF to the customer or to the addresses you give. Waits for the owner's approval.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | Recipient emails. Default: the invoice's customer. | |
| copy_me | No | ||
| message | No | Email text above the PDF. | |
| subject | No | Default: the app's 'Invoice #n'. | |
| invoice_id | Yes | From list_invoices or create_invoice. |
TDQS
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.
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.
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.
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.
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.
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 orderCDestructiveInspect
Changes a change order's status, title, reason or date.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | ||
| title | No | ||
| status | No | ||
| description | No | ||
| change_order_id | Yes | From list_change_orders. |
TDQS
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.
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.
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.
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.
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.
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 logCDestructiveInspect
Change the notes, times, people, deliveries, weather notes or delays of a daily log.
| Name | Required | Description | Default |
|---|---|---|---|
| notes | No | Work done and site notes (the log's Work Performed). | |
| people | No | Crews, subcontractors and visitors on site: headcount per crew, or free text. | |
| visitors | No | Visitors on site (inspector, owner, architect). | |
| arrival_time | No | Arrival on site, e.g. 07:00 or 7:00 AM. | |
| daily_log_id | Yes | daily_log_id from list_daily_logs. | |
| jobsite_notes | No | Jobsite condition notes. | |
| weather_delay | No | What the weather delayed. Marks a weather delay. | |
| weather_notes | No | Your own notes next to the recorded weather. | |
| departure_time | No | Departure from site, e.g. 15:30. | |
| schedule_delay | No | What else held the schedule up. Marks a schedule delay. | |
| materials_delivered | No | Materials delivered or used, one line each. |
TDQS
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.
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.
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.
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.
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.
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 estimateCDestructiveInspect
Changes an estimate's status, title, dates, description, inclusions or exclusions.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | ||
| status | No | ||
| exclusions | No | ||
| inclusions | No | ||
| description | No | ||
| estimate_id | Yes | From list_estimates. | |
| expire_date | No | ||
| estimate_date | No |
TDQS
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.
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.
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.
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.
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.
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 invoiceCDestructiveInspect
Changes an invoice's status, invoice date, due date or description.
| Name | Required | Description | Default |
|---|---|---|---|
| status | No | ||
| due_date | No | ||
| invoice_id | Yes | From list_invoices. | |
| description | No | ||
| invoice_date | No |
TDQS
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.
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.
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.
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.
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.
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 projectCDestructiveInspect
Change a project's name, stage, type, address, dates or description.
| Name | Required | Description | Default |
|---|---|---|---|
| zip | No | ||
| city | No | ||
| name | No | ||
| type | No | ||
| state | No | ||
| status | No | New stage, e.g. started or completed. | |
| street | No | ||
| street2 | No | ||
| end_date | No | ||
| project_id | Yes | project_id from list_projects. | |
| start_date | No | ||
| description | No |
TDQS
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.
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.
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.
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.
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.
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 taskCDestructiveInspect
Change the name, dates, length or percent complete of a task on the project schedule.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| task_id | Yes | task_id from list_schedule_tasks. | |
| end_date | No | New last day. | |
| project_id | Yes | project_id from list_projects. | |
| start_date | No | New first day. Alone, it moves the task and keeps its length. | |
| duration_days | No | New length in days, from the start. | |
| percent_complete | No |
TDQS
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.
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.
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.
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.
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.
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 statusCDestructiveInspect
Moves a service ticket to scheduled, en route, checked in, completed, closed and so on.
| Name | Required | Description | Default |
|---|---|---|---|
| status | Yes | ||
| service_ticket_id | Yes | service_ticket_id from list_service_tickets. |
TDQS
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.
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.
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.
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.
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.
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-doADestructiveInspect
Change a to-do's name, description, due date, priority or status, e.g. mark it complete.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| status | No | complete closes the to-do. | |
| todo_id | Yes | todo_id from list_todos. | |
| due_date | No | ||
| due_time | No | e.g. 09:00 or 2:30 PM. | |
| priority | No | ||
| description | No |
TDQS
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.
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.
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.
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.
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.
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 statusCDestructiveInspect
Moves a work order to open, estimating, submitted, approved, canceled or completed.
| Name | Required | Description | Default |
|---|---|---|---|
| status | Yes | ||
| work_order_id | Yes | work_order_id from list_work_orders. |
TDQS
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.
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.
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.
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.
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.
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.
109 tool updates
- First observed
add_change_order_items - First observed
add_estimate_items - First observed
add_invoice_items - First observed
add_project_note - First observed
cotlet_apps - First observed
cotlet_balance - First observed
cotlet_browser_click - First observed
cotlet_browser_close - First observed
cotlet_browser_connect - First observed
cotlet_browser_navigate - First observed
cotlet_browser_open - First observed
cotlet_browser_press - First observed
cotlet_browser_read - First observed
cotlet_browser_screenshot - First observed
cotlet_browser_scroll - First observed
cotlet_browser_select - First observed
cotlet_browser_sessions - First observed
cotlet_browser_type - First observed
cotlet_browser_upload - First observed
cotlet_get_call - First observed
cotlet_report_issue - First observed
cotlet_request_apps - First observed
cotlet_upload_file - First observed
cotlet_whoami - First observed
create_bill - First observed
create_change_order - First observed
create_contact - First observed
create_daily_log - First observed
create_estimate - First observed
create_expense - First observed
create_inspection - First observed
create_invoice - First observed
create_lead - First observed
create_opportunity - First observed
create_project - First observed
create_punchlist - First observed
create_purchase_order - First observed
create_rfi - First observed
create_service_ticket - First observed
create_share_link - First observed
create_sub_contract - First observed
create_todo - First observed
create_work_order - First observed
delete_change_order - First observed
delete_estimate - First observed
delete_invoice - First observed
get_bill - First observed
get_change_order - First observed
get_clock_status - First observed
get_contact - First observed
get_daily_log - First observed
get_estimate - First observed
get_expense - First observed
get_inspection - First observed
get_invoice - First observed
get_job_costing - First observed
get_opportunity - First observed
get_project - First observed
get_punchlist - First observed
get_purchase_order - First observed
get_rfi - First observed
get_service_ticket - First observed
get_sub_contract - First observed
get_submittal - First observed
get_time_card - First observed
get_todo - First observed
get_work_order - First observed
list_bills - First observed
list_change_orders - First observed
list_contacts - First observed
list_cost_codes - First observed
list_cost_items - First observed
list_daily_logs - First observed
list_estimates - First observed
list_expenses - First observed
list_inspections - First observed
list_invoices - First observed
list_leads - First observed
list_opportunities - First observed
list_payments - First observed
list_project_crew_hours - First observed
list_project_files - First observed
list_project_notes - First observed
list_projects - First observed
list_punchlists - First observed
list_purchase_orders - First observed
list_rfis - First observed
list_schedule_tasks - First observed
list_service_tickets - First observed
list_sub_contracts - First observed
list_submittals - First observed
list_time_cards - First observed
list_todos - First observed
list_work_orders - First observed
record_inspection_result - First observed
record_payment - First observed
remove_estimate_items - First observed
send_change_order - First observed
send_estimate - First observed
send_invoice - First observed
update_change_order - First observed
update_daily_log - First observed
update_estimate - First observed
update_invoice - First observed
update_project - First observed
update_schedule_task - First observed
update_service_ticket_status - First observed
update_todo - First observed
update_work_order_status
Related MCP Connectors
Construction management for subcontractors: bids, projects, pay apps, change orders and CRM.
- JobkeeprOAuthcom.jobkeepr
Manage jobs, customers, scheduling, estimates and invoices for a field service business.
Contractor operations on 3Bids: CRM, jobs, dispatch, estimates, invoicing, calls, and reports.
Countertop shops: projects, clients, quotes, invoices, orders and slab inventory in Stone Project.
Related MCP Servers
- AlicenseAqualityBmaintenanceEnables 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.10Apache 2.0
- FlicenseNot gradedqualityDmaintenanceProvides 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.-
- AlicenseAqualityBmaintenanceEnables 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.11MIT
- AlicenseNot gradedqualityDmaintenanceAutodesk Construction Cloud integration via APS — Manage projects, issues, RFIs, documents, and submittals.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.