Skip to main content
Glama

Server Details

Project management, CRM, time tracking and project economy for consulting and engineering firms

Ownership verified
Status
Unhealthy
Last Tested
Transport
Streamable HTTP
URL
Repository
frederikkorff-collab/sunago-matrix-mcp
GitHub Stars
0

Available Tools

105 tools
contracts_createCreate contractAInspect

Create a contract record. Status: Draft|Active|Terminated|Completed (default Draft). Use this for contracts agreed outside the offer/e-signature flow - it is flagged is_manual, and contracts generated from a signed proposal are created by that flow instead. Link it to the CRM deal and/or the project it covers.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYes
statusNoDraft | Active | Terminated | Completed (case-insensitive).
deal_idNo
currencyNoISO code, e.g. DKK. Defaults to the workspace currency.
end_dateNoISO date YYYY-MM-DD.
project_idNo
customer_idNo
signed_dateNoISO date YYYY-MM-DD.
contract_valueNoAgreed contract value.
reference_numberNo

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already indicate this is a write operation, and the description adds useful context: the record is flagged as is_manual, status defaults to Draft, and it can be linked to a deal/project. However, it does not disclose what the response contains, whether related deal/project records are modified, or any side effects of creating the contract.

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

Conciseness5/5

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

Three concise sentences with no filler. The core action is front-loaded, the key differentiator is stated clearly, and the linking guidance is in one final sentence. Every sentence contributes to correct tool selection and invocation.

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

Completeness4/5

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

Given the tool's complexity, the description covers the critical selection criteria and key field relationships. Since there is no output schema, it would be slightly stronger if it mentioned what the created record returns, but overall the description provides enough context for correct invocation.

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

Parameters3/5

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

Schema description coverage is 50%, so the description partially compensates by explaining the purpose of deal_id/project_id linkage and the default status. It does not clarify parameters like customer_id, reference_number, or contract_value beyond what the schema already says, leaving some ambiguity.

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

Purpose5/5

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

The description states a specific action ('Create a contract record') and clearly differentiates this tool from the signed-proposal/e-signature flow by mentioning the is_manual flag. It is distinct from sibling tools like contracts_get and contracts_update and from CRM create tools.

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

Usage Guidelines5/5

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

Explicitly states when to use this tool: for contracts agreed outside the offer/e-signature flow. It also tells agents that contracts from signed proposals are created by that other flow instead, preventing misuse. The instruction to link the contract to a CRM deal and/or project adds practical usage context.

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

contracts_getGet contractsA
Read-onlyIdempotent
Inspect

List contracts (RLS-scoped). Max limit 200 - the response carries pagination.total plus has_more/next_cursor; do not count from one page while has_more is true.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax 200.
cursorNoOpaque cursor from a previous response's pagination.next_cursor. Preferred over offset: keyset paging never skips or duplicates rows.
offsetNoRow offset for offset-based paging. Ignored when cursor is supplied.
statusNo
deal_idNo
project_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
metaNo
warningNoPresent only when the page is truncated.
contractsYes
paginationYes

TDQS

A3.5/5.0
Behavior5/5

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

Beyond the readOnlyHint and idempotentHint annotations, the description reveals important behavioral details: RLS scoping, a hard limit of 200, and pagination semantics with has_more/next_cursor and the instruction not to count a page while has_more is true. This significantly helps the agent handle pagination correctly and understand access boundaries.

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

Conciseness5/5

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

The description is two tightly packed sentences with no filler. The core purpose is front-loaded in the first sentence, and the second sentence delivers critical pagination guidance without redundancy.

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

Completeness3/5

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

The description is adequate for a read-only list operation with an output schema and safety annotations. However, the complete lack of semantic guidance for status, deal_id, and project_id filters leaves gaps in an agent's ability to construct precise queries or know whether filters are exact-match or combinable.

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

Parameters2/5

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

Schema description coverage is only 50%: limit, cursor, and offset have schema descriptions, but status, deal_id, and project_id lack any description in both schema and tool description. The description only repeats the limit cap and discusses response pagination fields, not the filter parameters, so it fails to compensate for the undocumented parameters.

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

Purpose4/5

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

The description states a specific verb and resource ('List contracts') and adds the RLS-scoped qualifier, making it clear this is a read operation on contracts. It does not explicitly differentiate from sibling tools like crm_get_contacts or contracts_create/update, but the resource name is distinct enough.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives such as contracts_create or contracts_update, nor does it mention exclusion conditions or preferred alternatives. The context of being a list operation is implied, but no explicit routing or comparison with siblings is offered.

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

contracts_updateUpdate contractAInspect

Update fields on a contract. Status: Draft|Active|Terminated|Completed. Setting status to Terminated does not itself run Matrix' termination workflow - do that in the UI if notice periods or credit notes apply.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleNo
statusNo
deal_idNo
currencyNo
end_dateNo
project_idNo
contract_idYes
customer_idNo
signed_dateNo
contract_valueNo
reference_numberNo

TDQS

A3.6/5.0
Behavior4/5

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

The description adds meaningful behavioral context beyond the annotations: it lists valid status values and explicitly warns about the limited effect of setting Terminated. This is valuable because the annotations only say the operation is not read-only and not destructive. No contradiction with annotations exists.

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

Conciseness5/5

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

The description is two compact sentences. The first states the core action, and the second delivers an important operational caveat. Every sentence earns its place, and the most critical guidance is front-loaded.

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

Completeness2/5

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

Given 11 parameters, 0% schema description coverage, no output schema, and sparse annotations, the description leaves too much unexplained. Only status semantics are addressed; required contract_id and the meaning of the many mutable fields are omitted, making the tool under-specified for an agent to use confidently.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate. It documents the status parameter's allowed values, but the other ten parameters (contract_id, title, deal_id, currency, end_date, etc.) receive no explanation beyond their names. This is a significant gap for an 11-parameter tool.

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

Purpose4/5

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

The description states the operation clearly: "Update fields on a contract." It uses a specific verb and resource, and the status documentation adds scope. It does not explicitly differentiate itself from contracts_create or contracts_get, but the intent is unmistakable.

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

Usage Guidelines4/5

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

The description provides a clear when-not and an alternative for one important edge case: setting status to Terminated does not run the termination workflow, so the UI should be used when notice periods or credit notes apply. It does not provide broader guidance on when to use this tool versus create/get variants, but the update semantics are reasonably clear.

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

crm_create_contactCreate contactAInspect

Create a CRM contact: a named person, with their address, phone numbers and CVR/VAT number. Refuses if the same email or phone already exists, unless allow_duplicate is true - relay the duplicates it names and let the user decide. company is free text here, not a link to a company record. AFTER CREATING, ASK WHETHER IT SHOULD BE ATTACHED TO A DEAL. A contact on its own sits outside the pipeline: it is a deal that carries the contact, through contact_id on crm_create_deal or crm_update_deal. TO ATTACH IT TO A LEAD, set contact_id on the lead with crm_update_lead - the pointer lives there, so one contact can sit behind several leads from the same person over time. BEFORE CREATING FROM A LEAD, CHECK: crm_get_contacts with the lead's email or name, in case the contact already exists. Creating a second one is how a customer ends up in the CRM twice. list_id takes a contact list by name or id, and only lists that exist in this workspace. is_collaborator marks someone you work with rather than sell to.

ParametersJSON Schema
NameRequiredDescriptionDefault
cityNo
emailNo
phoneNo
titleNo
regionNoState, province or region, where the country uses one.
tax_idNoCompany registration number (CVR / VAT) for the contact's business.
addressNo
companyNoFree text. Contacts are not linked to a company record.
countryNo
list_idNoA contact list in this workspace, by name or id.
owner_idNoEmployee id to own the contact. Defaults to the caller.
zip_codeNo
full_nameYes
phone_extra1NoSecond phone number.
phone_extra2NoThird phone number.
allow_duplicateNoSet true to create despite duplicate email/phone match.
is_collaboratorNoMarks the contact as someone you work with rather than sell to. false removes the mark.

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the annotations, the description discloses important behaviors not implied by readOnlyHint or destructiveHint: it refuses duplicate emails/phones unless allow_duplicate is true, treats company as free text rather than a linked record, and explains that one contact can be referenced by multiple leads. This gives the agent a realistic model of the tool's side effects and constraints.

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

Conciseness4/5

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

The description is long, but it front-loads the clear definition and each additional section addresses a real workflow concern: duplicate creation, deal/lead attachment, pre-checks, and list/collaborator semantics. It is slightly redundant with schema descriptions for company, list_id, and is_collaborator, and the ALL-CAPS directives are visually noisy, yet the structure is logical and purposeful.

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

Completeness4/5

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

Given 17 parameters and no output schema, the description covers the essential edge cases: duplicate handling, lead/deal association, pre-creation lookup, and workspace-specific lists. It is complete enough to invoke safely; the only minor gap is that it never explicitly states what the tool returns, but the post-creation instructions imply the agent will know when creation succeeded.

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

Parameters4/5

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

With only 53% schema description coverage, the tool description compensates for the most meaningful parameters: allow_duplicate's refusal workflow, list_id's name-or-id resolution, company's non-relational nature, and is_collaborator's distinction between working relationships and sales targets. Some remaining parameters are self-explanatory or already documented in the schema, so it does not need to cover all 17 explicitly.

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

Purpose5/5

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

The opening sentence gives a concrete verb-resource pair: 'Create a CRM contact: a named person, with their address, phone numbers and CVR/VAT number.' It also distinguishes this tool from crm_create_deal and crm_create_lead by explaining that a contact sits outside the pipeline and that deals or leads carry the contact via contact_id.

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

Usage Guidelines5/5

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

The description gives explicit workflow guidance: check crm_get_contacts before creating from a lead, and ask whether to attach the contact to a deal after creation. It names the exact alternative tools for attaching to deals and leads (crm_create_deal, crm_update_deal, crm_update_lead) and warns against creating duplicate contacts.

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

crm_create_dealCreate dealAInspect

Create a CRM deal: a named opportunity with a value, a stage and a close date. Attach it to a person with contact_id - a deal is how a contact enters the pipeline, so without one the deal has no counterparty. lead_id records the lead it came from. Matrix sets it when a Qualified lead is converted; set it yourself when you raise a deal off a lead, or nothing can answer later which enquiries turned into revenue. status is a stage name from this workspace - crm_get_deals shows which exist. Creating a deal straight into a won stage is allowed but stamps it as closed on the spot, so ask before doing it.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYes
valueNo
statusNoDeal status name (defaults to workspace default).
lead_idNoThe lead this deal came from, by name or id. Records the origin.
owner_idNoEmployee id to own the deal. Defaults to the caller.
close_dateNoISO date (YYYY-MM-DD).
company_idNo
contact_idNoThe contact this deal is with, by name or id.
descriptionNo
win_probabilityNo

TDQS

A4.4/5.0
Behavior4/5

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

Annotations only indicate this is a mutating, non-destructive operation. The description adds meaningful behavioral context: lead_id is auto-set by Matrix on Qualified lead conversion, creating into a won stage immediately stamps the deal closed, and missing contact_id leaves the deal without a counterparty. This goes beyond what annotations provide.

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

Conciseness5/5

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

The description is front-loaded with the core definition, then efficiently explains each important parameter without redundancy. Every sentence adds value, from the counterparty requirement to the won-stage side effect, and the prose remains tight.

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

Completeness4/5

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

For a 10-parameter create tool with no output schema, the description covers the essential domain logic, required relationship, and a caution about won-stage behavior. It does not mention the return value or every parameter, but enough context is provided for an agent to call the tool correctly in most situations.

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

Parameters4/5

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

Schema coverage is 50%, so the description carries meaningful weight. It clarifies the domain semantics of contact_id, lead_id, and status beyond their schema descriptions, explaining why they matter and how they interact. Some parameters like value and win_probability remain underexplained, but the most ambiguous ones are covered.

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

Purpose5/5

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

The description clearly states the action and resource: 'Create a CRM deal' with a definition of what a deal is (a named opportunity with value, stage, and close date). It also differentiates from related siblings by explaining that a deal is how a contact enters the pipeline and by referencing crm_get_deals for stage names.

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

Usage Guidelines4/5

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

The description gives practical guidance on when to set lead_id, warns that a deal without contact_id has no counterparty, and tells the agent to ask before creating a deal directly into a won stage. It does not explicitly contrast with crm_update_deal, but the usage context is clear enough for correct invocation.

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

crm_create_followupCreate follow-upAInspect

Create a new follow-up task linked to a lead, deal, or contact.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYes
assigned_toNoEmployee id to assign. Defaults to the caller.
descriptionNo
reference_idYesId of the lead/deal/contact this follow-up references.
reference_typeYesWhat this follow-up is attached to.
scheduled_dateYesISO date (YYYY-MM-DD).
scheduled_timeNoHH:MM (24h) if a specific time is needed.

TDQS

A4/5.0
Behavior3/5

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

Annotations already indicate this is a write operation and not destructive. The description adds that the follow-up is 'linked' to a lead/deal/contact, which implies a reference relationship, but it does not explain validation behavior, whether the referenced entity must already exist, or what the success response looks like. No contradiction with annotations.

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

Conciseness5/5

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

One concise, front-loaded sentence with no filler. It names the verb, the resource, and the relationship in a compact way.

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

Completeness4/5

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

For a straightforward create operation, the description plus schema is sufficient to invoke correctly: required fields are defined, optional parameters are described, and the tool's purpose is clear. It does not specify success response or reference validation, but these are not blocking for an agent making a create call.

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

Parameters3/5

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

Schema description coverage is 71%, so the schema carries most parameter documentation. The description adds little beyond the concept that the follow-up is attached to a lead, deal, or contact, which mostly maps to reference_type. With high schema coverage, the baseline 3 is appropriate.

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

Purpose5/5

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

The description states a specific action ('Create') and object ('follow-up task') and explicitly says it is linked to a lead, deal, or contact. This clearly distinguishes it from sibling tools like crm_create_lead, crm_create_deal, and crm_create_contact.

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

Usage Guidelines4/5

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

The description gives clear context: this tool is for creating follow-up tasks attached to a CRM entity. It does not explicitly mention when not to use it or compare it with crm_log_activity, but the follow-up-task framing makes the intended use obvious.

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

crm_create_leadCreate leadAInspect

Create a new CRM lead in the caller's workspace. Refuses if a lead with the same email OR phone already exists unless allow_duplicate is true.

ParametersJSON Schema
NameRequiredDescriptionDefault
emailNo
phoneNo
valueNo
sourceNo
statusNoLead status name (defaults to workspace default).
companyNo
owner_idNoEmployee id to own the lead. Defaults to the caller.
full_nameYes
contact_idNoAn existing contact this lead belongs to, by name or id.
descriptionNo
allow_duplicateNoSet true to create despite a duplicate email/phone match.

TDQS

A3.7/5.0
Behavior4/5

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

The description adds valuable behavioral context beyond annotations: it explicitly states the duplicate email/phone rejection rule and the allow_duplicate escape hatch. It also clarifies workspace scoping. It does not mention success responses or side effects, but the annotations already cover the safety profile.

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

Conciseness5/5

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

Two sentences with no filler. The main action is stated first, then the critical duplicate-handling behavior is front-loaded. Every sentence earns its place.

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

Completeness2/5

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

For a create operation with 11 parameters and no output schema, the description is not complete. It does not explain what the tool returns on success, how conflicts beyond duplicates are handled, or how required fields like full_name factor into creation. An agent would still need to infer or discover the response shape.

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

Parameters2/5

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

With 11 parameters and only 36% schema description coverage, the description should compensate by explaining parameter meaning and relationships. It only clarifies the duplicate behavior tied to email, phone, and allow_duplicate. Many parameters such as value, source, company, and description receive no semantic guidance beyond their names.

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

Purpose5/5

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

The description states a specific verb ('Create') and resource ('CRM lead') and scopes it to the caller's workspace, clearly distinguishing this from sibling tools like crm_create_contact or crm_create_deal. The title and description align on the operation.

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

Usage Guidelines3/5

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

The description implies usage for creating a new CRM lead, which is reasonably clear from the resource name, but it does not explicitly contrast with alternatives or state when not to use it. There is no mention of prerequisites or exclusions beyond the duplicate-refusal behavior.

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

crm_delete_contactDelete contactA
Destructive
Inspect

Soft-delete a CRM contact: it moves to the recycle bin for 30 days and can be brought back with crm_restore_contact. Admin-only. Not permanent, so no confirmation phrase is required - but still tell the user what you removed.

ParametersJSON Schema
NameRequiredDescriptionDefault
contact_idYes

TDQS

A4.7/5.0
Behavior5/5

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

The description goes well beyond the annotations: it discloses that deletion is soft, retains the contact in the recycle bin for 30 days, is reversible via crm_restore_contact, requires admin privileges, and includes an explicit note about not asking for a confirmation phrase. This is rich behavioral context that substantially helps the agent.

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

Conciseness5/5

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

Three concise sentences, each adding distinct value: the action and reversibility, the admin requirement, and the confirmation/communication guideline. The key verb and resource are front-loaded with no redundant or filler content.

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

Completeness5/5

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

For a single-parameter, no-output-schema tool, this description is complete. It covers what happens to the contact, how long, whether it can be undone, who is allowed to do it, and what to tell the user. An agent has everything needed to decide and execute correctly.

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

Parameters4/5

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

Although schema description coverage is 0%, the single parameter contact_id is self-explanatory in context: the description's subject is 'a CRM contact', making it clear the parameter identifies which contact to delete. More detail about obtaining the id would help, but the semantics are not ambiguous.

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

Purpose5/5

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

The description clearly states the verb 'soft-delete' and the resource 'CRM contact', distinguishing it from a permanent delete and from sibling tools like crm_delete_deal and crm_delete_lead. It also explains the recycle-bin behavior, making the tool's purpose unambiguous.

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

Usage Guidelines4/5

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

The description gives clear context: it is for soft-deleting CRM contacts, is admin-only, and explicitly instructs that no confirmation phrase is required because the operation is reversible. It names the restore path (crm_restore_contact), though it doesn't explicitly contrast with specific sibling deletion tools.

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

crm_delete_dealDelete dealA
Destructive
Inspect

Soft-delete a CRM deal: it moves to the recycle bin for 30 days and can be brought back with crm_restore_deal. Admin-only. Not permanent, so no confirmation phrase is required - but still tell the user what you removed.

ParametersJSON Schema
NameRequiredDescriptionDefault
deal_idYes

TDQS

A4.4/5.0
Behavior5/5

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

Even though destructiveHint=true already flags destructiveness, the description adds substantial behavior beyond the annotations: the 30-day recycle-bin retention window, the restore path via crm_restore_deal, the admin-only permission requirement, and the no-confirmation/inform-user expectation. These details are not derivable from the annotations and meaningfully shape how an agent invokes and reports the action. The description is consistent with readOnlyHint=false and destructiveHint=true, so there is no contradiction.

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

Conciseness5/5

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

Three sentences totaling about 50 words, with the core purpose front-loaded in the first sentence. Every clause carries information: definition, retention/restore, permissions, and reply guidance. There is no redundancy or filler.

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

Completeness4/5

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

For a single-parameter tool with no output schema, the description covers the essentials: effect, duration, undo path, permission gate, and expected reporting behavior. Minor gaps remain, such as behavior when the deal is already in the trash (which idempotentHint=false hints matters) and any cascade to related records like followups or contacts.

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

Parameters3/5

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

Schema description coverage is 0% for deal_id and the description does not explicitly document the parameter's format or source. The parameter name is largely self-explanatory and the description grounds it as 'a CRM deal,' so the gap is tolerable; however, a note that the ID comes from crm_get_deals or list_trash would have fully compensated for the missing schema documentation.

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

Purpose5/5

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

The description opens with a specific verb+resource pair, 'Soft-delete a CRM deal,' which precisely names the action and object. The soft-delete qualifier and the explicit mention of crm_restore_deal set it apart from the other crm_delete_* siblings that target different entities (contact, lead, followup) and from any permanent-delete operation.

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

Usage Guidelines4/5

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

The description gives clear operational context: it is admin-only, so agents know who may invoke it, and it specifies the conversational behavior ('no confirmation phrase is required - but still tell the user what you removed'). It does not, however, explicitly state when to prefer this over alternatives such as list_trash or a permanent delete, so it falls just short of a 5.

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

crm_delete_followupDelete follow-upA
Destructive
Inspect

PERMANENTLY delete a follow-up. There is no recycle bin for follow-ups - this cannot be undone. Admin-only, and requires explicit human confirmation: never fill in confirm/confirmation_phrase on your own initiative.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmNoMust be true. The HUMAN running this agent must set this - not the agent.
follow_up_idYes
confirmation_phraseNoMust exactly equal the target record id. The HUMAN must supply this.

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already mark destructiveHint=true, but the description goes further by disclosing that deletion is permanent, there is no recycle bin, and confirmation fields must never be filled by the agent on its own initiative. This is exactly the kind of behavioral context an agent needs for a destructive tool.

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

Conciseness5/5

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

Two short, front-loaded sentences deliver the most critical information first: permanence, then authorization and human confirmation. Every clause earns its place, with no filler or redundancy.

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

Completeness5/5

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

For a destructive, single-resource tool with no output schema, the description covers everything an agent needs: irreversibility, admin-only restriction, and the human-in-the-loop requirement. The schema already provides field-level details, so nothing critical is missing.

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

Parameters3/5

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

Schema description coverage is 67%, and the confirm and confirmation_phrase parameters are already well described in the schema. The description mainly restates the human-confirmation policy rather than adding new parameter semantics; follow_up_id, while implied by the tool purpose, still lacks a schema description.

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

Purpose5/5

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

The description opens with 'PERMANENTLY delete a follow-up,' stating the exact verb and resource. The additional details about no recycle bin and irreversibility remove any ambiguity about the operation's nature, and it is clearly distinguishable from sibling delete tools like crm_delete_contact.

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

Usage Guidelines4/5

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

The description provides strong usage conditions: the tool is admin-only, requires explicit human confirmation, and is irreversible. It does not explicitly name a non-destructive alternative like crm_update_followup, but the conditions clearly communicate when deletion is and is not appropriate.

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

crm_delete_leadDelete leadA
Destructive
Inspect

Soft-delete a CRM lead: it moves to the recycle bin for 30 days and can be brought back with crm_restore_lead. Admin-only. Not permanent, so no confirmation phrase is required - but still tell the user what you removed.

ParametersJSON Schema
NameRequiredDescriptionDefault
lead_idYes

TDQS

A4.7/5.0
Behavior5/5

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

While annotations mark the operation as destructive, the description adds the crucial soft-delete behavior: 30-day recycle bin retention, reversibility, an admin-only restriction, and a user-communication requirement. This goes well 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.

Conciseness5/5

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

Two compact sentences lead with the core action, then add the key caveats (recycle bin, admin-only, confirmation behavior) with no filler or repetition.

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

Completeness5/5

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

For a one-parameter mutation with no output schema, the description covers the operation, side effects, reversibility, access restriction, and interaction expectations. Nothing essential is missing.

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

Parameters3/5

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

There is only one required parameter, lead_id, and the description does not explicitly document it beyond the implication that it identifies the CRM lead. The name is self-explanatory, but with 0% schema description coverage, some explicit mention of what lead_id refers to would have been slightly stronger.

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

Purpose5/5

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

The first phrase 'Soft-delete a CRM lead' names a specific verb, resource, and operation type, and the recycle-bin detail distinguishes it from a permanent delete. It also aligns with the sibling crm_restore_lead, making the tool's role unambiguous.

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

Usage Guidelines5/5

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

The description explicitly says it is admin-only, states that restoration is possible via crm_restore_lead, and clarifies when no confirmation phrase is required. This gives an agent both a prerequisite and routing guidance versus alternatives.

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

crm_get_contactsGet contactsA
Read-onlyIdempotent
Inspect

List CRM contacts (RLS-scoped). Max limit 200 - the response always carries pagination.total plus has_more/next_cursor. Do not count contacts from one page while has_more is true.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax 200.
cursorNoOpaque cursor from a previous response's pagination.next_cursor. Preferred over offset: keyset paging never skips or duplicates rows.
offsetNoRow offset for offset-based paging. Ignored when cursor is supplied.
searchNoMatch against full_name or email.

Output Schema

ParametersJSON Schema
NameRequiredDescription
metaNo
warningNoPresent only when the page is truncated.
contactsYes
paginationYes

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already mark this as read-only and idempotent, and the description adds meaningful behavioral detail beyond that: RLS scoping, the pagination contract, and the specific has_more caveat. This lets an agent reason about result completeness and repeated calls without contradiction.

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

Conciseness5/5

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

Three short sentences with the core purpose first, followed by the most important constraint and a practical warning. There is no filler or repetition of schema details.

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

Completeness5/5

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

For a read-only list tool, the description covers the correctness-critical behavior: scope, limit, pagination contract, and the has_more pitfall. The output schema handles return-value details, and annotations cover idempotence and read-only safety, so nothing essential is missing.

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

Parameters3/5

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

The input schema already describes all four parameters individually, so the description does not need to compensate. The description adds pagination context and a usage warning, but it does not materially extend the semantics of limit, cursor, offset, or search beyond the schema.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'List CRM contacts'. The RLS-scoped qualifier and the resource name clearly distinguish it from sibling crm_get_deals and crm_get_leads tools. An agent can identify what this tool does and what it operates on immediately.

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

Usage Guidelines4/5

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

The description gives actionable usage guidance about pagination: max limit 200, response shape with pagination.total/has_more/next_cursor, and an explicit warning not to count a page as complete while has_more is true. It does not name alternatives, but the resource distinction alone is enough to route picking this tool over sibling get tools.

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

crm_get_dealsGet dealsA
Read-onlyIdempotent
Inspect

List CRM deals (RLS-scoped). DEFAULTS TO OPEN DEALS ONLY - statuses the workspace has not marked as terminal, so Won and Lost are excluded. Say so when you answer ("you have 12 open deals"), and read meta.scope_note for how many closed ones were left out. Pass scope: archived for deals that are won or lost, or all for anything measured over a period - revenue history, deals closed in the last x months, win rates. Max limit 200 - the response always carries pagination.total plus has_more/next_cursor. NEVER sum deal values from a single page while has_more is true; use the reports_get 'deal_pipeline' report for pipeline totals.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax 200.
scopeNoactive (default) covers only what is still live. Use archived for finished or lost records, or all when the question spans both - historical revenue, deals closed over a period, anything measured across time. Always tell the user which set your answer covers.active
cursorNoOpaque cursor from a previous response's pagination.next_cursor. Preferred over offset: keyset paging never skips or duplicates rows.
offsetNoRow offset for offset-based paging. Ignored when cursor is supplied.
statusNoExact status name. Overrides scope, since naming a status already says which set you mean.
owner_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
metaNo
dealsYes
warningNoPresent only when the page is truncated.
paginationYes

TDQS

A4.9/5.0
Behavior5/5

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

Beyond the annotations (readOnlyHint, idempotentHint), the description discloses important runtime behavior: default open-only filtering, terminal-status exclusion, pagination details, meta.scope_note, and the 200-item limit. It also warns against summing values across pages, which is critical behavioral context not available from annotations or schema.

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

Conciseness5/5

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

The description is dense but every sentence carries operational value: scope defaults, user-communication requirements, pagination handling, and the explicit warning against partial-sum calculations. It is front-loaded with the most important behavioral fact and avoids filler.

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

Completeness5/5

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

Given the tool's complexity—scopes, pagination, row limits, and interaction with reports_get—the description is complete. The output schema exists, so explaining return values is unnecessary, and the description covers all key invocation concerns including how to communicate results to the user.

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

Parameters4/5

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

Schema description coverage is high at 83%, but the tool description adds meaningful semantics beyond the schema: it explains the default scope set, the distinction between archived/all for time-spanning queries, cursor-versus-offset behavior, and pagination constraints. The only minor gap is owner_id, which has no schema description and no description-level guidance, but the rest is thoroughly covered.

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

Purpose5/5

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

The description opens with a specific verb and resource ('List CRM deals') and immediately clarifies the RLS scoping and default open-only behavior, which precisely defines what the tool does. It clearly distinguishes this tool from sibling get tools by explaining scope semantics and pointing to reports_get for pipeline totals.

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

Usage Guidelines5/5

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

The description explicitly states when to use different scope values ('archived for deals that are won or lost, or all for anything measured over a period') and gives a direct alternative ('use the reports_get deal_pipeline report for pipeline totals'). It also instructs the agent to disclose scope and read meta.scope_note, leaving no ambiguity about when to use this tool versus others.

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

crm_get_followupsGet follow-upsA
Read-onlyIdempotent
Inspect

List follow-up tasks (RLS-scoped). Filter by completion, assignee, or reference. Max limit 200 - the response always carries pagination.total plus has_more/next_cursor.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax 200.
cursorNoOpaque cursor from a previous response's pagination.next_cursor. Preferred over offset: keyset paging never skips or duplicates rows.
offsetNoRow offset for offset-based paging. Ignored when cursor is supplied.
completedNo
assigned_toNo
reference_idNo
reference_typeNolead | deal | contact

Output Schema

ParametersJSON Schema
NameRequiredDescription
metaNo
warningNoPresent only when the page is truncated.
follow_upsYes
paginationYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare this as read-only and idempotent. The description adds valuable behavioral context by disclosing RLS scoping and the concrete pagination contract: max 200, pagination.total, has_more, and next_cursor. No annotation contradiction exists.

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

Conciseness5/5

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

Two concise sentences carry all essential information: the core action, scoping, filter capabilities, and pagination behavior. There is no filler or unnecessary repetition of schema details.

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

Completeness4/5

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

For a read-only tool with an output schema and strong annotations, the description covers the main selection and invocation needs: resource, scope, filters, limit, and pagination shape. A minor gap is the ambiguous 'or' in the filter list, since it does not explicitly state whether filters can be combined, and the RLS acronym is not expanded.

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

Parameters3/5

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

The description summarizes the filter parameters as completion, assignee, or reference, which maps to completed, assigned_to, reference_id, and reference_type. However, with schema description coverage at 57%, it does not add much detail beyond parameter names, such as value formats, reference_type pairing semantics, or whether filters can be combined.

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

Purpose5/5

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

The description starts with a specific verb and resource: 'List follow-up tasks'. This clearly distinguishes the operation from the create/update/delete/restore follow-up siblings, and the 'RLS-scoped' qualifier plus filter list further clarifies exactly what the tool returns.

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

Usage Guidelines4/5

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

The description provides clear context: it is a scoped list operation with filtering and pagination. It does not explicitly name alternative tools or exclusion cases, but no sibling getter for follow-ups exists, so the implied usage is clear enough.

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

crm_get_leadsGet leadsA
Read-onlyIdempotent
Inspect

List CRM leads (RLS-scoped). Each row carries contact_id and converted_to: null if nothing has been made from the lead yet, otherwise the contact it belongs to and/or the deal it produced. CHECK IT before offering to create either - Matrix already asks that question when a lead is set to Qualified, and offering again is how the same customer ends up in the CRM twice. DEFAULTS TO ACTIVE LEADS ONLY - statuses the workspace has not marked as terminal. Say so when you answer ("you have 3 active leads"), and read meta.scope_note for how many archived ones were left out. Pass scope: archived or all only when the question is genuinely about closed or historical leads. Max limit 100 - the response always carries pagination.total (full match count) plus has_more/next_cursor. NEVER count or summarise leads from a single page while has_more is true; use pagination.total, or page with next_cursor until has_more is false.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax 100.
scopeNoactive (default) covers only what is still live. Use archived for finished or lost records, or all when the question spans both - historical revenue, deals closed over a period, anything measured across time. Always tell the user which set your answer covers.active
cursorNoOpaque cursor from a previous response's pagination.next_cursor. Preferred over offset: keyset paging never skips or duplicates rows.
offsetNoRow offset for offset-based paging. Ignored when cursor is supplied.
searchNoMatch full_name, email, or company.
statusNoExact status name. Overrides scope, since naming a status already says which set you mean.
owner_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
metaNo
leadsYes
warningNoPresent only when the page is truncated.
paginationYes

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only convey readOnly and idempotent hints, so the description carries the full behavioral burden and does so richly. It discloses RLS scoping, the active-only default, the `meta.scope_note` field, the `pagination.total`/`has_more`/`next_cursor` response shape, and the critical warning not to summarize from a partial page.

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

Conciseness4/5

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

The description is longer than average but every sentence earns its place by covering a distinct operational caveat: conversion checking, default scope, scope selection, pagination, and counting rules. The core purpose is front-loaded, though the capitalization-heavy emphasis is slightly noisy.

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

Completeness5/5

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

Given the 7-parameter schema, output schema, and large sibling set, the description is remarkably complete. It covers the RLS context, the conversion edge case, the default scope behavior, how to handle archived records, and how to correctly count or paginate results. Nothing critical is left unexplained.

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

Parameters4/5

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

Schema description coverage is 86%, so the schema already documents most parameters and establishes a baseline of 3. The description adds meaningful decision guidance beyond the schema, especially around when to use `scope: archived` vs `all`, and reinforces the limit and pagination contract. It does not add value for every parameter, but the added semantics justify a step above baseline.

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

Purpose5/5

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

The description opens with 'List CRM leads (RLS-scoped)', a specific verb and resource that clearly distinguishes this from sibling tools like crm_get_contacts and crm_get_deals. The additional mention of `contact_id` and `converted_to` confirms it is about lead records specifically, not contacts or deals.

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

Usage Guidelines5/5

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

The description gives explicit when-to-use guidance: default to active leads, pass `scope: archived` or `all` only when the question concerns closed or historical leads, and check `converted_to` before offering to create a contact or deal. It also explains the pagination rules for counting leads, leaving little to inference.

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

crm_log_activityLog activity on a dealAInspect

Append an activity log entry (note, call, meeting, email) to a deal. Use this for the meeting-log primitive so activity shows up in the deal timeline.

ParametersJSON Schema
NameRequiredDescriptionDefault
deal_idYes
descriptionYes
activity_typeYes

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already signal readOnlyHint=false and destructiveHint=false, so the safety profile is covered. The description adds the useful side effect that entries show up in the deal timeline, but does not disclose behavior around idempotency, permissions, or duplicate entries. This is adequate but not rich.

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

Conciseness5/5

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

The description is two concise sentences with no filler. The core action is front-loaded, and the usage guidance and timeline effect are included without redundancy.

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

Completeness4/5

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

For a simple 3-parameter mutation with a schema that already defines required fields, enum values, and length constraints, the description supplies enough context to invoke the tool correctly. The main gaps are a full explanation of the undocumented parameters and any expected return/confirmation behavior.

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

Parameters2/5

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

Schema description coverage is 0%, so the description should compensate for the undocumented parameters. It partially covers activity_type by listing note, call, meeting, and email, but omits the 'task' enum value and gives no detail about deal_id or description semantics, including the 4000-character limit.

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

Purpose5/5

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

The description states a specific verb ('Append') and resource ('activity log entry...to a deal'), and enumerates the supported activity types. Naming the deal timeline outcome also differentiates it from generic note/timelog tools among the siblings.

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

Usage Guidelines4/5

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

The description explicitly tells the agent to use this for the meeting-log primitive and explains the expected effect: the activity appears in the deal timeline. It does not explicitly state when not to use it or name alternatives, but the guidance is clear enough for an agent to select it appropriately.

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

crm_restore_contactRestore contactA
Idempotent
Inspect

Restore a soft-deleted contact from the recycle bin. Admin-only. Fails if the record has been purged (>30 days).

ParametersJSON Schema
NameRequiredDescriptionDefault
contact_idYes

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the annotations, the description adds meaningful behavioral details: the record must be soft-deleted and in the recycle bin, restoration is admin-only, and the operation fails if the record has been purged after 30 days. This gives an agent concrete expectations about preconditions and failure modes that annotations alone do not convey.

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

Conciseness5/5

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

The description is three short sentences with no filler. The core action is front-loaded, then the authorization constraint, then the failure condition. Every sentence contributes a distinct piece of information.

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

Completeness5/5

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

For a single-parameter restore operation with no output schema, the description covers purpose, prerequisites, authorization, and a key failure condition. It is complete enough for an agent to select and invoke the tool correctly without additional context.

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

Parameters4/5

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

With 0% schema description coverage, the description carries the parameter-semantics burden. It does not explicitly define contact_id, but it implies the parameter identifies a soft-deleted contact in the recycle bin and that it must not be purged. The schema supplies the required, type, and uuid format, so together the agent has enough understanding.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Restore a soft-deleted contact from the recycle bin.' It clearly differentiates this tool from sibling restore tools like crm_restore_deal and crm_restore_lead by naming the target resource, and it adds the recycle-bin scope that makes the action unambiguous.

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

Usage Guidelines4/5

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

The description gives clear context: it is for restoring soft-deleted contacts, requires admin privileges, and cannot succeed for purged records. It does not explicitly name alternatives or say when not to use it, but the resource-specific wording combined with sibling names provides enough directional guidance. 'Admin-only' is a strong prerequisite signal.

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

crm_restore_dealRestore dealA
Idempotent
Inspect

Restore a soft-deleted deal from the recycle bin. Admin-only. Fails if the record has been purged (>30 days).

ParametersJSON Schema
NameRequiredDescriptionDefault
deal_idYes

TDQS

A4.5/5.0
Behavior4/5

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

Beyond the annotations, which already mark the operation non-read-only, non-destructive, and idempotent, the description adds concrete behavioral constraints: it is admin-only, acts on soft-deleted records, and fails if the record was purged after 30 days. This gives agents useful outcome expectations without contradicting the annotations.

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

Conciseness5/5

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

The description uses three short sentences, leading with the core action and object, then supplying two high-value constraints. Every sentence adds information and none is wasted.

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

Completeness5/5

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

For a single-parameter restore operation, the description covers what it does, the required permission, and the key failure condition. The annotations supply idempotency and destructive-safety signals, and no output schema is provided, so no return-value details are expected.

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

Parameters4/5

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

The input schema only provides deal_id as a required UUID, with no parameter descriptions. The description compensates by making clear the deal is the soft-deleted object to be restored from the recycle bin, so the meaning of deal_id is inferable even though it is not explicitly restated.

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

Purpose5/5

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

The description opens with a specific action and object: 'Restore a soft-deleted deal from the recycle bin.' This clearly identifies the resource and distinguishes it from sibling restore tools for contacts, leads, projects, and tasks.

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

Usage Guidelines4/5

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

The description clearly establishes the situation in which the tool applies: restoring a soft-deleted deal. It also adds an admin-only prerequisite and a 30-day purge limitation. It does not explicitly compare itself to sibling restore tools, but the deal-specific scope gives enough context.

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

crm_restore_leadRestore leadA
Idempotent
Inspect

Restore a soft-deleted lead from the recycle bin. Admin-only. Fails if the record has been purged (>30 days).

ParametersJSON Schema
NameRequiredDescriptionDefault
lead_idYes

TDQS

A4.4/5.0
Behavior4/5

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

Beyond the annotations, the description adds valuable behavioral context: the operation is admin-only, and it fails on purged records older than 30 days. This clarifies auth requirements and failure conditions. There is no contradiction with the idempotentHint or destructiveHint annotations.

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

Conciseness5/5

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

The description is two concise sentences with the action front-loaded and constraints added efficiently. Every sentence serves a purpose: the first states the operation and target, the second gives auth and failure information. No unnecessary words.

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

Completeness4/5

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

For a single-parameter restore tool, the description covers the action, the object state, the authorization requirement, and the key failure boundary. It does not describe the success response, but with no output schema and a simple operation, the provided information is largely sufficient for correct invocation.

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

Parameters4/5

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

The schema provides lead_id as a required UUID but no description. The tool description adds meaning by clarifying that the ID must reference a soft-deleted lead in the recycle bin and that a purged record will cause failure. This compensates for the 0% schema description coverage.

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

Purpose5/5

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

The description states a specific verb and resource: 'Restore a soft-deleted lead from the recycle bin.' This unambiguously explains what the tool does and distinguishes it from crm_create_lead, crm_delete_lead, crm_update_lead, and the sibling restore tools for other entities.

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

Usage Guidelines4/5

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

The description provides clear context: use this tool to restore a lead that has been soft-deleted and is still in the recycle bin. It also gives an implicit boundary by warning that restoration fails if the record was purged more than 30 days ago, but it does not explicitly mention sibling tools such as list_trash for locating the lead or alternatives for active leads.

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

crm_update_contactUpdate contactAInspect

Update fields on a contact, including its address, extra phone numbers, CVR/VAT number, collaborator mark and which list it is on. Only the fields you pass are changed; anything you leave out keeps its current value. TO REMOVE something rather than change it: pass list_id: null to take the contact off its list, or is_collaborator: false to drop the mark. Leaving them out does neither. owner_id is an employees.id, not an auth user id. list_id takes a list by name or id, and only lists that exist in this workspace.

ParametersJSON Schema
NameRequiredDescriptionDefault
cityNo
emailNo
phoneNo
titleNo
regionNoState, province or region, where the country uses one.
tax_idNoCompany registration number (CVR / VAT) for the contact's business.
addressNo
companyNo
countryNo
list_idNoA contact list in this workspace, by name or id. null takes the contact off whatever list it is on.
owner_idNo
zip_codeNo
full_nameNo
contact_idYes
phone_extra1NoSecond phone number.
phone_extra2NoThird phone number.
is_collaboratorNoMarks the contact as someone you work with rather than sell to. false removes the mark.

TDQS

A4.6/5.0
Behavior5/5

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

Reveals important behaviors beyond the annotations: PATCH-like partial update semantics, sentinel values for removal, and the critical warning that owner_id refers to an employees.id, not an auth user id. This is exactly the kind of behavioral context agents need.

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

Conciseness5/5

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

Four dense sentences with no filler. The core action is front-loaded, followed by partial-update semantics, removal behavior, and id/list constraints. Each sentence contributes a distinct operational rule.

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

Completeness4/5

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

For a 17-parameter mutation with no output schema, the description covers the non-obvious essentials: partial updates, removal sentinels, the owner_id domain distinction, and list_id lookup scope. Minor gaps remain, such as how to clear ordinary string fields, but the critical context for correct invocation is present.

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

Parameters4/5

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

With schema description coverage at only 35%, the description compensates for the most ambiguous parameters: list_id can be a name or id and is workspace-scoped, owner_id is an employee id, and is_collaborator: false removes the mark. Remaining fields are reasonably self-explanatory by name, and the global partial-update rule applies to all.

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

Purpose5/5

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

States a precise verb and resource: 'Update fields on a contact', and enumerates the contact-specific field categories (address, extra phone numbers, CVR/VAT, collaborator mark, list). This clearly distinguishes it from sibling update tools like crm_update_deal or crm_update_lead.

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

Usage Guidelines4/5

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

Provides strong operational context: it explains that only passed fields change, and gives specific removal semantics for list_id and is_collaborator. It does not explicitly name alternative tools, but the partial-update guidance makes the when and how clear.

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

crm_update_dealUpdate dealAInspect

Update fields on a deal. Only the fields you pass are changed; anything you leave out keeps its current value. Moving a deal to a won or lost stage is an ordinary status change here - it triggers no invoice and no project.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleNo
valueNo
statusNo
deal_idYes
lead_idNoThe lead this deal came from, by name or id. null clears the origin.
owner_idNo
close_dateNo
contact_idNoThe contact this deal is with, by name or id. null detaches it.
descriptionNo
win_probabilityNo

TDQS

A3.6/5.0
Behavior4/5

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

The description adds useful behavior beyond the annotations, especially the partial-update semantics and the explicit statement that won/lost status changes trigger no invoice or project. The annotations already indicate non-destructive intent, and the description deepens that context without contradicting it.

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

Conciseness5/5

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

The description is compact and front-loaded with the core action. Each sentence adds meaningful operational context: what the tool does, how partial updates behave, and what side effects do not occur.

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

Completeness2/5

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

Given ten parameters, weak schema descriptions, and no output schema, the description leaves meaningful gaps. It does not describe the return value, specify valid status values, or clarify ambiguous field formats, so an agent may struggle to construct a correct invocation.

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

Parameters2/5

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

Schema description coverage is only 20%, and the description does little to compensate for the undocumented parameters. It explains the update behavior generally but does not clarify status values, date formats, value semantics, or how owner_id, contact_id, or lead_id should be referenced.

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

Purpose4/5

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

The description states a specific verb and resource: 'Update fields on a deal.' It clearly targets deals rather than contacts, leads, or followups, but it does not explicitly contrast itself with sibling update tools.

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

Usage Guidelines4/5

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

The description gives clear operation semantics: only passed fields are changed and omitted fields retain their values. It also clarifies that moving to won/lost is a plain status change with no invoice/project side effects. It does not explicitly mention alternatives or when not to use the tool.

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

crm_update_followupUpdate follow-upAInspect

Update a follow-up, or close it by passing completed: true - which also stamps completed_at with the current time. Passing completed: false reopens it and clears that stamp. Other fields are patched: anything you leave out keeps its current value.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleNo
completedNo
assigned_toNo
descriptionNo
follow_up_idYes
scheduled_dateNo

TDQS

A4.4/5.0
Behavior5/5

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

Annotations only indicate non-read-only and non-destructive; the description adds material side effects: completed: true stamps completed_at with the current time, and completed: false clears that stamp. It also clarifies partial-update behavior, going well 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.

Conciseness5/5

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

Three compact sentences, with the main action first, then the special completion behavior, then the general patch rule. No filler or redundant restatement.

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

Completeness4/5

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

The description covers the core mutation behavior, side effects, and patch semantics, which is sufficient for a 6-parameter update with one required ID. It does not describe return values or date formats, but absent an output schema these are minor for a straightforward patch operation.

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

Parameters3/5

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

With 0% schema description coverage, the description compensates for the completed parameter by explaining its boolean effect on completed_at. It also clarifies that all other fields are patched, but gives no individual semantics for title, description, assigned_to, or scheduled_date beyond their names and types.

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

Purpose5/5

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

States a specific verb ('Update') and resource ('follow-up') and adds the close/reopen behavior via the completed flag. This clearly distinguishes the tool from crm_create_followup, crm_get_followups, and crm_delete_followup by operation.

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

Usage Guidelines4/5

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

Describes the two key usage modes (close with completed: true, reopen with completed: false) and the patch semantics for omitted fields. It does not explicitly name sibling alternatives or state when not to use this tool, but the context is clear enough for an agent to invoke it appropriately.

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

crm_update_leadUpdate leadAInspect

Update fields on a lead. Only the fields you pass are changed; anything you leave out keeps its current value, so this is a patch and never a replacement. status is written through as given, so use a stage that exists in the workspace pipeline - an unknown one is rejected by the database, not silently ignored. contact_id attaches the lead to a person who is already in the CRM, which is what you want when crm_get_leads reported a possible duplicate: link the existing contact rather than creating a second record for the same human. Several leads may point at the same contact - the same person enquiring more than once - so attaching one does not detach another. null lets the lead go again.

ParametersJSON Schema
NameRequiredDescriptionDefault
emailNo
phoneNo
valueNo
statusNo
companyNo
lead_idYes
owner_idNo
full_nameNo
contact_idNoAn existing contact this lead belongs to, by name or id. null detaches it.
descriptionNo

TDQS

A4.7/5.0
Behavior5/5

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

The annotations only provide readOnly=false and destructive=false, so the description carries the full behavioral disclosure burden. It clearly reveals patch semantics ('never a replacement'), strict status validation ('rejected by the database, not silently ignored'), and nuanced contact linkage behavior including multiple leads pointing to one contact and null detaching. This is far more transparent than the annotations alone.

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

Conciseness5/5

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

The description is four sentences, each carrying a distinct behavioral fact with no filler. It front-loads the core purpose, then adds patch semantics, status validation, and contact relationship nuances in a logical order.

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

Completeness5/5

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

Despite having 10 parameters, no output schema, and sparse annotations, the description provides all critical invocation knowledge: partial update behavior, validation rejection, the duplicate-contact workflow, and null detachment. The only minor omission is return-value details, which are less essential for a mutation tool and are not required by the context signals.

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

Parameters4/5

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

With only 10% schema description coverage, the description compensates well for the key parameters: the general patch rule applies to every passed field, and status and contact_id get detailed semantics including null handling. The remaining params like email, phone, company, and full_name are self-explanatory from their names, but owner_id and value receive no additional context, so the compensation is strong but not complete.

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

Purpose5/5

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

The description opens with 'Update fields on a lead,' naming a specific verb and resource, and immediately differentiates this from a full replacement by explaining it is a patch. This clearly distinguishes it from sibling tools like crm_update_contact or crm_update_deal by specifying the resource as 'lead.'

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

Usage Guidelines4/5

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

The description gives explicit usage context for the contact_id parameter: use it when crm_get_leads reports a possible duplicate, and link the existing contact instead of creating a second record. It also warns that status must be a valid pipeline stage. However, it does not explicitly name alternatives for the general update case or state when not to use this tool, so it falls just short of exhaustive routing guidance.

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

hr_create_employeeCreate employeeBInspect

Create a new employee record. HR permission required.

ParametersJSON Schema
NameRequiredDescriptionDefault
roleNoA role key or name from THIS workspace - list them with hr_get_roles. Case-insensitive.
emailNo
positionNo
full_nameYes
last_nameNo
departmentNo
first_nameNo
employment_dateNo
employment_typeNoPermanent | Permanent - Flextime | Hourly Paid (case-insensitive).
weekly_capacity_percentageNo

TDQS

B3/5.0
Behavior3/5

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

Annotations already indicate this is a write operation (readOnlyHint=false) and not destructive. The description adds a permission requirement but does not disclose side effects, duplicate handling, defaults, or response behavior. Some value beyond annotations, but limited.

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

Conciseness5/5

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

The description is two short sentences with no filler. The main purpose is front-loaded and the permission note is directly relevant.

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

Completeness1/5

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

Given 10 parameters, no output schema, and low schema coverage, this description is far too thin. It does not explain required inputs, expected outcomes, constraints, or how to interact with related HR tools.

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

Parameters1/5

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

Schema description coverage is only 20%, and the tool description mentions none of the 10 parameters. The agent receives no help understanding what full_name, role, employment_type, or the other fields mean beyond the sparse schema.

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

Purpose5/5

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

States a specific verb and resource: 'Create a new employee record.' This clearly distinguishes it from hr_update_employee and hr_get_employees, and the scope is unambiguous.

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

Usage Guidelines2/5

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

Provides only an authorization prerequisite ('HR permission required') but gives no guidance on when to use this tool versus alternatives like hr_update_employee. The usage context is implied by the name but not explicitly stated.

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

hr_get_employeesGet employeesA
Read-onlyIdempotent
Inspect

List employees. Sensitive fields (salary, national ID, etc.) are masked unless permitted. Max limit 500 - the response always carries pagination.total (full match count) plus has_more. NEVER count headcount from a single page while has_more is true; use pagination.total.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax 500.
offsetNoRow offset. This tool has no cursor - page with offset.
searchNo
departmentNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
metaNo
warningNoPresent only when the page is truncated.
employeesYes
paginationYes

TDQS

A4.5/5.0
Behavior5/5

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

Beyond the readOnly and idempotent hints, the description discloses sensitive-field masking, a 500-row limit, the always-present pagination.total and has_more fields, and warns against a common headcount mistake. This is substantial behavioral context that annotations alone do not provide.

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

Conciseness5/5

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

Three short sentences deliver maximum signal: the core purpose is front-loaded, followed by only high-value behavioral and pagination warnings. No filler or repetition.

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

Completeness5/5

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

The description covers the essential operational details: field masking, hard limit, pagination semantics, and the correct way to count headcount. Since an output schema exists, return-value details do not need to be repeated, and nothing critical is missing for an agent to call this tool correctly.

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

Parameters3/5

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

Schema coverage is 50%, and the description does not explain the search or department parameters. It does add useful pagination-related context around limit/offset, but that partly duplicates the schema's own limit and offset descriptions, and the undocumented filter parameters remain under-specified.

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

Purpose5/5

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

The description states 'List employees' with a specific verb and resource, making the operation unmistakable. It also distinguishes itself from sibling tools like hr_get_roles and the employee mutation tools by focusing on listing employee records.

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

Usage Guidelines4/5

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

The description gives clear context for when to use this tool: to list employees, with important pagination guidance about using pagination.total rather than page counts when has_more is true. It does not explicitly name alternative tools or exclusion conditions, but none are necessary given the distinct resource.

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

hr_get_rolesGet rolesA
Read-only
Inspect

List the roles defined in the caller's workspace, as set up under Role Management in Matrix. These are the only values hr_create_employee and hr_update_employee accept for role - roles are per workspace, so never assume a role exists because another workspace has it. super_admin is listed if the workspace has it but cannot be granted through MCP.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, and the description reinforces this read-only behavior. It adds meaningful context beyond the annotation: roles are workspace-scoped, come from Role Management, and super_admin has a special limitation even when listed. A small gap remains around the exact return shape, but for a zero-parameter list tool this is sufficient.

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

Conciseness5/5

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

Three sentences, each earning its place: the first defines the action and source, the second links the result to related tools and warns about cross-workspace assumptions, and the third handles the edge case of super_admin. No redundant or filler content.

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

Completeness5/5

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

For a simple zero-parameter list tool, the description covers scope, source, related tools, workspace-specificity, and a special-case role. Nothing an agent needs to correctly invoke this tool is missing; the absence of an output schema is acceptable because the result is a straightforward list of role values.

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

Parameters4/5

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

The tool has zero parameters, so the description has no parameter details to add. The baseline for zero-parameter tools is 4, and the description correctly focuses on the result's meaning rather than input semantics.

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

Purpose5/5

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

The description clearly states the tool's function: listing roles defined in the caller's workspace. It names the specific resource (roles under Role Management in Matrix) and distinguishes itself from related HR tools by explaining its role in employee creation/updating.

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

Usage Guidelines5/5

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

The description explicitly tells agents when to use this tool: to discover valid role values for hr_create_employee and hr_update_employee. It also provides a critical when-not: never assume a role exists based on another workspace, and notes that super_admin cannot be granted through MCP.

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

hr_update_employeeUpdate employeeAInspect

Update an employee record. Only the fields you pass are changed. Two fields carry more than they look: is_admin grants or removes workspace administrator rights, which controls deletion and the recycle bin, and weekly_capacity_percentage feeds every resource and utilisation calculation.

ParametersJSON Schema
NameRequiredDescriptionDefault
roleNoA role key or name from THIS workspace - list them with hr_get_roles. Case-insensitive. super_admin cannot be granted through MCP.
emailNo
is_adminNo
positionNo
full_nameNo
last_nameNo
departmentNo
first_nameNo
employee_idYes
employment_typeNoPermanent | Permanent - Flextime | Hourly Paid (case-insensitive).
weekly_capacity_percentageNo

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already indicate this is a non-read, non-destructive mutation, so the bar is lower. The description adds meaningful behavioral context beyond the annotations: is_admin has consequences for deletion and recycle bin access, and weekly_capacity_percentage affects all resource and utilization calculations. It also clarifies partial-update semantics. No contradiction with annotations.

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

Conciseness5/5

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

Two sentences with no fluff. The action and partial-update rule come first, followed by targeted warnings about the two high-impact fields. Every sentence earns its place.

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

Completeness4/5

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

Given the 11-parameter, no-output-schema update context, the description covers the partial-update contract and the two behaviorally significant fields. Remaining gaps, such as return value or permission requirements, are minor and not essential for a competent agent to invoke the tool correctly.

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

Parameters4/5

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

Schema description coverage is only 18%, so the description must compensate. It does so for the two least obvious parameters: is_admin and weekly_capacity_percentage. The remaining parameters are mostly self-explanatory by name or already documented in the schema, such as role and employment_type. Critical hidden semantics are covered.

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

Purpose4/5

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

The description clearly states a specific action and resource: 'Update an employee record.' It also adds the partial-update rule, which narrows the tool's behavior. It does not explicitly contrast with hr_create_employee or hr_get_employees, but the resource and action are unambiguous among siblings.

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

Usage Guidelines3/5

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

The description implies when to use the tool: to change an existing employee record. The partial-update statement ('Only the fields you pass are changed') is useful guidance. However, it does not name alternatives or state conditions where another tool should be preferred, leaving sibling differentiation to inference.

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

list_trashList recycle binA
Read-onlyIdempotent
Inspect

List soft-deleted records currently in the recycle bin (leads, deals, contacts, tasks, projects). Admin-only. Records are permanently purged 30 days after deletion. Pass search to find a specific deleted record by name instead of paging through the whole bin. Max limit 500 - the response carries an exact pagination.total, so page with offset until has_more is false.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax 500.
offsetNo
searchNoCase-insensitive substring match on the record's name or title.
entity_typeNo

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the readOnly and idempotent annotations, the description reveals important behavior: records are permanently purged after 30 days, access is admin-only, responses contain an exact pagination.total, and has_more controls termination. This is meaningful behavioral context that an agent cannot infer from the schema alone.

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

Conciseness5/5

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

The description is compact and information-dense. It front-loads the core purpose, then adds access, retention, search, and pagination guidance without filler or redundant restatement of the schema.

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

Completeness5/5

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

Even without an output schema, the description specifies pagination response behavior (`pagination.total`, `has_more`) and covers scope, auth, retention, search, and limits. The only lightly documented parameter is `entity_type`, but the enum and record type list make it sufficiently usable.

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

Parameters4/5

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

Schema coverage is only 50%, but the description compensates by explaining the purpose of `search`, the max `limit` of 500, and how to use `offset` with pagination. It does not explicitly describe the `entity_type` parameter, though the enum values together with the listed record types make the meaning reasonably clear.

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

Purpose5/5

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

The description states a specific action and resource—'List soft-deleted records currently in the recycle bin'—and enumerates the exact record types covered: leads, deals, contacts, tasks, projects. It clearly distinguishes this tool from ordinary get/list tools because it specifically covers soft-deleted records in the recycle bin.

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

Usage Guidelines4/5

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

The description gives clear operational context: Admin-only access, use search for a specific deleted record rather than paging through the whole bin, and page with offset until has_more is false. It does not explicitly mention the restore siblings as the natural follow-up, but the internal usage guidance is solid.

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

notes_createAdd a note, optionally tagging colleaguesAInspect

Add a note to a lead, deal, contact or task. Tag colleagues by passing their employees.id in mention_employee_ids (look them up with hr_get_employees) - the tool appends the @Name markup the Matrix UI renders, records the mention, and sends each of them a notification that lands in their bell. You can also write the markup inline yourself and it will be picked up. Tagging yourself never sends a notification. Requires edit rights on the owning feature.

ParametersJSON Schema
NameRequiredDescriptionDefault
contentYes
entity_idYes
entity_typeYesWhich kind of record the note hangs off.
mention_employee_idsNoemployees.id of colleagues to tag. Max 20.

TDQS

A4.5/5.0
Behavior5/5

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

With only readOnlyHint=false and destructiveHint=false in annotations, the description adds crucial side-effect detail: generated @[Name](id) markup, recorded mentions, bell notifications, no notification for self-tags, and acceptance of inline markup. It also discloses permission requirements.

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

Conciseness4/5

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

The description is front-loaded with the core purpose and every sentence adds relevant operational detail. It is longer than minimal, but the mention/notification behavior justifies the extra length.

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

Completeness4/5

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

For a create operation with no output schema, the description covers the key behavioral requirements: target entity, mention mechanics, notifications, and permissions. It does not state what the tool returns, which is the main gap.

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

Parameters4/5

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

The schema describes entity_type and mention_employee_ids, and the description enriches mention_employee_ids with lookup guidance and notification behavior. It leaves entity_id somewhat implicit, but 'to a lead, deal, contact or task' plus the required entity_type makes the intended value inferable.

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

Purpose5/5

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

The description opens with 'Add a note to a lead, deal, contact or task', naming a specific action and resource. The title and sibling set (notes_delete/notes_update) make the create-specific scope unmistakable.

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

Usage Guidelines4/5

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

It clearly states when the mention parameter is appropriate and points to hr_get_employees for ID lookup, and notes the edit-rights prerequisite. It does not explicitly contrast with alternatives like notes_update or crm_create_followup, but the create semantics are clear.

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

notes_deleteDelete a noteA
Destructive
Inspect

PERMANENTLY delete one of YOUR OWN notes together with its mentions. Notes do not go to the recycle bin, so this cannot be undone, and only the author may delete. Requires explicit human confirmation: never fill in confirm/confirmation_phrase on your own initiative.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmNoMust be true. The HUMAN running this agent must set this - not the agent.
note_idYes
entity_typeYesWhich kind of record the note hangs off.
confirmation_phraseNoThe note_id. The HUMAN must supply this.

TDQS

A4.5/5.0
Behavior5/5

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

Annotations only flag destructive behavior, but the description adds rich behavioral detail: deletion cascades to mentions, notes bypass the recycle bin, the action cannot be undone, only the author may perform it, and the agent must never self-confirm. These go well beyond what readOnlyHint/destructiveHint provide.

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

Conciseness5/5

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

Two dense sentences with no filler. The first sentence front-loads the action, scope, and cascade effect; the second covers consequences and the human-in-the-loop guardrail. Every clause earns its place.

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

Completeness5/5

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

For a destructive note-deletion tool, the description covers permanence, mention cascade, author-only authorization, no-recycle-bin behavior, and the critical human-confirmation rule. With no output schema, omitting return-value details is acceptable. An agent has the key information needed to invoke the tool correctly.

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

Parameters3/5

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

The schema already documents confirm, confirmation_phrase, and entity_type with meaningful descriptions, covering 75% of parameters. The description reinforces the human-confirmation constraint but does not add new meaning for note_id or entity_type beyond what the schema states. Note_id still lacks an explicit semantic description in both schema and description.

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

Purpose5/5

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

Description opens with 'PERMANENTLY delete one of YOUR OWN notes together with its mentions,' specifying a clear verb, resource, and scope. It also distinguishes itself from related note tools and restore tools by emphasizing irreversibility and author-only deletion.

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

Usage Guidelines4/5

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

The description clearly communicates preconditions: only the author may delete, deletion is permanent, and human confirmation is required. It implies when not to use the tool (e.g., for recycle-bin recovery or for others' notes), though it does not explicitly name alternative sibling tools such as notes_update or restore operations.

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

notes_getGet notes on a recordA
Read-onlyIdempotent
Inspect

List the notes on a lead, deal, contact or task, newest first, with the author's name and every colleague tagged in each note resolved to a name. Mention markup in the content looks like @Full Name; the plain_content field has it flattened to @Full Name for reading. Max limit 200 - the response carries pagination.total and has_more.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax 200.
offsetNoRow offset. This tool has no cursor - page with offset.
entity_idYesThe lead, deal, contact or task the notes hang off.
entity_typeYesWhich kind of record the note hangs off.

Output Schema

ParametersJSON Schema
NameRequiredDescription
metaNo
notesYes
warningNoPresent only when the page is truncated.
paginationYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the description need not re-state safety. It adds useful behavioral details beyond the schema: newest-first ordering, mention markup format, plain_content flattening, and pagination fields ('pagination.total' and 'has_more').

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

Conciseness5/5

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

Three sentences, each earning its place: scope and ordering, mention formatting behavior, and pagination limits. Information is front-loaded and there is no filler.

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

Completeness5/5

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

With an output schema present and full parameter coverage, the description covers the remaining practical concerns: sorting, markup interpretation, and pagination behavior. Nothing essential to correctly invoke the tool is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema fully documents all four parameters. The description adds context about the response and ordering rather than deeper parameter semantics, keeping this at the baseline 3.

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

Purpose5/5

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

Description uses a specific verb ('List') plus a precise resource ('notes on a lead, deal, contact or task') and clarifies ordering ('newest first'). It is clearly distinct from the sibling notes_create/notes_update/notes_delete tools and from other getters that target different record types.

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

Usage Guidelines4/5

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

The description makes the intended use obvious: retrieve notes attached to supported entity types. It gives clear context and scoping, though it does not explicitly state exclusions or mention alternatives, which is acceptable because there is no competing note-retrieval sibling.

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

notes_updateEdit a noteAInspect

Rewrite one of YOUR OWN notes. Matrix only lets the author edit a note, so editing a colleague's is refused. Mentions are re-synced against the new content plus mention_employee_ids: colleagues tagged for the first time get a notification, colleagues dropped from the note lose their mention, and people who were already tagged are not notified again.

ParametersJSON Schema
NameRequiredDescriptionDefault
contentYes
note_idYes
entity_typeYesWhich kind of record the note hangs off.
mention_employee_idsNoemployees.id to tag. Max 20. Anyone already tagged inline in content is kept.

TDQS

A4.7/5.0
Behavior5/5

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

The description reveals important behavioral details beyond the sparse annotations: the platform refuses edits on other authors' notes, and mentions are re-synced with specific side effects—first-time tags trigger notifications, dropped tags remove the mention, and already-tagged people are not re-notified. This is valuable non-obvious behavior that an agent could not infer from the schema alone.

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

Conciseness5/5

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

The description is two sentences with no wasted words. It front-loads the primary action and constraint, then uses the second sentence to explain the most complex behavior (mention re-syncing). It is dense but easily parseable.

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

Completeness4/5

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

For a 4-parameter update tool with no output schema, the description covers the core decision points: who can edit, what happens with mentions, and what content replacement means. It lacks only minor details such as return/error behavior or explicit linkage between entity_type and note_id, but the schema covers the entity_type role. The description is nearly complete.

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

Parameters5/5

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

With only 50% schema description coverage, the description compensates strongly. It clarifies that note_id must reference one of the caller's own notes, that content is a full rewrite, and it adds rich semantics to mention_employee_ids by explaining notification behavior and how it interacts with inline mentions. This goes well beyond the schema's brief parameter descriptions.

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

Purpose5/5

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

The description states a specific action and resource: "Rewrite one of YOUR OWN notes." It also distinguishes itself by clarifying that only the author can edit a note, which separates it from notes_create, notes_delete, and notes_get. This is clear and unambiguous.

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

Usage Guidelines4/5

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

The description gives clear when-to-use context: rewriting your own notes. It also provides an explicit when-not-to-use condition: editing a colleague's note is refused. However, it does not name alternative tools such as notes_create or notes_get, so it falls just short of a full 5.

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

notifications_deleteDelete notificationsA
Destructive
Inspect

PERMANENTLY delete the signed-in user's own notifications. This cannot be undone and there is no recycle bin for notifications. A single notification deletes on its id; deleting several at once requires explicit human confirmation, so never fill in confirm/confirmation_phrase on your own initiative.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmNoRequired for a batch. The HUMAN running this agent must set this - not the agent.
notification_idNoDelete a single notification.
notification_idsNoDelete a batch under one confirmation. Max 500.
confirmation_phraseNoFor a batch: `DELETE <n> NOTIFICATIONS`. The HUMAN must supply this.

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already flag destructiveHint=true, but the description adds critical context: permanence, no recycle bin, scope limited to the signed-in user's own notifications, and the human-confirmation gate. This goes well 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.

Conciseness5/5

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

Three short, dense sentences with the critical permanence warning front-loaded, followed by the single vs batch distinction and the human-confirmation rule. No filler or redundancy.

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

Completeness5/5

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

The description plus the fully covered schema give the agent the scope, destructive nature, single/batch behavior, and human-authorization requirement needed to invoke the tool correctly. Error or return behavior is not described, but no output schema exists and it is not critical for a delete operation.

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

Parameters3/5

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

Schema coverage is 100%, so baseline 3 applies. The description confirms the single/batch split and the human-supplied confirmation rule, but this largely mirrors the schema's parameter descriptions rather than adding new semantic detail.

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

Purpose5/5

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

States a specific verb ('delete'), resource ('notifications'), scope ('signed-in user's own'), and permanence. This clearly distinguishes it from notifications_get, notifications_mark_read, notifications_send, and other delete tools in the sibling list.

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

Usage Guidelines4/5

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

Provides explicit operational guidance: single deletion by id vs batch requiring human-set confirm/confirmation_phrase, and an explicit never-fill-in restriction. It does not name sibling alternatives like notifications_mark_read, but the context for when to use this tool is clear.

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

notifications_getGet my notificationsA
Read-onlyIdempotent
Inspect

List the signed-in user's own Matrix notifications, newest first. There is no way to read anybody else's. Returns unread_count alongside the page, so 'how many unread do I have' never needs a second call. Max limit 200 - the response carries pagination.total and has_more; page with offset until has_more is false.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoFilter to one notification type, e.g. 'mention', 'follow_up_reminder', 'task_assigned'.
limitNoMax 200.
offsetNoRow offset. This tool has no cursor - page with offset.
to_dateNoInclusive, YYYY-MM-DD, on created_at.
from_dateNoInclusive, YYYY-MM-DD, on created_at.
unread_onlyNoOnly notifications that have not been marked read.
reference_typeNoFilter by what the notification points at: task | project | lead | deal | contact | risk | document and so on.

Output Schema

ParametersJSON Schema
NameRequiredDescription
metaNo
warningNoPresent only when the page is truncated.
paginationYes
notificationsYes

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the readOnly/idempotent annotations, the description reveals ordering (newest first), return behavior (unread_count alongside the page), pagination semantics (pagination.total, has_more, offset until has_more is false), and the maximum limit. This is useful behavioral detail the annotations do not provide.

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

Conciseness5/5

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

Three concise sentences front-load the core purpose, then cover return value and pagination. Every sentence earns its place with no filler or repetition of schema details.

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

Completeness5/5

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

The tool has 7 optional parameters fully described in the schema and an output schema. The description supplies the missing behavioral context: scope, ordering, unread_count, and pagination. An agent has everything needed to call it correctly.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description adds value by explaining how to paginate with offset until has_more is false and emphasizing the max limit of 200, which reinforces the schema's parameter info with operational guidance.

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

Purpose5/5

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

The description states a specific verb and resource: 'List the signed-in user's own Matrix notifications, newest first.' It clearly scopes the tool to one's own notifications and explicitly says there is no way to read anybody else's, distinguishing it from any other notification or retrieval tool.

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

Usage Guidelines4/5

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

The description gives clear context: it lists the signed-in user's own notifications and notes that unread_count is included so a separate unread-count call is unnecessary. It does not explicitly name alternative tools or state when not to use it, but among the notifications siblings the usage context is clear.

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

notifications_mark_readMark notifications readA
Idempotent
Inspect

Mark the signed-in user's own notifications as read. Pass notification_ids for specific ones, or all: true to clear every unread notification at once. Already-read notifications are left untouched.

ParametersJSON Schema
NameRequiredDescriptionDefault
allNoMark every unread notification read.
notification_idsNoSpecific notifications to mark. Max 500.

TDQS

A4.6/5.0
Behavior5/5

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

Beyond the annotations, the description explicitly states that already-read notifications are left untouched, which aligns with and elaborates the idempotentHint. It also clarifies the auth scope ('signed-in user's own') and the all-at-once clearing behavior, adding meaningful behavioral context.

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

Conciseness5/5

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

Three short sentences deliver the core action, the two invocation modes, and an important edge-case behavior. The description is front-loaded and every sentence serves a purpose with no redundancy.

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

Completeness4/5

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

The description covers the key invocation modes and the idempotent behavior, which is sufficient for a simple two-parameter mutation. The only minor gap is that it does not explicitly state what happens when neither parameter is provided, but the 'or' phrasing strongly implies that one should be chosen.

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

Parameters4/5

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

While the schema already covers both parameters at 100%, the description adds the 'or' relationship between notification_ids and all: true, implying these are alternative ways to invoke the tool. It also clarifies that already-read notifications are unaffected, which is useful behavioral meaning beyond the schema descriptions.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Mark the signed-in user's own notifications as read.' It clearly defines the tool's scope and distinguishes it from siblings like notifications_delete or notifications_get by focusing on the mark-read action.

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

Usage Guidelines4/5

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

The description gives clear context for when to use the tool: for the signed-in user's own notifications, with guidance on choosing between specific IDs or 'all: true'. It doesn't explicitly name alternative sibling tools or exclusions, but the intended use cases are clear enough.

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

notifications_sendSend a notification to colleaguesAInspect

Send an in-app Matrix notification to one or more colleagues in YOUR workspace. Recipients are given as employees.id (look them up with hr_get_employees); the tool resolves each to their login and refuses anyone outside your workspace. The notification lands in their bell immediately. It is written as type 'custom' - it is a person-to-person message, not a system alert, and the sender's name is appended so the recipient can see who it came from. Link it to a record by passing reference_type plus reference_id, and the recipient's click will open that record.

ParametersJSON Schema
NameRequiredDescriptionDefault
linkNoOptional explicit in-app path, e.g. /projects.
titleYes
priorityNomedium
descriptionNo
employee_idsYesemployees.id of the recipients. Max 50.
reference_idNoThe id of the record named by reference_type.
reference_typeNoWhat the notification points at. Requires reference_id.

TDQS

A4.5/5.0
Behavior5/5

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

Annotations are all false, so they carry no behavioral signal; the description takes on the full burden and does so thoroughly. It discloses that employee IDs are resolved to logins, out-of-workspace recipients are refused, delivery is immediate, the notification is type 'custom', the sender's name is appended, and record links open on click. This is rich, accurate behavioral context.

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

Conciseness4/5

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

The description is front-loaded with the primary purpose and recipient semantics, and most sentences earn their place. The internal detail about type 'custom' and sender-name appending is useful but slightly dense; it could be tightened without losing value.

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

Completeness4/5

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

For a 7-parameter write tool with no output schema and non-informative annotations, the description covers the essential invocation path: recipient resolution, workspace restriction, and record linking. Minor gaps remain around error behavior, optional link parameter usage, and the meaning of priority/title/description, but the tool can be called correctly with this description.

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

Parameters4/5

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

With only 57% schema coverage, the description adds meaningful semantics for employee_ids by explaining lookup and workspace validation, and for reference_type/reference_id by describing how the link opens a record. However, it does not clarify the meaning of title, description, or priority beyond what the schema already provides, and the relationship between the optional link parameter and the reference parameters is not fully explained.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Send an in-app Matrix notification to one or more colleagues in YOUR workspace.' It clearly distinguishes this from system alerts and from sibling notification tools like notifications_get or notifications_delete by framing it as a person-to-person custom message.

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

Usage Guidelines4/5

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

It gives clear context on when to use this tool: sending person-to-person notifications to workspace colleagues. It also provides cross-tool guidance by directing users to hr_get_employees to resolve employee IDs, and states the workspace restriction. It does not explicitly name alternatives or exclusions, but the use case is well-scoped.

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

projects_add_documentAdd project documentAInspect

Register a project document reference. Provide file_path (already uploaded to storage) and file_name.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_nameYes
file_pathYes
file_sizeNo
mime_typeNo
project_idYes
document_type_idNo

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already indicate this is not read-only and not destructive; the description adds meaningful behavioral context by clarifying it only registers a reference and does not upload the file itself. This helps the agent avoid assuming storage behavior. It stops short of describing the response, but the core side-effect is well communicated.

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

Conciseness5/5

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

Two sentences with no filler: the purpose comes first, then the key prerequisite and required fields. Every sentence earns its place.

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

Completeness3/5

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

The description covers the essential invocation path—required fields and the storage prerequisite—so an agent could likely call the tool correctly. However, there is no output schema, optional parameter guidance is missing, and the description does not indicate what happens after registration, such as whether an ID or confirmation is returned.

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

Parameters2/5

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

Schema description coverage is 0%, so the description carries full responsibility for explaining parameters. It only clarifies file_path and file_name, leaving project_id, document_type_id, file_size, and mime_type unexplained. With six parameters, this is a significant gap.

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

Purpose5/5

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

The description uses a specific verb ('Register') and resource ('project document reference'), and the phrase 'already uploaded to storage' distinguishes this from an actual file-upload operation. This clearly separates it from sibling tools like projects_delete_document or projects_get.

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

Usage Guidelines3/5

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

The description implies the tool should be used only after the file has been uploaded to storage by saying 'file_path (already uploaded to storage)'. However, it does not explicitly state when to use this tool versus alternatives like projects_delete_document, nor does it mention conditions around optional parameters like document_type_id.

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

projects_add_team_memberAdd team member to projectAInspect

Assign an employee to a project. allocation_type: percentage | fixed_hours. Rejects allocations that push the employee over 100% total capacity for the period unless allow_overbooking is true.

ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateNo
project_idYes
start_dateYesISO date YYYY-MM-DD
employee_idYes
allocation_typeNopercentage | fixed_hours (default percentage)
allocation_hoursNo
allow_overbookingNoSet true to bypass the >100% capacity check.
allocation_percentageNo

TDQS

A3.9/5.0
Behavior4/5

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

Annotations only indicate generic read-only/destructive hints, so the description adds meaningful behavioral context by disclosing that this operation creates an assignment and rejects allocations over 100% capacity unless allow_overbooking is true. It does not describe error responses or effects on existing assignments, but the core validation behavior is usefully surfaced.

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

Conciseness5/5

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

The description is compact and front-loaded: it states the action first, then the key allocation_type constraint, then the capacity rule. There is no filler, repetition of the title, or unnecessary detail.

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

Completeness3/5

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

The description captures the essential action and the most important validation rule, making a basic call plausible. But with 8 parameters, low schema coverage, and no output schema, it leaves missing details such as return behavior, end_date semantics, and the relationship between allocation_type and its numeric fields. It is adequate but not fully complete for an agent invoking edge cases.

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

Parameters3/5

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

Schema description coverage is only 38%, so the description must compensate for undocumented parameters. It partially does by naming allocation_type values and explaining the allow_overbooking bypass. However, it leaves gaps around how allocation_hours and allocation_percentage map to the two allocation types and what end_date/period means for the capacity check.

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

Purpose5/5

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

The description opens with a specific verb and resource, 'Assign an employee to a project,' which clearly expresses a team-member add operation. It is distinct from sibling tools like projects_update_team_member, projects_remove_team_member, and projects_add_document. The allocation_type mention reinforces that this is about staffing, not documents, pricing groups, or other project resources.

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

Usage Guidelines3/5

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

The description implies the primary use case: assign a new employee to a project. However, it does not explicitly state when to use this tool over alternatives such as projects_update_team_member, projects_remove_team_member, or resources_create_allocation. The agent must infer the correct tool primarily from the name and title.

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

projects_assign_pricing_groupAssign team member to pricing groupAInspect

Put a project team member on a billing rate group. Replaces any existing group for that member on the project.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idYes
employee_idYesemployees.id of an existing project team member.
pricing_group_idYes

TDQS

A3.7/5.0
Behavior4/5

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

The description explicitly discloses the most important behavioral trait: it replaces any existing pricing group for the member on the project. This goes beyond the annotations (readOnlyHint false, destructiveHint false) and warns the agent of an overwrite, though it does not cover prerequisites or reversibility.

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

Conciseness5/5

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

One concise sentence with the action front-loaded and a meaningful behavioral caveat added immediately. No redundancy or filler.

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

Completeness3/5

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

The core behavior and replacement semantics are covered, which is adequate for a simple assignment tool. However, it does not mention return values, whether the pricing group must already exist, or how this relates to the unassign sibling, leaving some context incomplete.

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

Parameters3/5

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

With only 33% schema coverage, only employee_id is documented. The description maps 'project team member' to employee_id and 'billing rate group' to pricing_group_id, but project_id remains implicit and no ID format or lookup guidance is given. It adds partial meaning but does not fully compensate for the schema gaps.

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

Purpose4/5

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

The description clearly states the action ('Put a project team member on a billing rate group') and resource, and the added behavior 'Replaces any existing group' distinguishes it from unassign/update tools. It does not explicitly name sibling tools, but the semantics are precise enough to avoid confusion.

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

Usage Guidelines3/5

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

Usage is implied rather than stated. The replacement behavior suggests this is the tool for assigning or changing a member's rate group, but there is no explicit guidance on when to use it versus projects_unassign_pricing_group or other project tools.

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

projects_confirm_completionConfirm an auto-completed project is finishedA
Idempotent
Inspect

Confirm that a project the nightly automation closed for passing its end_date really is finished. Clears awaiting_manager_decision; status stays 'Completed' and the project stays archived, and auto_completed_at is kept as history. Use projects_reactivate instead if the work is still running. Only the project manager or a workspace admin may decide. Never call this to tidy up a list - it records a human judgement that the project is done.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idYes

TDQS

A4.7/5.0
Behavior5/5

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

Even though annotations already provide idempotentHint, destructiveHint, and readOnlyHint, the description adds rich behavioral detail: it clears awaiting_manager_decision, status remains 'Completed', project stays archived, and auto_completed_at is preserved as history. It also discloses the permission requirement and the fact that this records a human decision, going well 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.

Conciseness5/5

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

The description is four sentences, each earning its place: purpose, state-change details, alternative routing, and human-judgement warning. It is front-loaded with the main action and contains no filler or repetition.

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

Completeness5/5

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

For a single-parameter tool with no output schema, the description covers the action, the state transitions, the permission model, and the boundary against misuse. Nothing necessary for an agent to invoke this tool correctly is missing.

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

Parameters3/5

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

The input schema only says project_id is a string, with 0% schema description coverage. The description implies project_id identifies the auto-completed project being confirmed, but it never explicitly states that project_id is the ID of the project to confirm. The single obvious parameter reduces ambiguity, but the description does not fully compensate for the lack of schema-level parameter documentation.

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

Purpose5/5

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

The description names a specific verb ('Confirm'), a precise resource type ('a project the nightly automation closed for passing its end_date'), and clearly separates this from the sibling projects_reactivate. It also states the core outcome: recording a human judgement that the project is truly finished.

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

Usage Guidelines5/5

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

The description explicitly says when to use the tool ('Confirm that a project... really is finished'), when not to use it ('Never call this to tidy up a list'), and which alternative to choose ('Use projects_reactivate instead if the work is still running'). It also names the authorized actors, making usage conditions fully explicit.

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

projects_createCreate projectAInspect

Create a new project. Status: Planning|Active|On Hold|Completed|Cancelled|Archived (default Planning). budget_type: Fixed|Time&Material|Time (default Fixed). start_date and end_date are REQUIRED so team allocations render correctly in the UI. REVENUE RULES - a project may be created in Planning before its price is agreed, but it cannot leave Planning earning nothing. A database trigger holds it there, so this applies to the app too: • Fixed: revenue is the agreed contract sum. Required for any status other than Planning. • Time / Time&Material: revenue comes from logged hours x pricing-group rates, so pass pricing_groups (at least one {group_name, hourly_rate} above 0). Required for any status other than Planning; revenue_ceiling is the optional cap. manager_id is REQUIRED: a project with no manager never appears in anyone's awaiting-decision list, so when the nightly job closes it the decision reaches nobody. Anything you leave out comes back in open_questions. Those are not errors - the project is created - but put them to the user rather than leaving the project half filled in.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYes
statusNo
deal_idNoOptional CRM deal id to link this project to.
revenueNoAgreed contract sum. Required for Fixed-price projects.
billableNo
end_dateYesISO date YYYY-MM-DD. Required.
manager_idYesThe project manager, by name or employees.id. Required.
start_dateYesISO date YYYY-MM-DD. Required.
budget_typeNoFixed | Time | Time&Material. Required - ask the user rather than assuming.
customer_idNo
descriptionNo
budget_amountNoBudgeted internal TIME cost - not revenue.
pricing_groupsNoBilling rates for Time / Time&Material projects. Required for those budget types.
project_numberNo
budget_expensesNo
revenue_ceilingNoOptional revenue cap for Time / Time&Material projects.
budget_materialsNo
budget_external_servicesNo

TDQS

A4.7/5.0
Behavior5/5

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

Goes well beyond the minimal annotations by disclosing the database trigger that keeps a project in Planning, the manager_id requirement tied to the nightly job and awaiting-decision lists, and the open_questions response behavior where missing fields are not errors but still need user follow-up. These are behavioral side effects an agent must know to invoke and follow up correctly.

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

Conciseness5/5

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

Despite being dense, the description is front-loaded with the one-line purpose and organized around REVENUE RULES and required-field calls. Each sentence adds necessary conditional or behavioral information, with no filler.

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

Completeness5/5

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

For an 18-parameter create with no output schema, the description addresses the hard parts: required fields (start_date, end_date, manager_id), status and budget_type domains, the revenue trigger, pricing_groups, and open_questions. Optional fields are left to the schema, which is acceptable given the schema already documents them.

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

Parameters4/5

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

The description adds substantial meaning: exact status values, budget_type default, conditional revenue requirements per Fixed vs Time/Time&Material, pricing_groups minimum structure, and revenue_ceiling as an optional cap. However, it states 'budget_type ... (default Fixed)' while the schema property says 'Required - ask the user rather than assuming,' an inconsistency that prevents a top score.

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

Purpose5/5

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

Starts with 'Create a new project,' a specific verb+resource statement that distinguishes this top-level creation tool from the sibling sub-resource creators such as projects_create_material and projects_create_risk. It then scopes the object with status, budget_type, and required dates, leaving no doubt about what is being created.

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

Usage Guidelines4/5

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

Provides clear context for when creation is appropriate: a project may be created in Planning before a price is agreed, and any status other than Planning requires revenue or pricing_groups depending on budget_type. It does not explicitly name alternatives or when-not-to-use cases such as projects_update, so it stops short of a 5.

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

projects_create_billing_milestoneCreate billing milestoneAInspect

Add a fixed-fee billing milestone to a project's billing plan - this is what lets a fixed-price project be invoiced in instalments. amount_type 'percentage' means amount_value is a percent of the project's revenue (contract sum); 'fixed' means amount_value is an absolute amount. Requires finance.create.

ParametersJSON Schema
NameRequiredDescriptionDefault
statusNopending | invoiced. Defaults to pending.
due_dateYesISO date YYYY-MM-DD. Required.
project_idYes
sort_orderNo
amount_typeYespercentage | fixed (case-insensitive).
descriptionNo
amount_valueYesA percent of the contract sum when amount_type is 'percentage', otherwise an absolute amount.

TDQS

A4.2/5.0
Behavior4/5

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

The description makes the write action explicit and discloses an authorization requirement ('finance.create') that is not present in the annotations. The annotations already indicate readOnlyHint=false and destructiveHint=false, and the description does not contradict them. It does not mention response shape or idempotency, but the annotation coverage lowers the burden.

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

Conciseness5/5

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

The description is two dense sentences with no filler. It front-loads the action and purpose, then gives the key parameter semantics and the permission requirement. Every sentence earns its place.

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

Completeness4/5

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

For a create-style tool, the description covers the core business semantics, the distinguishing parameter behavior, and the required permission. The schema handles field formats and defaults for due_date and status. Minor gaps are the absence of return-value details and sort_order semantics, but an agent has enough to invoke this tool correctly.

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

Parameters3/5

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

The description clarifies the conditional relationship between amount_type and amount_value, giving useful meaning to the core fields. However, the schema already documents most of this behavior, and the description does not explain project_id, sort_order, or description. With only 57% schema coverage, the description adds some value but does not fully compensate for the undocumented parameters.

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

Purpose5/5

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

The description states a specific action ('Add') and a specific resource ('a fixed-fee billing milestone to a project's billing plan'), and explains its business purpose: enabling a fixed-price project to be invoiced in instalments. The verb 'Add' clearly differentiates it from sibling tools that update, delete, or retrieve billing milestones.

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

Usage Guidelines4/5

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

The description gives clear context for when this tool is appropriate: adding instalment milestones to a fixed-fee project's billing plan. It also states a required permission ('finance.create'). It does not explicitly name alternatives or say when not to use it, so it stops short of a 5.

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

projects_create_external_serviceCreate external serviceCInspect

Add an external service line to a project.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
notesNo
statusNoPlanned
agreementNoNo
project_idYes
assignee_idNo
is_billableNo
budgeted_costNo
markup_percentageNo

TDQS

C2.7/5.0
Behavior3/5

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

Annotations already indicate this is a mutating but non-destructive operation, and the description is consistent with that. It adds minor context by framing the action as adding a line item to a project, but it does not disclose behavioral details such as whether duplicates are allowed, how defaults apply, or what happens after creation.

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

Conciseness4/5

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

The description is a single, front-loaded sentence with no filler. It is concise and easy to scan, though its brevity comes at the cost of omitted useful detail.

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

Completeness2/5

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

For a create tool with 9 parameters, no output schema, no parameter descriptions, and only minimal annotations, one short sentence is insufficient. The description does not explain required fields, default behaviors, optional field semantics, or the expected result of the operation.

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

Parameters1/5

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

Schema description coverage is 0% and the description mentions none of the 9 parameters. It does not explain the meaning of name, notes, status, agreement, assignee_id, is_billable, budgeted_cost, or markup_percentage, so the description fails to compensate for the complete lack of schema-level parameter documentation.

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

Purpose4/5

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

The description states a specific action and resource: 'Add an external service line to a project.' This clearly distinguishes it from related project tools like material, risk, or pricing group creation, and from update/delete external service tools. It is not a pure tautology because it adds the 'line to a project' scoping.

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

Usage Guidelines2/5

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

The description gives no guidance on when to use this tool versus alternatives such as projects_update_external_service, projects_get_external_services, or other projects_create_* tools. An agent must infer usage purely from the tool name and sibling list.

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

projects_create_materialCreate materialAInspect

Add a material line to a project. total_cost is what the material COSTS the firm and counts against the project's material budget immediately. markup_percentage and is_billable decide what the client is charged on top; a non-billable line still consumes budget but earns nothing. Amounts are in the workspace currency.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
unitYes
categoryYes
quantityNo
supplierYes
unit_costNo
project_idYes
total_costNo
is_billableNo
markup_percentageNo

TDQS

A4.5/5.0
Behavior5/5

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

The description goes beyond annotations by explaining real behavioral consequences: total_cost immediately consumes the material budget, is_billable and markup_percentage determine client charges, and non-billable lines still consume budget but earn nothing. It matches the mutation semantics of readOnlyHint=false and adds valuable side-effect detail.

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

Conciseness5/5

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

Three sentences, with the core action front-loaded and every following sentence adding substantive financial or billing context. There is no fluff and no repetition of schema defaults.

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

Completeness3/5

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

For a 10-parameter mutation tool with no schema descriptions and no output schema, the description leaves meaningful gaps: how unit_cost and quantity relate to total_cost, how markup_percentage is applied, and what the response looks like. It is adequate for tool selection and high-level input understanding, but not fully complete for precise invocation.

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

Parameters4/5

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

With 0% schema description coverage, the description adds essential meaning for the least obvious parameters: total_cost, markup_percentage, is_billable, and workspace currency. It does not explain the relationship between unit_cost, quantity, and total_cost, or the exact markup formula, so it is not fully complete.

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

Purpose5/5

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

The description clearly states a specific action and resource: 'Add a material line to a project.' This distinguishes it from sibling tools like projects_update_material, projects_delete_material, and projects_get_materials. It also adds relevant domain context about material budgeting.

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

Usage Guidelines4/5

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

The first sentence gives unambiguous usage context—use this tool to add a new material line to a project. It does not explicitly list alternatives or exclusions, so it misses the strongest 'when not to use' guidance, but the intended situation is clear.

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

projects_create_pricing_groupCreate pricing groupAInspect

Create a billing rate group on a project (e.g. 'Senior Consultant' at 1450/hour). The rate is a SALES price per hour in the WORKSPACE currency - check the currency before entering a figure, because a rate in the wrong currency raises no error and simply produces wrong revenue and margin. The response echoes meta.currency.

ParametersJSON Schema
NameRequiredDescriptionDefault
group_nameYes
project_idYes
hourly_rateYesSales price per hour, in the workspace currency (see meta.currency in the response, or reports_get meta.currency).

TDQS

A4.6/5.0
Behavior5/5

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

Beyond the annotations, the description discloses a critical silent-failure mode: entering a rate in the wrong currency raises no error and only later causes incorrect revenue and margin. It also tells the agent that the response echoes meta.currency, which is useful behavioral context not present in the schema or annotations.

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

Conciseness5/5

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

The description is three sentences with no filler. It front-loads the core purpose, gives a concrete example, then adds the critical currency warning and response hint. Every sentence earns its place.

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

Completeness4/5

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

For a simple 3-parameter create tool with no output schema, the description covers the key semantic trap (currency), indicates the response echoes meta.currency, and provides a realistic example. It could be slightly more explicit about the returned object or how this relates to projects_assign_pricing_group, but it is sufficient for correct invocation.

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

Parameters4/5

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

Schema coverage is only 33% (only hourly_rate has a description), so the description compensates by clarifying that hourly_rate is a SALES price in the workspace currency. It also helps with project_id and group_name by framing them in the context of creating a billing rate group on a project, though it does not detail their exact formats.

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

Purpose5/5

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

The description begins with a specific verb and resource: 'Create a billing rate group on a project', with a concrete example ('Senior Consultant' at 1450/hour). This clearly distinguishes it from sibling tools like projects_assign_pricing_group, projects_update_pricing_group, and projects_delete_pricing_group.

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

Usage Guidelines4/5

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

The description gives actionable guidance: check the workspace currency before entering a rate because a wrong currency silently produces wrong revenue and margin. It does not explicitly name alternative tools or state when not to use it, but the create semantics and currency precondition provide clear usage context.

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

projects_create_riskCreate riskAInspect

Log a new project risk. Category: Technical|Schedule|Financial|Contract|Communication|Other. Status: Open|In Progress|Closed. responsible_owner must be an employees.id in your workspace (use hr_get_employees to look it up).

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYes
impactNo
statusNo
categoryNo
project_idYes
descriptionNo
probabilityNo
responsible_ownerNoemployees.id - not an auth user id.
mitigation_actionsNo

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already signal the mutation is read-write and non-destructive; the description adds useful constraints such as allowed category/status values and the employees.id requirement within the workspace. It does not disclose side effects, duplicate handling, or other behavioral caveats, but the annotation safety profile lowers the burden.

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

Conciseness5/5

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

Three short sentences carry only high-value information: the action, the exact allowed values for two constrained fields, and the lookup requirement for the foreign key. Nothing is padded or repeated.

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

Completeness3/5

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

The description is adequate for a basic call because required fields are apparent from the schema and the tool name, and the owner constraint is covered. It is not fully complete for nine parameters: it never explains the meaning of impact/probability, whether category/status are optional, or how project_id should be resolved to an existing project.

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

Parameters3/5

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

Schema description coverage is only 11%, and the description compensates for a few parameters by listing valid categories, statuses, and the responsible_owner lookup rule. Required project_id/title and the impact/probability scale remain underspecified, so the compensation is only partial.

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

Purpose5/5

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

The description opens with 'Log a new project risk,' which names a concrete action, the resource, and the 'new' state that distinguishes creation from the update/delete/get siblings. There is no ambiguity about what this tool does.

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

Usage Guidelines4/5

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

The creation context is clear and the description adds a specific prerequisite: responsible_owner must come from hr_get_employees. It does not explicitly say 'use projects_update_risk for existing risks,' so it falls just short of fully explicit routing between sibling tools.

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

projects_deleteDelete projectA
Destructive
Inspect

Soft-delete a project: it moves to the recycle bin for 30 days (cascading to its tasks) and can be brought back with projects_restore. Admin-only. Not permanent, so no confirmation phrase is required - but always tell the user which project you removed and that its tasks went with it.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idYes

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already indicate destructiveHint=true, but the description goes far beyond by disclosing the 30-day recycle-bin retention, cascading deletion of tasks, restorability, admin-only restriction, and the no-confirmation-phrase policy. This gives the agent an accurate behavioral model without contradiction.

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

Conciseness5/5

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

Two sentences deliver dense, useful information with no filler. The core behavior is front-loaded, and each clause adds a meaningful operational detail: soft-delete, retention, cascade, restore path, permissions, and user communication.

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

Completeness5/5

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

For a single-parameter delete tool with destructive annotations, the description covers the key operational context: what gets deleted, what happens to tasks, recovery options, admin requirement, and the required user-facing disclosure. No important behavior is missing.

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

Parameters3/5

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

There is only one parameter, project_id, and the schema provides its type. The description implicitly maps it to 'the project' being deleted but does not explicitly explain the parameter's meaning or format. Since the single parameter is self-evident from the tool name and title, this is adequate but not enhanced.

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

Purpose5/5

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

Description uses a specific verb and resource: 'Soft-delete a project', immediately distinguishing it from permanent deletion and from sibling tools like projects_restore. The recycle-bin and 30-day retention details further differentiate it from other delete tools.

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

Usage Guidelines4/5

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

The description gives clear context: admin-only, soft delete, non-permanent, and names projects_restore as the recovery path. It also instructs the agent to inform the user about which project and tasks were affected. It does not explicitly enumerate when not to use the tool, but the soft-delete framing makes the usage conditions clear.

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

projects_delete_billing_milestoneDelete billing milestoneA
Destructive
Inspect

PERMANENTLY delete a fixed-fee billing milestone. A milestone that has already been marked invoiced is refused, because removing it would silently change what the project's instalment plan says was billed. Requires 'finance.edit' and explicit human confirmation: never fill in confirm/confirmation_phrase on your own initiative.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmNoMust be true. The HUMAN running this agent must set this - not the agent.
milestone_idYes
confirmation_phraseNoThe milestone_id. The HUMAN must supply this.

TDQS

A4.7/5.0
Behavior5/5

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

The annotations already mark destructiveHint=true, but the description goes well beyond this by disclosing permanence, the invoiced-milestone refusal and its financial rationale, the required permission, and the hard rule that confirm/confirmation_phrase must never be agent-filled. This is exactly the behavioral context an agent needs before invoking a destructive tool.

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

Conciseness5/5

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

Three sentences: the first states the action, the second explains a critical refusal condition, and the third states permissions and the human-confirmation rule. Every sentence carries essential information and the most important warning is front-loaded.

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

Completeness5/5

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

For a destructive, permission-gated mutation tool with no output schema, the description covers permanence, refusal cases, permission requirements, and the human-in-the-loop constraint. No critical operational detail is missing.

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

Parameters4/5

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

Schema coverage is 67% and the schema already documents that confirm and confirmation_phrase must be human-supplied. The description adds important operational semantics by explicitly instructing the agent never to fill these on its own initiative, reinforcing the human-gated nature of the parameters beyond the schema text.

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

Purpose5/5

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

The description opens with 'PERMANENTLY delete a fixed-fee billing milestone', naming a specific verb, resource, and scope. It clearly distinguishes this from sibling tools like projects_update_billing_milestone and projects_delete_document by naming the exact object being deleted.

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

Usage Guidelines4/5

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

The description gives clear operational context: it is for deleting fixed-fee billing milestones, and explicitly states that invoiced milestones are refused. It also states prerequisites ('Requires finance.edit') and a required human confirmation step. It does not explicitly name an alternative tool for editing rather than deleting, but the usage boundary is otherwise clear.

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

projects_delete_documentDelete project document referenceA
Destructive
Inspect

PERMANENTLY delete a project document ROW. The uploaded file itself stays in storage - this only removes the reference, so the document disappears from the project without freeing any space. Requires explicit human confirmation: never fill in confirm/confirmation_phrase on your own initiative.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmNoMust be true. The HUMAN running this agent must set this - not the agent.
document_idYes
confirmation_phraseNoThe row id being deleted. The HUMAN must supply this.

TDQS

A4.6/5.0
Behavior5/5

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

Beyond the destructiveHint annotation, the description discloses that deletion is permanent, that the file remains in storage, and that the operation requires explicit human confirmation — 'never fill in confirm/confirmation_phrase on your own initiative.' This is exactly the behavioral context an agent needs.

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

Conciseness5/5

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

Two dense, front-loaded sentences with no filler. The most important constraint (permanent deletion) comes first, followed by the storage caveat and the human-confirmation requirement. Every clause earns its place.

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

Completeness4/5

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

For a destructive reference-removal tool, the description covers the core consequences and the mandatory safety condition. It omits details like error behavior or what happens if the document row does not exist, but nothing essential is missing for selecting and invoking the tool.

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

Parameters4/5

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

Schema coverage is 67%, and the description meaningfully reinforces the two confirmation-related parameters by forbidding the agent from supplying confirm or confirmation_phrase autonomously. It does not add detail about document_id, but that parameter's purpose is already evident from the tool's name and format.

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

Purpose5/5

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

The description states a precise action and resource: 'PERMANENTLY delete a project document ROW.' It goes beyond the name by clarifying the scope and its boundary ('the uploaded file itself stays in storage'), which distinguishes it from deleting the file or deleting an entire project.

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

Usage Guidelines4/5

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

The description gives clear operational context: this tool only removes the reference and does not free storage, so an agent can infer it is for reference removal rather than file deletion. It does not explicitly name an alternative tool or state a when-not-to-use condition, which prevents a 5.

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

projects_delete_external_serviceDelete external serviceA
Destructive
Inspect

PERMANENTLY delete an external/subcontractor service line from a project. This lowers the project's external cost and cannot be undone. Requires explicit human confirmation: never fill in confirm/confirmation_phrase on your own initiative.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmNoMust be true. The HUMAN running this agent must set this - not the agent.
confirmation_phraseNoThe row id being deleted. The HUMAN must supply this.
external_service_idYes

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the destructiveHint annotation, the description adds crucial behavioral context: the deletion is permanent, cannot be undone, lowers external cost, and requires explicit human confirmation. It explicitly instructs the agent never to populate confirm/confirmation_phrase on its own, which is essential for safe invocation.

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

Conciseness5/5

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

Three short sentences, each carrying distinct and necessary information: what is deleted, the irreversible consequence and cost impact, and the human-confirmation requirement. No filler or redundancy.

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

Completeness5/5

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

For a destructive tool with one required parameter and no output schema, the description plus input schema fully cover what an agent needs: what is deleted, the irreversible nature, the required confirmation behavior, and the identifier parameter. Nothing critical is missing.

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

Parameters4/5

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

The schema already documents external_service_id, confirm, and confirmation_phrase reasonably well. The description adds important operational semantics by clarifying that confirm and confirmation_phrase must be supplied by the human, not the agent, and that the delete targets an external/subcontractor service line.

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

Purpose5/5

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

The description states a specific verb and resource: permanently delete an external/subcontractor service line from a project. It clearly distinguishes this from sibling tools like projects_update_external_service or projects_create_external_service by focusing on irreversible deletion.

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

Usage Guidelines4/5

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

The description gives clear context for when this tool applies: deleting an external service line from a project. It does not explicitly name alternatives or exclusion conditions, but the purpose statement is unambiguous enough for an agent to select it correctly among the sibling delete/update/create tools.

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

projects_delete_materialDelete materialA
Destructive
Inspect

PERMANENTLY delete a material line from a project. This lowers the project's material cost and cannot be undone - materials do not go to the recycle bin. Requires explicit human confirmation: never fill in confirm/confirmation_phrase on your own initiative.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmNoMust be true. The HUMAN running this agent must set this - not the agent.
material_idYes
confirmation_phraseNoThe row id being deleted. The HUMAN must supply this.

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already mark destructiveHint=true, but the description goes well beyond them: it discloses irreversibility, that materials do not go to the recycle bin, that project material cost is lowered, and crucially that the human, not the agent, must supply confirmation fields. This is rich behavioral context that meaningfully affects how an agent should plan and invoke 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.

Conciseness5/5

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

The description is short, front-loaded with the key action and consequences, and every sentence earns its place: scope, irreversibility, recycle-bin behavior, and the human-confirmation rule. No wasted words.

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

Completeness4/5

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

For a destructive tool with no output schema and only three simple parameters, the description covers the essential context: what is deleted, the permanent consequence, and the mandatory human-in-the-loop confirmation. It does not mention what happens if the material_id does not exist or whether deletion is idempotent, but these are minor for a tool whose safety-critical aspects are already well covered.

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

Parameters3/5

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

Schema description coverage is 67%: confirm and confirmation_phrase already have explicit descriptions in the schema, and the description reinforces the human-only rule. The remaining parameter, material_id, is not described in the schema, and the tool description only indirectly clarifies it via 'delete a material line from a project'. The description adds safety emphasis but no substantial new parameter-level meaning beyond the schema.

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

Purpose5/5

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

The description states a specific verb ('delete'), a specific resource ('material line'), and a scope ('from a project'). It also emphasizes 'PERMANENTLY' and 'cannot be undone', clearly distinguishing this destructive operation from soft-delete/restore siblings. This leaves no ambiguity about what the tool does.

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

Usage Guidelines4/5

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

The description provides explicit invocation guidance: use only with explicit human confirmation, and never auto-fill confirm/confirmation_phrase. It makes clear this is a permanent act on a material line, not a reversible soft delete. However, it does not explicitly name alternatives (e.g., updating the material instead of deleting) or state when not to use it beyond the human-confirmation requirement, so it stops short of a full when/when-not comparison.

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

projects_delete_pricing_groupDelete pricing groupA
Destructive
Inspect

PERMANENTLY delete a billing rate group from a project. Team members still assigned to the group are left without a rate, which means they bill at 0 on Time / Time&Material projects, so the tool refuses while the group is in use unless you pass force: true. Requires explicit human confirmation: never fill in confirm/confirmation_phrase on your own initiative.

ParametersJSON Schema
NameRequiredDescriptionDefault
forceNoDelete even though members are assigned. Those members end up billing at 0 until they are put on another group.
confirmNoMust be true. The HUMAN running this agent must set this - not the agent.
pricing_group_idYes
confirmation_phraseNoThe pricing_group_id. The HUMAN must supply this.

TDQS

A4.4/5.0
Behavior5/5

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

Annotations only declare destructiveHint=true, but the description adds critical context: the deletion is permanent, assigned members silently fall to a 0 billing rate on Time / Time&Material projects, the tool refuses while the group is in use without force: true, and confirm/confirmation_phrase must be human-supplied. This goes far beyond the single destructive flag and covers exactly what an agent needs to know before invoking.

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

Conciseness5/5

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

Three sentences, each carrying essential weight: the action and permanence, the side effects and refusal condition, and the human-confirmation guardrail. The most decision-relevant information (permanence, downstream billing impact, force requirement) is front-loaded, with zero filler.

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

Completeness4/5

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

For a destructive tool with 4 parameters, no output schema, and a safety-critical human-confirmation requirement, the description covers the action, consequences, guardrails, and refusal behavior thoroughly. A minor gap: it doesn't describe the success response, and the recommended non-force workflow (unassign members first) is implied rather than stated. Still, nothing essential to a correct call is missing.

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

Parameters4/5

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

With 75% schema coverage, the schema already documents force, confirm, and confirmation_phrase. The description adds important semantics beyond that: the rule that confirm/confirmation_phrase must never be auto-filled by the agent, and the causal link between force and the refusal behavior. Only pricing_group_id lacks a schema description, but it is self-evident from the tool name and context.

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

Purpose5/5

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

The description opens with 'PERMANENTLY delete a billing rate group from a project' — a specific verb, resource, and scope. It clearly distinguishes this from sibling tools that delete other project entities (projects_delete, projects_delete_material, etc.) and from pricing-group management tools like projects_create_pricing_group or projects_update_pricing_group.

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

Usage Guidelines3/5

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

The description explains the refusal behavior ('refuses while the group is in use unless you pass force: true') and implies the safe workflow — members should be moved to another group before deletion. However, it never explicitly names the alternative tool (e.g., projects_unassign_pricing_group or projects_assign_pricing_group) or states 'use X instead when members are assigned,' so the routing guidance 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.

projects_delete_riskDelete riskA
Destructive
Inspect

PERMANENTLY delete a project risk. Risks have no recycle bin - this cannot be undone, and it removes the record that the risk was ever raised. Prefer projects_update_risk with status 'Closed' to retire a risk while keeping its history. Requires explicit human confirmation: never fill in confirm/confirmation_phrase on your own initiative.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmNoMust be true. The HUMAN running this agent must set this - not the agent.
risk_idYes
confirmation_phraseNoMust exactly equal the risk id. The HUMAN must supply this.

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the destructiveHint annotation, the description discloses that risks have no recycle bin, deletion is irreversible, and the record that the risk was ever raised is removed. It also mandates explicit human confirmation, which is critical safety context for an agent.

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

Conciseness5/5

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

The description is concise and well structured: it leads with the irreversible nature, then provides the safer alternative, and closes with the human-confirmation rule. Every sentence contributes essential information without repetition.

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

Completeness5/5

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

For a destructive tool with no output schema, the description fully covers the key context an agent needs: what happens on deletion, what not to do, and the preferred alternative. It is complete for safe and correct invocation.

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

Parameters3/5

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

Schema coverage is 67%, and the schema already documents confirm and confirmation_phrase semantics. The description reinforces that confirmation fields must be human-supplied, but it adds little new parameter-level detail beyond that guidance.

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

Purpose5/5

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

The description clearly states the action: 'PERMANENTLY delete a project risk' and specifies the resource. It also distinguishes itself from the sibling projects_update_risk by explaining this is for permanent removal, not retiring a risk.

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

Usage Guidelines5/5

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

The description explicitly tells the agent when to use this tool versus the alternative: use projects_update_risk with status 'Closed' to retire a risk while preserving history. It also instructs not to populate confirmation fields without human input, providing clear invocation constraints.

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

projects_getGet projectsA
Read-onlyIdempotent
Inspect

List projects the signed-in user can see for project management (RLS-scoped). Do not use this to choose where to log time; use timelog_get_loggable_projects for time registration. IMPORTANT - status 'Completed' does NOT always mean finished. A nightly automation moves any project past its end_date to Completed and archives it, and the manager still has to decide whether to confirm it or reactivate it with a new end date. Those projects carry awaiting_manager_decision: true, and reporting one as 'completed' is wrong: the work is unresolved, not done. Filter with awaiting_decision: true (optionally with a manager) to answer 'what is waiting for me'. DEFAULTS TO ACTIVE PROJECTS ONLY - not archived, and not Completed, Cancelled or Archived. Say so when you answer ("you have 20 active projects"), and read meta.scope_note. Pass scope: archived or all when the question spans finished work - project economics over time, what was delivered last year. One exception, handled for you: projects awaiting a manager decision ARE archived, so awaiting_decision: true widens the scope to include them rather than returning an empty list. Max limit 200 - the response always carries pagination.total (full match count) plus has_more/next_cursor. NEVER count or total projects from one page while has_more is true.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax 200.
scopeNoactive (default) covers only what is still live. Use archived for finished or lost records, or all when the question spans both - historical revenue, deals closed over a period, anything measured across time. Always tell the user which set your answer covers.active
cursorNoOpaque cursor from a previous response's pagination.next_cursor. Preferred over offset: keyset paging never skips or duplicates rows.
offsetNoRow offset for offset-based paging. Ignored when cursor is supplied.
searchNoMatch project title.
statusNo
archivedNoExplicit override. Setting it wins over scope.
manager_idNoemployees.id of the project manager. Combine with awaiting_decision to get one manager's outstanding decisions.
awaiting_decisionNotrue returns only projects the automation closed and nobody has decided on yet. These are archived, so do not combine with archived: false.

Output Schema

ParametersJSON Schema
NameRequiredDescription
metaNo
warningNoPresent only when the page is truncated.
projectsYes
paginationYes

TDQS

A5/5.0
Behavior5/5

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

Beyond the readOnlyHint/idempotentHint annotations, the description discloses critical behavioral nuances: the 'Completed' status does not mean finished due to a nightly automation, awaiting_manager_decision projects are archived and must not be reported as completed, and the default scope is active only unless explicitly widened. It also reveals pagination behavior (max 200, total/has_more/next_cursor) and warns against counting while has_more is true.

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

Conciseness5/5

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

Although long, every sentence earns its place by conveying a distinct operational fact or guardrail. The description is front-loaded with the core purpose and sibling exclusion, then moves into scoping nuances and pagination warnings. No filler or repetition is present.

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

Completeness5/5

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

For a 9-parameter, 0-required list tool with an output schema, the description covers default behavior, edge cases, automation side effects, reportable statuses, pagination, and explicit agent instructions. The presence of an output schema means return fields need not be enumerated, and nothing essential is missing for an agent to invoke this tool correctly.

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

Parameters5/5

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

With 89% schema coverage, the baseline is 3, but the description adds substantial meaning beyond the schema: it clarifies that awaiting_decision widens scope because those projects are archived, explains the semantics of status 'Completed', and provides concrete advice for scope choices. It also explains pagination-related limit behavior and the manager_id combination with awaiting_decision.

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

Purpose5/5

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

The description states the exact operation: 'List projects the signed-in user can see for project management (RLS-scoped).' It clearly identifies the resource (projects) and scope (signed-in user), and distinguishes itself from sibling tools like timelog_get_loggable_projects by explicitly saying 'Do not use this to choose where to log time.'

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

Usage Guidelines5/5

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

The description gives explicit when-to-use and when-not-to-use guidance, naming the alternative timelog_get_loggable_projects for time registration. It also instructs on when to use scope archived/all (finished work, historical questions) and how to use awaiting_decision for 'what is waiting for me' inquiries.

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

projects_get_billing_planGet project billing planA
Read-onlyIdempotent
Inspect

List fixed-fee billing milestones for a project - the instalment plan a fixed-price project is invoiced against. Max limit 200 - the response carries pagination.total and has_more. An empty list means no plan has been built yet; add milestones with projects_create_billing_milestone.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax 200.
offsetNoRow offset. This tool has no cursor - page with offset.
project_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
metaNo
warningNoPresent only when the page is truncated.
milestonesYes
paginationYes

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already mark it read-only and idempotent, and the description adds valuable behavioral detail: the 200-item max limit, pagination fields in the response, and the meaningful empty-list case. This goes beyond what annotations convey and helps an agent interpret results correctly.

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

Conciseness5/5

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

Two dense sentences: the first states the operation and domain, the second covers limits, response fields, empty-result semantics, and a pointer to the sibling creation tool. No filler or repetition of annotation facts.

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

Completeness5/5

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

For a simple read-only list tool with annotations and an output schema, the description covers the essential operational details: what is returned, paging constraints, empty-list interpretation, and next step. Nothing critical is missing for an agent to invoke it correctly.

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

Parameters3/5

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

The schema documents limit and offset, including the no-cursor paging approach, so the description does not need to repeat those. However, project_id is not described in the schema, and the description only indirectly implies it via 'for a project'. The description adds the response-pagination context but doesn't fully compensate for the undocumented project_id beyond what the tool name suggests.

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

Purpose5/5

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

The description uses a specific verb ('List') and a clear resource ('fixed-fee billing milestones for a project'), and explains what the billing plan represents (the instalment plan for a fixed-price project). This clearly distinguishes it from sibling billing-milestone mutation tools and from other project getters.

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

Usage Guidelines4/5

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

The description gives clear context: it is a listing operation for a project's fixed-fee milestones, and an empty list is explicitly interpreted as 'no plan has been built yet'. It also points to the sibling creation tool. It does not explicitly state when not to use it relative to broader invoicing/finance getters, but the context is strong.

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

projects_get_external_servicesGet project external servicesA
Read-onlyIdempotent
Inspect

List external/subcontractor service lines on a project, with budgeted vs adjusted cost and markup.

ParametersJSON Schema
NameRequiredDescriptionDefault
offsetNoRow offset. This tool has no cursor - page with offset.
project_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
metaNo
warningNoPresent only when the page is truncated.
paginationYes
external_servicesYes

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already mark this as read-only and idempotent, and the description is consistent with that. It adds useful behavioral context by specifying that it lists external/subcontractor lines and highlights budgeted/adjusted cost and markup as the returned data.

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

Conciseness5/5

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

The description is a single focused sentence with no filler, front-loading the action and resource before the data details. Every word earns its place.

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

Completeness4/5

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

For a simple read-only list with an output schema and explicit offset pagination in the schema, the description is largely complete. It is only missing guidance on choosing between this and sibling project tools, which is a minor gap given the clear scope.

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

Parameters3/5

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

Schema coverage is 50%: offset is well described in the schema, while project_id lacks a schema description. The phrase 'on a project' helps clarify that project_id identifies the parent project, but the description does not fully compensate for the undocumented required parameter or add format/value details.

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

Purpose5/5

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

The description uses a specific verb and resource: 'List external/subcontractor service lines on a project'. It also tells what data is included (budgeted vs adjusted cost and markup), which clearly distinguishes it from the create/update/delete external-service siblings and other project getters.

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

Usage Guidelines2/5

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

There is no explicit when-to-use guidance or mention of alternatives. The intended use can be inferred from 'List', but the description does not tell an agent when this tool is preferable to, e.g., projects_get_finance or other read-only project tools.

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

projects_get_financeGet project financeA
Read-onlyIdempotent
Inspect

Get latest project finance snapshot(s), newest first. Requires 'finance.view'. Max limit 50 - the response carries pagination.total and has_more.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax 50.
offsetNoRow offset. This tool has no cursor - page with offset.
project_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
metaNo
warningNoPresent only when the page is truncated.
snapshotsYes
paginationYes

TDQS

A3.6/5.0
Behavior4/5

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

With readOnlyHint, openWorldHint, and idempotentHint already declared in annotations, the description adds meaningful context on top: the required 'finance.view' auth scope, newest-first ordering, the 50-item cap, and that responses carry pagination.total and has_more. This gives the agent a concrete picture of the call's behavior and response contract.

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

Conciseness5/5

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

Three tight sentences with no filler: purpose and ordering are front-loaded, then the auth requirement, then the limit/pagination contract. Every sentence earns its place.

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

Completeness4/5

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

An output schema exists and annotations cover the safety profile, so the description correctly focuses on auth, ordering, limit, and pagination. The main gap is that no distinction is drawn from the near-twin sibling projects_get_financials, leaving an agent to guess which tool returns what.

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

Parameters3/5

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

Schema coverage is 67%: limit and offset are already well documented in the schema ('Max 50.', 'no cursor - page with offset'), while project_id has no description in either the schema or the prose. The description only marginally supplements the schema by restating 'Max limit 50' and hinting at the pagination contract.

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

Purpose4/5

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

The description uses a specific verb and resource ('Get latest project finance snapshot(s)') and adds an ordering constraint ('newest first'), making the core function clear. However, it does not differentiate from the closely named sibling projects_get_financials, so an agent cannot tell them apart without inspecting both.

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

Usage Guidelines2/5

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

The description offers no guidance on when to use this tool versus alternatives such as projects_get_financials, projects_get_invoicing, or projects_get_billing_plan, and names no exclusions. The 'finance.view' permission and pagination notes are behavioral facts, not usage routing.

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

projects_get_financialsGet project financials (full P&L)A
Read-onlyIdempotent
Inspect

Full financial picture for one project - budget, spent-to-date, FAC (forecast at completion), revenue, profit/loss and forecasted margin. Uses the SAME shared calculation module as the Project Finance page in the UI, so the numbers always match. Requires finance permission.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idYes

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and idempotentHint, so the description's permission requirement and the guarantee that results come from the same calculation module as the UI add meaningful behavioral context beyond the annotations. It does not describe error behavior for missing permission, but that is minor given the 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.

Conciseness5/5

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

Three sentences deliver scope, output contents, a consistency guarantee, and a permission prerequisite with no repetition or filler. The key information is front-loaded and every sentence earns its place.

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

Completeness4/5

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

The description adequately scopes the tool and lists the financial metrics involved, which is important because there is no output schema. It does not specify the exact response structure, field names, or failure behavior, but for a one-parameter read-only tool with strong annotations this is reasonably complete.

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

Parameters3/5

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

With 0% schema description coverage, the description only loosely maps to the parameter by saying 'for one project', which implies project_id identifies the target project. The single parameter name is self-explanatory, but the description adds no detail about ID format, how to obtain valid IDs, or any constraints.

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

Purpose5/5

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

The description clearly states the tool provides 'full financial picture for one project' and enumerates the exact metrics returned: budget, spent-to-date, FAC, revenue, profit/loss, and forecasted margin. The scope ('one project') and title ('full P&L') make its purpose specific and distinguishable from generic project tools.

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

Usage Guidelines3/5

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

It gives a useful prerequisite ('Requires finance permission') and implies authority by noting the numbers match the Project Finance page. However, it does not explicitly state when to use this tool instead of the similarly named sibling projects_get_finance, nor does it mention exclusions or alternative tools for other financial views.

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

projects_get_invoicingGet project invoicing settingsA
Read-onlyIdempotent
Inspect

Get invoicing settings for a project. Returns null when the project has no settings row yet - create one with projects_update_invoicing.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idYes

TDQS

A4/5.0
Behavior4/5

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

The description reveals that the tool returns null when no settings row exists, a behavioral trait not captured by annotations. Combined with readOnlyHint and idempotentHint, this gives a solid safety and behavior picture.

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

Conciseness5/5

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

Two concise sentences, front-loaded with the main action, no filler.

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

Completeness4/5

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

For a one-parameter read-only tool, the description covers the main invocation concern (null row) and next step. It does not list the invoicing settings fields returned, but that is not necessary to invoke the tool correctly.

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

Parameters3/5

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

With 0% schema coverage, the description must carry parameter meaning, but it only says 'for a project,' which maps project_id to a project indirectly. The parameter name is self-explanatory, so the gap is minor.

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

Purpose5/5

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

The description uses a specific verb and resource ('Get invoicing settings for a project'), making the tool's function unambiguous. It also distinguishes the tool by noting the null behavior and naming the companion update tool.

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

Usage Guidelines3/5

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

The description gives clear context for the get action and tells the agent to use projects_update_invoicing when no settings row exists. However, it does not contrast this tool with other project getters such as projects_get_billing_plan or projects_get_financials.

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

projects_get_materialsGet project materialsA
Read-onlyIdempotent
Inspect

List material cost lines on a project, with markup and billable flags.

ParametersJSON Schema
NameRequiredDescriptionDefault
offsetNoRow offset. This tool has no cursor - page with offset.
project_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
metaNo
warningNoPresent only when the page is truncated.
materialsYes
paginationYes

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, so the read-only behavior is covered. The description adds no additional behavioral context beyond saying 'List,' which is consistent with the annotations. No contradiction, but no extra behavioral disclosure beyond the structured data.

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

Conciseness5/5

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

The description is a single, front-loaded sentence that names the action, the resource, and the relevant flags with zero wasted words. Every phrase earns its place.

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

Completeness4/5

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

Given the low complexity (2 params, output schema present, read-only annotations), the description is nearly complete. It covers what the tool returns and which project it applies to. The only minor gap is that it does not mention pagination behavior, but the input schema's offset description already covers this.

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

Parameters4/5

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

Schema description coverage is 50%: offset is documented with pagination semantics, but project_id has no schema description. The description compensates by tying project_id to the resource ('on a project'), giving the parameter meaningful context even though it doesn't explicitly describe it.

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

Purpose5/5

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

The description states a specific verb ('List'), a specific resource ('material cost lines on a project'), and the key included fields ('markup and billable flags'). This clearly distinguishes it from sibling tools like projects_get_external_services or projects_get_finance.

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

Usage Guidelines3/5

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

The description implies the usage scenario: when you need material cost lines for a project. However, it does not explicitly mention alternatives or provide exclusions such as 'use projects_get_external_services for services.' The context is clear but relies on inference.

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

projects_get_pricing_groupsGet project pricing groupsA
Read-onlyIdempotent
Inspect

List the billing rate groups on a project, including which team members are assigned to each. Revenue on Time / Time&Material projects = logged hours x the assigned group's hourly_rate, so an employee with no group bills at 0 - those are listed in members_without_rate. Rates are in the workspace currency, returned as meta.currency.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idYes

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and idempotentHint, and the description adds meaningful behavioral detail beyond those: employees without a group bill at 0 and appear in members_without_rate, and rates are returned in the workspace currency under meta.currency. This gives the agent useful expectations about edge cases and return format without contradicting the annotations.

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

Conciseness5/5

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

Three sentences, each earning its place: the first states the core output, the second explains the revenue formula and a key edge case, and the third clarifies currency context. The most important information is front-loaded and there is no filler or repetition.

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

Completeness4/5

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

For a single-parameter read-only tool with no output schema, the description covers the returned entities (groups, assigned members, members_without_rate), the meaning of hourly_rate, and the currency location. The main gap is not stating whether project_id must reference a specific project type or whether inactive projects are included, but these are minor given the tool's simplicity.

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

Parameters3/5

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

The schema provides zero description for project_id and the description only indirectly defines it by saying 'on a project'. For a single simple parameter this is sufficient to convey its role, but the description does not add explicit details about the expected format, where the ID comes from, or any constraints. It is minimally adequate but not rich.

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

Purpose5/5

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

The description uses a specific verb ('List') with a clear resource ('billing rate groups on a project') and adds the secondary purpose of showing team member assignments. It is immediately distinguishable from sibling tools like projects_get or projects_get_finance, and the name plus description align cleanly.

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

Usage Guidelines3/5

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

The description implies usage context by explaining how the returned rates drive revenue on Time / Time&Material projects, which helps an agent know when this data matters. However, it does not explicitly state when to prefer this tool over alternatives such as projects_get_finance or projects_get_billing_plan, nor does it provide any when-not-to-use guidance.

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

projects_get_risksGet risksA
Read-onlyIdempotent
Inspect

List risks (optionally filtered by project). Max limit 200 - the response carries pagination.total plus has_more/next_cursor.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax 200.
cursorNoOpaque cursor from a previous response's pagination.next_cursor. Preferred over offset: keyset paging never skips or duplicates rows.
offsetNoRow offset for offset-based paging. Ignored when cursor is supplied.
statusNo
project_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
metaNo
risksYes
warningNoPresent only when the page is truncated.
paginationYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already mark it read-only and idempotent; the description adds meaningful behavioral detail beyond that: the 200-item cap and the pagination contract (pagination.total plus has_more/next_cursor). This helps the agent understand response paging without relying solely on the output schema.

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

Conciseness5/5

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

The description is two short sentences with no filler; the core action and optional filter come first, and the pagination detail is added in one clause. Every sentence earns its place.

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

Completeness4/5

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

Given the read-only/idempotent annotations, a rich output schema, and a five-parameter schema with three well-documented fields, the description gives enough to call the tool correctly. The only small gap is status semantics, but the optional filter and pagination contract are covered.

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

Parameters3/5

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

The description adds the project-filter semantic for project_id and reinforces limit's cap, while the schema already documents cursor and offset well. However, status has no schema description and is not addressed in the description, so one parameter remains semantically opaque at this 60% schema-coverage level.

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

Purpose5/5

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

The description begins with a specific verb and resource, 'List risks', and adds the scoping condition 'optionally filtered by project'. This clearly distinguishes it from sibling risk mutation tools like projects_create_risk, projects_update_risk, and projects_delete_risk.

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

Usage Guidelines4/5

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

It provides clear context by stating the tool lists risks and can be filtered by project, and the read/pagination behavior is stated. It does not explicitly enumerate when-not-to-use cases or alternatives, but no competing risk-list sibling exists, so the absence is not costly.

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

projects_get_team_allocationGet project team + allocationsA
Read-onlyIdempotent
Inspect

List team members and their allocations for a project. Max limit 200 - the response carries pagination.total and has_more.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax 200.
offsetNoRow offset. This tool has no cursor - page with offset.
project_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
metaNo
teamYes
warningNoPresent only when the page is truncated.
paginationYes

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the safety profile is covered. The description adds useful behavioral detail by disclosing the 200 max limit and the presence of pagination.total and has_more, helping the agent understand how to page through results.

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

Conciseness5/5

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

The description is two economical sentences with no filler. It front-loads the core action and immediately provides the only operational constraint an agent needs: the pagination limit and response fields. Every sentence earns its place.

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

Completeness4/5

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

For a simple read-only list tool with output schema and annotations present, the description covers the resource, scope, and pagination behavior. It does not mention ordering or alternative tools, but the schema and annotations carry enough of the remaining burden.

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

Parameters3/5

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

The schema already documents limit and offset, including the useful 'no cursor - page with offset' note. The description repeats the max limit but adds no new parameter meaning. The required project_id remains a bare string with no explicit description, though tool context implies it identifies the project.

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

Purpose4/5

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

The description uses a specific verb ('List') and a clear resource ('team members and their allocations for a project'). It is clear and actionable, but it does not explicitly distinguish itself from sibling tools like projects_get or resources_get, so it stops short of a 5.

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

Usage Guidelines3/5

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

The phrase 'for a project' implies when to use this tool, and the pagination sentence gives operational guidance. However, it does not explicitly state when to use this tool versus alternatives, nor does it name any sibling tool or exclusion criteria.

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

projects_reactivateReactivate a closed project with a new end dateAInspect

Reopen a completed or archived project and give it a new end_date. Sets status 'Active', unarchives the project (which restores the tasks archived with it) and clears auto_completed_at, so it stops showing as awaiting a decision. new_end_date is REQUIRED and must be in the future: the nightly end-date automation would otherwise close the project again on its next run. Only the project manager or a workspace admin may decide.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idYes
new_end_dateYesISO date YYYY-MM-DD. Required, and must be in the future.

TDQS

A4.4/5.0
Behavior5/5

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

Beyond the annotations, the description discloses meaningful behavioral effects: setting status to Active, unarchiving and restoring tasks, clearing auto_completed_at, and the consequence of an invalid end date on nightly automation. It also reveals permission boundaries. There is no contradiction with the readOnlyHint=false or destructiveHint=false annotations.

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

Conciseness5/5

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

The description is concise and front-loaded with the core purpose. Three sentences cover the action, side effects, constraint, and permissions without redundancy or filler. Every sentence contributes useful decision-making or invocation information.

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

Completeness4/5

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

For a state-changing operation with no output schema, the description covers almost everything needed: prerequisites, side effects, required parameter constraints, and authorization. Minor gaps are the lack of explicit project_id semantics and no mention of what happens if the project is not currently closed/archived, but these do not seriously hinder correct invocation.

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

Parameters3/5

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

Schema coverage is exactly 50%: new_end_date has a schema description and the tool description reinforces it with the requirement and rationale. project_id, however, is left entirely to the parameter name and the tool's context; the description never explicitly defines it as the ID of the project to reactivate. This adds some semantic value but does not fully compensate for the missing project_id documentation.

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

Purpose5/5

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

The description states a specific verb ('Reopen'), resource ('a completed or archived project'), and what changes ('give it a new end_date'). It also distinguishes this from restore-like operations by enumerating the concrete state changes (status Active, unarchive, clear auto_completed_at), so an agent can clearly identify what the tool does relative to siblings.

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

Usage Guidelines4/5

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

The description gives clear context for when to use the tool: reactivating a previously completed or archived project. It also provides a critical usage constraint — new_end_date must be in the future or the nightly automation will close the project again — and names the required permissions. It does not explicitly name alternative sibling tools or spell out when not to use it, but the context is strong enough for an agent to make the right call.

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

projects_remove_team_memberRemove team member from projectA
Destructive
Inspect

Take an employee off a project's team. Reversible: add them back with projects_add_team_member. Their logged time is KEPT and still counts on the project, so this does not undo any work - it frees their allocated capacity from this project going forward. Their pricing group assignment goes with them.

ParametersJSON Schema
NameRequiredDescriptionDefault
team_member_idYes

TDQS

A4.4/5.0
Behavior5/5

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

The description goes well beyond the annotations (which only mark it destructive/non-read-only) by clarifying the exact behavioral consequences: logged time is kept and still counts, no work is undone, only future allocated capacity is freed, and the pricing group assignment leaves with the employee. This proactively addresses likely misconceptions about a removal operation.

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

Conciseness5/5

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

Three focused sentences with no filler. The main action is front-loaded, then each subsequent sentence adds a distinct piece of valuable context (reversibility, time preservation, capacity/pricing side effects). Every sentence earns its place.

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

Completeness4/5

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

For a one-parameter, no-output-schema tool, the description covers the essential behavior and side effects well. The annotations already cover the read/destructive profile. The only notable omissions are the exact nature of team_member_id and any return/error behavior, but these are minor given the tool's simplicity.

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

Parameters3/5

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

With 0% schema description coverage, the description carries the burden for parameter meaning. It implies the single team_member_id is the employee to remove, but it does not clarify whether this is a global employee ID or a project-membership ID, nor how the project is identified given only one parameter. The description provides partial compensation but leaves an important gap.

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

Purpose5/5

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

The description opens with a clear, specific verb-plus-resource statement: 'Take an employee off a project's team.' It differentiates from sibling tools by explicitly mentioning the inverse operation (projects_add_team_member) and by describing what the action does not undo (logged time). This leaves no ambiguity about the tool's purpose.

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

Usage Guidelines4/5

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

The description establishes clear context: use this when you want to remove an employee from a project team and free their future capacity. It also references the alternative for reversal (projects_add_team_member). However, it does not explicitly state when not to use it or how it differs from projects_update_team_member, so it falls short of a full when/when-not distinction.

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

projects_restoreRestore projectA
Idempotent
Inspect

Restore a soft-deleted project from the recycle bin. Admin-only. Fails if the record has been purged (>30 days).

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idYes

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already provide idempotentHint and destructiveHint, but the description adds valuable behavioral context: it clarifies the operation is not permanent deletion, requires admin privileges, and will fail if the record has been purged after 30 days. This goes beyond the annotations and gives an agent actionable expectations.

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

Conciseness5/5

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

The description is three short sentences with no filler. The primary action is front-loaded, and the two additional sentences each carry essential constraints (admin-only, purged-record failure). Every sentence earns its place.

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

Completeness4/5

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

For a simple one-parameter restore operation, the description covers the essential context: what the tool does, who can use it, and a key failure condition. It does not describe the success response, but no output schema exists and the return value is unlikely to be critical for a restore action. Overall it is sufficiently complete for an agent to invoke correctly.

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

Parameters4/5

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

The schema only defines project_id as a required UUID with 0% description coverage. The description partially compensates by clarifying that the ID must refer to a soft-deleted project currently in the recycle bin, which adds meaning beyond the bare schema. Since there is only one self-explanatory parameter, the lack of detailed param documentation is not a major gap.

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

Purpose5/5

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

The description uses a specific verb ('Restore') with a clear resource ('soft-deleted project from the recycle bin'), which precisely distinguishes this tool from related siblings like projects_reactivate, projects_delete, and crm_restore_*. It states exactly what the tool does.

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

Usage Guidelines4/5

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

The description clearly implies when to use this tool: to recover a soft-deleted project from the recycle bin. It also adds important usage constraints (Admin-only, fails if purged >30 days). However, it does not explicitly name alternatives or state when not to use it, though those are fairly inferable.

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

projects_unassign_pricing_groupRemove team member from pricing groupA
Idempotent
Inspect

Take a project team member off their billing rate group without removing them from the project. They then have no rate, so their hours bill at 0 on Time / Time&Material projects until they are assigned a group again.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idYes
employee_idYesemployees.id of a project team member.

TDQS

A4.1/5.0
Behavior4/5

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

The description adds meaningful behavioral context beyond the annotations: after unassignment the member has no rate, hours bill at 0 on Time / Time&Material projects, and the effect lasts until reassignment. This goes beyond the idempotentHint and destructiveHint annotations and helps the agent understand consequences.

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

Conciseness5/5

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

Two tightly worded sentences: the first states the action and key exclusion, the second states the financial consequence. Every clause earns its place, and the most important distinction is front-loaded.

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

Completeness4/5

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

For a simple two-parameter mutation with no output schema, the description explains the effect, the billing implication, and the path to reversal. Minor missing context includes an explicit pointer to the assign sibling tool, but overall the agent has enough to call it correctly.

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

Parameters2/5

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

Schema description coverage is only 50%: employee_id is documented, but project_id has no description. The tool description does not compensate by explaining either parameter or their relationship. It mentions the project context generally but adds no concrete parameter meaning beyond the schema.

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

Purpose5/5

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

The description uses a specific verb-resource pair: it takes a project team member off their billing rate group, and immediately clarifies it does not remove them from the project. This distinguishes it from the sibling tool projects_remove_team_member without requiring the agent to compare schemas.

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

Usage Guidelines4/5

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

The description makes the intended use clear: unassign a member from a pricing group while keeping them on the project. It includes an implicit when-not condition ('without removing them from the project') but does not explicitly name the sibling alternative, so the guidance is strong but not fully explicit.

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

projects_updateUpdate projectBInspect

Update fields on a project, including revenue / revenue_ceiling and the materials, external-services and expense budgets. Status/budget_type accept case-insensitive values.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleNo
statusNo
deal_idNo
revenueNoAgreed contract sum (drives margin on Fixed-price projects).
archivedNo
end_dateNo
manager_idNo
project_idYes
start_dateNo
budget_typeNoFixed | Time | Time&Material. Required - ask the user rather than assuming.
customer_idNo
descriptionNo
budget_amountNoBudgeted internal TIME cost - not revenue.
budget_expensesNo
revenue_ceilingNo
budget_materialsNo
budget_external_servicesNo

TDQS

B3/5.0
Behavior3/5

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

Annotations already establish that the tool is not read-only and not destructive, so the description's job is to add context. It adds the case-insensitivity behavior for status/budget_type and highlights which budget fields are updateable. It does not mention whether unprovided fields remain unchanged or how partial updates behave, which is relevant for a 17-parameter update tool.

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

Conciseness5/5

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

Two sentences with no filler: the first states the action and affected field groups, the second provides a useful input-format exception. The description is appropriately sized and front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 17 parameters, a low 18% schema-description coverage, no output schema, and no mention of update semantics (partial vs. replace) or return type, the description leaves substantial gaps for an agent trying to call this tool correctly. It also lacks guidance on the many sibling update tools, making it incomplete for the tool's complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 18%, and the description names only a subset of parameters (revenue, revenue_ceiling, and the budget categories), adding some meaning. It also notes case-insensitive values for status/budget_type. However, most of the 17 parameters (title, dates, manager_id, customer_id, description, etc.) receive no semantic help from either the schema or the description, so it undercompensates for the low coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the explicit verb 'Update' with the resource 'project' and enumerates the affected field groups (revenue, revenue_ceiling, and budget categories), making the core function clear. It does not explicitly differentiate from sibling tools like projects_update_material or projects_update_team_member, but the wording 'a project' versus sub-resources is reasonably distinct.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to choose projects_update over the many sibling update tools such as projects_update_billing_milestone or projects_update_material. The only usage hint is that status/budget_type accept case-insensitive values, which is about value formatting, not tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

projects_update_billing_milestoneUpdate billing milestoneBInspect

Update a fixed-fee billing milestone. Setting status to 'invoiced' only marks the row - it does not raise an invoice.

ParametersJSON Schema
NameRequiredDescriptionDefault
statusNo
due_dateNo
sort_orderNo
amount_typeNo
descriptionNo
amount_valueNo
milestone_idYes

TDQS

B3.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds a critical behavioral caveat not present in annotations: setting status to 'invoiced' only marks the row and does not raise an invoice. This goes beyond the readOnlyHint/destructiveHint annotations and prevents a likely misconception. However, other behavioral details such as validation or side effects on related entities are not disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences with no filler. The first sentence states the purpose, and the second immediately gives a high-value caveat. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 7 parameters, 0% schema description coverage, no output schema, and no enums, this description is too sparse for an agent to correctly invoke the tool in most cases. The invoice caveat is helpful but does not cover the semantics, formats, or expected values of the majority of parameters.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and there are no enums, so the description must compensate for parameter meanings. It only clarifies the 'status' parameter for the 'invoiced' value. It provides no useful semantics for milestone_id, due_date, sort_order, amount_type, description, or amount_value, which is a significant gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states 'Update a fixed-fee billing milestone,' which is a specific verb and resource with a clarifying type qualifier. It is clearly distinct from create/delete/get billing milestone tools, though it does not explicitly name sibling alternatives to differentiate them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives such as projects_create_billing_milestone, projects_delete_billing_milestone, or projects_update_invoicing. The verb 'update' is the only implicit usage signal, and there are no exclusions or prerequisites mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

projects_update_external_serviceUpdate external serviceAInspect

Update an external or subcontractor service line. Only the fields you pass are changed. Status is case-insensitive (Planned|In Progress|Completed). Adjusting the cost moves the project's external-services budget with it, and markup decides what is passed on to the client.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
notesNo
statusNo
agreementNo
assignee_idNo
is_billableNo
budgeted_costNo
spent_to_dateNo
markup_percentageNo
external_service_idYes

TDQS

A3.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds meaningful behavioral context beyond the annotations: it clarifies partial-update semantics, case-insensitive status handling, the budget side effect of cost adjustments, and how markup determines client pass-through. These details help the agent understand what will happen when the tool is invoked, which is especially valuable since the annotations are minimal.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact, front-loaded with the purpose, and every sentence delivers actionable information: what is updated, how updates behave, and key side effects. No filler or redundancy is present.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the most important behavioral nuances and side effects, but the tool has 10 parameters with no parameter-level schema descriptions and no output schema. An agent would still lack clarity on several parameter meanings and on what the tool returns after a successful update, so the context is adequate but not complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description must compensate for the 10 parameters, but it only adds meaning for status, budgeted_cost, and markup_percentage. Parameters such as name, notes, agreement, assignee_id, is_billable, spent_to_date, and external_service_id receive no explanation beyond their schema type, leaving a significant semantic gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies a specific verb ('Update') and resource ('an external or subcontractor service line'), making the tool's primary purpose obvious. It does not explicitly contrast itself with sibling tools like projects_create_external_service or projects_delete_external_service, but the resource and action are distinct enough for an agent to select it correctly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives concrete usage context: only passed fields are changed, status is case-insensitive with an enumerated set of values, and cost changes affect the project budget. It stops short of stating when not to use this tool versus alternatives, but the partial-update behavior and side-effect warnings provide clear guidance for correct invocation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

projects_update_invoicingUpdate project invoicing settingsB
Idempotent
Inspect

Create or update a project's invoicing settings (upsert on project_id). billing_model: time_and_materials|fixed_fee. invoice_frequency: monthly|quarterly|specific_date. approval_type: none|sequential. Requires finance.edit.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idYes
approval_typeNonone | sequential
billing_modelNotime_and_materials | fixed_fee
default_vat_rateNoPercent, e.g. 25.
invoice_currencyNoISO code, e.g. DKK.
invoice_frequencyNomonthly | quarterly | specific_date
payment_terms_daysNo
invoice_anchor_dateNoISO date YYYY-MM-DD.
invoice_interval_unitNo
expense_default_markupNoPercent.
invoice_interval_valueNo
fx_rate_to_company_currencyNo
invoice_billing_day_of_monthNo
invoice_specific_day_of_monthNo

TDQS

B3.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already carry the safety profile (readOnlyHint=false, idempotentHint=true, destructiveHint=false), and the description adds value beyond them by disclosing upsert semantics, the finance.edit permission requirement, and the allowed values for three settings. These details are consistent with the annotations — an upsert is idempotent and non-destructive — so there is no contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact, with the purpose front-loaded in the first clause and the enum lists compressed into terse pipe-separated forms. Each sentence earns its place; the only minor redundancy is restating schema enum values, but that keeps the description self-sufficient for quick scanning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 14-parameter tool with no output schema, the description is under-specified: it does not describe the return value, does not explain how frequency-related parameters interact (e.g., specific_date requiring invoice_specific_day_of_month), and leaves several parameters undefined. It covers core purpose, permission, and key enums, but an agent would still struggle to invoke it correctly in edge cases.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only about 50%, so the description should compensate for the undocumented parameters, but it merely repeats the enum values already present in the schema (billing_model, invoice_frequency, approval_type). It adds nothing about payment_terms_days, invoice_interval_unit, invoice_interval_value, fx_rate_to_company_currency, or the relationship between invoice_billing_day_of_month and invoice_specific_day_of_month, leaving half the parameters unexplained in both places.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource — 'Create or update a project's invoicing settings' — and the '(upsert on project_id)' parenthetical clarifies the exact scope and merge behavior. The name and title are also unambiguous. It does not explicitly name a sibling it is not (e.g., projects_update or projects_get_invoicing), so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus the many relevant siblings such as projects_update, projects_get_invoicing, or projects_update_billing_milestone. The only constraint offered, 'Requires finance.edit,' is a permission prerequisite rather than alternative-selection guidance, so an agent gets little help deciding which tool to pick.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

projects_update_materialUpdate materialAInspect

Update a material line. Only the fields you pass are changed. Changing total_cost moves the project's spent material budget with it, and changing markup or is_billable changes what the client can be invoiced - both take effect immediately, with no separate recalculation step.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
unitNo
categoryNo
quantityNo
supplierNo
unit_costNo
total_costNo
is_billableNo
material_idYes
markup_percentageNo

TDQS

A3.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, the description discloses key behavioral traits: partial-update semantics ('Only the fields you pass are changed'), side effects on budget and invoicing, and immediate propagation ('both take effect immediately, with no separate recalculation step'). This substantially exceeds what annotations alone convey and matches the non-read, non-destructive annotation profile.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three tight sentences: it states the action, clarifies partial-update behavior, and then details the two consequential side effects. Every sentence adds operational value with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation with 10 optional parameters and no output schema, the description covers the behavior that matters most: partial updates and immediate financial/invoicing consequences. It does not describe return values or validation edge cases, but the existing content is sufficient for correct invocation in most cases.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description must compensate, and it does add meaning for total_cost, markup_percentage, and is_billable. However, it uses 'markup' instead of the actual parameter name markup_percentage and does not address the remaining seven optional fields, leaving some burden on the schema property names.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description starts with a specific verb and resource: 'Update a material line.' This clearly identifies the operation and target. It does not explicitly distinguish itself from sibling create/get/delete material tools, though the verb and object make the intent reasonably unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool instead of projects_create_material, projects_delete_material, or projects_get_materials. It implies usage through the verb 'Update' but does not state conditions, prerequisites, or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

projects_update_pricing_groupUpdate pricing groupAInspect

Rename a pricing group or change its hourly rate. Rate changes affect revenue on ALL hours logged by members of that group, past and future. The rate is in the workspace currency, echoed as meta.currency in the response.

ParametersJSON Schema
NameRequiredDescriptionDefault
group_nameNo
hourly_rateNoSales price per hour, in the workspace currency (see meta.currency in the response).
pricing_group_idYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, which only state this is not read-only and not destructive, the description discloses a non-obvious and important side effect: rate changes affect revenue on ALL hours logged by group members, past and future. It also clarifies currency handling and response echo, which is valuable context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences with no filler. The main purpose is front-loaded, and every sentence adds meaningful context: what the tool does, the side effect, and the response currency hint.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a moderate-complexity mutation tool with one required parameter and two optional fields, the description covers the core purpose, the significant revenue impact, and a response detail. It does not describe the full output shape or explicitly state whether both fields can be updated together, but these are minor gaps for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 33%, with just hourly_rate documented. The description partially compensates by mapping group_name to renaming and hourly_rate to rate changes with currency context, but it does not explicitly describe pricing_group_id as the target identifier or explain whether group_name and hourly_rate may be provided together or individually.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with specific verbs and resources: 'Rename a pricing group or change its hourly rate.' This clearly distinguishes it from projects_create_pricing_group, projects_delete_pricing_group, and projects_assign_pricing_group despite the generic title.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear use cases: renaming a pricing group or changing its hourly rate. It does not explicitly contrast with sibling pricing-group tools or state exclusions, but the operation is specific enough that an agent can confidently select this tool for those two actions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

projects_update_riskUpdate riskAInspect

Update a project risk. Only the fields you pass are changed. Category and status are case-insensitive (Technical|Schedule|Financial|Contract|Communication|Other, and Open|In Progress|Closed). Closing a risk is done here by setting status to Closed; there is no separate close tool.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleNo
impactNo
statusNo
risk_idYes
date_closedNo
descriptionNo
probabilityNo
responsible_ownerNo
mitigation_actionsNo

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses PATCH-like partial-update behavior, case-insensitive status/category handling, and the fact that closing is achieved by setting status rather than via a dedicated endpoint. Annotations only provide readOnlyHint=false and destructiveHint=false, so these behavioral details add meaningful context beyond the structured fields. It does not cover side effects like auto-populated date_closed or permission requirements, but it does not contradict the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three concise sentences, front-loaded with the core action and followed by high-value constraints. The parenthetical value lists are dense but efficient. Every sentence earns its place with no filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given nine parameters and no descriptions in the schema, the description should clarify each field's role; it meaningfully covers status but also introduces a category field that is absent from the schema. Impact/probability scale semantics, date_closed format, responsible_owner meaning, and mitigation_actions are left unexplained. The closing guidance and partial-update behavior are valuable, but the schema mismatch and sparse parameter coverage make this only minimally complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description usefully supplies accepted values for status (Open|In Progress|Closed) and notes case-insensitivity. However, it references 'Category' as a parameter while the input schema has no category property and sets additionalProperties=false, creating a mismatch that could lead an agent to pass an invalid field. The partial-update note adds cross-parameter meaning, but most parameters such as impact, probability, date_closed, responsible_owner, and mitigation_actions receive no semantic explanation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Update a project risk,' a specific verb and resource that distinguishes it from projects_create_risk, projects_delete_risk, and projects_get_risks. It also clarifies that closing a risk happens through this endpoint, removing ambiguity about a separate close operation. This is a clear, resource-scoped definition.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Only the fields you pass are changed' tells the agent this is a partial update and that omitted fields are untouched. The statement 'Closing a risk is done here by setting status to Closed; there is no separate close tool' is an explicit when-to-use/when-not-to-use directive. It does not spell out when to use create or get instead, but the tool names and context make that largely self-evident.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

projects_update_team_memberUpdate team allocationCInspect

Update a project team member's allocation.

ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateNo
start_dateNo
team_member_idYes
allocation_typeNopercentage | fixed_hours
allocation_hoursNo
allocation_percentageNo

TDQS

C2.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already convey a non-destructive write (readOnlyHint=false, destructiveHint=false), and the description adds nothing beyond the word 'update'. It does not disclose whether the call replaces or merges an existing allocation, whether allocation_type gates which of hours/percentage is used, or whether date fields are validated. No contradiction with the annotations, but no behavioral context is added either.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with no wasted words, which is efficient. But the brevity reflects under-specification rather than tight coverage of essential information, and nothing valuable is front-loaded beyond the generic action.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 6 parameters, only 1 documented, no enums, and no output schema, the definition leaves too much to inference. An agent cannot determine how to construct a valid request — which fields pair with which allocation_type, the date semantics, or whether partial updates are allowed — from this description.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 17% — only allocation_type has any description — and the tool description compensates for none of the gap. The relationship between allocation_type, allocation_hours, and allocation_percentage, the meaning of start_date/end_date, and any mutual exclusivity of fields are left entirely unexplained, forcing the agent to guess.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The sentence names a specific verb, resource, and object — updating a project team member's allocation — so the basic action is clear. However, it is nearly a restatement of the title 'Update team allocation' and adds no specifics that differentiate it from siblings dealing with allocations (projects_add_team_member, projects_remove_team_member, projects_get_team_allocation, resources_update_allocation).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is zero guidance on when to invoke this tool versus an allocation-related alternative such as resources_update_allocation, or how it relates to adding/removing team members. No context, prerequisites, exclusions, or alternative names are provided, so an agent must infer usage purely from the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

proposals_getGet proposalsA
Read-onlyIdempotent
Inspect

List offer documents / proposals (RLS-scoped). Max limit 200 - the response carries pagination.total plus has_more/next_cursor; do not count from one page while has_more is true. READ-ONLY BY DESIGN: a proposal is generated from a template and carries its rendered content, PDF and e-signature state, so there is no proposals_create - creating one from raw fields would produce a document that cannot be sent or signed. Direct the user to Offers in the Matrix UI. An empty result means there really are no proposals, not that the read failed.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax 200.
cursorNoOpaque cursor from a previous response's pagination.next_cursor. Preferred over offset: keyset paging never skips or duplicates rows.
offsetNoRow offset for offset-based paging. Ignored when cursor is supplied.
statusNo
deal_idNo
project_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
metaNo
warningNoPresent only when the page is truncated.
proposalsYes
paginationYes

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint and idempotentHint, but the description adds substantial context: RLS scoping, pagination limits (max 200), response fields (pagination.total, has_more/next_cursor), the design rationale for read-only creation, and the meaning of an empty result. This goes well beyond what annotations and schema provide, and it contradicts nothing.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with its core purpose and every subsequent sentence carries distinct, high-value information: pagination caveat, read-only rationale, UI routing, and empty-result semantics. It is dense but not bloated; nothing is redundant or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list tool with an output schema and mostly self-explanatory filter parameters, the description covers the critical caveats: pagination counting, empty-result interpretation, and the absence of a create endpoint. It lacks explicit guidance on valid status values or filter combinations, but those are at least partially inferable from parameter names and the RLS-scoped context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema covers limit, cursor, and offset well with descriptions, but status, deal_id, and project_id are undocumented in both schema and description. The description reinforces cursor-related pagination semantics but does not explain filters. At 50% schema coverage, the description only marginally compensates for the undocumented parameters, so a baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description uses a specific verb 'List' and identifies the resource as 'offer documents / proposals' with RLS scoping, making the tool's exact purpose clear. It also notes the tool is read-only and that no create counterpart exists, which distinguishes it from mutation tools. The resource is clearly distinct from contracts_get and other getter siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit when-to-use context (listing proposals) and when-not-to-use guidance: do not create from raw fields, direct users to the Matrix UI's Offers screen for creation, and do not count paginated pages while has_more is true. It explains why proposals_create does not exist, giving a clear alternative path. This is strong behavioral routing beyond just stating the purpose.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

reports_getGet reports & analyticsA
Read-onlyIdempotent
Inspect

Server-side aggregated reports across time, revenue, pipeline and utilization. Totals are computed over the FULL filtered data set in the database, not over the returned page, so grand_total is always safe to quote even when the group list is paginated.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindYesWhich report to fetch.
limitNo
offsetNo
to_dateNoInclusive end date, YYYY-MM-DD.
statusesNoTime entry statuses to include. Defaults to DRAFT+SUBMITTED+APPROVED for time_summary, APPROVED for utilization.
from_dateNoInclusive start date, YYYY-MM-DD.
project_idNo
billable_onlyNoemployee_utilization: count only billable hours as actual. Default true.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint=false, and idempotentHint, covering the safety profile. The description adds a genuinely non-obvious behavior: totals are computed over the FULL filtered dataset, not the returned page, so grand_total is safe to quote even when groups are paginated — critical for correct reporting. This goes beyond the annotations and contradicts none of them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with zero waste: the first states purpose, the second delivers the key behavioral guarantee. The critical pagination caveat is front-loaded and densely informative.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 8-param, 4-mode tool with no output schema, the description covers the main footgun (pagination semantics) and names the four report domains, so an agent can select the right kind. However, per-kind return shapes beyond grand_total are not described, leaving the response structure to inference. It is adequate for selection and invocation, though richer per-kind output detail would close the gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 63% schema description coverage, most params (kind, statuses, dates, billable_only) are already documented in the schema. The description adds meaning to limit/offset by clarifying that pagination affects only the group list, not the totals, and it maps the four report domains to the kind enum values. project_id remains undocumented in both schema and description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb+resource: it fetches 'server-side aggregated reports across time, revenue, pipeline and utilization', naming the four report domains that map directly to the kind enum. The 'server-side aggregated' qualifier distinguishes it from raw-data sibling endpoints like timelog_get_entries or projects_get_finance, though no sibling is named explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use it — any time an agent needs aggregated totals rather than raw records — but never states this explicitly and names no alternatives or exclusions. The grand_total guarantee hints at a reporting use case, yet an agent must infer that this is the aggregation tool versus projects_get_finance or timelog_get_entries. No explicit when/when-not routing guidance is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

resources_create_allocationCreate manual (non-project) allocationAInspect

Manual allocation NOT tied to a project, but to an activity type (e.g. internal work, admin, sales). To allocate an employee to a PROJECT, use projects_add_team_member instead. activity_type_id is required. Rejects if total capacity in the window would exceed 100% unless allow_overbooking is true.

ParametersJSON Schema
NameRequiredDescriptionDefault
noteNo
end_dateYes
start_dateYes
employee_idYes
allocated_hoursNo
activity_type_idYesRequired. Use timelog_get_activity_types to look up.
allow_overbookingNoSet true to bypass the >100% capacity check.
allocated_capacityNoPercent (0-100)

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, the description discloses a key behavioral rule: the allocation is rejected if total capacity in the window would exceed 100%, unless allow_overbooking is true. It also clarifies that this allocation type is not project-scoped, which is useful behavioral context. It does not cover side effects or persistence details, but the annotations already signal a non-read-only, non-destructive operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and well-structured: it front-loads the core distinction, names the alternative, and then states the required field and overbooking constraint. Every sentence contributes useful information, with no filler or repetition beyond what is already in the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 8 parameters, no output schema, and low schema description coverage, the description is not complete enough for an agent to invoke the tool confidently. It gives the essential orientation but omits important details like how to specify hours versus capacity, what date format is expected, and what the response will look like.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 38%, and the description does not sufficiently compensate. It mentions activity_type_id as required and references the capacity check, but it does not clarify the meaning of allocated_hours versus allocated_capacity, how employee_id should be provided, date formats, or the note field. Agents are left guessing on several important parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies a manual allocation tied to an activity type, not a project, and explicitly names the sibling tool for project allocations. The verb, resource, and scope are specific enough to distinguish this tool from projects_add_team_member and other siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description states when to use this tool: for manual allocations tied to activity types, not projects. It explicitly says to use projects_add_team_member for project allocations, giving the agent a clear routing decision and an exclusion condition.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

resources_delete_allocationDelete manual allocationA
Destructive
Inspect

PERMANENTLY delete a manual (non-project) resource allocation. There is no recycle bin for allocations - this cannot be undone. Requires explicit human confirmation: never fill in confirm/confirmation_phrase on your own initiative. For project team allocations, use projects_remove_team_member.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmNoMust be true. The HUMAN running this agent must set this - not the agent.
allocation_idYes
confirmation_phraseNoMust exactly equal the allocation id. The HUMAN must supply this.

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description clearly discloses the irreversible nature: 'There is no recycle bin for allocations - this cannot be undone.' It also explains the human confirmation requirement, which goes beyond the annotation destructiveHint=true and provides essential safety context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each earning its place: irreversibility, human confirmation requirement, and sibling tool routing. The destructive action is front-loaded, and there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive mutation with no output schema, the description is complete. It covers what the tool does, permanence, the human-in-the-loop confirmation requirements, and the alternative for project allocations. Combined with the destructiveHint annotation, an agent has everything needed to invoke it safely.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67%, and the schema already documents allocation_id, confirm, and confirmation_phrase. The description adds crucial meaning to confirm and confirmation_phrase by requiring human supply, which is not fully explicit in the schema alone. It does not add detail on allocation_id, but the schema covers that.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb and resource: 'PERMANENTLY delete a manual (non-project) resource allocation.' It also distinguishes itself from sibling projects_remove_team_member, so an agent can confidently select this tool for manual allocations only.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says when to use this tool (manual, non-project allocations) and when not to (project team allocations → use projects_remove_team_member). It also gives a critical usage rule: never fill in confirm/confirmation_phrase without human action.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

resources_getGet resources / allocationsA
Read-onlyIdempotent
Inspect

Unified capacity view. Returns BOTH manual resource allocations (tied to an activity type, not a project) AND project team allocations (project_team_members). Max limit 200 PER SOURCE - the response carries pagination.total (combined match count across both sources) and has_more. NEVER compute utilisation or overbooking from a page where has_more is true; raise the limit or page with offset until has_more is false.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax 200, applied per source.
offsetNoRow offset, applied per source.
to_dateNo
from_dateNo
employee_idNo

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnly and idempotent annotations, the description discloses important runtime behavior: the limit applies per source, pagination.total combines both sources, has_more indicates incomplete data, and callers must not compute utilization or overbooking until pagination is exhausted. This is critical, non-obvious behavior that could change how an agent interprets results.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences with no filler: sentence one defines the scope, sentence two gives pagination mechanics, and sentence three warns about the dangerous misuse. The most important caveat is included without burying the core purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The critical pagination behavior and per-source limit are well covered, and the readOnly/idempotent annotations handle the safety profile. But there is no output schema, and the description omits semantics for to_date, from_date, and employee_id, as well as the shape of the returned allocation entries, leaving notable gaps for an agent deciding how to construct a correct call.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds genuine meaning for limit and offset by explaining that the limit is applied per source and that offset should be advanced until has_more is false. However, to_date, from_date, and employee_id are not explained in either the schema or the description, and with only 40% schema description coverage the description needed to compensate more fully.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific domain phrase, 'Unified capacity view,' and precisely states what is returned: BOTH manual resource allocations (tied to an activity type, not a project) AND project team allocations (project_team_members). This distinguishes it from project-only and allocation-mutation siblings without ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context: use this tool when you need a unified view of both manual and project team allocations. It also clarifies that manual allocations are tied to activity types rather than projects. However, it never explicitly names an alternative tool or states when NOT to use this tool, so it stops short of full routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

resources_update_allocationUpdate manual allocationCInspect

Update a manual (non-project) resource allocation.

ParametersJSON Schema
NameRequiredDescriptionDefault
noteNo
end_dateNo
start_dateNo
allocation_idYes
allocated_hoursNo
activity_type_idNo
allocated_capacityNo

TDQS

C2.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate readOnlyHint=false and destructiveHint=false, so the description must explain behavioral effects of updating an allocation. It only says 'update' without disclosing whether changes are partial or full replacement, what fields are affected, whether existing assigned hours/capacity are overwritten, or whether any validation or side effects apply.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is one short sentence, so it is concise and front-loaded. However, it is under-specified: it earns brevity but at the cost of omitting almost all useful guidance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 7 parameters, 0% schema coverage, no output schema, and no usage guidance, the description is incomplete. It gives minimal orientation but not enough for an agent to invoke the tool correctly, especially regarding which fields are updatable and how the update behaves.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate by explaining the parameters, but it names none of the seven parameters. The agent cannot tell which fields are updatable, how start_date/end_date interact, or what allocated_hours vs allocated_capacity means.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Update a manual (non-project) resource allocation.' This is clear about what the tool does and differentiates manual allocations from project allocations, but it does not mention siblings by name or detail the scope of what can be updated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no guidance on when to use this tool versus alternatives such as resources_create_allocation or resources_delete_allocation. It only clarifies the resource type ('manual (non-project)'), leaving the agent to infer usage context without explicit conditions or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tasks_add_dependencyLink two tasksAInspect

Record that one task waits on, blocks, or is related to another. The database refuses a link that would close a cycle, a task depending on itself, a duplicate of an existing link, and any pair whose tasks are not in the same workspace - those refusals come back verbatim, so relay them rather than retrying. Use waiting_on for the ordinary case: the task named in task_id cannot start until depends_on_task_id is done. BOTH ARGUMENTS ARE TASKS, not links. There is no dependency_id here because the link does not exist yet - this call is what creates it, and the id it returns is the one tasks_remove_dependency would later need.

ParametersJSON Schema
NameRequiredDescriptionDefault
task_idYesThe task that has to wait, by title or id. A task, not a dependency id.
relationship_typeYeswaiting_on: this task cannot start until the other is done - the one that actually blocks work. blocking: the mirror, stated from the other end. related_to: connected but neither waits for the other.
depends_on_task_idYesThe task being waited on, by title or id. A task, not a dependency id.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses four specific refusal conditions (cycle, self-dependency, duplicate, cross-workspace) and instructs the agent to relay refusals verbatim rather than retry — actionable failure-handling guidance. It also reveals the success behavior: the call creates the link and returns the id that tasks_remove_dependency will later need, which is essential given there is no output schema. This goes well beyond the annotations, which only signal a non-read, non-destructive write.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is longer than average, but every sentence carries distinct information: the three link kinds, the four refusal cases, the preferred enum value, the task-not-link warning, and the return-id contract. The core purpose is front-loaded in the first sentence, and nothing is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a no-output-schema create tool with three required parameters, the description covers the operation, error behavior, relationship semantics, and the return value's future use. There is no output schema to fall back on, and the description shoulders that burden successfully. Nothing an agent needs to call it correctly or handle the response is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents all three parameters and the enum. The description adds meaning beyond the schema with the warning 'BOTH ARGUMENTS ARE TASKS, not links' and the explanation that no dependency_id exists yet because the link is being created by this call. This directly prevents the most likely parameter-misuse error.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific action ('Record that one task waits on, blocks, or is related to another') and names the resource: a link between two tasks. The three relationship types are enumerated and the creation semantics are unambiguous. It is easily distinguished from sibling tasks_get_dependencies (read) and tasks_remove_dependency (delete).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes the agent: 'Use waiting_on for the ordinary case' and explains the direction semantics for that value. It also names tasks_remove_dependency as the tool that will later consume the returned id, giving a clear before/after workflow. It does not enumerate when to prefer blocking or related_to over waiting_on, though the schema's enum descriptions partially cover that.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tasks_createCreate taskAInspect

Create a task in a project. Priority: Low | Normal | High | Critical (default Normal). Status: To Do | In Progress | Review | Done | Blocked | Backlog (default 'To Do'). Case-insensitive. ASSIGNEES ARE REQUIRED AND ARE A LIST. Matrix will not accept a task with nobody on it - the edit dialog refuses to save one - and a task can carry several people, each with their own share of the hours. est_hours is the sum across everyone and is worked out from the assignees, so do not pass both a total and per-person hours that disagree.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYes
statusNoTo Do | In Progress | Review | Done | Blocked | Backlog
billableNo
due_dateNo
priorityNoLow | Normal | High | Critical
assigneesYesWho is on the task. At least one - Matrix rejects a task with no one on it.
est_hoursNoTotal across all assignees. Split evenly unless each assignee names their own hours.
project_idYes
start_dateNo
descriptionNo
is_milestoneNo

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations are uninformative (readOnlyHint, destructiveHint, openWorldHint all false), so the description carries the behavioral burden. It adds useful detail: enum values are case-insensitive, default priority and status, assignees are required and must be a non-empty list, and est_hours is derived from assignee hours and must not disagree. This goes well beyond the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose and then gives enum values, defaults, and critical constraints. It is longer than minimal, but each sentence adds necessary information about required assignees and the est_hours invariant. The structure is readable despite the dense warning section.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 11-parameter create tool with no output schema, it covers the most important domain rules well, including the non-obvious est_hours conflict. However, it does not mention what the create call returns, how date parameters should be formatted, or how this tool relates to task update/dependency tools. This leaves some gaps for an agent invoking it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With only 36% schema description coverage, the description compensates well for the trickiest parameters. It explains priority and status values, defaults, case-insensitivity, the required assignee list, and the est_hours/estimated_hours relationship. It leaves some parameters such as due_date formatting and is_milestone semantics to the schema, but the highest-risk semantics are covered.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Create a task in a project,' which is a clear verb+resource statement. It is clearly the tool for creating a new task among siblings like tasks_update and tasks_add_dependency, but it does not explicitly differentiate itself from those alternatives, so it misses full marks.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance or mention of alternatives. The description never says 'use this when creating a new task' or points to tasks_update for existing tasks. The only guidance is about domain constraints like required assignees and est_hours consistency, not tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tasks_deleteDelete taskA
Destructive
Inspect

Soft-delete a task: it moves to the recycle bin for 30 days and can be brought back with tasks_restore. Admin-only. Not permanent, so no confirmation phrase is required - but still tell the user what you removed.

ParametersJSON Schema
NameRequiredDescriptionDefault
task_idYes

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Even though destructiveHint is already true, the description adds critical behavioral detail: the delete is soft, the task goes to the recycle bin for 30 days, restoration is possible, and admin-only authorization applies. It also clarifies that no confirmation phrase is required, which directly informs the agent's interaction behavior. This goes well beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact, front-loaded with the primary operation, and contains only high-value details: soft-delete behavior, restore path, admin-only restriction, and the required user notification. No redundant filler is present.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter tool with no output schema, the description covers the key facts an agent needs: what happens, who can use it, how long it lasts, how to undo it, and what to tell the user. Nothing essential is missing for correct invocation and interaction.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage for task_id, and the description does not explain the parameter beyond referring to 'a task.' The field name is fairly self-explanatory, but at this coverage level the description should at least confirm that task_id identifies the task to be deleted, or specify any expected format. It does not compensate for the missing schema documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb-resource combination: 'soft-delete a task.' It further distinguishes this tool from tasks_restore by noting the task can be brought back, and from a permanent delete by mentioning the 30-day recycle bin. This makes the tool's purpose unambiguous even among many sibling delete tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context: it is admin-only, the delete is soft, and the task can be restored via tasks_restore. It also provides the user-facing communication requirement. It does not explicitly enumerate when not to use it versus other delete tools, but the soft-delete versus restore distinction is strong enough to guide selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tasks_getGet tasksA
Read-onlyIdempotent
Inspect

List tasks (RLS-scoped). Every row carries blocked and blocked_by: a task can be perfectly ready in every other respect and still be unstartable because something it waits on is not Done. NEVER tell anyone to get on with a task without saying it is blocked, and prefer an unblocked one when asked what to pick up. DEFAULTS TO ACTIVE TASKS ONLY - archived ones are excluded. Done tasks in a live project ARE included, the same as the board in Matrix shows them. Say so when you answer ("you have 7 active tasks"), and read meta.scope_note. Pass scope: archived or all only when the question is about finished or historical work. Optional filters: project, assignee, status. Max limit 200 - the response always carries pagination.total (full match count) plus has_more/next_cursor. Do not count or total these rows while has_more is true. NOTE: time is logged on projects, not tasks, so there is no per-task actual-hours figure. est_hours is the estimate; do not infer spent or remaining hours from these rows.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax 200.
scopeNoactive (default) covers only what is still live. Use archived for finished or lost records, or all when the question spans both - historical revenue, deals closed over a period, anything measured across time. Always tell the user which set your answer covers.active
cursorNoOpaque cursor from a previous response's pagination.next_cursor. Preferred over offset: keyset paging never skips or duplicates rows.
offsetNoRow offset for offset-based paging. Ignored when cursor is supplied.
statusNo
blockedNotrue returns only tasks waiting on unfinished work; false only those that can be started.
archivedNoExplicit override. Setting it wins over scope.
project_idNo
assignee_idNoFilter to tasks this person is assigned to.

Output Schema

ParametersJSON Schema
NameRequiredDescription
metaNo
tasksYes
warningNoPresent only when the page is truncated.
paginationYes

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark this as read-only and idempotent, but the description adds substantial behavioral detail beyond them: RLS scoping, default-to-active behavior, inclusion of done tasks, max limit 200, pagination.total/has_more/next_cursor, the blocked/blocked_by semantics, and the warning not to infer hours from est_hours. None of this contradicts the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense and long, but nearly every sentence carries a warning or decision rule that matters for correct use, such as the blocked task warning, the has_more counting rule, and the hours caveat. It front-loads the core purpose and then layers critical behavioral constraints; a bulleted structure would improve readability, but the content earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity, the output schema, and the annotations, the description covers everything an agent needs: default scope, archived/all behavior, optional filters, max limit, pagination completeness indicators, blocked-task handling, and the est_hours limitation. Context is complete for safe and correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 78%, so the schema already documents most parameters such as scope, cursor, offset, blocked, archived, and assignee_id. The description adds useful usage context around scope and the optional filters project, assignee, status, but it does little to explain status values or project_id beyond the schema. This is adequate but not exceptional compensation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: "List tasks (RLS-scoped)." It clearly identifies the tool as the general task-listing operation and adds meaningful context about active/archived scoping and filters. However, it does not explicitly distinguish itself from sibling tools like tasks_get_dependencies, relying on the resource name rather than naming alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives strong when-to-use guidance: use the default active scope unless the question is about finished or historical work, pass scope: archived or all only in those cases, and tell the user which set the answer covers. It also warns against using the rows for hours because "time is logged on projects, not tasks." It does not explicitly name alternative tools for dependency or time queries, so it falls just 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.

tasks_get_dependenciesGet task dependenciesA
Read-onlyIdempotent
Inspect

Everything linked to one task, in both directions: what it is waiting on, what is waiting on it, and what it is merely related to. blocked is the answer that matters - true when something this task waits on is not Done yet, with blocked_by naming those. A task can be perfectly ready in every other respect and still be unstartable, so check this before telling anyone to get on with it. TWO DIFFERENT IDS COME BACK IN EVERY ENTRY, AND THEY ARE NOT INTERCHANGEABLE. dependency_id is the LINK between the two tasks - it is what tasks_remove_dependency deletes. task_id is the TASK on the other end - it is what tasks_get or tasks_update work on. Deleting takes dependency_id. Handing a task_id to tasks_remove_dependency matches no row, removes nothing, and still reports success.

ParametersJSON Schema
NameRequiredDescriptionDefault
task_idYesThe task whose links you want, by title or id. A task id, never a dependency id.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate read-only and idempotent behavior, but the description adds substantial behavioral context: the bidirectional nature of links, the blocked logic, the distinction between dependency_id and task_id, and the important warning that deleting with task_id silently removes nothing but still reports success. This goes well beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but every sentence earns its place: scope, meaningful blocked logic, usage guidance, and the critical ID warning. The front-loading of the core answer and the all-caps warning make the most important behavioral trap immediately visible.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description carries the burden of explaining return values; it does explain key fields like blocked, blocked_by, dependency_id, and task_id. It does not fully specify the exact output shape or every possible field, but it covers the information needed to call the tool and interpret its results correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single task_id parameter is already well described in the schema as 'by title or id' and 'never a dependency id.' The body description reinforces this distinction but does not add meaningfully new parameter semantics beyond what the schema already provides, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states what the tool does: returns everything linked to one task in both directions—waiting on, waiting for it, and merely related. It also names specific output concepts like blocked and blocked_by, which makes it easy to distinguish from general task lookup tools like tasks_get.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly advises checking this tool before telling anyone to proceed on a task, giving a clear when-to-use signal. It also distinguishes task_id from dependency_id and references tasks_remove_dependency, tasks_get, and tasks_update, so the agent knows which tool works with which ID.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tasks_remove_dependencyUnlink two tasksA
Destructive
Inspect

PERMANENTLY remove a link between two tasks. There is no recycle bin for these, so it cannot be undone - but it removes only the link, never either task. Requires explicit human confirmation: never fill in confirm/confirmation_phrase on your own initiative. TAKES THE ID OF THE LINK, NOT OF EITHER TASK. Read dependency_id from tasks_get_dependencies - the field is named that on purpose, and sits beside task_id, which is the wrong one. A task id matches no row here: the delete would remove nothing and still come back as success, so the mistake is invisible unless you check afterwards.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmNoMust be true. The HUMAN running this agent must set this - not the agent.
dependency_idYesThe `dependency_id` field from tasks_get_dependencies. NOT a task id - the two sit next to each other in that response and only this one identifies the link.
confirmation_phraseNoMust exactly equal DELETE <dependency_id>. The HUMAN must supply this.

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds substantial behavioral context beyond the annotations: it states the action is permanent, there is no recycle bin, it cannot be undone, only the link is removed, and it requires explicit human confirmation. It also discloses the invisible-failure behavior where using a task id deletes nothing but still returns success. This is rich, honest transparency well beyond the destructiveHint annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Every sentence earns its place. The description front-loads the most critical warning (permanence), then explains the confirmation requirement, then gives the precise parameter source and the common mistake to avoid. It is dense but not bloated, and the all-caps warnings are justified for the destructive nature of the operation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having no output schema, the description is fully complete for this destructive tool: it covers permanence, human confirmation constraints, how to source the correct ID, the exact wrong-ID failure mode, and what the operation does not do. An agent has everything needed to invoke it correctly and avoid irreversible mistakes.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Even though schema coverage is 100%, the description adds critical semantic meaning: it explains that `dependency_id` is the link's ID from `tasks_get_dependencies`, not a task ID, and warns that the two fields sit beside each other. It also clarifies the human-only nature of `confirm` and `confirmation_phrase`, going beyond the schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action: 'PERMANENTLY remove a link between two tasks.' It specifies the exact resource (the link, not either task) and distinguishes itself from task deletion by emphasizing 'it removes only the link, never either task.' This makes the purpose unmistakable among sibling tools like tasks_delete and tasks_add_dependency.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit usage guidance: it says to read `dependency_id` from `tasks_get_dependencies`, warns that a task id is the wrong value, and explicitly instructs that confirm/confirmation_phrase must be supplied by the human, never the agent. It also explains the failure mode when the wrong ID is used, which helps the agent know how to use this tool correctly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tasks_restoreRestore taskA
Idempotent
Inspect

Restore a soft-deleted task from the recycle bin. Admin-only. Fails if the record has been purged (>30 days).

ParametersJSON Schema
NameRequiredDescriptionDefault
task_idYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (idempotent, non-destructive, non-read-only), the description adds useful behavioral context: the operation is admin-only and will fail if the record has been purged after 30 days. This gives an agent realistic expectations about success/failure conditions without contradicting any annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded with the core action. Every sentence adds value: the purpose, the admin requirement, and the purge-failure condition. No filler or redundant restating of the title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter restore operation, the description covers purpose, access control, and a key failure edge case. There is no output schema, but the absence of return-value details is acceptable; the description is otherwise complete enough for an agent to invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is only one parameter, task_id, and the schema already provides its name and uuid format. The description's reference to a 'task' implicitly identifies what task_id refers to, but it does not explicitly explain the parameter's meaning or any additional constraints beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific action ('Restore'), a specific resource ('soft-deleted task'), and a location ('from the recycle bin'), making the tool's purpose unambiguous. It also distinguishes this tool from siblings like tasks_delete and tasks_update by targeting soft-deleted tasks only.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly indicates when to use the tool: restore a soft-deleted task from the recycle bin. It also provides an important exclusion constraint ('Fails if the record has been purged (>30 days)') and an access prerequisite ('Admin-only'), though it does not explicitly name alternative tools 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.

tasks_updateUpdate taskAInspect

Update fields on a task. Priority/status accept case-insensitive values. assignees REPLACES everyone on the task, it does not add to them - pass the full list you want to end up with, and read the current one from tasks_get first if you are only adding a person. Leave it out and the assignees are untouched. An empty list is refused: Matrix will not accept a task with nobody on it.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleNo
statusNoTo Do | In Progress | Review | Done | Blocked | Backlog
task_idYes
archivedNo
due_dateNo
priorityNoLow | Normal | High | Critical
assigneesNoThe complete list of people on the task. Replaces the current one.
est_hoursNoTotal across all assignees.
start_dateNo
descriptionNo
is_milestoneNo

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations are minimal (readOnlyHint=false, destructiveHint=false), so the description carries the full behavioral burden, and it excels. It explicitly discloses that 'assignees' REPLACES rather than appends, that omitting it leaves assignees untouched, that an empty list is refused with the rationale (Matrix rejects unassigned tasks), and that priority/status are case-insensitive. These are exactly the non-obvious behaviors an agent needs to avoid destructive mistakes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with purpose, then dedicates each subsequent sentence to a distinct behavioral fact. No sentence is redundant; the assignee warning is complex enough to justify its length, and the closing rationale for the empty-list refusal is earned. The layout makes the critical warning scannable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 11-parameter mutation tool with no output schema, the description covers the most consequential behavior (assignee replacement) thoroughly. Gaps remain: it does not describe success/return behavior, interaction between est_hours and per-assignee estimated_hours, or expected date string formats. These are secondary, but for a tool this complex the description is not fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is low (36%), so the description must compensate. It adds real value: case-insensitivity for priority/status beyond the enum-style schema text, and detailed replace-vs-add semantics for assignees that go beyond the schema's one-line warning. It does not cover remaining undocumented params like archived, due_date, or is_milestone, but it focuses on the highest-risk parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

"Update fields on a task" states a specific verb and resource, clearly distinguishing the tool from read/create/delete siblings in the tasks_* family. It is clear and unambiguous, though sibling differentiation is carried mostly by the name and title rather than explicit contrast in the description.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear operational context, including the critical prerequisite "read the current one from tasks_get first if you are only adding a person," which routes the agent to the correct read-before-write sequence. It does not explicitly state when-not-to-use this tool versus alternatives like tasks_create or tasks_add_dependency, but the guidance is sufficient for correct invocation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

timelog_add_expenseAdd expenseAInspect

Add an expense for the signed-in user, optionally attached to a project.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYesISO date YYYY-MM-DD
amountYes
project_idNo
descriptionNo
is_billableNo
activity_type_idNo

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already signal a write operation (readOnlyHint=false) and the description is consistent with that by saying 'Add'. It adds a small amount of behavioral context—the expense is scoped to the signed-in user and may be attached to a project—but it does not disclose side effects like approval workflows or record creation details.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence that leads with the action and resource, then adds ownership scope and the optional project detail. There is no filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With six parameters, no output schema, and minimal parameter coverage, a one-sentence description leaves important context missing, such as valid project sources, activity type semantics, and any post-create flow. The agent is not fully equipped to invoke this tool correctly beyond the literal schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only 17% of the schema properties have descriptions, so the description must compensate, but it only clarifies that project_id is optional. The meaning of activity_type_id, is_billable, and the description field is left undocumented, and amount's semantics are not enriched beyond the schema constraint.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'Add' with the resource 'expense', identifies the owner scope as the signed-in user, and notes the optional project attachment. This clearly distinguishes it from siblings like timelog_update_expense and timelog_delete_expense based on action alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The usage is implied: an agent can infer this tool is for creating expenses because it says 'Add an expense.' However, it does not explicitly route away from alternatives such as timelog_update_expense or timelog_approve_expense, nor does it state 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.

timelog_approve_expenseApprove expenseBInspect

Approve an expense. Requires 'time.approve' permission.

ParametersJSON Schema
NameRequiredDescriptionDefault
expense_idYes

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds the 'time.approve' permission requirement, which is not present in the annotations and provides useful auth context. However, it does not disclose postconditions such as status change, reversibility, or side effects. The annotations already indicate this is a non-read-only but non-destructive operation, so the mutation is known but its behavioral details are left to inference.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with no redundancy. The action is front-loaded ('Approve an expense') and the permission requirement follows directly. Every word earns its place, making it an appropriately sized and well-structured definition for such a simple tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter, no-output-schema mutation tool, the description is mostly sufficient: it states what the tool does and what permission is needed. It does not explain the consequences of approval or how to find the expense_id, but these can be reasonably inferred from sibling tools like timelog_get_expenses. Minor gaps remain but they are not critical for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description does not mention expense_id at all. The parameter name is self-explanatory in context, but the description fails to compensate for the missing schema documentation by explaining what the ID refers to or how to obtain it. This leaves the agent to infer parameter semantics from the name alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action and resource: 'Approve an expense.' It distinguishes from the sibling timelog_approve_time by naming 'expense', but it doesn't elaborate on what approval entails beyond the title. The description is essentially a full-sentence version of the title, so it is clear but not rich.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no guidance on when to use this tool versus alternatives like timelog_approve_time or timelog_update_expense. It only mentions the permission requirement, which is a prerequisite but not a usage condition. No context, exclusions, or alternative routing is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

timelog_approve_timeApprove time entryBInspect

Approve a time entry. Requires 'time.approve' permission.

ParametersJSON Schema
NameRequiredDescriptionDefault
time_entry_idYes

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds a permission requirement ('Requires time.approve permission'), which is useful behavioral context beyond the annotations. However, it does not disclose what approval changes about the entry, whether it is reversible, or whether there are workflow state prerequisites, leaving meaningful behavioral gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise: 'Approve a time entry' plus a short permission note. Both sentences earn their place, and the core verb-resource structure is front-loaded with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple single-parameter action, the description is minimally viable: an agent can infer what to pass and what permission is needed. However, it omits context about the expected state of the entry, the effect of approval, and how this differs from other timelog actions, leaving noticeable gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden of explaining the parameter semantics. It does not elaborate on time_entry_id beyond the property name, although the name and uuid format make the parameter largely self-explanatory. Still, the description adds no real semantic detail.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear action ('Approve') on a specific resource ('a time entry'), which matches the tool name and title. It does not explicitly distinguish itself from the sibling 'timelog_approve_expense', but the resource is different enough that the core purpose is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided about when to use this tool versus alternatives such as timelog_update_entry or timelog_approve_expense. The only usage-related information is the permission requirement, which is a prerequisite rather than selection guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

timelog_delete_entryDelete time entryA
Destructive
Inspect

PERMANENTLY delete one or more time entries. There is no recycle bin for time entries - this cannot be undone, and it lowers the project's spent_amount. Only the owning employee (or an approver) can delete. Requires explicit human confirmation: never fill in confirm/confirmation_phrase on your own initiative. Pass time_entry_ids to clear a batch under a single confirmation instead of one call per row.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmNoMust be true. The HUMAN running this agent must set this - not the agent.
time_entry_idNoDelete a single entry.
time_entry_idsNoDelete a batch of entries under one confirmation. Max 500.
confirmation_phraseNoFor a single entry: the entry id. For a batch: `DELETE <n> ENTRIES`. The HUMAN must supply this.

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark destructiveHint=true, but the description goes further: deletion is permanent with no recycle bin, it lowers the project's spent_amount, permission is restricted, and the confirmation fields must be human-supplied. This is substantial behavioral context beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and every sentence earns its place: permanence and side effects, permission constraints, and human-confirmation/batch guidance. It is front-loaded with the most critical fact—permanent deletion.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive write operation with no output schema, the description covers all essential context: irreversibility, side effects, authorization, human confirmation, and batch behavior. An agent has everything needed to invoke it correctly and safely.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so each parameter is already documented. The description adds meaningful extra guidance: time_entry_ids enables batch deletion under one confirmation, and confirm/confirmation_phrase must never be filled by the agent on its own initiative. This elevates it above the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('PERMANENTLY delete') and resource ('one or more time entries'), clearly distinguishing it from expense deletion or other timelog operations. The batch-vs-single aspect is also explicitly covered.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly states who may delete ('owning employee or approver'), requires explicit human confirmation, and tells the agent to use time_entry_ids for a batch under a single confirmation instead of looping per row. This gives clear when and how guidance beyond the raw schema.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

timelog_delete_expenseDelete expenseA
Destructive
Inspect

PERMANENTLY delete one or more expenses. There is no recycle bin for expenses - this cannot be undone, and it lowers the project's cost. You can only delete your own unless you hold 'time.approve' or full Time Tracking data scope. Requires explicit human confirmation: never fill in confirm/confirmation_phrase on your own initiative. Pass expense_ids to clear a batch under a single confirmation instead of one call per row.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmNoMust be true. The HUMAN running this agent must set this - not the agent.
expense_idNoDelete a single expense.
expense_idsNoDelete a batch under one confirmation. Max 500.
confirmation_phraseNoFor a single expense: the expense id. For a batch: DELETE <n> EXPENSES. The HUMAN must supply this.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations' destructiveHint=true, the description discloses that there is no recycle bin, the action cannot be undone, and it lowers the project's cost. It also reveals permission constraints and the critical rule that the agent must never fill in confirm/confirmation_phrase on its own. This is rich, safety-critical behavioral disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded with the most important fact: permanence. Every sentence contributes essential safety, permission, or batching guidance. There is no filler or repetition of the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having no output schema, the description covers everything an agent needs to invoke this destructive tool safely: permanence, irreversibility, cost impact, ownership permissions, human-confirmation requirements, and batch behavior. The tool's complexity and risk are fully addressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds practical usage semantics: expense_ids should be used for a batch under a single confirmation, and confirm/confirmation_phrase must only be supplied by the human. This goes beyond the raw schema property descriptions and helps the agent handle the single-vs-batch distinction.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description begins with 'PERMANENTLY delete one or more expenses,' naming the specific verb, resource, and irreversible nature. This clearly distinguishes it from timelog_update_expense and timelog_add_expense, and the resource 'expenses' separates it from timelog_delete_entry.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context: it is for deleting expenses, can only delete your own unless you hold the right scope, and requires explicit human confirmation. It advises using the batch expense_ids parameter instead of one call per row. It does not explicitly name alternatives like timelog_update_expense for non-destructive changes, so it stops short of a full when-not-to-use statement.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

timelog_get_activity_typesGet activity typesA
Read-onlyIdempotent
Inspect

List activity types available in the signed-in user's workspace for non-billable time logging. Max limit 200 - the response carries pagination.total and has_more.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax 200.
offsetNoRow offset. This tool has no cursor - page with offset.
for_expensesNoOnly return activity types that allow expenses.
include_inactiveNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
metaNo
warningNoPresent only when the page is truncated.
paginationYes
activity_typesYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, describing the safety profile. The description adds useful behavioral detail beyond annotations by mentioning the 'Max limit 200' and that 'the response carries pagination.total and has_more,' which helps the agent understand pagination behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences with no filler. It front-loads the core purpose and then adds the most important behavioral constraints and pagination detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list tool with a full output schema and well-described parameters, the description is nearly complete. It covers scope, pagination, and the limit. It could be slightly stronger by noting the default filtering behavior or indicating that include_inactive controls whether inactive types are returned, but this is a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already documents three of four parameters in useful detail, including the 200 max limit, offset behavior without a cursor, and the for_expenses filter. The description adds overall context but does not materially enrich individual parameter semantics or clarify the undocumented include_inactive parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'List' with the resource 'activity types' and scopes it to 'the signed-in user's workspace' and 'non-billable time logging.' This clearly distinguishes it from other timelog tools such as timelog_get_entries, timelog_get_expenses, and timelog_get_loggable_projects.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when to use the tool: listing activity types for non-billable time logging in the current user's workspace. It does not explicitly name alternative tools or state when not to use it, but no sibling tool is a close substitute for this specific resource.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

timelog_get_entriesGet time entriesA
Read-onlyIdempotent
Inspect

List time entries (RLS-scoped). Optional filters: project, employee, status, date range. Max limit 200 - the response always carries pagination.total (the full match count) plus has_more/next_cursor. NEVER total these rows when pagination.has_more is true; page with next_cursor until it is false.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax 200.
cursorNoOpaque cursor from a previous response's pagination.next_cursor. Preferred over offset: keyset paging never skips or duplicates rows.
offsetNoRow offset for offset-based paging. Ignored when cursor is supplied.
statusNoDRAFT | SUBMITTED | APPROVED | REJECTED
to_dateNo
from_dateNo
project_idNo
employee_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
metaNo
entriesYes
warningNoPresent only when the page is truncated.
paginationYes

TDQS

A4.2/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Even though annotations already declare readOnlyHint=true, openWorldHint=false, and idempotentHint=true, the description adds substantial non-obvious behavior: RLS scoping, the 200-row maximum, the guaranteed presence of pagination.total plus has_more/next_cursor, and the critical warning that total must not be computed while has_more is true. This pagination pitfall is exactly the kind of behavioral context annotations cannot convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences with zero filler: the core purpose and RLS scope lead, followed by the filter summary and pagination contract, and the anti-pattern warning closes. Every sentence carries operational weight, and the most critical constraint (never total when has_more is true) is front-loaded in its own emphatic sentence.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The output schema covers return fields, and annotations cover the safety profile, so the description only needs to handle routing and behavioral quirks — which it does thoroughly with RLS scope, limit caps, and pagination semantics. The one genuine gap is the missing date format for to_date/from_date, which could cause the agent to send an incorrectly formatted filter on its first attempt.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With schema description coverage at 50%, the description helps by grouping the four undocumented parameters into filter categories — "project, employee, status, date range" — mapping them to project_id, employee_id, status, and to_date/from_date. However, it stops short of fully compensating for the gap: no date format is specified for to_date/from_date, and no semantics are given for how the filters combine, leaving the agent to guess on those details.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource — "List time entries" — immediately establishing the operation. Adding "(RLS-scoped)" clarifies the visibility boundary, and the resource name "time entries" cleanly distinguishes this from the sibling timelog_get_expenses, timelog_get_activity_types, and timelog_get_loggable_projects tools without needing their schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear operational guidance on filters and pagination ("NEVER total these rows when pagination.has_more is true; page with next_cursor until it is false"), which tells the agent how to use the tool correctly. However, it never explicitly addresses when to use this tool versus alternatives like timelog_get_expenses, nor does it state any exclusions or conditions for preferring this over other timelog read tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

timelog_get_expensesGet expensesA
Read-onlyIdempotent
Inspect

List expenses. Without 'time.approve' (or full Time Tracking data scope) you only see your own, even though the underlying table is workspace-wide. Optional filters: project, employee, status, date range, billable. Max limit 200 - the response carries pagination.total plus has_more/next_cursor. NEVER total these rows while has_more is true; page with next_cursor until it is false.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax 200.
cursorNoOpaque cursor from a previous response's pagination.next_cursor. Preferred over offset: keyset paging never skips or duplicates rows.
offsetNoRow offset for offset-based paging. Ignored when cursor is supplied.
statusNoDRAFT | SUBMITTED | APPROVED | REJECTED
to_dateNoInclusive, YYYY-MM-DD.
from_dateNoInclusive, YYYY-MM-DD.
project_idNo
employee_idNoRequires 'time.approve' or full data scope to look at someone else.
is_billableNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
metaNo
warningNoPresent only when the page is truncated.
expensesYes
paginationYes

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only mark the operation as read-only and idempotent. The description adds meaningful behavior beyond those: permission-scoped row visibility despite a workspace-wide table, the 200-row cap, pagination.total, has_more/next_cursor, and an explicit warning not to total rows while more pages exist.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four concise sentences, all substantive, with the core purpose front-loaded. Each sentence contributes either scope guidance, filter information, or a critical pagination warning; there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that annotations cover safety, an output schema exists, and the schema documents most parameters, the description fills the remaining critical gaps: permission scope, the workspace-wide underlying table, and the pagination contract. Nothing essential is missing for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 78% schema description coverage, the input schema already explains most parameters. The description summarizes the filter groups and emphasizes pagination behavior, but it does not add much individual parameter detail beyond what the schema provides, so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with the specific verb and resource 'List expenses' and then expands with optional filters and a key scope detail (own rows vs workspace-wide). This clearly distinguishes it from sibling timelog_get_entries without ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It conveys when to use the tool through the permission-dependent scope explanation and the pagination requirements. It does not explicitly state 'use this for expense listings, not time entries,' but no direct alternative expense-list sibling exists, so the context is sufficient.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

timelog_get_loggable_projectsGet projects I can log time onA
Read-onlyIdempotent
Inspect

List only projects where the signed-in user is assigned as a team member or project manager and can log project time. Use this before timelog_log_time for any project-based time entry. Max limit 200 - the response carries pagination.total and has_more.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax 200.
offsetNoRow offset. This tool has no cursor - page with offset.
searchNoMatch project title.
include_archivedNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
metaNo
warningNoPresent only when the page is truncated.
projectsYes
paginationYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and idempotentHint=true, and the description is consistent with those. It adds useful behavioral context beyond annotations: the max limit of 200 and the fact that the response carries pagination.total and has_more, which helps the agent plan pagination.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no filler. The core scope is front-loaded, the sibling tool usage is stated in the second sentence, and pagination details are included compactly. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema exists and annotations cover safety/idempotency, the description is largely complete: it explains scope, when to use it, and pagination behavior. The only notable gap is the undocumented include_archived parameter, but overall the agent has enough context to invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema describes limit, offset, and search, but the description adds no parameter-level semantics of its own; it only repeats the max limit. The include_archived parameter has no description in the schema and is not clarified in the description, so a meaningful gap remains for that parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb and resource: 'List only projects where the signed-in user is assigned as a team member or project manager and can log project time.' This precisely distinguishes it from other timelog tools like timelog_get_entries or timelog_log_time, and the scope is explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says to use this tool before timelog_log_time for any project-based time entry, naming the alternative and the condition that selects this tool. This gives an agent clear routing guidance with no need for inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

timelog_log_timeLog timeAInspect

Log a time entry for the signed-in user, or for another employee via employee_id (requires time approval rights). For project time, first use timelog_get_loggable_projects and only pass a project_id returned there. Use activity_type_id/activity_type_name for non-billable time without a project.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYesISO date YYYY-MM-DD
noteNo
hoursYes
statusNoDRAFT | SUBMITTED | APPROVED | REJECTED (case-insensitive). Defaults to DRAFT.
task_idNoReserved for future per-task time tracking. It is stored, but Matrix reports time per project only - passing it has no effect on any figure today.
project_idNo
employee_idNoRegister the time on another employee. Defaults to the signed-in user. Requires 'time.approve' or full Time Tracking data scope.
is_billableNo
activity_type_idNo
activity_type_nameNoExact activity type name to use when activity_type_id is not known.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false and destructiveHint=false, so mutation is known. The description adds the auth requirement for employee_id and the important constraint that project_ids must come from timelog_get_loggable_projects, giving the agent behavioral context beyond the annotations alone.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the core action, then conditional workflow guidance. No redundant phrases; every sentence adds a distinct piece of information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 10 parameters and no output schema, the description covers the critical decisions: who, what project, and activity-type usage. It does not cover all edge cases such as billable time without a project or what the API returns on success, but the schema and annotations handle most remaining details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50%, so the description compensates by explaining project_id (must be a loggable project) and activity_type_id/activity_type_name (for non-billable non-project time). It also reinforces employee_id's permission requirement. It does not add semantics for note/hours/is_billable, but those are self-explanatory or covered by schema defaults/types.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Log a time entry' and distinguishes self vs. employee and project vs. non-project time. It clearly identifies this as the create-time-entry tool rather than timelog_update_entry or timelog_add_expense.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit conditional usage: for project time, first call timelog_get_loggable_projects and only pass a returned project_id; for non-billable time without a project, use activity_type_id/activity_type_name. It implies when to use this tool well, but does not explicitly state when not to use it or name an alternative for similar actions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

timelog_recalculate_costRepair 0-cost time entriesA
Idempotent
Inspect

Repair time entries whose historical_cost_price_per_hour was stamped as 0 because the employee had no salary data when the time was logged. Re-stamps them from the employee's CURRENT cost_price_per_hour. Only touches entries that are 0 or null - entries with a real rate are never overwritten. Runs as a preview by default: pass dry_run: false to actually write. Requires 'time.approve'.

ParametersJSON Schema
NameRequiredDescriptionDefault
dry_runNotrue (default) reports what WOULD change without writing. Pass false to apply.
to_dateNoISO date YYYY-MM-DD. Only entries on or before this date.
from_dateNoISO date YYYY-MM-DD. Only entries on or after this date.
employee_idNoLimit the repair to one employee. Omit to cover the whole workspace.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes well beyond the annotations by disclosing that the tool runs as a preview by default, requires 'time.approve' permission, and never overwrites entries with real rates. This provides rich behavioral context that the annotations alone do not convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, front-loaded with the core purpose, and each sentence adds essential information: target condition, data source, safety guardrail, preview behavior, and required permission. No filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the purpose, scope, write behavior, and permission requirement. Since there is no output schema, a brief mention of what the preview returns could strengthen it, but the description is already sufficient for safe invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and each parameter already has a clear description. The tool description adds context about dry_run behavior, but does not need to restate the parameter details since the schema fully documents them.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific repair action: re-stamping zero-cost time entries with the employee's current cost rate. It differentiates this from general timelog update tools by specifying the exact target condition (historical_cost_price_per_hour was 0 or null) and the source of the new value.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context on when to use the tool: only for entries stamped 0 due to missing salary data, and only those with 0/null rates are touched. It does not explicitly name alternative tools like timelog_update_entry, but the scoping is precise enough that an agent can decide when this is the correct tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

timelog_update_entryUpdate time entryAInspect

Update fields on a draft/rejected time entry. Pass employee_id to move the entry to another employee (requires time approval rights).

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNo
noteNo
hoursNo
employee_idNoReassign the entry to another employee. Requires 'time.approve' or full Time Tracking data scope.
is_billableNo
time_entry_idYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already convey that this is not read-only and not destructive. The description adds useful behavioral context: only draft/rejected entries can be updated, and passing employee_id moves the entry to another employee with a permission requirement. This goes beyond the structured annotations and does not contradict them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no filler. The core purpose and status restriction are front-loaded, and the special employee_id behavior is stated in the second sentence. Every part earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The core purpose and the special reassignment case are covered, but with six parameters, low schema coverage, and no output schema, an agent still lacks guidance on field value semantics and any post-update behavior. It is adequate for a simple update tool but has clear gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 17%, so the description should compensate for undocumented parameters. It explains employee_id behavior but leaves date, note, hours, and is_billable to inference from their names. Accepted date formats, whether hours replaces existing values, and other field semantics are not clarified.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Update fields on a draft/rejected time entry.' This clearly identifies the tool as a mutation for time entries and distinguishes it from siblings like timelog_approve_time, timelog_delete_entry, and timelog_update_expense. The draft/rejected qualifier adds precision beyond the title.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly limits usage to draft/rejected time entries, which implies it should not be used on approved entries. It also gives a conditional usage rule for employee_id, noting that reassignment requires time approval rights. It does not name alternative tools explicitly, but the usage context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

timelog_update_expenseUpdate expenseAInspect

Update an expense. You can only touch your own unless you hold 'time.approve' or full Time Tracking data scope. Setting status to SUBMITTED is the owner submitting for approval; APPROVED and REJECTED require 'time.approve' and stamp approved_by/approved_at. An already APPROVED expense cannot be edited by its owner.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNoISO date YYYY-MM-DD
amountNo
statusNoDRAFT | SUBMITTED | APPROVED | REJECTED
expense_idYes
project_idNoPass null to detach the expense from its project.
descriptionNo
is_billableNo
activity_type_idNo

TDQS

A3.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only say readOnlyHint=false, destructiveHint=false, leaving behavioral disclosure entirely to the description. The description reveals significant side effects: setting APPROVED/REJECTED stamps approved_by/approved_at, ownership restrictions, and the immutable state of already-approved expenses. This is exactly the behavioral context an agent needs beyond the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences with no filler. The core action is front-loaded ('Update an expense'), followed by the most critical constraints in logical order. Every sentence adds a necessary piece of information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

While the description covers permissions and status side effects well, it does not address partial-update semantics, error behavior when permissions are insufficient, or whether an approver can modify an already-approved expense. With no output schema and minimal annotations, these gaps leave some uncertainty for an agent invoking the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 38%, so the description must compensate for undocumented parameters. It adds real meaning only for 'status' by explaining the workflow implications of each value; the remaining seven parameters (date, amount, expense_id, project_id, description, is_billable, activity_type_id) receive no semantic guidance beyond their names.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description states a clear verb and resource ('Update an expense') and adds distinctive behavior around status transitions and ownership permissions. It implicitly differentiates from siblings like timelog_add_expense and timelog_approve_expense by describing the approval workflow, though it never names alternatives explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit contextual rules: owners can only touch their own expenses, 'time.approve' or full data scope expands access, and status transitions have specific authorization requirements. It also gives a clear exclusion ('An already APPROVED expense cannot be edited by its owner'), but does not explicitly route the agent to timelog_approve_expense for the approval action.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tool_invokeInvoke tool by nameAInspect

Invoke a Sunago Matrix MCP tool by its exact name with a JSON arguments object. Discover names via tool_search first.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesExact tool name (from tool_search).
argumentsNo

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only say readOnlyHint=false and openWorldHint=false, so the description carries most of the burden. It does convey that the tool executes another tool by name and passes a JSON arguments object, which is the core behavior. However, it does not disclose error behavior for unknown names, side effects of invoking arbitrary tools, or what the response looks like. The description is not contradictory to the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short, purposeful sentences. The primary action is stated first, and the discovery prerequisite is included as a second sentence. No filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is enough for a basic dispatcher: name and arguments are clear, and tool_search guidance is given. However, with no output schema and minimal annotations, an agent might still wonder how to construct arguments for a specific tool and what happens on invalid names. Some additional detail about error handling and argument passing would improve completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50%, with 'name' described in the schema. The description adds 'JSON arguments object', which reinforces the type and purpose of the arguments parameter, but does not clarify that arguments should conform to the named tool's own input schema. Since arguments is a generic free-form object, this is a meaningful gap, but the basics are covered.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Invoke', the resource ('Sunago Matrix MCP tool'), and the mechanism ('by its exact name with a JSON arguments object'). It also distinguishes itself from sibling tools by directing the agent to tool_search for discovery, making its role as a generic dispatcher clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit usage context: discover names via tool_search first, then invoke by exact name. It names the relevant sibling tool in the workflow. It does not explicitly state when not to use this tool in favor of direct sibling calls, but for a generic invoker this is a reasonable level of guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

whoamiWho am IA
Read-onlyIdempotent
Inspect

Return the identity of the currently authenticated Sunago Matrix user (auth id, email, employee id, workspace, and feature permissions).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and idempotentHint=true, and the description adds useful specifics about what the returned identity contains. It doesn't describe failure behavior (e.g., unauthenticated), but that's a minor gap given the annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence with zero filler. The parenthetical list of return fields is concise and every part earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, read-only identity tool, the description covers what it returns and under what auth context. No output schema is present, but the listed fields provide sufficient guidance for an agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, and the schema is empty. Baseline for 0 params is 4. The description adds no parameter info, but none is needed since there is nothing to document.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Return') and resource ('identity of the currently authenticated Sunago Matrix user'), and includes the exact fields returned (auth id, email, employee id, workspace, feature permissions). This clearly distinguishes it from the many sibling tools, none of which target current-user identity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes the context obvious: use when you need the current user's identity. It doesn't explicitly name exclusions or alternatives, but no sibling tool overlaps with this purpose, so the guidance is clear enough without them.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Frequently Asked Questions

Discussions

No comments yet. Be the first to start the discussion!

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    A comprehensive MCP server for time tracking, project management, and AI-powered memory storage using semantic search. It enables users to log time, manage client billing, and capture shared or personal ideas through integrated tools and team collaboration features.
    1
  • A
    license
    A
    quality
    C
    maintenance
    Enables MCP clients to read and write Bokio accounting data for one company through 85 tools covering invoices, customers, suppliers, journal entries, chart of accounts, fiscal years, items, tags, uploads, SIE export, and bank payments.
    40
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

TDQS

B3.4/5.0
Disambiguation4/5

Most tools follow a clear resource+action pattern and the descriptions are unusually precise about boundaries. A few near-overlaps remain: projects_get_finance vs projects_get_financials, and notes_create vs crm_log_activity on a deal are both plausible for recording a note on a deal.

Naming Consistency4/5

The domain_prefix_action convention is consistent across nearly all tools, e.g. crm_create_lead, projects_update_risk, timelog_approve_time. Deviations include standalone list_trash, meta tools like whoami/tool_search/tool_invoke, and the confusing projects_get_finance/projects_get_financials pair.

Tool Count1/5

With 105 tools, this far exceeds the 50+ threshold defined as an extreme mismatch. Even for a full ERP/CRM suite, the fine-grained split—39 project tools alone—creates a massive tool-selection surface that is hard for an agent to navigate reliably.

Completeness4/5

The surface covers CRM, projects, tasks, time/expenses, HR, notes, notifications, contracts, and reporting with create/read/update/delete for most primary entities. Minor gaps exist: crm_log_activity has no read-back path, contracts lack delete/restore, and proposals are intentionally read-only, but agents can work around these.