Skip to main content
Glama

Groundbase

Server Details

CRM for one-person businesses. Sends texts and email through your own accounts, runs campaigns and workflows, issues invoices. OAuth or API key.

Ownership verified
Status
Healthy
OAuth
Works in Glama
Last Tested
Transport
Streamable HTTP · MCP 2025-06-18
URL

TDQS

B3/5.0

Scored across 124 tools

Disambiguation1/5

Several tools are effectively indistinguishable: billing_profile_create and billing_profiles_create are duplicate verbs, billing_profile_get and billing_profiles_get are duplicate queries, and billing_profiles_list overlaps with both. companies_get advertises included addresses while addresses_list insists addresses are separate records, adding further boundary confusion. With 124 tools, an agent has no reliable way to pick the intended tool.

Naming Consistency3/5

The dominant snake_case resource_action pattern (contacts_create, invoices_issue, tags_apply) is readable and mostly consistent. However, pluralization is inconsistent for the same resource (billing_profile_* vs billing_profiles_*), and several outlying names break the pattern: activity_list, dashboard_summary, sending_settings, and the action-dispatch tools campaigns_manage/resend_manage.

Tool Count1/5

124 tools is an extreme count, far beyond the well-scoped 3-15 range. The surface would be far more coherent as a smaller set of properly factored tools per domain instead of one massive namespace with duplicates and megatools.

Completeness3/5

Core CRM entities (contacts, companies, deals, tasks, notes, tags) have strong CRUD coverage, and email, SMS, invoices, campaigns, workflows, and time tracking are broadly represented. But several resources end in dead ends: invoice_items, meeting_types, saved_views, billing profiles, and deal_stages lack delete (and in some cases update), and soft-deleted records have no restore path.

Available Tools

124 tools
activity_listAInspect

Recent activity feed: SMS sent/received, calls, emails, notes added, deal stage changes, task completions. Returns most recent first. Use this to summarize "what happened with X" or build a weekly digest of CRM activity.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoDefault 50.
dealIdNoScope to one deal.
companyIdNoScope to one company.
contactIdNoScope to one contact's activity.

TDQS

A3.8/5.0
Behavior3/5

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

Without annotations, the description carries the burden of behavioral disclosure. It reveals that results are ordered most recent first and enumerates the activity types covered, which goes beyond the schema. However, it doesn't state whether this is a read-only operation, how results are paginated, or what the return shape looks like.

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

Conciseness5/5

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

The description is three sentences, with the resource and content front-loaded, followed by ordering and use cases. No filler or repetition of schema details. It earns its 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 read-oriented list tool with four optional, well-described parameters, the description conveys what the feed contains, its ordering, and when to use it. The lack of an output schema is partially mitigated by the listing of activity types, though pagination and limits are only detailed in the schema.

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

Parameters3/5

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

The schema covers all four parameters with descriptions, so the baseline is 3. The description doesn't add parameter-level meaning beyond the schema's own descriptions and the 'with X' use-case phrasing. Since schema coverage is 100%, no deduction is warranted.

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

Purpose4/5

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

The description clearly identifies the tool as an aggregated activity feed covering SMS, calls, emails, notes, deal stage changes, and task completions, with a reverse-chronological order. It is distinct from sibling tools like calls_list or notes_list because it combines multiple activity types, even though it doesn't name them as alternatives. This is a clear statement of purpose, but explicit sibling differentiation is not provided.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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 use cases: summarizing 'what happened with X' and building a weekly CRM activity digest. This tells an agent when the tool is appropriate. It doesn't name exclusions or alternatives, but the provided scenarios are sufficient context for typical use.

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

addresses_createAInspect

Add an address to a contact or company. Pass exactly one of contactId / companyId. Every field is optional — a city on its own is a perfectly normal address record.

ParametersJSON Schema
NameRequiredDescriptionDefault
cityNo
labelNoShort label, e.g. 'home', 'office', 'site'. Free text.
notesNoAnything else — access codes, "rear entrance".
streetNoStreet address line.
countryNo
provinceNoState, province or region.
companyIdNo
contactIdNo
is_primaryNoMake this the primary address. The primary is what the contact screen shows first and what a CSV export writes. Setting it demotes the previous primary.
postal_codeNoPostal or ZIP code.

TDQS

A4.4/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It discloses that all fields are optional and that a city alone is a valid record, which adds behavioral context. It also clarifies the one-of relationship between contactId and companyId. It doesn't mention response format or error handling, but for a create operation this is acceptable.

Agents need to know what a tool does to the world before 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 zero fluff. The action is front-loaded, and the two key constraints (one-of, optionality) follow directly. Every sentence earns its place; there is no redundant information.

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

Completeness4/5

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

For a create tool with 0 required parameters and no output schema, the description covers the essential behaviors: the action, the one-of constraint, and optionality. It doesn't discuss validation errors or return values, but these are less critical given the tool's simplicity. The schema already describes is_primary's demotion behavior, so the description doesn't need to repeat it.

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

Parameters4/5

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

Schema description coverage is 60%, leaving city, country, companyId, and contactId undocumented. The description compensates by clarifying the exact-one-of rule for contactId/companyId and stating all fields are optional. This adds meaning beyond the schema for the critical parameters. The remaining fields are self-explanatory.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Add an address to a contact or company.' It uses a specific verb and resource, and distinguishes itself from sibling tools like addresses_update and addresses_delete by the action. The one-of constraint (contactId/companyId) is front-loaded, leaving no 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 provides clear usage context: to create an address for a contact or company. It explicitly states the rule to pass exactly one of contactId or companyId, which is a direct usage guideline. It doesn't compare to alternatives like addresses_update, but the purpose is self-evident from the name and the description.

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

addresses_deleteAInspect

Remove one address from a contact or company. This does not touch the contact or company itself.

ParametersJSON Schema
NameRequiredDescriptionDefault
addressIdYesFrom addresses_list.
companyIdNo
contactIdNo

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations, the description carries the burden of behavioral disclosure. It states the side-effect scope ('does not touch the contact or company itself'), which is valuable, but it does not mention whether deletion is permanent, what happens if the addressId is invalid, or any permission requirements.

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

Conciseness5/5

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

Two short sentences with no filler. The core action is front-loaded and the important scoping caveat follows immediately, making the description easy to parse.

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 sufficient for a simple delete operation using the required addressId, but it lacks guidance on the optional parent IDs and gives no indication of response or error behavior. Given the absence of annotations and output schema, this leaves notable gaps for an agent deciding how to invoke 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 33%, and the description does not explain the roles of companyId or contactId or when to use them. The addressId parameter is documented only as 'From addresses_list', leaving the polymorphic address-to-parent relationship 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 names a specific verb ('Remove'), a precise resource ('one address'), and the applicable parent types ('contact or company'). It also distinguishes itself from parent-entity deletion tools by clarifying that the contact or company itself is untouched.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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 targets deletion of an address and explicitly rules out deleting or altering the parent entity, which helps distinguish it from addresses_update, contacts_delete, and companies_delete. It does not name alternative siblings like addresses_update, but the intended use case is reasonably clear.

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

addresses_listAInspect

List the addresses on a contact or company. Pass exactly one of contactId / companyId. Addresses are separate records, so they do not appear in contacts_get or companies_get — use this when asked where somebody is.

ParametersJSON Schema
NameRequiredDescriptionDefault
companyIdNoThe company to read addresses for.
contactIdNoThe contact to read addresses for.

TDQS

A4.6/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden. It clearly implies a read-only operation ('List') and explains that addresses are separate records, which is important behavior not evident from the name alone. However, it does not mention potential errors when both or neither ID is passed, or whether empty results are possible, but for a simple list tool this is adequate.

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

Conciseness5/5

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

The description is only two sentences, with the core purpose and usage rule front-loaded. The second sentence adds a valuable clarification without redundancy. Every sentence serves a purpose, and there is no fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence 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 simplicity (no output schema, only two optional parameters), the description is essentially complete. The main information an agent needs—what it does, when to use it, and parameter constraint—is covered. A minor omission is not specifying what happens if both or neither IDs are passed, but this could be inferred from the instruction 'exactly one' and may not be necessary.

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 descriptions for both parameters (companyId and contactId) with 100% coverage, so the schema already explains them. The description adds the crucial semantic that exactly one must be provided, which is not in the schema. This goes beyond the schema and clarifies the mutual exclusivity, providing added value.

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

Purpose5/5

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

The description clearly states 'List the addresses on a contact or company' with a specific verb and resource. It also distinguishes itself from related tools like contacts_get and companies_get by noting that addresses are separate records, which differentiates it from siblings that might also fetch contact or company data.

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

Usage Guidelines5/5

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

The description explicitly instructs to 'Pass exactly one of contactId / companyId', providing a clear usage rule. It also guides when to use this tool ('when asked where somebody is') and when not to (addresses do not appear in contacts_get or companies_get), effectively distinguishing it from those alternatives.

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

addresses_updateAInspect

Change one address. Only the fields you pass are altered. Use addresses_list first to get the addressId — an address id is not the contact id.

ParametersJSON Schema
NameRequiredDescriptionDefault
cityNo
labelNoShort label, e.g. 'home', 'office', 'site'. Free text.
notesNoAnything else — access codes, "rear entrance".
streetNoStreet address line.
countryNo
provinceNoState, province or region.
addressIdYesFrom addresses_list.
companyIdNo
contactIdNo
is_primaryNoMake this the primary address. The primary is what the contact screen shows first and what a CSV export writes. Setting it demotes the previous primary.
postal_codeNoPostal or ZIP code.

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It discloses the partial-update behavior ('Only the fields you pass are altered') and warns about the id distinction. However, it omits details on errors, idempotency, or return values. For a simple update tool, 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 three concise sentences, front-loaded with the main purpose, followed by a usage prerequisite and a caution. No waste; 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 partial-update tool with one required parameter, the description covers the essential: what it does, how to obtain the ID, and the partial-update behavior. It lacks return-value or error details, but those are not critical for an update operation. The absence of an output schema and annotations is partially mitigated by the clear usage guidance.

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

Parameters3/5

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

Schema description coverage is 64%, so the schema documents many parameters. The description adds the key semantic that only passed fields are altered, and clarifies the addressId vs contactId confusion. It does not describe the parameters missing from the schema, but it compensates somewhat for the update behavior.

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

Purpose5/5

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

The description states a clear verb and resource ('Change one address') and distinguishes it from sibling tools like addresses_create and addresses_delete. It also clarifies the partial-update semantics, 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 explicitly instructs to use addresses_list first to obtain the addressId and warns that address id is not contact id. This provides a clear prerequisite and a common pitfall, though it doesn't explicitly state when not to use the tool (e.g., for creation). The sibling list makes alternatives obvious.

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

billing_profile_createBInspect

Attach billing details to a contact or company. Exactly one of contactId/companyId. Setting a currency and terms here means invoices for this customer default to them, which is how a user billing in three currencies avoids picking wrong.

ParametersJSON Schema
NameRequiredDescriptionDefault
notesNo
taxIdNo
currencyNoISO 4217. Invoices for them default to this.
companyIdNo
contactIdNo
billingEmailNoWhere invoices and receipts go, if different from the contact email.
billingAddressNo
paymentTermsDaysNoDays until due, e.g. 14 or 30.

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations, the description must fully disclose behavior. It does explain that currency/terms set here become invoice defaults, but it does not clarify create-vs-upsert behavior, error handling for both/none of contactId/companyId, permissions, or side effects on existing profiles. This is a significant gap for a mutation tool.

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

Conciseness4/5

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

The description is two sentences with no filler; the core purpose and key constraint are front-loaded. It could be better structured with a bullet list for the constraint, but it is efficient and readable.

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

Completeness2/5

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

For an 8-parameter create tool with no annotations and no output schema, this description is incomplete. It does not state the return value, conflict behavior, or how it differs from the similarly named billing_profiles_create. The mutual-exclusivity hint is valuable but not enough.

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

Parameters3/5

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

Schema coverage is only 38%, so the description must compensate. It adds the essential constraint that exactly one of contactId/companyId is required and clarifies the downstream effect of currency and paymentTermsDays. However, it leaves notes, taxId, billingEmail, and billingAddress unexplained.

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

Purpose4/5

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

States a specific action ('Attach billing details') and a resource ('contact or company'), and adds the key mutual-exclusivity constraint. However, it does not differentiate from the nearly identically named sibling tool billing_profiles_create.

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

Usage Guidelines3/5

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

Offers useful context about currency/terms defaulting to invoices, which implies a scenario for use, but does not explicitly state when to use this tool over billing_profiles_create, billing_profiles_update, or other alternatives. No when-not guidance is provided.

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

billing_profile_getAInspect

Get the billing profile for a contact or company — their invoicing currency, payment terms, billing email and tax id. Returns null when they have none, which is normal. There is no separate "customers" list: billing details hang off the contact record.

ParametersJSON Schema
NameRequiredDescriptionDefault
companyIdNo
contactIdNo

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It usefully discloses that null is a normal return value and clarifies the data model. However, it does not explain what happens if neither companyId nor contactId is provided, or whether supplying both is allowed or which takes precedence.

Agents need to know what a tool does to the world before 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, all adding value. The core purpose is front-loaded, and the clarifications about null returns and data location are relevant and efficiently worded.

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 explains what is returned and the normal null case, which is helpful given there is no output schema. However, it omits parameter decision rules and does not address the plural sibling, which an agent would need to select this tool confidently.

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

Parameters3/5

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

Schema coverage is 0%, so the description must compensate. It does map the parameters to entities: companyId for company and contactId for contact, but it does not clarify whether one is required, whether they are mutually exclusive, or any format expectations. Some meaning is added, but key semantics remain unclear.

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

Purpose4/5

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

The description clearly identifies the action (get), the resource (billing profile), and the target entities (contact or company), listing the fields returned. It also distinguishes billing details from a separate customers list. However, it does not explicitly differentiate itself from the similarly named sibling billing_profiles_get, which is a notable ambiguity.

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

Usage Guidelines3/5

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

The description implies when to use this tool: when you need a single billing profile for a contact or company, especially since billing details hang off the contact record. But it never explicitly states when not to use it or what alternatives like billing_profiles_get are for.

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

billing_profiles_createAInspect

Attach invoicing details to a contact or company. Exactly one of contactId or companyId. Once set, every invoice raised for that customer picks up their currency and terms automatically.

ParametersJSON Schema
NameRequiredDescriptionDefault
notesNo
taxIdNo
currencyNoISO 4217, e.g. BBD.
companyIdNo
contactIdNo
billingEmailNoWhere invoices and receipts go. Useful when a business wants them at accounts@ rather than the contact' own address.
billingAddressNo
paymentTermsDaysNoDays until due. 0 means due on receipt.

TDQS

A3.5/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral burden. It discloses the mutual exclusivity of contactId/companyId and the persistent side effect that future invoices automatically adopt currency and terms. This goes beyond what the schema alone reveals, though it does not cover error behavior, idempotency, or return values.

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

Conciseness5/5

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

The description is two sentences with no filler. The most critical constraint is front-loaded, and the behavioral consequence is stated efficiently in the second sentence.

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 core intent, the cardinality constraint, and the automatic effect on invoices, which is enough for basic use. But with eight parameters, no annotations, no output schema, and no guidance on defaults or lookup requirements, the context is not fully complete.

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

Parameters3/5

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

Schema description coverage is only 38%, and the description compensates partially by clarifying that contactId and companyId are mutually exclusive and that currency/payment terms have ongoing effects. However, it does not add meaningful semantics for several parameters like notes, taxId, or billingAddress.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 ('attach invoicing details'), the resource affected ('contact or company'), and a key constraint ('exactly one of contactId or companyId'). However, it does not differentiate itself from the near-identically named sibling 'billing_profile_create', so it falls short of full clarity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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 explicit guidance on when to choose this tool over alternatives. There is a confusing sibling named 'billing_profile_create' that is never mentioned or contrasted, and no exclusions or preferred contexts are stated.

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

billing_profiles_getAInspect

The billing profile for one contact or company, or nothing when they have none. A customer with no profile still invoices fine; the currency and due date are just chosen per invoice instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
companyIdNo
contactIdNo

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations, the description carries the burden of behavioral disclosure. It usefully discloses that a missing profile returns 'nothing' and that this is not a billing problem, but it does not explain behavior when both or neither identifiers are supplied, or describe the return format.

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

Conciseness5/5

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

Two focused sentences, no filler. The primary lookup behavior is front-loaded, and the second sentence adds meaningful context about the no-profile case 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?

For a simple getter, the description covers the main purpose and an important edge case. It is incomplete regarding identifier selection rules and does not clarify what 'nothing' means in practice, especially since both parameters are optional and there is no output schema.

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

Parameters3/5

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

The schema has 0% description coverage, so the description must compensate. It conveys that the profile belongs to one contact or company, which hints at companyId/contactId usage, but it does not explicitly map these to parameters or clarify whether one identifier is required given that both are optional in the schema.

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

Purpose4/5

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

The description clearly states the tool retrieves the billing profile for one contact or company and returns nothing when none exists. The verb and resource are specific, though it does not distinguish itself from the similarly named sibling billing_profile_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 this is a single-profile lookup by contact or company, and explains the no-profile case. However, it gives no explicit guidance about when to prefer this over billing_profiles_list or billing_profile_get, nor does it state exclusions.

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

billing_profiles_listAInspect

List every billing profile. A billing profile attaches invoicing details — currency, payment terms, billing address, tax id — to a contact or company that already exists. There is no separate customers list.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It makes the read-only list behavior clear and adds the precondition that a billing profile attaches to an already-existing contact or company. Still, it does not mention pagination, limits, authentication, or response shape, which an agent may need when invoking a list 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 two sentences with the core action front-loaded in the first sentence. The second sentence explains the resource and adds one clarifying exclusion. There is no redundancy or filler; every sentence earns its place.

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

Completeness4/5

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

For a zero-argument list tool with no annotations and no output schema, the description covers the key essentials: what it lists, its scope, the resource definition, and the contained fields. It falls slightly short on operational details like pagination or response envelope, but for this simple tool the coverage is largely sufficient.

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 has zero parameters, so the baseline for this dimension is 4 and the description is not required to explain parameter behavior. It still adds helpful domain meaning by enumerating the invoicing details each profile contains (currency, payment terms, billing address, tax id), which helps an agent interpret results.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 every billing profile,' which names a specific verb and resource and clearly marks this as the list-all operation. It distinguishes the tool from billing_profiles_get, billing_profiles_create, and billing_profiles_update by scope and action, and it further clarifies the domain by explaining what a billing profile is and noting there is no separate customers list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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 provides useful domain context and preemptively tells the agent that no separate customers list exists, which helps prevent a wrong search. However, it never explicitly contrasts this tool with sibling tools like billing_profiles_get or says when to prefer listing all profiles over fetching one. Usage guidance is implied rather than explicit.

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

billing_profiles_updateCInspect

Change a billing profile. Only the fields you pass are touched.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
notesNo
taxIdNo
currencyNo
billingEmailNo
billingAddressNo
paymentTermsDaysNo

TDQS

C2.7/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It does reveal a key trait: partial updates ('Only the fields you pass are touched'), which is valuable. However, it omits other behaviors like validation rules, error handling, or permission requirements, leaving gaps.

Agents need to know what a tool does to the world before 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 concise at two sentences, front-loading the core action and then the partial-update behavior. It has no filler and is easy to parse, though it could be slightly more structured by enumerating example parameters.

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 no annotations, no output schema, and 0% parameter coverage, the description is incomplete. It only covers the update semantics but lacks information about required fields, input formats, return values, or error conditions, which an agent would need to call it correctly.

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 adds no parameter-specific information. It does not explain what 'id', 'notes', 'taxId', 'currency', etc. represent or how they should be formatted. This is a significant deficiency for a 7-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 clearly states the verb 'Change' and the resource 'billing profile', and it implicitly differentiates from sibling tools like billing_profile_create and billing_profiles_get. It does not list specific fields, but the schema provides them, so the purpose is unambiguous.

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

Usage Guidelines2/5

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

There is no explicit guidance on when to use this tool versus alternatives, such as when to create a new profile or list existing ones. The description implies it is for modifying an existing profile but does not state prerequisites (e.g., that an ID is required) or conditions for choosing it over other billing-related tools.

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

calls_getAInspect

Get one call record in full, including its voicemail transcript and recording details when present. Takes an id from calls_list.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesCall id from calls_list.

TDQS

A4.3/5.0
Behavior4/5

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

No annotations are provided, so the description carries the behavioral disclosure burden. It does a good job by describing what the return includes — full call record, voicemail transcript, recording details when present — and 'Get' signals a read-only operation. It omits error behavior, but that is not essential for a simple retrieval 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 sentences with no filler. The main purpose and return contents come first, and the required id provenance is stated second. 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 single-parameter get tool with no output schema, the description is complete: it identifies what is returned, notes optional components, and tells the agent where to obtain the id. No critical information is missing for correct invocation.

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

Parameters3/5

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

Schema description coverage is 100%, and the schema already explains that id is a 'Call id from calls_list'. The description repeats this rather than adding new semantic detail, so the baseline of 3 applies.

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

Purpose5/5

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

States a specific verb and resource: 'Get one call record in full', and sharpens the scope by naming the distinguishing contents — voicemail transcript and recording details when present. It also positions itself against calls_list by saying it 'Takes an id from calls_list', so an agent can tell the two apart.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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: this tool is for retrieving a single full call record after obtaining an id from calls_list. It does not explicitly list exclusions or alternative tools, but the workflow implication is unambiguous for the relevant sibling.

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

calls_listAInspect

List the user's call history — inbound and outbound, with duration, direction, and voicemail transcripts where available. Pass contactId to see calls with one person, or voicemailOnly to see just calls that left a voicemail. Use this for questions like "who did I speak to this week?" or "did anyone leave a message?".

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax records. Default 100, max 500.
contactIdNoLimit to calls with this contact.
voicemailOnlyNoOnly calls that left a voicemail.

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations, the description carries the transparency burden. It discloses output content (inbound/outbound, duration, direction, voicemail transcripts) and honestly notes transcripts are only included 'where available'. It does not explicitly state read-only behavior, but 'List' strongly implies a non-mutating query.

Agents need to know what a tool does to the world before 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 no filler: purpose and output fields first, then parameter guidance, then concrete example queries. Every sentence earns its place and the most decision-relevant information 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 simple filtered-list tool with three fully documented parameters and no output schema, the description covers what the tool returns, how to filter, and real user questions it answers. An agent has enough context to select and invoke 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, but the description adds real meaning to contactId and voicemailOnly by tying them to user intents ('see calls with one person', 'see just calls that left a voicemail'). The limit parameter is not re-explained, but the schema already fully documents 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 uses a specific verb ('List') and resource ('the user's call history'), then names key result fields and filter options. It is clearly distinguishable from the sibling calls_get, which implies single-record retrieval, without needing to open the schema.

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

Usage Guidelines4/5

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

The description gives concrete use cases ('who did I speak to this week?', 'did anyone leave a message?') and explains when to use contactId and voicemailOnly. It does not explicitly mention alternatives or when not to use this tool, so it stops 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.

campaigns_analyticsAInspect

Aggregated stats for one campaign — recipients, sent, delivered, opened (unique), clicked (unique), bounced, unsubscribed, replied, failed, plus total open + click counts. Use this to answer 'how did my last newsletter perform' or to pick the best-performing campaign.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesCampaign UUID.

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations, the description carries the burden of behavioral disclosure. It divulges that results are aggregated (including unique vs. total counts), which is helpful, but it does not explicitly state read-only behavior, error cases, or aggregation scope. This is adequate but incomplete.

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

Conciseness5/5

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

Two tightly packed sentences: the first enumerates the entire result set, and the second gives concrete use cases. No wasted words, and the core purpose 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?

Despite lacking an output schema, the description lists every metric returned scaffolding completeness. The single parameter is fully documented in the schema dropped. Minor gaps like aggregation timeframe or prerequisites do not undermine usability for a low-complexity analytics read.

Complex tools with many parameters or behaviors need more documentation. Simple tools 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 describes the only parameter as 'Campaign UUID' with 100% coverage. The description adds no additional parameter semantics, so baseline 3 applies.

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

Purpose4/5

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

The description clearly identifies the resource as aggregated stats for one campaign and enumerates the specific metrics returned. It does not explicitly contrast with sibling tools, but the 'one campaign' scope and metric list make its purpose distinct from broader tools like dashboard_summary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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 explicit usage scenarios: answering how a newsletter performed or picking the best-performing campaign. It does not mention exclusions or alternatives, but the stated use cases give clear context for when to invoke it.

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

campaigns_list_recipientsAInspect

List per-recipient status for one campaign — who got it, who opened, who clicked, who bounced. Returns contact_id + email/phone + status + per-event timestamps for each row. Optionally filter by status (e.g. status='opened' for everyone who opened). Use this to answer 'who didn't open my newsletter so I can follow up' or 'who clicked the call-to-action so I can prioritize them in outreach'.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesCampaign UUID.
limitNoDefaults to 100.
statusNoOptional filter — only rows matching this status (or richer event for opened/clicked).

TDQS

A3.9/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full disclosure burden. It does describe the output shape, status filtering, and per-event timestamps. However, it does not mention pagination behavior beyond the schema's limit parameter, ordering, rate limits, or potential failure modes.

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

Conciseness4/5

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

The description is front-loaded with the core operation and return shape, and the usage examples earn their place by clarifying when to call the tool. It is slightly longer than strictly necessary, but every sentence adds useful context.

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

Completeness4/5

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

For a fairly simple list tool with three parameters and no output schema, the description covers the purpose, output fields, optional filtering, and practical use cases. Minor gaps remain around pagination and ordering, but an agent has enough to invoke the tool correctly.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all three parameters. The description adds meaning by giving concrete filter examples ('status='opened'' for everyone who opened), but it mostly restates what the schema already communicates.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 per-recipient status for one campaign, enumerates the exact fields returned, and covers the event types. It distinguishes itself from sibling tools like campaigns_analytics by focusing on per-recipient rows rather than aggregate analytics.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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 use cases ('who didn't open my newsletter', 'who clicked the call-to-action') and shows how the status filter supports them. It does not explicitly name sibling alternatives or explain when not to use the tool, but the practical examples give strong contextual guidance.

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

campaigns_manageAInspect

CRUD + send-control verbs for marketing campaigns (email or SMS, single send for v1). Use action='list' to see what's there; action='create' to author a new draft; action='update' to modify a draft (only allowed when status is draft/scheduled/paused); action='send_now' to dispatch immediately to the audience; action='test_send' to fire a single message to one address for preview. Drip campaigns: pass send_mode='drip' plus steps. Single sends use content. get/list return steps, sending_window, send_mode and scheduled_at so a session can audit what is configured without the UI. content for email = { subject, preheader?, from_name?, from_email?, reply_to?, blocks: [...] }. from_email may be any address on ANY domain verified in the connected Resend account — call resend_manage(action='domains') first to see which are verified. An unverified domain is not rejected here; it fails later, at send time, per recipient. reply_to sets where replies land — use it when replies should go somewhere other than from_email. IMPORTANT for drip campaigns: exit_on:{reply} can only fire for replies Groundbase can SEE, which means an address on a mailbox connected under Settings -> Email. Point reply_to at an unconnected address and the user still gets their replies, but reply-exit stays blind and the drip keeps sending to people who answered. Settable per step as well as per campaign. Each block is { type, props }. Block types: text (props.html: HTML), header (props.html: text, props.level: 1|2|3), image (props.src: url, props.alt, props.width), button (props.text, props.url, props.bgColor?), divider (props.color?), spacer (props.height: px). content for SMS = { body: text, media_urls?: [urls] }. Merge tags inside any string field: {{first_name}}, {{last_name}}, {{full_name}}, {{email}}, {{phone}}, {{company_name}}, {{cf.}}. Unknown tags render empty. steps authors a DRIP campaign (requires send_mode='drip'). Array of { delay_seconds, content_json, exit_on?, channel? } in order. content_json is the canonical key; content is accepted as an alias. Until 2026-08-30 this doc said content while the dispatcher read only content_json, so steps authored from this description silently sent step 0 every time. Step 0 fires when the campaign starts; every later step fires delay_seconds after THAT recipient's actual previous send, so a step held back by a sending window or the daily cap still spaces correctly. Each step's content uses the same block format as the single-send content param. exit_on is { reply?, open?, click?, meeting? } — when true and the contact has done that since the previous step, the rest of the drip is skipped for them. channel overrides the campaign channel for that step alone (mixed email/SMS drips); it also decides whether the step counts against the daily EMAIL cap. sending_window restricts when this campaign may send: { days: [0-6, 0=Sunday], start_hour: 0-23, end_hour: 1-24, timezone?: IANA or 'auto' }. end_hour is exclusive and must exceed start_hour. 'auto' (the default) means the account owner's timezone. A step falling due outside the window WAITS — the recipient stays queued and sends at the next open hour. Nothing fails or is skipped. Omit or pass null for no restriction. audience_filter shape: { all: [rules], any?: [rules] }. Rules are {type, ...}. Supported in v1: { type: "all_contacts" } — every contact with a valid channel address; { type: "tag", op: "has" | "has_not", value: "" } — tag membership filter. Multiple all[] rules AND together; any[] rules OR together. Behavior queries (opened campaign X / clicked X) and custom-field queries arrive in a follow-up.

ParametersJSON Schema
NameRequiredDescriptionDefault
qNoFree-text name search for action=list.
idNoCampaign UUID — required for everything except list+create.
toNoFor action='test_send' — recipient email or phone.
nameNo
limitNo
stepsNoFor create/update when send_mode='drip'. `steps` authors a DRIP campaign (requires send_mode='drip'). Array of { delay_seconds, content_json, exit_on?, channel? } in order. `content_json` is the canonical key; `content` is accepted as an alias. Until 2026-08-30 this doc said `content` while the dispatcher read only `content_json`, so steps authored from this description silently sent step 0 every time. Step 0 fires when the campaign starts; every later step fires delay_seconds after THAT recipient's actual previous send, so a step held back by a sending window or the daily cap still spaces correctly. Each step's `content` uses the same block format as the single-send `content` param. `exit_on` is { reply?, open?, click?, meeting? } — when true and the contact has done that since the previous step, the rest of the drip is skipped for them. `channel` overrides the campaign channel for that step alone (mixed email/SMS drips); it also decides whether the step counts against the daily EMAIL cap.
actionYes'list' returns user's campaigns. 'get' returns one by id. 'create' makes a draft (requires name + channel). 'update' patches a draft. 'delete' soft-deletes. 'duplicate' clones as a draft. 'test_send' fires one message to `to` without queuing recipients. 'send_now' resolves the audience and queues all recipients for dispatch. 'schedule' sets scheduled_at. 'pause' freezes. 'resume' un-pauses. 'stop' ends an ONGOING campaign (queued people dropped, sent ones kept). 'add_recipients' names contacts on a campaign by id: on a draft, scheduled or paused one they join the audience; on an ongoing campaign that is sending they are queued now, at the first message, under the campaign's rules.
statusNoFilter for action=list.
channelNo
contentNoFor create/update, single-send. `content` for email = { subject, preheader?, from_name?, from_email?, reply_to?, blocks: [...] }. `from_email` may be any address on ANY domain verified in the connected Resend account — call resend_manage(action='domains') first to see which are verified. An unverified domain is not rejected here; it fails later, at send time, per recipient. `reply_to` sets where replies land — use it when replies should go somewhere other than from_email. IMPORTANT for drip campaigns: exit_on:{reply} can only fire for replies Groundbase can SEE, which means an address on a mailbox connected under Settings -> Email. Point reply_to at an unconnected address and the user still gets their replies, but reply-exit stays blind and the drip keeps sending to people who answered. Settable per step as well as per campaign. Each block is { type, props }. Block types: text (props.html: HTML), header (props.html: text, props.level: 1|2|3), image (props.src: url, props.alt, props.width), button (props.text, props.url, props.bgColor?), divider (props.color?), spacer (props.height: px). `content` for SMS = { body: text, media_urls?: [urls] }. Merge tags inside any string field: {{first_name}}, {{last_name}}, {{full_name}}, {{email}}, {{phone}}, {{company_name}}, {{cf.<custom_field_key>}}. Unknown tags render empty.
send_modeNo
contact_idsNoFor add_recipients: contact ids, at most 500.
scheduled_atNoUnix seconds for schedule/create.
enrolment_modeNoFor create/update. 'once' (default) settles its audience when it starts and finishes when the last message goes. 'ongoing' stays sending until action='stop' and takes new entrants at any time: the audience filter is re-run every five minutes, add_recipients works while it sends, and a workflow add_to_campaign step can enrol someone. Cannot be changed to 'once' while sending — stop it instead.
sending_windowNoFor create/update. `sending_window` restricts when this campaign may send: { days: [0-6, 0=Sunday], start_hour: 0-23, end_hour: 1-24, timezone?: IANA or 'auto' }. end_hour is exclusive and must exceed start_hour. 'auto' (the default) means the account owner's timezone. A step falling due outside the window WAITS — the recipient stays queued and sends at the next open hour. Nothing fails or is skipped. Omit or pass null for no restriction.
audience_filterNoFor create/update. `audience_filter` shape: { all: [rules], any?: [rules] }. Rules are {type, ...}. Supported in v1: { type: "all_contacts" } — every contact with a valid channel address; { type: "tag", op: "has" | "has_not", value: "<tag_name>" } — tag membership filter. Multiple all[] rules AND together; any[] rules OR together. Behavior queries (opened campaign X / clicked X) and custom-field queries arrive in a follow-up.

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations, the description carries the full behavioral burden and delivers: soft-delete semantics, update-only-when-draft/scheduled/paused, sending_window waits instead of failing, reply-exit blindness with unconnected reply_to addresses, the content_json/content alias bug, unverified-domain failure at send time, and ongoing-vs-once enrollment behavior. These are material operational traits that no schema or annotation would convey.

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

Conciseness4/5

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

The description is long, but it is deliberately organized into action routing, content format, steps, sending window, and audience filter. Front-loading the action verbs helps orientation. The historical note about the content/content_json bug and some duplicated schema prose could be trimmed, but the complexity of the tool justifies most of the length.

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

Completeness5/5

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

For a 16-parameter tool with nested objects, no annotations, and no output schema, the description is unusually complete. It explains not just what parameters mean but how behaviors play out — what waits, what skips, what fails, and what returns enough fields to audit a campaign. The only notable omission is a full output/return contract for create/send actions, but the described behaviors cover practical calling needs.

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

Parameters5/5

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

Schema coverage is 75%, yet the description still adds substantial meaning beyond the schema: block formats for email/SMS, merge-tag behavior, step delay semantics, exit_on conditions, audience_filter rule shapes, sending_window timezone behavior, and add_recipients behavior. It effectively documents the nested object structures that the schema only 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?

Opens with 'CRUD + send-control verbs for marketing campaigns (email or SMS, single send for v1)' — a specific verb category and resource. The explicit action list (list, create, update, send_now, test_send) makes the tool's job unambiguous and separates it from analytics/recipient-list siblings.

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

Usage Guidelines4/5

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

The description explicitly routes each action ('Use action='list' to see what's there; action='create' to author...') and gives cross-tool prerequisites like 'call resend_manage(action='domains') first'. It also states status restrictions and drip-mode requirements. It does not explicitly compare against campaigns_preview_audience or campaigns_list_recipients, so it stops short of complete alternative routing.

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

campaigns_preview_audienceAInspect

Resolve a campaign audience filter and return the count + 5 sample contacts WITHOUT creating a campaign. Use to validate an audience before action='create'. Example: confirm "tag=lead" matches the expected number of contacts.

ParametersJSON Schema
NameRequiredDescriptionDefault
filterYesaudience_filter shape. `audience_filter` shape: { all: [rules], any?: [rules] }. Rules are {type, ...}. Supported in v1: { type: "all_contacts" } — every contact with a valid channel address; { type: "tag", op: "has" | "has_not", value: "<tag_name>" } — tag membership filter. Multiple all[] rules AND together; any[] rules OR together. Behavior queries (opened campaign X / clicked X) and custom-field queries arrive in a follow-up.
channelNoDefaults to email.

TDQS

A4.4/5.0
Behavior4/5

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

No annotations are present, so the description carries full responsibility. It transparently discloses the key side-effect: it does NOT create a campaign, implying read-only behavior. It also specifies the output (count + 5 sample contacts). It could mention error handling or auth requirements, but the main behavioral trait is clearly stated.

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

Conciseness5/5

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

The description is two crisp sentences plus a practical example. It front-loads the core action and side-effect, then gives a use case. No filler words or redundant 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?

Given the nested filter object and no output schema, the description sufficiently explains what is returned (count + 5 samples) and the validation purpose. It does not detail the sample contact structure or error cases, but for a preview tool this is adequate. The channel default is covered in the schema.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description adds value by explaining the filter's purpose in validation and providing a concrete example (tag=lead). It also clarifies that channel defaults to email, reinforcing the schema. This extra context improves parameter understanding beyond raw 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 clearly states the tool resolves an audience filter, returns a count plus 5 samples, and explicitly does not create a campaign. It differentiates itself from campaign creation tools (campaigns_manage) and recipient listing (campaigns_list_recipients) by its non-mutating preview nature.

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

Usage Guidelines4/5

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

It gives an explicit usage directive: 'Use to validate an audience before action="create".' This is clear context for when to invoke it. It does not enumerate alternative tools or exclusions, but the primary use case is well defined.

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

companies_createAInspect

Create a new company. Name is required. Website should include the protocol (https://...). Tags are created on the fly if missing.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesCompany name. Required.
sizeNoFree-form e.g. "1-10", "Enterprise".
tagsNo
notesNo
websiteNohttps:// URL.
industryNo

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the description carries the behavioral disclosure burden. It does add useful behavioral details: name is required, website must include the protocol, and tags are created on the fly if missing. However, it does not mention return values, duplicate handling, or required permissions, so coverage 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?

Three short sentences with no filler. The primary action is front-loaded, and the additional constraints are concise and relevant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn 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 create operation with no output schema location, the description plus schema covers the required name, the website format, and tag behavior. Notes and industry are self-explanatory enough, but a note about the response payload or duplicate-name behavior 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 description coverage is only 50%, so the description needs to compensate for undocumented parameters. It adds meaningful context for tags' auto-creation behavior and reiterates name/website semantics, but it does not clarify notes or industry beyond their property names. This is a minimum-viable pass.

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

Purpose5/5

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

The description opens with 'Create a new company,' clearly specifying the action and resource. This straightforwardly distinguishes companies_create from sibling tools like companies_update, companies_get, companies_list, and companies_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?

The description makes it obvious that this tool is for creating a new company, which is the primary usage context. It does not explicitly name alternatives such as companies_update for modifying existing companies, but the 'create' framing provides clear enough context for tool selection.

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

companies_deleteAInspect

Soft-delete a company. Contacts and deals previously linked to this company become unlinked but are NOT deleted themselves. DESTRUCTIVE — confirm with the user first.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

A4.4/5.0
Behavior5/5

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

With no annotations present, the description fully carries the behavioral disclosure burden. It clearly reveals the soft-delete behavior, states that linked contacts and deals are only unlinked and not deleted, and flags the operation as destructive requiring confirmation. This is unusually transparent for a delete 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 concise sentences with the core action front-loaded and behavioral/safety details placed directly after it. Every sentence adds meaningful information: what the operation does, what happens to related records, and how to handle it safely.

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

Completeness4/5

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

For a single-parameter destructive delete, the description covers the action, side effects, and confirmation requirement well. It does not describe the return value or how to verify successful deletion, and there is no output schema, but those are minor relative to the safe invocation guidance provided.

Complex tools with many parameters or behaviors need more documentation. Simple tools 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 only parameter, id, has no description in the schema (0% coverage), and the tool description does not explicitly document it. Context clues such as 'a company' imply id is the company identifier, but the description should have explicitly clarified what id refers to, especially given 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?

Opens with the specific verb-resource pair 'Soft-delete a company,' making the core operation immediately clear. It then disambiguates the side effects by stating contacts and deals are unlinked but not deleted, which distinguishes it from contacts_delete, deals_delete, or a hard-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 capitalized 'DESTRUCTIVE — confirm with the user first' explicitly provides an important usage condition: user confirmation is required before invoking. It does not enumerate alternatives or exclusions such as when companies_update should be preferred, so it stops short of a perfect usage guide.

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

companies_getAInspect

Fetch a single company by id (includes employees, deals, addresses, custom fields).

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesCompany UUID.

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description carries some burden. It discloses that the response includes related data (employees, deals, addresses, custom fields), which is useful. However, it does not mention performance implications, rate limits, or authorization requirements. Given it's a read operation, the lack of destructive hints is not alarming, but more behavioral context (like pagination or data volume) would be helpful.

Agents need to know what a tool does to the world before 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, compact sentence that front-loads the primary action and resource, then adds the key detail about included related data. There is no fluff or repetition, and it is immediately scannable.

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

Completeness4/5

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

Given the tool is a simple single-entity fetch with one parameter, the description is largely sufficient. It conveys the core purpose and the scope of the response. It could be slightly more complete by noting any side effects (e.g., read-only nature) or edge cases (e.g., error handling for non-existent ids), but these are minor given the simplicity and no output schema needed.

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

Parameters4/5

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

The schema has 100% description coverage for the only parameter (id: Company UUID), so the description adds minimal extra meaning for parameters. However, the description does add context by explaining what data will be returned for that id, which is beyond the schema's simple type definition. Baseline is 3, and the added context on return scope justifies a 4.

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

Purpose5/5

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

Clearly states the action (fetch), the resource (a single company by id), and explicitly lists the included related data (employees, deals, addresses, custom fields). This differentiates it from companies_list (which presumably fetches multiple companies) and other single-entity getters like contacts_get or deals_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 when to use it (when you need a company and its related data), but it does not explicitly state when not to use it or mention alternatives. For example, it doesn't say 'use companies_list to fetch multiple companies' or 'use addresses_list for only addresses'. The inclusion of related resources hints at its richer scope, but lacks explicit guidance.

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

companies_listAInspect

List the user's companies. Use this to find a company before linking a contact to it, or to summarize accounts in the CRM. Note: like contacts.list, the current API caps the response server-side; pagination params are advisory until the cap is lifted.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results (default 50).
offsetNoPagination offset (default 0).
searchNoFree-text search across company name + website.

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations provided, the description carries the burden of behavioral disclosure. It goes beyond the obvious 'list' operation by revealing that the API caps the response server-side and that pagination params are advisory until the cap is lifted — a non-obvious behavior that affects invocation. It doesn't cover every behavioral aspect, but the most important caveat is 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?

Three sentences with no filler; the core action is front-loaded, use cases follow, and the important caveat is placed at the end. Every sentence earns its place and the structure is easy to scan.

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

Completeness4/5

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

For a simple list tool with fully documented parameters and no output schema, the description covers the essential call context: what it lists, why to use it, and the pagination caveat. It is slightly less complete than a definition with annotations that explicitly signal safety and read-only behavior, but no critical information for invoking it correctly is missing.

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

Parameters4/5

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

The schema already covers 100% of the parameters, so the baseline is 3. The description adds value by explaining that limit and offset are advisory because of the server-side cap, which meaningfully changes how an agent should interpret pagination 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 opens with a specific verb+resource statement, "List the user's companies," which clearly identifies the operation and scope. It further contextualizes the purpose with concrete use cases (linking a contact, summarizing CRM accounts), which distinguishes it from siblings like companies_get or companies_create.

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

Usage Guidelines4/5

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

The description gives explicit use cases: find a company before linking a contact, or summarize accounts. It does not, however, state when not to use this tool or mention alternative tools like companies_get for retrieving a single company's detailed record, 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.

companies_updateBInspect

Patch a company. Only include fields you want to change.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
nameNo
sizeNo
notesNo
websiteNo
industryNo

TDQS

B3/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full behavioral burden. The phrase 'Only include fields you want to change' is a useful disclosure that unspecified fields are not overwritten, which adds value beyond the schema. However, it lacks information about permissions, side effects, error behavior, and what happens when the id does not exist.

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

Conciseness5/5

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

Two short sentences with no filler. The operation is front-loaded, and the second sentence provides a distinct, useful constraint about partial updates. 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?

For a mutation tool with no annotations and no output schema, this definition is thin. It does not state what a successful patch returns, how invalid or missing ids are handled, or what values are accepted for fields like size and industry. The simple schema reduces risk, but the agent still lacks operational expectations.

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 explain individual parameters. The only parameter-level insight is that only changed fields should be included, which lightly complements the schema's optional fields. The property names are self-explanatory, but the description does not compensate for the complete absence of parameter descriptions.

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

Purpose4/5

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

The first sentence names the resource ('a company') and a specific verb ('Patch'), which clearly distinguishes it from sibling tools like companies_create, companies_get, and companies_delete. The second sentence reinforces the partial-update nature. It does not explicitly name a sibling, but the create/update/delete/list grouping makes the purpose clear.

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

Usage Guidelines2/5

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

There is no explicit guidance on when to use this tool versus companies_create, companies_delete, or other update tools. The instruction to 'only include fields you want to change' explains how to form the request, not when this tool is the right choice. Usage must be inferred from the tool name and sibling set.

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

contacts_createAInspect

Create a new contact. At minimum, provide first_name or last_name or email — at least one of those is required. Phone numbers should be E.164 (+1...) when known; the API will normalize.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNoTag names; created on the fly if missing.
emailNo
notesNoFree-text notes to attach on creation.
phoneNoPrimary phone. Will be normalized to E.164.
lastNameNo
positionNoJob title.
companyIdNoExisting company UUID, if linking.
firstNameNo

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations provided, the description carries full behavioral disclosure. It discloses that phone numbers are normalized to E.164, which is a behavioral trait not inferable from the schema alone (though the schema does mention it). It does not contradict any annotations since none exist.

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

Conciseness5/5

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

Two sentences with no wasted words. The purpose is stated first, followed by the key constraint and a normalization note. 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 is adequate for a simple create operation but lacks information about the return value or any side effects beyond what the schema mentions. With no output schema, the agent does not know what the response contains (e.g., contact ID). For a create tool, this is a notable 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 description adds a critical piece of semantics beyond the schema: the requirement that at least one of first_name, last_name, or email must be provided. This is not present in the schema (required: 0). It also reiterates phone normalization, though the schema already covers that. For other parameters, the schema already provides descriptions, so the description doesn't add much there.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 ('Create a new contact') and immediately clarifies a key constraint (at least one of first_name/last_name/email). This distinguishes it clearly from contacts_update, contacts_delete, and other contact tools, which are not ambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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 guidance by specifying the minimum required fields, which tells the agent when this tool is appropriate (when at least one of those fields is available). It does not explicitly name alternatives or exclusions, but the context is clear enough for a create tool.

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

contacts_deleteAInspect

Soft-delete a contact (the row is hidden from lists but kept for audit/restore). DESTRUCTIVE — confirm with the user before calling unless they explicitly asked to delete.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

A4.4/5.0
Behavior5/5

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

With no annotations, the description fully carries the behavioral burden. It discloses the soft-delete nature (row hidden but retained), the audit/restore implication, and the need for user confirmation. This goes well beyond the raw schema and gives an agent a reliable picture of side effects and safety 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 a single sentence that leads with the core action, then packs the soft-delete nuance and the mandatory confirmation warning into a compact parenthetical and imperative. No wasted words; every clause adds necessary operational detail.

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

Completeness4/5

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

For a simple single-parameter delete operation, the description covers the essential aspects: what the tool does, the safety requirement, and the post-delete state. It omits explicit id guidance and any mention of response contents, but those are minor given the tool's simplicity and the clarity of the name and noun.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate for the lone 'id' parameter. It indirectly identifies the parameter as a contact id via 'a contact,' but it doesn't explicitly state the format or source of the id. The meaning is strongly implied by the tool name and noun, so this is adequate but not exemplary.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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: 'Soft-delete a contact,' and immediately clarifies the behavior (hidden from lists but kept for audit/restore). This distinguishes it from cruder interpretations and from sibling tools like contacts_update or addresses_delete, making the tool's purpose 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 gives clear context: this is the tool for deleting a contact, and it adds an explicit safety condition—confirm with the user unless they explicitly asked to delete. It doesn't explicitly name alternatives or conditions that would select another tool, but the verb/noun combination and the confirmation rule provide adequate usage guidance.

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

contacts_getAInspect

Fetch a single contact by id, including tags, addresses, custom fields, and recent activity.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesContact UUID.

TDQS

A4.2/5.0
Behavior4/5

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

No annotations are present, so the description must carry the behavioral burden. 'Fetch' unambiguously signals a read-only, side-effect-free operation, and the list of included data categories sets expectations for the response. It does not mention error/not-found behavior, but for a simple getter this is a minor omission.

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

Conciseness5/5

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

A single sentence with no filler. It front-loads the core operation ('Fetch a single contact by id') before enumerating return contents, so every part 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 getter with no output schema and no annotations, the description is largely complete: it names the input and the main output categories. It could be more explicit about response shape or not-found conditions, but nothing an agent needs to invoke it correctly is missing.

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

Parameters3/5

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

Schema coverage is 100% (id is described as 'Contact UUID'), so the baseline is 3. The description adds no parameter-level detail beyond saying 'by id,' which is already implied by the schema.

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

Purpose5/5

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

States a specific verb ('Fetch') and resource ('a single contact by id'), and enumerates returned data categories (tags, addresses, custom fields, recent activity). This clearly differentiates it from list/update/delete sibling tools even without naming them.

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

Usage Guidelines4/5

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

The description establishes the obvious usage context: use this when you have a contact id and need one contact's full details. It does not explicitly name contacts_list or state when not to use it, but the 'single contact by id' phrasing is clear enough for selection.

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

contacts_listAInspect

List the user's contacts with optional search/pagination. Use this to find a contact before calling get/update/delete, or to summarize who's in the CRM. Defaults to 50 results; pass limit up to 200 for more.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results (1-1000, default 50).
offsetNoPagination offset, default 0.
searchNoFree-text search across name, email, phone.

TDQS

A4.6/5.0
Behavior4/5

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

With no annotations, the description carries the burden of behavioral disclosure. It discloses the default limit of 50 and the ability to increase up to 200, noting a potential maximum discrepancy with the schema (which allows 1000). While it doesn't explain all side effects, the read-only nature is implicit, and it provides useful default behavior information.

Agents need to know what a tool does to the world before calling 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, concise and front-loaded with the purpose. The exception about limit is placed at the end, but still relevant. No fluff, every word contributes.

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

Completeness4/5

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

For a read-only list tool with no output schema, the description covers the primary purpose, usage context, and default behavior. Minor omissions like explicit mention of read-only or response format are covered by annotations being absent but the description is adequate. The limit discrepancy is a small gap but doesn't hinder core usage.

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 parameters are already documented. The description adds context by mentioning the default limit and the upper bound (200) which is not fully consistent with schema, and clarifies that search is free-text. This adds marginal value beyond the schema, justifying a score 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 clearly states the tool lists the user's contacts with optional search and pagination, which is specific and distinguishes it from other contact operations (get/update/delete). It also mentions using it to summarize who's in the CRM, adding purpose clarity.

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

Usage Guidelines5/5

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

Explicitly says to use this before calling get/update/delete on a contact, and mentions summarizing the CRM. This provides clear when-to-use guidance and implicitly suggests it is not for individual contact retrieval or modification, differentiating from sibling tools.

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

contacts_updateAInspect

Patch an existing contact. Only include fields you want to change — omitted fields are left as-is. Pass an empty string to clear a field (vs. omitting it which keeps the current value).

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesContact UUID.
emailNo
phoneNo
lastNameNo
positionNo
companyIdNo
firstNameNo

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden. It discloses the key behavioral trait: omitted fields are left as-is, and passing an empty string clears a field (vs. omitting which keeps current value). This is critical for correct usage and goes beyond what the schema provides. It does not mention error behavior or auth, but the core mutation semantics are well explained.

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

Conciseness5/5

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

The description is two sentences with no filler. It front-loads the purpose and immediately follows with the essential behavioral note. Every word earns its place; no redundant information.

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

Completeness4/5

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

For a simple patch operation with 7 parameters and no output schema, the description covers the main pitfall (omission vs clearing). It does not mention error handling or response format, but these are often assumed for such tools. Given the low schema coverage and absence of annotations, it provides sufficient context for correct invocation, though it could optionally note what happens if the id is invalid.

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 14% (only 'id' is described). The description compensates by explaining the general rule for all fields: only include fields to change, and empty string clears. This provides crucial meaning beyond the schema's bare type declarations. It does not individually describe each parameter, but the names are self-explanatory and the patch semantics apply uniformly.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 ('Patch'), a resource ('an existing contact'), and clarifies the partial-update semantics. It clearly distinguishes from contacts_create, contacts_delete, and contacts_get/list by indicating modification of an existing record.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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 purpose is clear: this tool updates an existing contact. It provides clear context for when to use it (to modify a contact) but does not explicitly mention alternatives or exclusions. The description does not say 'use this instead of create' but the verb 'patch' makes that implicit. No direct comparison to sibling tools, but the context is unambiguous.

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

custom_fields_createAInspect

Define a new custom field on contacts, companies, or deals. Use this when the user mentions tracking a piece of data the CRM doesn't have a built-in column for (e.g. "track each contact's loan amount", "add a 'referral source' field"). field_key is auto-generated from name (snake_case) unless provided. After creation, the field is immediately available as a {{cf.<field_key>}} merge tag in every email/SMS composer.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesHuman label, e.g. "Loan amount" or "Referral source".
typeYesField type. `select` requires the `options` array.
optionsNoFor type=select only: the list of allowed values, e.g. ["Hot", "Warm", "Cold"].
fieldKeyNoOptional — explicit identifier (snake_case, ≤60 chars). Defaults to a slug of `name`.
entityTypeYesWhich entity gets this custom field.

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the burden and does disclose a key behavioral outcome: the field becomes immediately available as a merge tag in email/SMS composers. It also mentions auto-generation of field_key. It doesn't cover uniqueness constraints or error behavior, but for a create tool this is reasonably transparent.

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

Conciseness5/5

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

Three sentences, front-loaded with purpose and usage, then a note on field_key and a concrete behavioral result. Every sentence earns its place with no filler.

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

Completeness4/5

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

For a simple create tool with no output schema, the description covers what it does, when to use it, and a key side effect (merge tag availability). It doesn't mention the response format, but that's a minor gap given the tool's simplicity and the absence of an output schema.

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

Parameters3/5

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

Schema coverage is 100%, so baseline is 3. The description adds minimal param-specific value: it repeats the auto-generation rule already in the schema and gives name examples, but doesn't clarify the semantics of options or entityType beyond what the schema already states.

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

Purpose5/5

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

The description clearly states the verb 'Define a new custom field' with the resources (contacts, companies, deals) and provides concrete examples of when to use it. It distinguishes from siblings by focusing on creation, and the examples (e.g., tracking loan amount) make the purpose unmistakable.

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

Usage Guidelines5/5

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

Explicitly instructs to use this tool when the user mentions tracking data without a built-in column, with examples. It also notes the auto-generation of field_key, guiding on when to provide it vs not. This gives clear when-to-use and implicitly contrasts with other custom field operations.

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

custom_fields_deleteAInspect

Delete a custom field definition. All values stored on contacts/companies/deals for this field are removed too. Irreversible.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesCustom field UUID.

TDQS

A4.3/5.0
Behavior5/5

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

No annotations are present, so the description carries the full burden. It explicitly discloses that all values on contacts/companies/deals are removed and that the action is irreversible, which is critical safety information 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?

The description is two sentences with no filler. The main action is front-loaded, followed by the two most important consequences: cascade deletion and irreversibility.

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 a single-parameter delete tool with no output schema and no annotations, this description provides everything an agent needs: what is deleted, what is also removed, and that it cannot be undone. 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?

The input schema already documents the single 'id' parameter as a custom field UUID with 100% coverage. The description adds no further parameter-level information, so the schema baseline of 3 applies.

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

Purpose5/5

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

The description states a specific action and resource: 'Delete a custom field definition.' It clearly distinguishes this from sibling tools like custom_fields_create, custom_fields_update, and custom_fields_list by naming the delete operation and the cascade consequence.

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

Usage Guidelines3/5

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

The usage context is implied through the destructive wording, but the description never explicitly says when to use this versus related custom field tools, nor does it mention alternatives or conditions for non-use.

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

custom_fields_listAInspect

List the user's defined custom fields. Returns each field's field_key (the identifier used in {{cf.<field_key>}} merge tags and in custom_fields_set_value), name (human label), type (text|number|date|select), options (for select fields), and entity_type (contact|company|deal). Call this before authoring email/SMS templates or workflows that reference custom field merge tags.

ParametersJSON Schema
NameRequiredDescriptionDefault
entityTypeNoOptional — filter to fields on one entity type. Omit for all.

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral burden. It clarifies that field_key is the identifier used in merge tags and custom_fields_set_value, which tells an agent how the output connects to other tools. The verb 'List' and the absence of mutation language signal a read-only operation.

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

Conciseness4/5

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

The description is three sentences, front-loaded with the purpose and followed by a dense but useful enumeration of return fields and a clear usage cue. No filler is present, though the return-field list makes it slightly heavier than strictly necessary.

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

Completeness4/5

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

For a simple list tool with no output schema, the description compensates well by enumerating the returned fields and their meanings, and by giving a concrete trigger condition. Pagination and empty-response behavior aren't mentioned, but they are minor gaps given the tool's low complexity.

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

Parameters3/5

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

The single optional entityType parameter is fully documented in the schema with an enum and a clear description ('Optional — filter to fields on one entity type. Omit for all.'). Since schema description coverage is 100%, the description doesn't need to add parameter-level meaning; baseline 3 applies.

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

Purpose5/5

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

The description opens with a specific verb-object pair, 'List the user's defined custom fields,' and then enumerates the exact fields returned (field_key, name, type, options, entity_type). This clearly distinguishes it from mutation siblings like custom_fields_create/update/delete/set_value and from more general merge_tag 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 final sentence gives an explicit trigger: 'Call this before authoring email/SMS templates or workflows that reference custom field merge tags.' It doesn't name an alternative or state when not to use it, but the context is clear enough for an agent to select it.

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

custom_fields_set_valueAInspect

Set or update a custom field value on a specific contact, company, or deal. Use this when a user says "Casey is a Hot lead" (sets cf.lead_temp=Hot on Casey) or "Bob's loan amount is $250k". Resolves the field by field_key — call custom_fields_list first if you need to know what keys are available. Passing value=null clears the field.

ParametersJSON Schema
NameRequiredDescriptionDefault
valueNoNew value. Null clears the field.
entityIdYesUUID of the contact/company/deal.
fieldKeyYesCustom field identifier (e.g. "loan_amount").
entityTypeYesWhich entity the value is being set on.

TDQS

A4.2/5.0
Behavior3/5

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

With no annotations, the description carries the full transparency burden. It discloses key behaviors: it can set or update (implying overwrite), resolves values by field_key, and passing null clears the field. However, it does not mention permission requirements, whether the operation is idempotent, or what happens on invalid entity IDs or field keys. It's better than a bare mutation tool but not fully transparent.

Agents need to know what a tool does to the world before 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: the core purpose is in the first sentence, followed by two illustrative examples and a critical caveat (null clears). Every sentence earns its place, and the structure guides the agent from what → when → how.

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

Completeness4/5

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

The tool is a simple setter with no output schema and 100% schema coverage. The description covers the essential context: target entities, examples of use, a prerequisite call, and the null-clearing edge case. It doesn't address error handling or return values, but for this tool's complexity and scope, the description is nearly complete.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description goes beyond the schema by giving concrete examples of values ('Hot', '$250k') and explaining that fieldKey resolution depends on the key naming convention (cf.lead_temp). It also reinforces the null-clearing behavior with a specific statement, tying parameter semantics to practical usage.

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

Purpose5/5

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

The description opens with a specific verb-resource pairing: 'Set or update a custom field value on a specific contact, company, or deal.' This clearly distinguishes it from sibling tools like custom_fields_create (which creates field definitions) and custom_fields_list (which lists available keys). The examples make the purpose instantly actionable.

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

Usage Guidelines4/5

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

The description explicitly says 'Use this when' and gives two concrete natural-language triggers (e.g., 'Casey is a Hot lead'), which tells an agent exactly when to invoke it. It also advises calling custom_fields_list first when the field keys are unknown. It doesn't explicitly name alternatives or when-not-to-use cases, but the examples and prerequisite provide strong practical guidance.

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

custom_fields_updateAInspect

Rename a custom field or change its dropdown options. Cannot change entity_type or field_key (create a new field if you need either). Cannot change type (data integrity).

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesCustom field UUID. Get from custom_fields_list.
nameNoNew human label.
optionsNoFor type=select fields only: replace the allowed-values list.
positionNoOrder in the field list (lower = first).

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden. It usefully discloses immutability constraints and a data-integrity rationale, but it does not explain side effects of replacing dropdown options on existing saved values, whether the update is partial, or what the tool returns.

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

Conciseness5/5

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

Three short sentences are front-loaded with the primary action and immediately state constraints; there is no filler or repetition. Every sentence contributes useful selection 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?

Given low complexity, 100% schema coverage, and the explicit immutability constraints, the definition is nearly complete for selecting and invoking the tool. It would be fully complete if it addressed the effect of replacing options on existing data and clarified the update semantics, since there are no annotations or output schema.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3; the schema already documents id, name, options, and position. The description adds high-level meaning for name and options but adds no per-parameter detail beyond what the schema provides.

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

Purpose4/5

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

The description clearly states the operation ('Rename a custom field or change its dropdown options') and names an explicit resource, which distinguishes it from custom_fields_create/delete/set_value. It loses the top score because it omits the position-update capability from the high-level purpose, even though the schema includes position.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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 and names an alternative for the immutability limits ('create a new field if you need either' for entity_type/field_key). It does not explicitly contrast with custom_fields_set_value or describe when not to use the tool for type changes, so it falls short of fully explicit when/when-not guidance.

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

dashboard_summaryAInspect

Get top-of-app KPI summary: total contacts, open deals + their total value, won deals + their total value, messages sent/received this period. Plus a 30-day series for charting.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior4/5

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

No annotations are provided, so the description must carry the behavioral burden. It explicitly discloses the output components, including the 30-day chart series, and the verb 'Get' plus 'summary' signals a read-only aggregation. It omits operational specifics like the exact definition of 'this period,' but for a parameterless summary call this is strong coverage.

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

Conciseness5/5

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

Two concise sentences with no filler. The main KPI summary is front-loaded, and the 30-day series is added as a brief, clearly separated clause. 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 parameterless dashboard-summary tool, this is nearly complete: it lists every KPI group and the charting series, so an agent knows what it will get. The phrase 'this period' is somewhat underspecified and there is no output schema, but the description is adequate for correct invocation and high-level interpretation.

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

Parameters4/5

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

The tool has zero parameters, so the schema provides no semantic burden and the baseline is 4. The description adds useful context about the scope of the summary ('this period') even though no parameters exist to modify 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?

Names a specific verb ('Get') and resource ('top-of-app KPI summary') and enumerates the contained metrics: total contacts, open deals with value, won deals with value, messages sent/received, and a 30-day series. This clearly distinguishes it from the many list/create/update siblings, none of which occupy the dashboard-summary role.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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 this is the tool to call when you need a dashboard-level KPI overview, but it does not explicitly state when not to use it or name alternatives for more granular data (e.g., campaigns_analytics or calls_list). There is clear context but no exclusionary guidance.

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

deals_createAInspect

Create a deal. title + stageId required. valueCents is in CENTS (so $1,500 = 150000). Link to a contact via contactId or a company via companyId (you can also pass both).

ParametersJSON Schema
NameRequiredDescriptionDefault
notesNo
titleYesShort deal name e.g. "Acme Q3 renewal".
closeAtNoISO 8601 expected close date.
stageIdYesPipeline stage UUID (see deal_stages.list).
currencyNoISO 4217 e.g. "USD", "CAD". Defaults to user's currency.
companyIdNo
contactIdNo
valueCentsNoAmount in cents.

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations provided, the description carries the behavioral disclosure burden. It adds valuable non-obvious semantics: valueCents is in cents with a concrete example, and contactId/companyId can be used together. It does not mention return values or permission requirements, but the mutation behavior is clear from 'Create'.

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

Conciseness5/5

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

Three tight sentences, each earning its place: the core operation, required fields, and critical parameter semantics. The most important information is front-loaded, and there is no redundant or filler language.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence 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 essential non-obvious aspects: required fields, cent-based values, and relational linking. It omits return value details and behavior on invalid IDs, but the schema documents most remaining parameters, making this adequate for a create tool without an output schema.

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

Parameters4/5

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

Schema coverage is 63%, and the description compensates for undocumented parameters by explaining that contactId links to a contact and companyId links to a company, and both can be passed together. It also reinforces valueCents units with an example, adding meaning beyond the schema's 'Amount in cents'.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 'Create a deal', a specific verb and resource that clearly distinguishes this from sibling tools like deals_get, deals_list, deals_update, and deals_delete. It also reinforces the core operation with required fields, leaving 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 gives clear context for when to use the tool: creating a deal, with title and stageId as prerequisites. It does not explicitly mention alternatives like deals_update for modifying existing deals, but the create/update distinction is obvious from the tool name and siblings, so no exclusions are needed.

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

deals_deleteAInspect

Soft-delete a deal. DESTRUCTIVE — confirm first.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations, the description carries the safety burden and at least states that this is a soft-delete and flags it as destructive. It does not disclose whether the action is reversible, what happens to related records, or whether special permissions are required.

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

Conciseness5/5

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

The description is two short sentences with no filler: the operation comes first, followed by a clear safety warning. Every word contributes, and the caps signal importance without adding 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 one-parameter delete operation with no output schema, the description contains the core behavioral fact and a confirmation warning, which is nearly complete. The only notable omission is whether soft-deleted deals can be restored, but this is a minor gap 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 exposes only a bare `id: string`, and the description supplies the essential link that the id identifies a deal. For a single required parameter this is sufficient, though the description does not say where the id should come from or validate its 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 operation, 'Soft-delete a deal,' naming both the verb and resource. The 'soft-' qualifier distinguishes it from a permanent delete and from sibling update/get/create tools, so an agent can select it correctly.

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

Usage Guidelines2/5

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

There is no guidance on when to use this instead of deals_update or another tool, and no statement about when a delete should be avoided. The 'DESTRUCTIVE — confirm first' warning implies caution but does not describe appropriate conditions or alternatives.

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

deals_getAInspect

Fetch a single deal by id, including notes, tasks, and the contact/company linked.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations provided, the description carries the behavioral disclosure burden. It adds useful context about the response contents (notes, tasks, linked contact/company), but does not disclose error behavior, auth requirements, or whether the returned data is fully hydrated. This is a reasonable but not deeply transparent description.

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

Conciseness5/5

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

The description is a single, front-loaded sentence with no filler. Every phrase contributes meaning: the operation, the resource, the id parameter, and the included related data.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn 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 get tool with no output schema, the description is nearly complete: it names the resource, the lookup key, and key return contents. It does not cover error handling or field formats, but those are less critical for a simple fetch operation.

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 for the undocumented 'id' parameter. It only repeats that the tool fetches 'by id' without explaining the id format, source, or any constraints. The parameter name is self-explanatory, but the description adds little 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 ('Fetch') with a clear resource ('a single deal by id') and names the included related entities ('notes, tasks, and the contact/company linked'). This distinguishes it from siblings like deals_list and deals_create without needing to inspect the schema.

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

Usage Guidelines3/5

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

The phrase 'a single deal by id' implies the primary use case and contrasts with deals_list, but it does not explicitly state when to choose this tool over alternatives or mention any exclusions. The usage guidance is present only by implication.

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

deals_listBInspect

List deals. Returns all open + closed deals with their stage, value, contact, and company. Use this to summarize pipeline, find a deal to update, or filter by stage / value.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo
searchNoFree-text search across title, contact name, company name.
stageIdNoFilter to a specific stage UUID (see deal_stages.list).

TDQS

B3.4/5.0
Behavior2/5

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

No annotations are provided, so the description must disclose behavioral traits. It mentions returns all open+closed deals and fields, but does not disclose pagination behavior (limit/offset), default ordering, or potential performance implications. It also doesn't mention whether it returns only summarized fields or full objects. Given zero annotation coverage, this is a significant gap.

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

Conciseness4/5

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

The description is concise (two sentences) and front-loads the core purpose: 'List deals.' It then adds return fields and use cases efficiently. No filler, but it could be slightly more explicit about pagination. Still, it's well-structured.

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 tool is relatively simple (list, no output schema), but with no annotations and 50% schema coverage, the description should cover more. It misses pagination details (limit/offset behavior), ordering, and any potential performance hints. For a list tool, it's adequate but not complete for an agent to understand all invocation nuances.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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%: the schema describes 'search' and 'stageId' but not 'limit' and 'offset'. The description does not explain limit/offset semantics, which are likely standard pagination but still undocumented. It adds minimal value beyond the schema; the 'filter by stage' hint reinforces stageId but doesn't clarify limit/offset, so a 3 is appropriate.

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

Purpose4/5

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

The description clearly states it lists deals and specifies the fields returned (stage, value, contact, company). It differentiates from sibling tools like deals_get (which retrieves a single deal) and deals_create/update/delete. However, it doesn't explicitly name those siblings, but the verb 'list' and resource 'deals' are specific enough.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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 use cases: 'summarize pipeline, find a deal to update, or filter by stage / value.' It does not explicitly mention when not to use it or contrast with alternatives, but the context is sufficient. The mention of 'filter by stage / value' implies the stageId and search parameters, which is helpful.

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

deals_move_stageAInspect

Move a deal to a different pipeline stage. Common stage names are "Lead", "Qualified", "Proposal", "Won", "Lost", but the actual stages and their UUIDs are per-user — call deal_stages.list first if you don't know the destination stage id.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesDeal UUID.
stageIdYesDestination stage UUID.

TDQS

A3.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It only hints at per-user stage variability and the need to query stages, but does not disclose side effects (e.g., irreversible changes, downstream workflow triggers, error behavior on invalid stage IDs). For a mutation tool, this is a significant gap.

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

Conciseness5/5

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

The description is two sentences with no filler. The core purpose is front-loaded, followed by a practical note on stage ID retrieval. Every word earns its place; it is compact and scannable.

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

Completeness3/5

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

For a simple two-parameter mutation with no output schema, the description covers the main prerequisite (knowing the stage ID) and hints at per-user variation. However, it omits failure modes (e.g., invalid deal ID, invalid stage ID), any effects on related entities (like pipelines or workflows), and whether the operation is reversible. These omissions leave gaps for an agent executing the call in a real workflow.

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 descriptions are clear ('Deal UUID', 'Destination stage UUID') and cover both parameters (100% coverage). The description adds value by explaining that stageId is not arbitrary—it must be a valid stage for the user—and provides common stage names as hints, plus a way to obtain correct IDs. This exceeds the schema's basic definitions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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: 'Move a deal to a different pipeline stage.' It specifies the resource (deal) and the target (pipeline stage), which distinguishes it from siblings like deals_update (which likely handles other fields) and deals_create. The mention of common stage names adds specificity 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 explicit guidance on a prerequisite: 'call deal_stages.list first if you don't know the destination stage id.' This tells the agent when to use an alternative tool (deal_stages.list) before calling this one. It doesn't explicitly exclude deals_update for stage changes, but the dedicated action is clear. Slight deduction for not naming alternative mutation tools.

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

deal_stages_createAInspect

Add a stage to the user's deal pipeline. Stages are the columns a deal moves through. Set isWon or isLost for the terminal stages — a pipeline should have exactly one of each, and deals in them stop counting as open. Omit position to append at the end.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesStage name, e.g. "Quote sent".
colorNoHex colour like "#0EA5E9". Optional.
isWonNoMarks this the won/closed stage.
isLostNoMarks this the lost stage.
positionNoZero-based order. Omit to append.

TDQS

A4.2/5.0
Behavior4/5

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

No annotations are present, so the description carries the full burden of behavioral disclosure. It goes beyond 'create a stage' by explaining that isWon/isLost mark terminal stages, exactly one of each should exist, deals in them stop counting as open, and omitting position appends to the pipeline. This is meaningful behavioral context, though it doesn't mention errors, permissions, or side effects on existing deals.

Agents need to know what a tool does to the world before 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 wasted words. The core action is front-loaded, and each subsequent sentence adds a necessary nuance (stage definition, terminal-stage rules, position behavior). 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 5-parameter tool with no output schema and no annotations, the description covers the essential decision points: what the stage is, how to handle terminal stages, and how ordering works. It does not specify the return value or failure modes, but given the absence of an output schema and the relative simplicity of a create operation, this is a minor gap.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. The description adds significant value beyond the schema: it explains that isWon and isLost are mutually exclusive terminal stage markers with a pipeline invariant, and clarifies that omitting position appends at the end. These are behavioral rules not present in 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: 'Add a stage to the user's deal pipeline.' It also explains stages as columns in the pipeline, which clarifies the domain. Among sibling tools (deal_stages_list, deal_stages_reorder, deal_stages_update), 'create' is clearly distinct 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 Guidelines3/5

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

The description implies usage by defining the action and parameter behavior, but it never explicitly contrasts with sibling tools such as deal_stages_update or deal_stages_reorder. It gives actionable guidance on when to set isWon/isLost and when to omit position, but no when-not-to-use or alternative routing.

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

deal_stages_listAInspect

List the user's pipeline stages in order. Call this BEFORE creating a deal or moving one between stages so you have the correct stage UUIDs. Returns name, color, position, and id.

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?

No annotations are provided, so the description carries the burden. It discloses the operation (listing, no mutation implied), the ordering ('in order'), and the returned fields ('name, color, position, and id'). For a zero-parameter read 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?

Two concise sentences. The action and ordering come first, followed by a clear usage directive and return information. Every sentence earns its place with no filler.

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

Completeness5/5

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

For a simple, zero-parameter list operation, the description is complete: it states what is returned, the order, and when to use it. There is no output schema, but the return fields are explicitly named, so an agent knows what to expect.

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./coverage is 100%, and the baseline for 0-parameter tools is 4. The description adds no parameter details because none exist, so no deduction is warranted.

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

Purpose5/5

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

States a specific verb and resource: 'List the user's pipeline stages in order.' It is clearly distinguished from sibling tools like deal_stages_create, deal_stages_update, and deal_stages_reorder, which modify stages rather than list them.

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

Usage Guidelines5/5

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

Explicitly instructs when to call the tool: 'Call this BEFORE creating a deal or moving one between stages so you have the correct stage UUIDs.' This gives an agent actionable timing and purpose, which is strong usage guidance.

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

deal_stages_reorderAInspect

Reorder the pipeline. Pass EVERY stage id in the order you want them, left to right — a partial list would leave the omitted stages in an undefined position. Get the current ids from deal_stages_list first.

ParametersJSON Schema
NameRequiredDescriptionDefault
idsYesAll stage ids, in the desired left-to-right order.

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations, the description carries the burden of behavioral disclosure. It warns that a partial list leaves omitted stages in an undefined position, a key behavioral risk. It also implies a full replacement of order rather than incremental changes. While it doesn't mention auth or reversibility, the critical behavioral trait is 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 sentences with zero waste. The core action ('Reorder the pipeline') is front-loaded, followed by the critical instruction and prerequisite. Every sentence earns its place.

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

Completeness5/5

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

For a simple reorder tool with a single parameter and no output schema, the description covers the core action, the required input format, the prerequisite for obtaining ids, and the risk of partial input. Nothing essential for a correct call is missing.

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

Parameters4/5

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

Schema coverage is 100% and the schema already describes the 'ids' parameter as 'All stage ids, in the desired left-to-right order.' The description adds value by emphasizing 'EVERY stage id' and explicitly warning about the consequence of omission, which goes beyond the schema's terse 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 'Reorder the pipeline,' a specific verb and resource that clearly states the tool's function. It distinguishes itself from siblings like deal_stages_list (listing) and deal_stages_update (updating a single stage) by focusing on reordering the entire stage sequence.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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 a clear prerequisite: 'Get the current ids from deal_stages_list first,' guiding the agent on the necessary precondition. It does not explicitly name alternatives or exclusions, but the context (reordering vs. listing/updating) is clear enough for selection.

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

deal_stages_updateAInspect

Rename or recolour an existing deal stage. Deals already on the stage keep their place — this changes the label, not where anything sits. Takes an id from deal_stages_list.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesStage id from deal_stages_list.
nameNoNew name.
colorNoNew hex colour.

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries the behavioral burden. It discloses a key non-obvious behavior: deals already on the stage keep their place, so the update only affects the label/color. It does not mention permissions or response shape, but the main risk of accidentally moving deals is explicitly addressed.

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

Conciseness5/5

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

Two tight sentences with no filler. The first sentence states the primary action, and the second clarifies scope and non-move behavior, making it easy for an agent to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn 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 metadata update, the description combined with the fully documented schema covers the prerequisite and behavioral scope. It could have explicitly named sibling alternatives or described the return value, but those are minor gaps given the low tool complexity.

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

Parameters3/5

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

Schema coverage is 100%, so the parameters are already fully documented. The description adds only the provenance of the id ('from deal_stages_list'), while name and color are self-explanatory from the schema. This matches the baseline for full schema coverage.

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

Purpose5/5

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

The description opens with a specific action, 'Rename or recolour an existing deal stage', identifying both the verb and the resource. It also differentiates itself from stage reordering or deal moves by stating it changes the label, not where anything sits.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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 the prerequisite: the id comes from deal_stages_list, and scopes the tool to existing stages. It does not explicitly name alternatives like deal_stages_create or deals_move_stage, but the 'existing' wording and the position-clarification imply when this tool is appropriate.

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

deals_updateCInspect

Patch a deal. Only include fields to change.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
notesNo
titleNo
closeAtNo
stageIdNo
currencyNo
companyIdNo
contactIdNo
valueCentsNo

TDQS

C2.4/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of disclosing behavior. It mentions that omitted fields remain unchanged, which is a useful hint, but does not disclose response format, validation rules, idempotency, or what happens if invalid data is provided. The mutation nature is implied but not explicitly stated.

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

Conciseness4/5

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

The description is extremely concise (two short sentences) with no filler content. It front-loads the main action ('Patch a deal') and adds a brief usage instruction. It is appropriately sized, though the brevity comes at the cost of completeness.

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 the tool has 9 parameters, no output schema, no annotations, and zero schema description coverage, the description is severely inadequate. It provides no information about return values, error behavior, required fields (beyond schema), or any edge cases. An agent would struggle to call this correctly without additional external knowledge.

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?

The schema has 0% description coverage and the description offers no parameter explanations whatsoever. It does not clarify the format or meaning of fields like closeAt, valueCents, or stageId, leaving the agent to rely solely on parameter names and types, which may be ambiguous (e.g., valueCents units).

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 operation ('Patch a deal') and it is distinct from sibling tools like deals_create or deals_delete. However, it doesn't explicitly mention the resource type beyond 'deal' or differentiate from the specific deals_move_stage tool, but the verb 'patch' implies a partial update, which is reasonably clear.

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

Usage Guidelines2/5

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

The only usage hint is 'Only include fields to change,' which implies a partial update pattern but provides no guidance on when to choose this over alternatives like deals_move_stage for stage changes. No exclusions or alternative tool references are given, leaving the agent to infer usage context.

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

email_accounts_listAInspect

List the user's connected mailboxes: id, address, display name, provider, whether it can send from the server, and its last sync. Use the id as accountId in email_send or as account in email_list_threads.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It discloses the exact fields returned, implying a read-only list operation. However, it does not mention any limitations, potential pagination, authentication requirements, or error cases. While the nature of a list tool makes some of these less critical, the lack of any behavioral nuance beyond the obvious keeps this at a moderate score.

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

Conciseness5/5

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

Two sentences with zero redundancy. The first sentence lists the tool's output, and the second provides cross-tool usage instructions. The most actionable information is front-loaded, and 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 tool with no parameters and no output schema, the description is quite complete. It enumerates the return fields and explains how to use the id downstream. It lacks mention of edge cases like multiple mailboxes, but for a simple list operation this is adequate. The agent has enough information to call the tool and interpret results.

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 schema is empty and coverage is 100%. The description adds no parameter information because none is needed. The baseline for no-parameter tools is 4, and the description's extra context about the return fields does not detract from this.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'List the user's connected mailboxes' and enumerates the specific fields returned (id, address, display name, provider, can-send flag, last sync). It also distinguishes itself from sibling email tools by explaining how the returned id feeds into email_send and email_list_threads, making the tool's role 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 explicit guidance on how to use the output: 'Use the id as `accountId` in email_send or as `account` in email_list_threads.' This tells the agent when to call this tool (to discover available mailboxes) and how to connect it to other operations. It does not mention when not to use it or alternatives, but for a simple list tool this is sufficient.

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

email_get_message_bodyAInspect

Read the full body of ONE email message. Bodies are fetched from the mailbox on demand and cached, so this can be slower than the list calls — ask for it only when a snippet is not enough to answer the question. Attachment CONTENTS are never returned.

ParametersJSON Schema
NameRequiredDescriptionDefault
messageIdYesMessage id from email_get_thread.

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations provided, the description carries the behavioral disclosure burden. It does well by explaining that bodies are fetched on demand and cached, that this call can be slower than list calls, and that attachment contents are never returned. It does not describe the response shape, but the core behavior is well covered.

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

Conciseness5/5

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

The description is three sentences with no filler. The primary purpose is front-loaded, followed by two caveats that each earn their place: the performance/caching behavior and the attachment exclusion. Every sentence contributes to correct 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?

For a single-parameter tool with no output schema, the description is largely complete: it states what is returned (full body), the key limitation (no attachment contents), and the triggering condition (snippet insufficient). A brief note on the return format would make it fully complete, but nothing essential for invoking 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%, with messageId already described as 'Message id from email_get_thread.' The tool description adds little parameter-level meaning beyond reinforcing that it refers to a single email message, so the schema does the heavy lifting and 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 opens with a specific verb and resource: 'Read the full body of ONE email message.' It clearly distinguishes this from the sibling list tools by emphasizing it handles a single message rather than a list, and the 'snippet' contrast implies the full content that list/thread tools truncate.

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

Usage Guidelines5/5

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

The description gives an explicit when-to-use rule: 'ask for it only when a snippet is not enough to answer the question.' It also points to the alternative category ('the list calls') and sets performance expectations, so an agent knows this is a targeted follow-up call rather than the default listing operation.

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

email_get_threadAInspect

Get every message in one email conversation — sender, recipients, date, subject and a snippet per message, plus whether each has attachments. Bodies are NOT included; call email_get_message_body with a message id to read one. Takes the threadKey from email_list_threads.

ParametersJSON Schema
NameRequiredDescriptionDefault
threadKeyYesFrom email_list_threads.

TDQS

A4.5/5.0
Behavior4/5

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

No annotations are present, so the description carries the full burden of behavioral disclosure. It clearly states what is returned (sender, recipients, date, subject, snippet, attachment flag) and, importantly, what is NOT returned (bodies). This is sufficient for a simple read operation, though it omits minor details like error or empty-thread behavior.

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

Conciseness5/5

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

Three concise sentences with no filler: the main action and contents are front-loaded, the body-exclusion caveat follows, and the parameter source closes it. Every sentence earns its place.

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

Completeness5/5

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

For a single-parameter read tool with no output schema, the description fully covers what the agent needs: what comes back, what is omitted, the sibling tool to use for omitted data, and where the parameter comes from. Nothing essential is missing.

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

Parameters3/5

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

Schema description coverage is 100% and the schema already explains threadKey as 'From email_list_threads.' The description repeats this same information in prose, adding no new semantic detail beyond what the schema provides. Baseline 3 is appropriate.

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

Purpose5/5

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

The description states a specific verb and resource: 'Get every message in one email conversation' and enumerates the exact contents returned. It explicitly distinguishes itself from email_get_message_body by stating bodies are not included, which makes 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 Guidelines5/5

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

The description tells the agent when not to use this tool (when bodies are needed) and names the alternative: 'call email_get_message_body with a message id to read one.' It also provides the prerequisite relationship by stating the threadKey comes from email_list_threads.

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

email_list_threadsAInspect

List email conversations in the user's connected mailbox — subjects, participants, dates and a short snippet. Does NOT return message bodies; call email_get_message_body for a specific message when the snippet is not enough. Use search to find threads by subject, sender or snippet text, and folder to scope to inbox, sent, archive or trash.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax threads to return. Default 25.
folderNoWhich folder to list. Defaults to everything.
searchNoMatch against subject, participant address and snippet.
accountNoLimit to one connected account id. Omit for all.

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral disclosure burden. It clearly states what is returned, what is not returned (message bodies), and how to retrieve bodies. It lacks details on ordering or pagination, but for a read-only list operation the key behavior is well 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?

Three tightly written sentences: the main purpose and output are front-loaded, the key limitation is stated next, and parameter guidance follows. 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 simple list tool without an output schema, the description covers purpose, return fields, limitations, and relevant alternatives. It lacks explicit mention of ordering or pagination behavior, but this is a minor gap given the tool's low complexity.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description reinforces the meaning of `search` and `folder` but adds little beyond the schema's own parameter descriptions; `limit` and `account` are not elaborated further.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 email conversations') and enumerates the returned fields: subjects, participants, dates, and a snippet. It also explicitly distinguishes itself from email_get_message_body by clarifying that it does not return message bodies.

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

Usage Guidelines5/5

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

The description gives explicit when-to-use guidance: use email_get_message_body when a snippet is insufficient, and use `search` and `folder` to find or scope threads. This clearly routes an agent to the right operation and parameters.

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

email_sendAInspect

Send an email from the user's connected email account. to can be a single address or a comma-separated list. Provide bodyHtml (preferred), bodyText (plain), or both — at least one is required. Pass contactId when sending to a Groundbase contact so merge tags like {{first_name}} and {{cf.}} resolve and the message threads against that contact. Without accountId the message leaves from the oldest connected mailbox; call email_accounts_list and pass accountId to send from another. The signature of the mailbox that sends is appended automatically.

ParametersJSON Schema
NameRequiredDescriptionDefault
ccNoCC list (comma-separated).
toYesRecipient email or comma-separated list.
bccNoBCC list (comma-separated).
subjectYesSubject line. Supports merge tags when contactId is provided.
bodyHtmlNoHTML body (preferred). Supports merge tags.
bodyTextNoPlain-text body. Sent alongside HTML if both given.
fromNameNoOptional display name for the From header. Defaults to the alias's or mailbox's saved name.
accountIdNoOptional mailbox UUID from email_accounts_list. Defaults to the oldest connected mailbox.
contactIdNoOptional contact UUID. When set, merge tags resolve and the thread attaches to the contact. It does not pick the mailbox.
fromEmailNoOptional Send-as alias to send from, e.g. "adam@example.com". Must be the mailbox's own address or an alias registered on it under Settings → Email; anything else is refused with INVALID_FROM. Does not pick the mailbox — pair with accountId when there is more than one.
trackOpensNoWhen true, inject a 1x1 open-tracking pixel. Signal is approximate (Gmail proxies + Apple Mail Privacy interfere).
scheduledSendAtNoOptional future ISO 8601 timestamp. When set the message is queued and dispatched by the per-minute cron at that time.

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It reveals side effects and defaults: signature appended automatically, message threads against a contact when contactId is passed, and messages leave from the oldest mailbox without accountId. These are meaningful behavioral traits beyond basic 'send an email' semantics, though it omits details like rate limits or error handling.

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

Conciseness5/5

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

The description is dense but every sentence earns its place: purpose, recipient syntax, body requirement, contact behavior, account selection, and signature note. It is front-loaded with the core action and immediately covers the most important parameter decisions. No filler or repetition exists.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence 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 12 parameters and no output schema or annotations, the description covers the critical decisions: recipient format, body requirements, merge tag handling, account selection, and signature behavior. It relies on the schema for details like cc/bcc and scheduling, which is acceptable since schema coverage is 100%. The picture is nearly complete, though error scenarios or expected return values are not described.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds value beyond parameter names. It clarifies that at least one of bodyHtml/bodyText is required, gives merge tag examples ({{first_name}}, {{cf.<field_key>}}), and explains that contactId does not pick the mailbox while fromEmail does not either. This helps an agent compose parameters correctly.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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: "Send an email from the user's connected email account." It clearly identifies the tool's action and adds concrete scope (recipient list, body formats, merge tags, account selection). It does not explicitly contrast against sibling tools like email_get_thread or email_list_threads, but the action is unambiguous.

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

Usage Guidelines4/5

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

The description provides clear usage context: when to pass contactId for merge tag resolution and threading, and when to call email_accounts_list and pass accountId to select a mailbox. It also states the default behavior when accountId is omitted. However, it does not explicitly mention when not to use this tool or compare it to alternatives, 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.

email_templates_createBInspect

Create a new EMAIL template. Use {{first_name}} / {{last_name}} / {{full_name}} / {{company}} placeholders — they're substituted at send time. Subject is required for email templates. Returns the new template id.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYesTemplate body with {{variable}} placeholders.
nameYesShort label so users can pick it from a list.
subjectYesEmail subject line. May also include {{variables}}.

TDQS

B3.2/5.0
Behavior2/5

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

No annotations are provided, so the description must carry the full burden of behavioral disclosure. The description notes that placeholders are substituted at send time, which helps set expectations, and mentions the subject required, but it does not explain side effects (e.g., whether the template is immediately usable, any validation, or default behaviors). It lacks details on possible errors or the return format beyond the id.

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

Conciseness4/5

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

The description is concise and front-loaded with the core action. It uses two sentences to cover the main points: placeholders and required subject, ending with the return. There is little waste, though the first sentence could be slightly more explicit about the resource type for better scoping. Overall, it is efficient and readable.

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 that the tool is simple (3 params, no output schema, no nested objects), the description is adequate. It covers the essential call details: placeholders, required subject, and return id. However, it lacks information about error handling, any side effects, or validation rules, which an agent might need in edge cases. The absence of annotations increases the need for such detail, so the description is minimally sufficient but not comprehensive.

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

Parameters3/5

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

Schema coverage is 100%, so the schema already describes each parameter (body, name, subject). The description adds value by specifying that subject is required and that placeholders are used, but does not go beyond the schema's own descriptions. Since schema coverage is high, baseline is 3, and the description provides marginal additional context (e.g., that variables are substituted automatically).

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 ('Create') and the resource ('EMAIL template'), and highlights that it is specifically for email templates, distinguishing it from SMS templates (sibling tools include sms_templates_create). It lists the required fields (subject) and placeholders, making the purpose precise 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 Guidelines2/5

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

The description does not explain when to use this tool versus alternatives like email_templates_update or sms_templates_create. It does not mention exclusions or prerequisites, such as needing an existing template or the context for email vs sms. The differentiation from SMS is implied by the resource 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.

email_templates_deleteBInspect

Soft-delete a EMAIL template. DESTRUCTIVE — confirm first.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

B3.1/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden. It does disclose the destructive nature and indicates a soft-delete behavior, which adds value. However, it does not explain what soft-delete means, whether it is reversible, or what side effects occur.

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

Conciseness5/5

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

The description is extremely concise: two short sentences with the purpose front-loaded and the warning immediately following. Every word contributes meaning without filler.

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

Completeness2/5

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

For a destructive mutation with one parameter, the description still leaves important gaps: what the id refers to, what soft-delete implies, and what response the agent should expect. With no annotations or output schema, this is insufficient context for confident invocation.

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?

The schema has 0% description coverage and the description does not mention the id parameter at all. The agent must infer from the tool name that id refers to a template identifier. No format, source, or validation guidance is provided for the only 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 states a specific operation ('soft-delete') and resource ('EMAIL template'), which clearly distinguishes it from sibling tools like sms_templates_delete or email_templates_update. There is 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 Guidelines2/5

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

The only guidance is 'DESTRUCTIVE — confirm first,' which is a caution rather than usage direction. The description does not explain when to prefer this tool over alternatives such as email_templates_update or email_templates_list, nor does it mention conditions where deletion should be avoided.

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

email_templates_getBInspect

Fetch a single EMAIL template by id.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

B3.4/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of disclosing behavior. It only states that it fetches a template; it does not mention what is returned, error behavior for missing ids, read-only guarantees, permissions, or any response structure. For a tool with no output schema cont, this is a notable gap.

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

Conciseness5/5

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

The description is a single, front-loaded sentence with zero filler. It communicates the verb, resource, and parameter in a compact form. The uppercase 'EMAIL' efficiently disambiguates from non-email template tools. Every word earns its place.

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

Completeness3/5

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

For a simple single-parameter getter, the description is minimally viable: it tells the agent what action to take and the required input. However, it lacks an output schema and does not describe the return format, so the agent has incomplete information about what to expect after invocation. This is adequate 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 0%, so the description must compensate. It names 'id' and associates it with the template, adding minimal context beyond the schema property name. However, it does not explain what the id is, where to obtain it, or any expected format. The meaning of the parameter is only partially 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 uses a specific verb ('Fetch'), a clear resource ('EMAIL template'), and a precise scope ('by id'). The explicit 'EMAIL' qualifier distinguishes it from SMS template tools, and the singular 'single' contrasts with email_templates_list. The purpose is unmistakable.

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

Usage Guidelines3/5

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

Usage context is implied: call this when you need one specific email template and have its id. However, the description does not explicitly state when not to use it, nor does it reference alternatives like email_templates_list or email_templates_get in other channels. The guidance exists but is only implicit.

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

email_templates_listAInspect

List the user's EMAIL templates. Each template has a name, body, and (for email) subject. Use this to find an existing template before drafting a new one.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden. It discloses the scope ('user's templates') and the structure of each template, which is useful. However, it does not mention pagination, sorting, or explicitly state it is a read-only operation (though 'List' implies that). For a simple zero-parameter list tool, this is adequate but not exhaustive.

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

Conciseness5/5

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

Two sentences with no filler. The action is front-loaded, and the description efficiently conveys purpose, item structure, and a usage hint. 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?

Given the low complexity (no parameters, no output schema, no annotations), the description covers the essential facts: what the tool does, what it returns (templates with name, body, subject), and a typical use case. Minor gaps like pagination behavior are not critical for a simple list operation, so it is nearly complete.

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

Parameters4/5

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

The tool has zero parameters, so the baseline score is 4. The description does not need to explain parameters and does not add parameter-related info, which is appropriate. It mentions template attributes but those relate to the return value, not 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 states the verb 'List' and the resource 'the user's EMAIL templates', distinguishing it from other template tools like email_templates_create, email_templates_get, and sms_templates_list. It also adds useful context about template contents (name, body, subject).

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

Usage Guidelines4/5

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

The description gives a specific use case: 'Use this to find an existing template before drafting a new one.' It implies this is the go-to for listing existing templates, but does not explicitly mention alternatives or when not to use it. It clearly establishes the primary purpose.

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

email_templates_updateCInspect

Edit an existing EMAIL template.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
bodyNo
nameNo
subjectNo

TDQS

C2.7/5.0
Behavior2/5

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

With no annotations present, the description carries the full burden of behavioral disclosure, but 'Edit an existing EMAIL template' only conveys mutation. It does not state whether fields are partially updated, whether existing values are overwritten, what permissions are required, or what the tool returns after success.

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

Conciseness4/5

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

The description is a single, efficient sentence with the action and resource front-loaded. There is no filler or redundancy. It is slightly under-specified rather than padded, which is appropriate for the conciseness dimension even though it hurts completeness.

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 four parameters, no annotations, and no output schema, the description is too thin. It fails to explain update semantics, required id usage, whether body/name/subject are all editable in one call, or what the response looks like. An agent would need to infer most details from parameter names alone.

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 for the undocumented parameters, but it does not. The property names id, body, name, and subject are reasonably self-explanatory, yet the description adds no detail about which fields are updated, how body/subject/name interact, or the meaning of the required id.

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

Purpose4/5

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

The description uses a specific verb ('Edit') and a clear resource ('EMAIL template'), and clarifies it applies to an existing item, distinguishing it from create/delete/get siblings. It also signals the EMAIL domain, separating it from sms_templates_update. It could go further by naming the exact editable fields, but 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 when-to-use guidance or explicit alternatives are provided. The phrase 'existing EMAIL template' implies this is not for creation, but the description never instructs the agent to prefer this tool over email_templates_create, email_templates_delete, or sms_templates_update in relevant scenarios.

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

frontdesk_settingsAInspect

When the human answers an inbound call and when Frontdesk (Emma) does. action='get' returns { hours, override, timezone, emma_enabled, mode_now }. mode_now is what would happen if the phone rang this second: "emma" (Frontdesk answers outright), "ring_then_emma" (rings the owner first, Frontdesk takes it on no-answer) or "ring_then_voicemail" (Frontdesk is switched off on every number). action='set_hours' stores the hours the OWNER is reachable, as { days: { "1": [["09:00","17:00"]], … } } with day keys 0–6 (0 = Sunday) in the account timezone; inside those hours calls ring the owner first, outside them Frontdesk answers. Pass null to clear. With no hours set, Frontdesk answers everything (the previous behaviour). action='set_override' forces a mode until an instant: { mode: 'emma' | 'me', until: ISO }. 'emma' = "take everything, I'm on a job"; 'me' = "ring me first". Pass null to clear. An override beats the schedule; an expired one is ignored. None of this has any effect on a number whose "Frontdesk answers" toggle is off.

ParametersJSON Schema
NameRequiredDescriptionDefault
hoursNoFor action='set_hours'. { days: { "0"…"6": [["HH:MM","HH:MM"], …] } } or null.
actionYes
overrideNoFor action='set_override'. { mode: 'emma'|'me', until: ISO } or null.

TDQS

A5/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure, and it does so thoroughly. It reveals that 'set_hours' and 'set_override' are mutations, that null clears values, that setting hours defines owner reachability in the account timezone, and that the get action returns a specific shape with mode_now reflecting immediate call routing. It also documents default behavior when no hours are set and the precedence of overrides.

Agents need to know what a tool does to the world before 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 long but information-dense, with every sentence contributing functional knowledge. It front-loads the core context of when the human answers versus Frontdesk, then follows a clear structure around the three actions. The compact notation and explicit caveat about the toggle demonstrate deliberate editing 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?

Given the absence of an output schema and annotations, the description is remarkably complete. It explains all return fields for 'get', all possible values of mode_now, the data format for setting hours, the clearing semantics, override precedence, and the toggle exception. An agent has enough information to select the right action Cherry and construct valid parameters without needing external documentation.

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?

The description substantially enriches the schema's parameter definitions. While the schema explains the object shapes of 'hours' and 'override', the description adds day-key ranges (0–6, 0=Sunday), timezone context, the meaning of null to clear, the semantics of mode values 'emma' and 'me', and the behavior of expired overrides. It also explains exactly how the action parameter routes to each operation, which the schema leaves implicit.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 the tool's resource (frontdesk settings) and enumerates the specific actions it supports: reading current settings, setting owner hours, and forcing a mode until a deadline. It distinguishes the semantics of each mode ('emma', 'ring_then_emma', 'ring_then_voicemail') with concrete examples, leaving 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 Guidelines5/5

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

The description provides detailed when-to-use semantics: when hours are set versus unset, when Frontdesk answers versus ringing the owner, how overrides take precedence, and that expired overrides are ignored. It also states a critical exclusion—none of this applies when the 'Frontdesk answers' toggle is off—so the agent knows the boundary of the tool's effect without needing to inspect sibling tools.

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

inbound_webhooks_manageAInspect

Manage inbound webhooks (URLs the world POSTs to so Groundbase creates contacts/deals/tasks/etc.). Dispatched by action:

  • "list": list all of the user's inbound webhooks (URL token NOT returned). No other args.

  • "get": fetch one by id (URL token NOT returned). Requires id.

  • "create": author a new webhook. Returns the FULL URL with token ONCE — flag this to the user; it cannot be retrieved later. Most senders use mappingMode="native"; use "mapped" only when the sender has a fixed payload shape that needs translating. signingSecret is OPTIONAL. Requires name.

  • "update": patch fields. Requires id. Only pass the fields you want to change.

  • "delete": DESTRUCTIVE. The URL stops accepting POSTs immediately. Confirm with the user first.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoInbound webhook UUID. Required for get/update/delete.
nameNoDisplay name. Required on create.
actionYesWhich operation to run.
isActiveNoPause receiving by setting to false (update only).
descriptionNoOptional longer-form context.
ipAllowlistNoOptional CIDR list. Empty = any IP.
mappingJsonNoRequired when mappingMode="mapped". Translates an arbitrary inbound payload into native Groundbase actions. Shape: { "actions": [{ "event": "contact.find_or_create" | "contact.create" | "contact.update" | "company.find_or_create" | "company.create" | "deal.create" | "note.create" | "task.create" | "tag.apply" | "tag.remove", "fields": { "<groundbase_field>": "<jsonpath.in.payload>", ... }, "static": { "<groundbase_field>": <literal>, ... } }] }. Paths are dot-separated with optional bracketed array indices (e.g. "lead.contact[0].email" or equivalently "lead.contact.0.email"). Missing paths resolve to undefined and are omitted. Example for a Facebook Lead Ads webhook: { "actions": [{ "event": "contact.find_or_create", "fields": { "first_name": "name.first", "email": "email", "phone": "phone" }, "static": { "source": "fb-lead-ads", "tags": ["lead"] } }] }.
mappingModeNoDefault "native" on create.
signingSecretNoOptional HMAC secret (create only). Senders include X-Groundbase-Signature.

TDQS

A4.9/5.0
Behavior5/5

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

With no annotations, the description carries the full behavioral burden and does so thoroughly: it flags create as returning the full URL with token exactly once and non-retrievable later, notes list/get omit the URL token, and states delete stops accepting POSTs immediately. It also discloses the signing secret header behavior. No contradictions with annotations 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?

The description is longer than average but earned: it front-loads the resource definition, then organizes each mode into a scannable bullet, and the mappingJson example is dense but directly useful for the most complex parameter. There is no filler or tautological 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 nine-parameter router tool with no annotations and no output schema, the description covers all actions, required versus optional parameters, destructive behavior, and the one-time token retrieval caveat. Nothing an agent needs to invoke the tool safely and correctly is missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description adds value beyond the schema by explaining the native-vs-mapped default decision, clarifying that signingSecret is optional and associated with X-Groundbase-Signature, and instructing that update should only include fields to change. It is not a 5 because several parameter behaviors (e.g., ipAllowlist empty meaning) are left to the already-sufficient schema rather than enriched.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 definition names the resource ('inbound webhooks'), explains what they are ('URLs the world POSTs to so Groundbase creates contacts/deals/tasks/etc.'), and enumerates five concrete operations dispatched by `action`. This clearly differentiates the tool from the sibling outbound_webhooks_manage without needing to open the schema.

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

Usage Guidelines5/5

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

Each action has an explicit when-to-use rule and prerequisites: list needs no args, get/update/delete require `id`, create requires `name`, and delete explicitly requires user confirmation. It also gives the mappingMode decision rule ('use mapped only when the sender has a fixed payload shape that needs translating'). This is strong enough to select the right operation and avoid mistakes.

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

invoice_items_createAInspect

Create a reusable invoice item. unitPrice is a decimal string in baseCurrency ("200.00"). Use prices to set deliberate amounts in other currencies; any currency not listed is converted from the base price when an invoice needs it.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesWhat appears on the invoice line.
pricesNoChosen prices per currency, e.g. { "USD": "100.00", "CAD": "150.00" }.
unitLabelNoe.g. "session", "hour", "each".
unitPriceNoDecimal string, e.g. "200.00". Must match the currency's decimal places — JPY takes "15000", not "15000.00".
descriptionNo
baseCurrencyNoISO 4217, e.g. BBD. Defaults to USD.
defaultTaxRateNoPercentage as a decimal string, e.g. "17.5".

TDQS

A3.9/5.0
Behavior3/5

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

Annotations are absent, so the description carries full burden. It discloses that currencies not listed in `prices` are converted from the base price at invoice time, a key behavioral detail. However, it does not mention the return value or that this is a persistent (reusable) object beyond 'reusable', nor any error conditions.

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

Conciseness4/5

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

Two sentences with no fluff; the key decision (use `prices` vs conversion) is front-loaded. It omits unnecessary details, though it could be more concise by dropping the parenthetical example, but overall well-paced.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence 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 7 parameters and no output schema, the description covers the trickiest part (currency handling) and leaves parameter details to the schema, which is rich (86% coverage). It's complete enough for an agent to call the tool correctly, though it could mention idempotency or reuse semantics.

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

Parameters3/5

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

Schema description coverage is 86%, and the schema already explains most parameters. The description adds clarity on the relationship between `unitPrice`, `baseCurrency`, and `prices`, which the schema lacks, but does not cover all nuances like the decimal-place rule for JPY (only in schema). Thus, a baseline 3 with marginal added value 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 a specific verb and resource ('Create a reusable invoice item'), which clearly distinguishes it from its sibling list/update counterparts. It also explains the item's reusability, adding domain context beyond the name.

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

Usage Guidelines4/5

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

The description explains when to use `prices` versus relying on `unitPrice` and base currency conversion, giving direct guidance on a key decision. It does not explicitly state when not to use this tool versus alternatives, but the sibling context makes the create-only purpose clear.

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

invoice_items_listAInspect

List reusable invoice items (services or products) with their per-currency prices. An item can carry a chosen price in each currency the user bills in — e.g. BBD 200 / USD 100 / CAD 150 — rather than one price converted at invoice time, because those are usually deliberate round numbers rather than conversions of each other.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden. It discloses the important semantic that each item may carry independently set prices per currency rather than converted values, but it omits pagination, ordering, filtering, and response shape. This is useful but incomplete.

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

Conciseness5/5

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

The description is two sentences, front-loaded with the core action, and the second sentence earns its place by explaining a non-obvious pricing behavior with a concrete example. 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 parameterless list tool, this is largely complete: it states the resource and the key data behavior. It lacks explicit mention of pagination or exact return fields, but those are minor given no parameters and no output schema.

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

Parameters4/5

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

The tool has zero parameters, so the description cannot meaningfully add parameter semantics beyond the schema; the baseline 4 applies. It does clarify the data model that the returned fields represent.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 names the operation ('List') and the resource ('reusable invoice items') and adds a distinctive detail—per-currency prices—that separates it from invoice_items_create/update and invoices_list. Even without looking at the schema, an agent knows exactly what this 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?

It provides clear context that this is the read-only retrieval tool for reusable invoice items and explains the per-currency pricing model, so an agent can identify when it is relevant. It does not explicitly state exclusions or alternatives, but the sibling pairs (create/update/list) make the usage obvious.

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

invoice_items_updateAInspect

Update an item. Omit prices entirely to leave existing per-currency prices alone — sending it REPLACES the whole set, so renaming an item without touching pricing means not sending that key at all.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
nameNo
pricesNo
unitLabelNo
unitPriceNo
descriptionNo
defaultTaxRateNo

TDQS

A3.6/5.0
Behavior4/5

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

With no annotations, the description carries the burden and it does disclose the critical non-obvious behavior that `prices` is wholesale-replaced while omission preserves it. It also implies partial update semantics for other fields. It does not cover permissions, error cases, or response, but the main side-effect warning is present.

Agents need to know what a tool does to the world before 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 entire description is a single focused sentence, front-loading the operation and then adding the essential replacement caveat. No filler or repeated schema information.

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 7-parameter tool with no annotations, no output schema, and 0% schema coverage, the description is under-specified. It addresses only the `prices` footgun and leaves the meaning of `unitPrice` vs `prices`, the required `id`, and tax/label/description fields to inference. An agent would likely need additional documentation to safely use all fields.

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

Parameters2/5

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

Schema coverage is 0%, and the description only explains `prices`; the other six parameters (`id`, `name`, `unitLabel`, `unitPrice`, `description`, `defaultTaxRate`) receive no semantic clarification. This is a significant gap because the schema provides no property descriptions. It earns credit for the one important parameter but fails to compensate for the rest.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 'Update an item,' a clear verb+resource statement, and the tool name plus sibling set (invoice_items_create/list) make the target resource evident. It further clarifies the update semantics around pricing, which is specific to this tool. It doesn't explicitly say 'invoice item' but this is unambiguous from context.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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 explicit conditional guidance for the `prices` parameter: omit to preserve, send to replace, and gives a concrete renaming scenario. It does not contrast with create/list or state when update is inappropriate, so tool-selection guidance is implicit rather than fully explicit.

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

invoice_payments_listAInspect

The payment ledger for one invoice: every payment, what is still owed, and whether it has been overpaid. Reversed payments stay listed and are marked, because payment history is reconciled against bank statements and must not silently change.

ParametersJSON Schema
NameRequiredDescriptionDefault
invoiceIdYes

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral disclosure burden. It goes beyond a simple 'list' statement by revealing that reversed payments remain listed and are marked, and explains the reconciliation rationale. This is a meaningful non-obvious behavior, though it omits details like pagination and response structure.

Agents need to know what a tool does to the world before 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 first sentence front-loads the core contents of the ledger, and the second sentence earns its place by explaining a subtle retention behavior.

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

Completeness4/5

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

For a single-parameter list tool with no output schema, the description covers the key return concepts: payments, remaining balance, overpayment flag, and reversed-payment behavior. It is concise and adequate for an agent to call correctly, though pagination or sorting are not addressed.

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

Parameters3/5

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

The only parameter, invoiceId, is not described beyond the tool's mention of 'one invoice', which weakly implies it identifies the target invoice. Schema coverage is 0%, so the description should compensate, but it adds little detail about the expected format or how to obtain a valid ID. Still, the single obvious parameter and the tool name make the semantic relatively 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 clearly states the tool returns the payment ledger for one invoice, including every payment, outstanding balance, and overpayment status. It is easily distinguished from siblings like invoice_payments_record and invoice_payments_reverse because it explicitly describes a read-only listing 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 phrase 'The payment ledger for one invoice' gives clear context: use this when you need a full payment overview for a single invoice. It does not explicitly name alternatives or state when not to use it, but the read/list framing is enough to guide selection against mutation siblings.

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

invoice_payments_recordAInspect

Record a payment received against an invoice. SENDS THE CUSTOMER A RECEIPT BY EMAIL unless sendReceipt is false — this contacts a third party, so confirm the amount with the user first. Partial payments are normal; overpayment is recorded with a warning rather than refused, because money arriving is a fact. The receipt is sent from the user's own email connection, never from a Groundbase address.

ParametersJSON Schema
NameRequiredDescriptionDefault
notesNo
amountYesDecimal string in the invoice currency, e.g. "1600.00".
methodNobank_transfer | card | cash | cheque | other
sendViaNoForce a transport: smtp or resend. Defaults to the user's SMTP account when connected.
invoiceIdYes
referenceNoCheque number, transfer reference, or payment id.
receivedAtNoISO date or datetime. Defaults to now.
sendReceiptNoDefault true. Set false for cash handed over in person where a receipt was already given.

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations, the description carries the full disclosure burden. It reveals major side effects: a receipt email is sent by default, the email goes to a third party, overpayment is recorded with a warning rather than refused, and the email comes from the user's own connection. It does not detail effects on invoice status or failure behavior, keeping it from a 5.

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

Conciseness4/5

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

Four sentences, each serving a purpose: core action, email side effect and caution, payment policy, and sender identity. The all-caps warning and the 'money arriving is a fact' phrasing add urgency but are slightly verbose; overall the description is compact and well-organized.

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

Completeness4/5

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

For an 8-parameter mutation tool with no annotations and no output schema, the description covers the most critical context: the external email contact, confirmation guidance, partial/overpayment behavior, and sender identity. It does not describe the return value or how invoice balance/status is updated, but the risks and preconditions for invoking the tool are sufficiently addressed.

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

Parameters3/5

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

Schema coverage is 75%, so the input schema already documents most parameters. The description adds meaning around sendReceipt, tying it to the in-person cash exception, and emphasizes amount confirmation. Other parameters like reference, method, and receivedAt are adequately covered by the schema.

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

Purpose5/5

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

The description states a specific verb and resource: 'Record a payment received against an invoice.' It is immediately distinguishable from sibling tools like invoice_payments_list and invoice_payments_reverse because this is the recording action, not list or reversal.

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

Usage Guidelines4/5

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

Clear usage context is provided: confirm the amount with the user first because a receipt email contacts a third party, and sendReceipt can be turned off for cash handed over in person. It does not explicitly mention alternatives like invoice_payments_reverse or invoices_send, but the conditions for using this tool are well implied.

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

invoice_payments_reverseAInspect

Reverse a payment that was recorded in error. The original entry stays in the ledger marked reversed rather than disappearing, and the invoice balance is recomputed. Does not refund money or notify the customer.

ParametersJSON Schema
NameRequiredDescriptionDefault
paymentIdYes

TDQS

A4.5/5.0
Behavior5/5

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

With no annotations provided, the description carries the full behavioral burden and does so well. It discloses that the original ledger entry is retained and marked reversed, that the invoice balance is recomputed, and that no refund or customer notification occurs—critical details for an agent deciding whether this action is appropriate.

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

Conciseness5/5

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

The description is three short sentences with no filler. It front-loads the primary purpose, then efficiently adds the most important behavioral caveats. Every sentence contributes useful 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 mutation with no output schema, the description is complete enough for safe invocation. It covers the action, the ledger effect, the invoice effect, and the important non-effects (no refund, no notification), leaving no critical unknown for an agent choosing or calling the tool.

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

Parameters3/5

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

Schema coverage is 0%, so the description should compensate, but it never mentions paymentId or its format/source. However, the parameter name and the description's phrase 'a payment' make it inferable that paymentId is the identifier of the erroneous payment, so the meaning is minimally adequate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 ('Reverse') and resource ('a payment that was recorded in error'), making the tool's purpose immediately clear. It also implies the distinction from siblings like invoice_payments_record and invoices_void by focusing specifically on reversing an erroneous payment rather than recording or voiding.

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

Usage Guidelines4/5

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

The description gives a clear usage context: use this when a payment was recorded in error. It does not explicitly name alternative tools or state when not to use it, but the context is specific enough that an agent can reasonably select it over the sibling payment/invoice tools.

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

invoices_create_draftAInspect

Create a DRAFT invoice. Drafts have no number and can be edited or deleted freely — nothing is committed until invoices_issue is called. Currency and due date default from the customer's billing profile when not given. Totals are computed server-side from the quantities and prices sent; do not attempt to supply totals.

ParametersJSON Schema
NameRequiredDescriptionDefault
linesNoLine items. Use itemId to pull a saved item's price for this currency, or name + unitPrice for a one-off.
notesNoShown on the invoice.
termsNoTerms and conditions printed on the invoice.
chargesNoInvoice-level charges below the subtotal — shipping, a rush fee, or a negative amount for a deposit already paid.
dueDateNoYYYY-MM-DD. Defaults to issue date plus the profile terms.
currencyNoISO 4217. Defaults from the billing profile.
companyIdNo
contactIdNoWho to bill. One of contactId/companyId is required.
issueDateNoYYYY-MM-DD. Defaults to today.

TDQS

A4.2/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full behavioral burden. It discloses non-obvious behavior: drafts are not committed until invoices_issue, currency/dueDate default from the billing profile, and totals are computed server-side so callers must not supply them. This goes well beyond the schema and helps prevent a serious misuse, though it does not address permissions or return values.

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

Conciseness5/5

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

Three purposeful sentences, front-loaded with the core purpose before the caveats. Every sentence adds value: draft state, defaults, and the server-side totals warning. No 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.

Completeness4/5

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

For a create tool with no annotations and no output schema, the description covers the key state-transition semantics, defaults, and a critical caller-error guard. Combined with the high-coverage schema, an agent has enough to invoke it correctly. A small gap remains around expected return value or error conditions, but the absence of an output schema lowers that burden.

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

Parameters3/5

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

Schema description coverage is 89%, so the baseline is 3. The description reinforces important context such as defaulting behavior and warns against sending totals, but most parameter-level semantics (line items, charges, date formats, required contact/company) are already documented in the input schema. It does not significantly compensate for the small uncovered remainder.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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: 'Create a DRAFT invoice.' It further distinguishes itself from siblings by defining the draft state (no number, editable/deletable, nothing committed until invoices_issue). An agent can clearly tell this from invoices_issue, invoices_update_draft, and invoices_send.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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 names invoices_issue as the commitment step, which signals when this draft-creating tool is appropriate versus the issuing alternative. It also notes that drafts can be edited or deleted freely, implying safe pre-commit usage. It does not explicitly contrast every invoice-related sibling, but the draft semantics provide clear contextual guidance.

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

invoice_settings_getAInspect

The business identity printed on every invoice and receipt — name, address, tax id, logo, payment instructions — plus the numbering sequence and what the next invoice number will be.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations provided, the description carries the behavioral burden. It usefully discloses what data is included (identity, logo, payment instructions, numbering sequence, next number), but it does not explicitly state side-effect-free behavior, access requirements, or that this is a read-only operation beyond what 'get' implies.

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

Conciseness5/5

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

A single well-structured sentence conveys the full content scope without filler. The user-facing business identity details are front-loaded, followed by the numbering behavior.

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

Completeness4/5

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

For a no-parameter getter, the description is largely complete: it names the resource, enumerates the returned setting categories, and notes the dynamic next-invoice-number value. It could be sharper by explicitly saying it returns/reads settings, and it does not mention the sibling update tool, but the low complexity keeps the gap minor.

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

Parameters4/5

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

The tool has zero parameters and the schema coverage is effectively 100%, so there are no parameter semantics for the description to clarify. The baseline of 4 applies.

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

Purpose4/5

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

The description clearly identifies the resource (invoice/receipt settings) and the specific contents: business identity fields plus numbering. It distinguishes from the sibling invoice_settings_update by describing the settings themselves rather than any mutation, though it never uses an explicit verb like 'retrieves'.

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

Usage Guidelines2/5

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

No guidance is given about when to call this tool versus alternatives. It never mentions invoice_settings_update or any condition for using this getter, so an agent must infer from the name alone.

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

invoice_settings_updateAInspect

Change what appears on invoices. Only the fields you pass are touched. paymentInstructions is the block telling the customer how to actually send the money (bank details, a payment link); an invoice without it tends to produce a reply asking for them. nextNumber may only move FORWARD — lowering it would re-issue numbers that are already on invoices customers have.

ParametersJSON Schema
NameRequiredDescriptionDefault
nextNumberNoForward only. Useful when moving from another system mid-sequence.
businessNameNo
defaultNotesNo
numberPrefixNoe.g. "INV-". Up to 16 characters.
businessEmailNo
businessPhoneNo
businessTaxIdNo
numberPaddingNoMinimum digits, 1-12. 4 gives INV-0007.
businessAddressNo
defaultCurrencyNoISO 4217.
defaultTermsDaysNo
defaultTermsTextNo
paymentInstructionsNoFree text. Line breaks are kept.

TDQS

A3.8/5.0
Behavior4/5

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

With no annotations, the description carries the full transparency burden and does well: it discloses partial-update behavior, the forward-only constraint on nextNumber, and the practical consequence of omitting paymentInstructions. It stops short of covering permissions, validation errors, or return values, but the most operationally critical behaviors are 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 three sentences and front-loaded with purpose and core behavior. Each sentence earns its place: the partial-update rule, the paymentInstructions warning, and the nextNumber forward-only constraint. There is no filler or repetition of schema content.

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

Completeness4/5

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

For a 13-parameter settings update with no required fields, no output schema, and no annotations, the description handles the main invocation hazards: optionality, the payment-instructions consequence, and the nextNumber monotonic constraint. It is not exhaustive about every field or failure mode, but the essential correctness rules 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?

Input schema coverage is only 38%, so the description must compensate. It adds meaningful semantics for paymentInstructions and nextNumber, explaining consequences not present in the schema. The other 11 parameters are left to their self-explanatory names, with no added format, default, or boundary guidance beyond what the schema already gives.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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: 'Change what appears on invoices.' It clearly communicates this is a settings-update operation distinct from invoice_settings_get and from draft-invoice mutations. It doesn't explicitly name a sibling, but 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 Guidelines3/5

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

The description implies usage by stating 'Only the fields you pass are touched,' which is an important update pattern. However, it never explicitly compares against alternatives like invoice_settings_get, invoices_create_draft, or invoices_update_draft, or says when not to use this tool. Guidance is present but implied rather than explicit.

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

invoices_getAInspect

Fetch one invoice with its line items, charges, totals and amount paid.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden of behavioral disclosure. 'Fetch' implies read-only and the description names the returned data, but it says nothing about error behavior, authorization, or side effects. This is minimal but not misleading.

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

Conciseness5/5

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

The description is a single efficient sentence with no filler, repetition of schema fields, or unnecessary clauses. It is front-loaded with the verb and object, and every word adds meaning.

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

Completeness4/5

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

For a simple single-parameter retrieval with no output schema or annotations, the description covers the object and its return content. It lacks details like not-found behavior or authentication requirements, but these are minor for a fetch operation and largely inferable from the domain.

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

Parameters3/5

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

The schema has one `id` string parameter with 0% description coverage, and the description does not explicitly state that `id` is the invoice identifier. The tool name and 'one invoice' make this inferable, but the description does not fully compensate for the missing schema documentation. The single obvious parameter mitigates the gap.

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

Purpose5/5

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

The description uses a specific verb ('Fetch'), names the resource ('one invoice'), and enumerates the included content ('line items, charges, totals and amount paid'). This clearly distinguishes the tool from sibling invoice tools such as invoices_list, invoices_send, and invoices_void without needing to inspect their schemas.

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

Usage Guidelines4/5

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

The intent is clear: retrieve a single invoice by its id. However, the description does not explicitly compare with invoices_list or state when not to use this tool. It provides adequate context but no exclusions or explicit alternatives, so it misses the top mark.

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

invoices_issueAInspect

ISSUE an invoice: allocate its number, freeze its contents, and make it real. ONE-WAY — after this the invoice cannot be edited, only voided. The number comes from a sequence that must have no gaps, so do not issue an invoice speculatively or to test behaviour. Confirm with the user before calling this on an invoice you did not just create at their request.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden. It discloses that the operation is one-way, cannot be edited later, only voided, and that the invoice number comes from a gap-free sequence. This goes well beyond a simple 'issue invoice' statement, though it does not mention permissions or potential error cases.

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

Conciseness5/5

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

The description is compact and front-loaded with the action, then adds consequential warnings. Every sentence earns its place, and the warnings about irreversibility and speculative use are clear without excess words.

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

Completeness4/5

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

Given a single id parameter, no output schema, and no annotations, the description covers the most critical context: the irreversible finalization, the no-gap sequence constraint, and the need for user confirmation. It could clarify what a successful call returns or what state the invoice must be in, but the essential context is present.

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

Parameters2/5

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

Schema description coverage is 0% and the description never explicitly explains what the 'id' parameter should reference (e.g., the invoice ID of a draft). It only says 'an invoice' indirectly, so an agent must infer that the id identifies the invoice to issue. The description 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?

States a specific verb and resource ('ISSUE an invoice') and elaborates on the action: allocate number, freeze contents, make it real. It distinguishes itself from siblings like invoices_create_draft and invoices_void by emphasizing the one-way, uneditable nature, so an agent can tell it apart without opening schemas.

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

Usage Guidelines4/5

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

Gives clear context on when not to use it (do not issue speculatively or to test) and instructs user confirmation for invoices not just created at the user's request. However, it does not explicitly name alternative tools (e.g., invoices_create_draft) or state the exact precondition that the invoice must be a draft, leaving some inference needed.

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

invoices_listAInspect

List invoices. Pass outstanding=true for money still owed — issued invoices not yet fully paid — which is the usual question. The response includes an outstanding total PER CURRENCY rather than one merged figure, because a single converted number across several currencies corresponds to nothing real.

ParametersJSON Schema
NameRequiredDescriptionDefault
statusNodraft | issued | partially_paid | paid | void
outstandingNoOnly invoices with money still owed.

TDQS

A4.6/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It goes beyond stating a filter to reveal a non-obvious response quirk: the outstanding total is PER CURRENCY, not a single merged number, and explains why this is so ('a single converted number across several currencies corresponds to nothing real'). This is exactly the kind of transparency 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 sentences, front-loaded with the core action. The first sentence states the purpose, the second packs the most important parameter guidance and the critical response caveat. Every phrase earns its place; zero filler.

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

Completeness4/5

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

For a simple list tool with two optional filters and no output schema, the description covers the one genuinely tricky aspect (per-currency totals) and the primary usage case. It does not mention pagination, default status behavior, or how results are ordered, but these are minor given the tool's simplicity and the lack of an output schema. Slightly more would push it to 5.

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

Parameters4/5

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

The input schema already documents both parameters (status with enum-like values, outstanding as boolean) at 100% coverage, so the baseline is 3. The description adds value by explaining what 'outstanding' actually means semantically ('money still owed') and how it affects the response's currency breakdown. This goes beyond the schema's terse definition.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 invoices' – a specific verb and resource. It then ties the primary filter (outstanding=true) to its exact meaning ('money still owed — issued invoices not yet fully paid'), giving agents a precise mental model. This clearly distinguishes it from invoice-specific tools like invoices_get or invoices_create_draft.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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 explicitly instructs when to set outstanding=true and calls it 'the usual question', which is practical, context-rich guidance. However, it does not mention alternatives such as invoices_get for a single invoice or how to combine status with outstanding, nor does it say when not to use this tool. Still, the main usage decision is well covered.

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

invoices_sendAInspect

EMAIL an issued invoice to the customer, from the user' own email address. This is a message to a third party — confirm with the user before sending, and never send one to "check it looks right". A draft cannot be sent because it has no number yet. Fails with a clear message when the user has no email account or Resend connected; Groundbase will not send an invoice from its own address.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
toNoOverride the recipient. Defaults to the billing email on their profile, then the contact' email.
sendViaNoWhich connected sender to use. Defaults to SMTP when both exist.

TDQS

A4.4/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden. It discloses the external side effect (email to a third party), the sending identity (user's own address), and failure modes (no email account/Resend connected, Groundbase won't send). It also warns about confirmation, making the tool's behavioral profile unusually transparent.

Agents need to know what a tool does to the world before 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, each carrying necessary information: purpose, user-confirmation warning and draft caveat, and failure behavior. It front-loads the primary action and adds constraints without padding.

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

Completeness4/5

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

The description covers the core action, prerequisites (issued invoice), warnings, and failure modes. It does not mention return values or idempotency, but for a send tool with only 3 parameters these are minor gaps. Overall it is reasonably complete, though it could state what a successful call returns.

Complex tools with many parameters or behaviors need more documentation. Simple tools need 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% (to and sendVia have descriptions). The tool description does not add any parameter-specific meaning beyond the schema; it only references the customer as the default recipient, which the schema already states. Baseline of 3 is appropriate given the schema does the heavy lifting.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'EMAIL an issued invoice to the customer, from the user's own email address.' It clearly distinguishes from related tools by specifying 'issued' and stating 'A draft cannot be sent because it has no number yet.' 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 usage guidance: confirm with the user before sending, never send to 'check it looks right', and notes drafts cannot be sent. It also explains when it fails. However, it does not explicitly name alternative tools like email_send or invoices_issue, so it offers clear context but not full sibling routing.

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

invoices_update_draftAInspect

Edit a draft invoice. Sending lines or charges REPLACES them entirely. Issued invoices cannot be edited and this will refuse — that is deliberate, since an issued invoice is a statement of an amount owed.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
linesNo
notesNo
termsNo
chargesNo
dueDateNo
currencyNo
issueDateNo

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations provided, the description carries the full behavioral disclosure burden. It discloses a critical destructive behavior—sending `lines` or `charges` REPLACES them entirely—and a hard refusal on issued invoices. This goes beyond generic 'edit' language and materially protects the agent from making a destructive mistake.

Agents need to know what a tool does to the world before calling 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 the essential message with no filler: the purpose is front-loaded, and the most dangerous behavioral caveats (replacement semantics and refusal on issued invoices) are stated plainly. 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 tool has 8 parameters, 0% schema coverage, no annotations, and no output schema. While the description covers the core use case and the most critical behavioral caveats, it leaves the semantics of most parameters unexplained and doesn't mention return values or error detail. It is adequate for invoking the tool but leaves clear gaps.

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

Parameters3/5

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

The schema has 0% description coverage, so the description must compensate. It adds meaningful semantics for two key parameters (`lines` and `charges` with replace behavior), but the other six parameters (`id`, `notes`, `terms`, `dueDate`, `currency`, `issueDate`) receive no explanatory context beyond their names. 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 'Edit a draft invoice,' a specific verb and resource combination. It further distinguishes itself from sibling tools like invoices_create_draft and invoices_issue by explicitly stating that issued invoices cannot be edited, so an agent can immediately identify its scope.

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

Usage Guidelines4/5

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

The description gives clear usage context: edit draft invoices only. It explicitly states a when-not condition ('Issued invoices cannot be edited and this will refuse'), though it doesn't name alternative tools for handling issued invoices, which would have made the guidance fully explicit.

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

invoices_voidAInspect

Void an issued invoice, or delete a draft. A voided invoice keeps its number so the sequence stays gapless, and remains visible for audit. Voiding does not refund or notify anyone.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

A4.5/5.0
Behavior5/5

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

With no annotations, the description carries the full burden and does it well: it discloses gapless numbering, audit visibility, and explicitly states that voiding does not refund or notify anyone. These side effects go well beyond the basic verb and help an agent anticipate 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?

Three sentences with no filler: the first states the core action, the second adds numbering and audit context, and the third clarifies non-effects. The description 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.

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 tool with no output schema and no annotations, the description covers target states, post-void behavior, audit visibility, and explicitly rules out refunds and notifications. Nothing an agent needs to call it correctly is missing.

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

Parameters3/5

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

The schema only declares id as a required string, and the description never explicitly explains the id parameter. However, with a single parameter and the tool name plus action clearly targeting an invoice/draft, the referent of id is strongly implied, so the gap is tolerable.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 concrete action ('Void an issued invoice, or delete a draft') and clearly distinguishes the two state-based behaviors. The detail about numbering and audit visibility separates it from sibling invoice operations like issue, send, and update.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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 direct scenario-based usage: void an issued invoice or delete a draft. It does not explicitly name alternatives or exclusions, but the conditional guidance is clear enough to route an agent correctly among the many invoice siblings.

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

meeting_types_createAInspect

Create a bookable meeting type. slug becomes part of the public URL, so keep it short and hyphenated ("intro-call"). Duration is in minutes. The booking page shows real availability from the user's connected calendar, so a meeting type without a connected calendar will have nothing to offer.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesShown to the person booking, e.g. "Intro call".
slugYesURL segment, lowercase and hyphenated.
bufferMinNoGap to leave after each booking, in minutes.
descriptionNoOptional blurb on the booking page.
durationMinNoLength in minutes. Default 30.

TDQS

A4.2/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It discloses the critical behavioral dependency on a connected calendar for availability, which is valuable. However, it does not mention side effects, permissions, idempotency, or what happens on success (e.g., returned object). This is partial transparency; the calendar warning is useful but not comprehensive.

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

Conciseness5/5

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

The description is two sentences with no filler. The action is front-loaded, and the additional guidance on slug and the calendar dependency are concise and directly relevant. 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 creation tool with 5 parameters (2 required) and no output schema, the description covers the essential aspects: what it creates, the notable constraints (slug format, duration in minutes), and a critical dependency (calendar availability). It does not detail bufferMin or description, but those are documented in the schema. Given no annotations and no output schema, it is reasonably complete, though it could mention what a successful creation returns.

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 all parameters are already documented. The description adds meaningful semantic guidance beyond the schema: it explains that slug becomes part of the public URL and should be short and hyphenated, with an example, and clarifies that duration is in minutes (though schema already says this). This adds value, especially for slug, moving it above the baseline of 3.

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

Purpose5/5

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

The description starts with a clear verb and resource: 'Create a bookable meeting type.' It specifies the primary purpose and differentiates from sibling tools like meeting_types_list, which is for reading. The extra details about slug and duration further clarify 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 implies when to use the tool (creation) and provides a key contextual caveat: a meeting type without a connected calendar will have nothing to offer. This helps an agent decide whether creating is appropriate. However, it does not explicitly name alternatives or state when not to use it, though the only sibling is a list tool, so the distinction is implicit.

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

meeting_types_listAInspect

List the user's booking meeting types — the public links people use to book time. Returns each one's name, slug, duration and availability. Use this to answer "what can people book with me?" or to get the slug for a link to share.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

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

No annotations are provided, so the description carries the behavioral burden. It clearly indicates a read-only listing action and discloses the returned information (name, slug, duration, availability). It does not mention pagination/order/error behavior, but for a simple zero-parameter list tool this is reasonable.

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

Conciseness5/5

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

Three short sentences, front-loaded with the action and resource, followed by return data and concrete use cases. No fluff or repetition; every sentence adds useful information.

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

Completeness4/5

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

For a zero-parameter read-only tool with no output schema, the description names the key return fields and user-facing purpose. It could go slightly deeper on the exact meaning of 'availability' or whether there are any filtering/ordering options, but the core calling context is fully covered.

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 parameterscars, so parameter semantics are trivially satisfied. The description correctly avoids inventing parameters and focuses on the output, matching the baseline for a no-parameter tool.

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

Purpose5/5

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

The description states a specific verb ('List'), a clear resource ('the user's booking meeting types'), and explains what those are ('the public links people use to book time'). It also lists the return fields and practical use cases, making the tool easily distinguishable from siblings like meeting_types_create.

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

Usage Guidelines4/5

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

The description gives explicit use cases: answering 'what can people book with me?' and getting a slug to share. It does not name an alternative or provide when-not-to-use guidance, but since this is the only list tool in its familyasia and there is no real competing read tool, the guidance is sufficiently clear.

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

merge_tags_listAInspect

List every merge tag the user can use in SMS bodies, email subjects, email bodies, and workflow actions. Returns reserved tags ({{first_name}}, {{full_name}}, {{company_name}}, etc.) PLUS per-user contact custom fields exposed as {{cf.}}. Call this BEFORE drafting any template with merge tags so you can be certain every tag will resolve at send time. Unknown tags render empty server-side, which is silent and confusing — checking this first prevents that.

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?

With no annotations, the description carries full disclosure responsibility. It explains what the tool returns, that it includes both reserved and custom-field tags, and that unknown tags render empty server-side. It does not cover pagination or auth, but for a read-only, zero-parameter list operation the provided behavior 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?

The description is well-structured and front-loaded with the core purpose. It is concise but includes valuable context about the return contents and the silent-failure risk. Every sentence adds information an agent needs.

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

Completeness5/5

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

For a zero-parameter list tool with no output schema, the description fully covers what is returned, why it matters, and when to call it. No critical contextual gaps remain 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 tool has zero parameters and the schema has 100% coverage, so the baseline is 4. The description adds no unnecessary parameter details and correctly focuses on the result semantics instead.

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

Purpose5/5

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

The description states a precise verb and resource: 'List every merge tag the user can use in SMS bodies, email subjects, email bodies, and workflow actions.' It also specifies the returned content (reserved tags plus custom fields), making it distinct from sibling tools like tags_list, which refer to operational tags.

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: 'Call this BEFORE drafting any template with merge tags' to ensure tags resolve at send time. It also explains the failure mode that motivates this tool, giving the agent a concrete criterion for invoking it.

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

notes_createAInspect

Add a note to a contact, company, or deal. Notes are plain text and appear on the entity's timeline alongside calls, texts, and emails. Provide EXACTLY ONE of contactId / companyId / dealId.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYesNote text.
dealIdNo
companyIdNo
contactIdNo

TDQS

A4.2/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden. It discloses that notes are plain text and 'appear on the entity's timeline alongside calls, texts, and emails,' which is useful. However, it does not mention other behavioral traits such as whether the note is immutable, whether it can be edited later, or what the tool returns.

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

Conciseness5/5

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

The description is two sentences with no filler. Every sentence adds value: what the note is, where it appears, and the critical parameter constraint.

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

Completeness4/5

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

The tool is simple, and the description covers its purpose, target entities, note formatting, timeline placement, and the one-of constraint. It does not mention return values, but no output schema exists; for a create tool this is a minor gap rather than a blocking omission.

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

Parameters4/5

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

Schema description coverage is only 25%, with only 'body' documented. The description compensates by clarifying that notes are plain text and by imposing the critical 'EXACTLY ONE of contactId / companyId / dealId' constraint that the schema does not encode.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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: 'Add a note to a contact, company, or deal.' It clearly differentiates this create operation from sibling tools like notes_update, notes_list, and notes_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?

The description clearly states the intended use case and adds a hard usage rule: 'Provide EXACTLY ONE of contactId / companyId / dealId.' It does not explicitly mention when to use alternative note tools, but the create-vs-manage distinction is clear from the verb and context.

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

notes_deleteAInspect

Soft-delete a note. DESTRUCTIVE — confirm first.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations, the description carries the full behavioral burden and discloses both the soft-delete nature and the destructive consequence. It could add detail on recoverability or permissions, but the core behavioral traits are clearly stated.

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

Conciseness5/5

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

Two short, front-loaded fragments deliver the essential action and warning without filler. Every word earns its place.

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

Completeness4/5

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

For a one-parameter, no-output-schema delete operation, this is largely complete: it identifies what happens, the required input is visible in the schema, and the destructive risk is flagged. Minor details like restore behavior would improve it but are not essential.

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 says nothing about the 'id' parameter beyond what the schema already shows. For a low-coverage schema, the description should compensate, but it does not.

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

Purpose5/5

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

States the specific operation ('soft-delete') and resource ('a note') clearly, distinguishing it from sibling tools like notes_update and notes_list. The destructive warning further sharpens the intent.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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 'DESTRUCTIVE — confirm first' instruction is an explicit, actionable guardrail, especially valuable because annotations are absent. It does not name alternatives, but for a simple delete operation the warning provides sufficient context for when to use it.

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

notes_listAInspect

List notes attached to a contact, company, or deal. Use this to show recent context before drafting a follow-up. Pass exactly one of contactId / companyId / dealId.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoDefault 50.
dealIdNoLimit to one deal.
offsetNoDefault 0.
companyIdNoLimit to one company.
contactIdNoLimit to one contact.

TDQS

A4.2/5.0
Behavior3/5

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

No annotations are provided, so the description carries the transparency burden. It makes the read-only list operation and the exclusive-ID constraint explicit, which is meaningful. But it says nothing about ordering, pagination behavior, or response contents beyond 'notes,' leaving part of the burden unmet.

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

Conciseness5/5

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

Two tight sentences with no wasted words. The first sentence states the core operation, the second adds the use case and the critical exclusivity rule. No redundant or repeated 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 simple list tool with no output schema or annotations, the description covers the operation, the intended use case, and the main selection rule. It omits details like default ordering or return format, but those are not essential to invoke correctly given the schema includes limit/offset defaults.

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 a crucial constraint not present in the schema: 'Pass exactly one of contactId / companyId / dealId.' This is essential because the schema marks all parameters optional and does not encode mutual exclusivity. It doesn't need to explain limit/offset since the schema already does.

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

Purpose5/5

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

States a specific verb ('List'), a concrete resource ('notes'), and an explicit scope ('attached to a contact, company, or deal'). This clearly distinguishes it from mutation siblings like notes_create/notes_delete and other list tools like calls_list.

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

Usage Guidelines4/5

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

Explicitly prescribes a use case: 'show recent context before drafting a follow-up.' It does not give when-not-to-use or name alternatives, so it falls short of a 5, but the intended context is clear.

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

notes_updateCInspect

Edit an existing note's text.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
bodyYes

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, the description bears full responsibility for behavioral disclosure. It only states that a note's text can be edited, without mentioning overwrite semantics, return values, required permissions, or side effects. Nothing contradicts the tool's purpose, but substantial behavioral context is missing.

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

Conciseness5/5

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

The description is a single short sentence with no filler or repetition. It is appropriately sized for the tool's simple purpose and places the action first.

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?

This is a simple update operation with only two required parameters)Skip no output schema, but the description omits how to obtain a valid id (e.g., via notes_list) and what the response looks like. It is minimally adequate but not fully self-sufficient for an agent.

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 for the id and body parameters. The word 'text' clarifies that body holds the note content, but id is left unexplained, and the description provides no format, length, or relationship details between 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 uses a specific verb ('Edit') and resource ('existing note's text'), making the core operation clear. It is distinguishable from sibling tools like notes_create, notes_delete, and notes_list, though it doesn't explicitly contrast with them.

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

Usage Guidelines2/5

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

No guidance is given about when to use this tool versus alternatives such as notes_create or notes_list. The phrase 'existing note' implies using it on notes that already exist, but there is no explicit context or exclusions.

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

outbound_webhooks_manageAInspect

Manage outbound webhook subscriptions (Groundbase POSTs to a URL whenever a subscribed event fires). Dispatched by action:

  • "list": list all the user's subscriptions. No other args.

  • "get": fetch one by id (without the signing secret). Requires id.

  • "create": subscribe a URL to events. Returns the signing secret ONCE — flag this to the user. Always supply a name so the user can tell multiple subscriptions apart in the list. Requires name, url, events. Valid event names: contact.created, contact.updated, contact.deleted, company.created, company.updated, company.deleted, deal.created, deal.updated, deal.deleted, deal.stage_changed, deal.won, deal.lost, task.created, task.updated, task.completed, task.deleted, note.created, tag.applied, tag.removed, sms.sent, sms.received, sms.delivered, sms.failed, call.completed, voicemail.received, email.sent, invoice.issued, invoice.paid, invoice.voided, payment.recorded. Slack (hooks.slack.com) and Discord (discord.com/api/webhooks) URLs receive a readable message per event; every other URL receives the signed JSON envelope. Use "*" wildcard to subscribe to all events.

  • "update": patch fields. Requires id. Only pass the fields you want to change. To rotate the signing secret, recreate the subscription (current API has no rotate endpoint).

  • "delete": DESTRUCTIVE. Stops new deliveries; in-flight retries are abandoned. Confirm with the user first.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoSubscription UUID. Required for get/update/delete.
urlNoHTTPS URL Groundbase will POST to. Required on create.
nameNoShort human-readable identifier, e.g. "Slack #wins channel". Required on create.
actionYesWhich operation to run.
eventsNoList of event names. Pass ["*"] for all events. Required on create.
isActiveNoPause delivery by setting to false (update only).
descriptionNoOptional longer-form context.

TDQS

A4.6/5.0
Behavior5/5

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

Since no annotations are provided, the description fully carries the behavioral disclosure burden. It clearly states that create returns the signing secret only once, warns the agent to flag this to the user. It also explains the difference in delivery format for Slack/Discord URLs versus other URLs, and explicitly marks delete as DESTRUCTIVE, noting that in-flight retries are abandoned. This is comprehensive and proactive.

Agents need to know what a tool does to the world before 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 structured as a bulleted list per action, which is highly scannable and front-loaded with the action dispatch. It is detailed but necessary, with each sentence serving a purpose (e.g., listing valid event names, explaining URL-specific behavior). Slight verbosity in the event name list is unavoidable for completeness, but the structure keeps it organized.

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 (multiple actions, many parameters, side effects), the description is remarkably complete. It covers all actions, required parameters, valid event names, delivery format nuances, and safety warnings. There is no output schema, but the description compensates by explaining key return values like the one-time signing secret and the lack of a rotate endpoint. An agent can safely invoke this tool in almost all scenarios.

Complex tools with many parameters or behaviors need more documentation. Simple tools 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 provides descriptions for all parameters, and the coverage is 100%, so the baseline is 3. The description adds meaningful context beyond the schema, such as specifying that `id` is required for get/update/delete and that `name` is always required for create (to distinguish subscriptions). It also explains the `events` wildcard and the `isActive` pause behavior, but these are partially redundant with the schema's 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 tool manages outbound webhook subscriptions, with a dispatch on the `action` parameter that exhaustively lists the five operations (list, get, create, update, delete). It distinguishes itself from inbound_webhooks_manage by explicitly referencing 'outbound' and 'Groundbase POSTs to a URL,' making the direction of the webhook 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 provides explicit per-action usage guidance: it states when to use each action, required parameters, and special conditions such as 'Always supply a name' for create and 'Only pass the fields you want to change' for update. It also warns about the lack of a rotate endpoint and the destructive nature of delete, guiding the agent on when to avoid or confirm.

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

resend_manageAInspect

Manage the BYO Resend integration that powers email campaigns. action='status' returns connection + domain verification state, including tracking_enabled. action='enable_tracking' provisions the Resend webhook that delivery/open/click/bounce events arrive through. action='domains' lists EVERY domain on the connected account with its verification state — call this before setting a campaign's from_email or reply_to. One API key covers every domain on the account, so a campaign can send from any of them; but an address on an unverified domain is passed straight to Resend, which rejects the send and fails the recipient row, with no warning beforehand. action='disconnect' wipes stored creds. action='test_send' fires a one-shot email through the connected account. 'connect' is NOT exposed here because pasting an API key into a chat is a credential hazard; users must connect Resend from Settings → Email in the UI.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoFor action='test_send' — recipient email.
htmlNo
textNo
actionYes
subjectNo

TDQS

A4.3/5.0
Behavior5/5

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

With no annotations, the description carries the full behavioral burden and does so well: it discloses that disconnect 'wipes stored creds', that unverified-domain sends silently fail recipient rows with no warning, and that enable_tracking provisions a webhook. It also explains the credential hazard behind not exposing connect. These are exactly the behavioral facts an agent needs.

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

Conciseness4/5

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

The description is long but densely packed with operational facts and warnings, with no filler. It front-loads the tool's purpose and then systematically covers each action. A bulleted structure might aid scannability, but the content earns its 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 multi-action integration manager with no output schema and no annotations, the description covers the main actions and their side effects well. It omits return details for test_send and doesn't tie the optional email fields to the test_send action, which is a minor but real completeness gap. Overall, an agent can safely invoke the main actions.

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

Parameters3/5

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

Schema coverage is only 20%, so the description must compensate. It explains the meaning of every action enum value and notes that test_send is a one-shot email. However, html, text, and subject are not described in either the schema or the description, and 'to' is only described in the schema. The compensation is partial, leaving gaps for constructing test_send calls.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 resource ('BYO Resend integration') and domain ('email campaigns'), then enumerates each action's precise purpose. It also explicitly states what the tool is NOT ('connect' is NOT exposed), which removes ambiguity. This clearly distinguishes the tool and its actions without needing the schema.

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

Usage Guidelines4/5

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

It gives a direct operational rule: call action='domains' before setting a campaign's from_email or reply_to. It also explicitly excludes 'connect' and directs users to the UI, which is valuable guidance. It doesn't explicitly compare against sibling tools like email_send or sending_settings, but the integration-management context is clear enough.

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

saved_views_createAInspect

Save a filter as a named view so the user can reuse it. filterJson is the filter definition as the app stores it — pass the same shape you got from saved_views_list rather than inventing one, since the format belongs to the app's filter builder.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesWhat the user will see in the sidebar.
entityTypeYesWhich record type this view filters.
filterJsonNoFilter definition, JSON-encoded.

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral disclosure burden. It explains the core effect and adds a valuable non-obvious constraint: filterJson must be an app-stored shape from saved_views_list rather than an invented format. It does not cover errors or permissions, but the most important behavioral risk is addressed.

Agents need to know what a tool does to the world before calling 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 primary purpose is front-loaded, and the filterJson caveat is concise but essential.

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

Completeness4/5

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

For a simple three-parameter create tool with no output schema, the description covers what the tool does and the one tricky parameter. Return-value details are omitted, but the action is straightforward and the schema is fully documented, so this is a minor gap.

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

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 meaning beyond the schema by clarifying that filterJson should reuse the exact shape returned by saved_views_list because the format belongs to the app's filter builder. This is genuinely useful guidance that the schema alone does not provide.

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

Purpose5/5

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

The description names a specific operation—save a filter as a named view for reuse—using a clear verb and resource. It is also distinct from the main sibling saved_views_list, which only lists existing views.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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 use case is clearly stated: persist a filter so the user can reuse it. It does not explicitly say when not to use it, but the only same-family sibling is the list operation, making the intended context clear without exclusions.

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

saved_views_listAInspect

List the user's saved views — stored filters over contacts, companies, deals or tasks. Use this to answer "what views do I have?" or to find a view id before applying its filter. Pass entityType to narrow to one kind of record.

ParametersJSON Schema
NameRequiredDescriptionDefault
entityTypeNoOnly views for this record type.

TDQS

A3.9/5.0
Behavior3/5

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

With no annotations provided, the description carries the burden of behavioral disclosure. It implies a read-only listing operation but does not explicitly state that it is non-destructive, does not mention authentication requirements, or describe any side effects. For a simple list operation this is acceptable but not fully transparent.

Agents need to know what a tool does to the world before 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 fluff. The core purpose is front-loaded, and the parameter hint is placed logically at the end. Every sentence earns its place.

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

Completeness3/5

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

For a simple list tool with one optional parameter, the description covers the core usage. However, it does not describe the return format (e.g., what fields are included, whether pagination applies), which would be helpful for an agent to know what data to expect. Given the tool's simplicity, this is a minor gap but still relevant.

Complex tools with many parameters or behaviors need more documentation. Simple tools 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 describes entityType as 'Only views for this record type.' The description adds a bit of context by saying 'Pass entityType to narrow to one kind of record,' which reinforces but does not significantly extend the schema meaning. Since schema coverage is 100%, the description provides marginal added value.

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

Purpose5/5

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

The description clearly states the tool lists saved views and explains they are stored filters over contacts, companies, deals, or tasks. It also gives the typical use cases (answering 'what views do I have?' or finding a view id). It is clearly distinguished from the sibling saved_views_create.

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

Usage Guidelines4/5

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

The description explicitly states when to use the tool ('Use this to answer ... or to find a view id before applying its filter') and gives a hint about the parameter usage ('Pass entityType to narrow to one kind of record'). It doesn't explicitly state when not to use it or name alternatives, but the 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.

sending_settingsAInspect

Read or set account-level limits on outbound campaign volume. action='get' returns { daily_email_send_cap, sent_today, remaining_today, timezone }; action='set' writes daily_email_send_cap. The cap is the maximum campaign EMAILS this account may send per calendar day in the account's own timezone. It is per ACCOUNT, not per campaign — eight campaigns sending "only 20 each" is still 160 emails from one domain, and reputation attaches to the domain. Use it to warm a new sending domain: start around 20/day and raise it weekly. SMS campaigns are never counted. When the cap is reached, remaining recipients stay QUEUED and send on following days — nothing fails, nothing is skipped, and drip step spacing still runs from each recipient's actual send time. null means uncapped; 0 means send no email today. PER DOMAIN: pass domain to cap one sending domain on its own budget. Reputation attaches to the domain, so with two domains in play a single account-wide number throttles the pair jointly and cannot stop the whole day's allowance landing on one of them — which is how a warming domain gets burned. BOTH APPLY: the account-wide cap is a total across every domain, and a domain's own cap sits inside it — an email sends only if it fits under both. A domain with no cap of its own is held by the account-wide cap alone, so single-domain accounts need not set any. action='get' returns domain_caps, each with its own sent_today and remaining_today. Use resend_manage(action='domains') to see which domains are verified.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYes'get' to read, 'set' to write.
domainNoFor action='set'. Bare hostname, e.g. 'example.com'. Caps only mail sent from that domain, inside the account-wide cap. Omit to set the account-wide cap, which totals every domain and is the only cap on a domain without its own.
daily_email_send_capNoFor action='set'. Non-negative integer, or null to remove the cap entirely.

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations present, the description carries the full burden and does so thoroughly. It explains queueing behavior when the cap is reached, the account-wide vs. domain-specific interaction, null vs. 0 semantics, timezone handling, and that SMS campaigns are never counted — far more than annotations would provide.

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

Conciseness4/5

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

The description is long but every sentence contributes substantive operational detail. Some redundancy exists around account-wide versus domain caps, but the density of concept is high enough that the length is justified.

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

Completeness5/5

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

Given no output schema, the description fully documents return values, parameter behavior, edge cases, and how to coordinate with the sibling tool resend_manage. Nothing an agent needs to call this tool correctly is missing.

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

Parameters5/5

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

Although schema coverage is already 100%, the description adds significant behavioral context for each parameter: what action='get' returns, what domain means in terms of budget isolation, and what null versus 0 does. This goes well beyond the schema's short 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 clearly states a specific verb ('Read or set') and resource ('account-level limits on outbound campaign volume'), and defines exactly what each action does. It distinguishes itself from related tools like email_send by focusing on account/domain sending caps rather than sending individual emails.

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

Usage Guidelines4/5

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

The description explains when to use the tool (warming a new sending domain) and how to check verified domains via resend_manage. It doesn't explicitly list alternatives to avoid, but the use-case guidance and cross-reference to resend_manage are strong enough to orient an agent.

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

sms_cancel_scheduledAInspect

Cancel a scheduled SMS that hasn't been sent yet. Only works while status='scheduled' — already-delivered messages can't be unsent. Returns 404 if the id is unknown or already fired.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYessms_messages row UUID.

TDQS

A4.4/5.0
Behavior5/5

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

No annotations are provided, so the description fully carries the burden. It discloses the state requirement, the impossibility of unsending delivered messages, and the 404 error behavior for unknown or already-fired ids. This is strong behavioral coverage for a single-purpose tool.

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

Conciseness5/5

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

Three short sentences, each adding distinct value: what the tool does, when it works, and what error to expect. No filler or repetition.

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

Completeness4/5

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

For a one-parameter tool with no output schema, the description covers the operation, constraints, and error behavior well. It doesn't describe the success response, but that is a minor gap given the output is likely empty and the failure case is explicitly documented.

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

Parameters3/5

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

Schema description coverage is 100% and the single 'id' parameter is already documented as 'sms_messages row UUID'. The description adds no additional parameter semantics, but with complete schema coverage and one simple parameter, baseline 3 is appropriate.

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

Purpose5/5

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

States a specific verb ('cancel') and resource ('scheduled SMS'), and clarifies the operation is for messages that haven't been sent yet. It is clearly distinct from siblings like sms_send_scheduled or sms_list_scheduled.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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 defines the valid condition ('status='scheduled'') and names an exclusion ('already-delivered messages can't be unsent'). It doesn't mention alternatives or how to find the id, but the condition alone gives sufficient usage context for a simple cancellation tool.

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

sms_list_scheduledAInspect

List the user's pending scheduled SMS messages (status='scheduled', not yet sent). Useful for showing the user what's queued up or finding a message id to cancel.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It does disclose the status filter (scheduled, not yet sent), which is useful scoping behavior, but it does not explicitly state that this is a read-only operation, nor does it describe the output structure or any limits. For a list tool, this is adequate but lacks the richer detail that annotations would normally 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 two sentences with no fluff. The first sentence front-loads the verb 'List' and the resource, and the second sentence provides practical use cases. Every word earns its place, maintaining brevity without sacrificing key details.

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 tool with zero parameters and no output schema, the description covers the key selection criteria (status filter) and use cases. However, it does not specify what the returned objects contain (e.g., message IDs, content, send time), which is a gap given the absence of an output schema. An agent might need that detail to invoke the tool correctly in a follow-up action like cancellation.

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 has zero parameters, so there is nothing to explain. The description adds context about what the list contains (user's pending scheduled SMS messages), which complements the empty schema. Per the rubric, 0 parameters gets a baseline of 4, and the description does not detract from 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 starts with a specific verb and resource: 'List the user's pending scheduled SMS messages.' It clarifies the status filter (status='scheduled', not yet sent), which distinguishes it from siblings like sms_send_scheduled (schedules) and sms_cancel_scheduled (cancels). The 'finding a message id to cancel' phrase further connects it to the cancellation workflow, leaving no ambiguity about its role.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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 use cases: 'showing the user what's queued up or finding a message id to cancel.' This indicates when to use the tool but does not explicitly name alternatives or state when not to use it. The context is clear enough for an agent to select it over siblings, though it stops short of full when-not guidance.

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

sms_list_threadAInspect

Read the SMS conversation with a phone number — the most recent messages, oldest first, both directions. Use this before drafting a reply, and to check whether someone has already replied or opted out. Returns matched: false with an empty list when there is genuinely no conversation with that number.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax messages, default 50.
phoneYesThe OTHER party's phone. Any format — "+1 416 555 0123", "14165550123" and "4165550123" all resolve to the same conversation.

TDQS

A4.1/5.0
Behavior3/5

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

No annotations present, so the description carries the burden. It discloses that it returns the most recent messages, oldest first, and the matched:false behavior, which is helpful. However, it doesn't mention whether it includes opt-out status or any rate limits, so it is adequate but not rich.

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

Conciseness4/5

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

Description is compact, front-loaded with the action and direction, and each sentence adds value. Could be slightly shorter by removing 'genuinely' but overall efficient and well-organized.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn 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 2-parameter read tool with no output schema, the description is quite complete. It covers ordering, direction, and the no-result case, which are the key things an agent needs. Minor gaps like pagination or opt-out status are not critical for basic invocation.

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

Parameters4/5

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

Schema coverage is 100%, but the description adds value beyond the schema: it clarifies the 'phone' parameter is the 'OTHER party' and explains phone number format normalization, which is useful for correct invocation. It also states default limit, though the schema already covers it. This is borderline 3/4, but the normalization detail pushes it to 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 clearly states it reads an SMS conversation with a phone number, specifying direction and ordering. Distinct from siblings like sms_list_scheduled and email_list_threads, and the 'matched: false' behavior disambiguates from other list tools.

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

Usage Guidelines4/5

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

Explicitly says to use before drafting a reply and to check for replies/opt-outs. Although it doesn't name alternatives, the context is clear enough given the sibling list includes sms_send_now and sms_optouts, so an agent can infer when to use this tool.

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

sms_optoutsAInspect

Read and maintain the SMS suppression list — the numbers this account must never text. action='list' returns every suppressed number with the contact it matches, if any. action='add' records opt-outs that happened somewhere else: before this list existed, on a number no longer owned, or on another platform. Numbers are normalised to E.164 before storing, because the send-time check is an exact string match and a row in any other shape is silently never found. Anything that cannot be read as a phone number is reported back rather than skipped. action='remove' deletes a suppression — only when someone has genuinely opted back in. Twilio suppression is NOT a substitute: it is scoped to the sending number, so the same list sent from a newly purchased number is unblocked. This list is what survives that.

ParametersJSON Schema
NameRequiredDescriptionDefault
phoneNoFor action='remove', or a single 'add'.
actionYes
phonesNoFor action='add' — one or more numbers, any format. Max 500.
sourceNoOptional label for action='add'. Defaults to 'imported'. 'stop_keyword' is reserved for the inbound webhook so the two can be told apart.

TDQS

A4.8/5.0
Behavior5/5

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

With no annotations, the description carries the full disclosure burden and does so thoroughly. It reveals that numbers are normalized to E.164 before storage because the send-time check is an exact string match, warns that a row in any other shape is silently never found, states that invalid numbers are reported back rather than skipped, and explains the limitation of Twilio suppression. These are critical behavioral traits 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?

The description is a dense paragraph but every sentence earns its place. It front-loads the purpose, then systematically covers each action, the normalization caveat, error handling, and the Twilio contrast. There is no filler or redundant repetition of schema content; the length is justified by the tool's three-action complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence 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 essential behavioral context for correct invocation: action semantics, normalization, error reporting, and the relationship to Twilio suppression. However, with no output schema, it leaves minor gaps: it does not state what add/remove return, and it does not mention pagination for list, which could matter for large suppression lists. These are not critical for calling the tool correctly but are the only missing pieces.

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 75% (three of four parameters have descriptions), so the baseline is 3, but the description adds meaningful semantics: it explains what each action value does, the normalization and exact-match behavior for phone/phones, and the context that source labels where an opt-out came from. It does not redundantly repeat schema descriptions but enriches them, especially for action and phone/phones.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 ('Read and maintain the SMS suppression list') and immediately clarifies the account-wide scope. It differentiates the tool from siblings by being the only suppression-list tool among SMS sending and template tools, and it enumerates the three actions (list, add, remove) with distinct semantics.

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 conditions for each action: add is for opt-outs that happened elsewhere (before the list existed, on a number no longer owned, or on another platform), remove is only for genuine opt-backs-in, and list returns all suppressed numbers. It explicitly contrasts with Twilio suppression, stating it is NOT a substitute and why, which tells an agent when this tool is the correct choice versus the alternative.

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

sms_send_nowAInspect

Send an SMS message to a phone number immediately. The recipient phone must be in E.164 format (+1...). Cost is billed at $0.025/segment (160 GSM chars per segment, 70 unicode). Pass contactId when available so the message attaches to that contact's thread.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYesMessage text. 1+ chars, will be split into segments automatically.
toPhoneYesRecipient phone in E.164 (+1...).
contactIdNoOptional contact UUID to link the message to.
fromNumberNoOptional sending number in E.164. Defaults to the user's primary.

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations, the description carries the full behavioral disclosure burden. It adds non-obvious details: cost is $0.025/segment, segment limits are 160 GSM / 70 unicode chars, and providing contactId attaches the message to the contact's thread. This is strong context, though response/error behavior is not covered.

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

Conciseness5/5

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

Three sentences, each carrying distinct, non-redundant information: core action, format/cost, and contactId guidance. The main action is front-loaded, with no filler.

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

Completeness5/5

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

For a straightforward send action with fully described schema parameters, the essential operational context is present: E.164 requirement, segment billing, thread linkage, and default sender behavior (in schema). Nothing material is missing for correct invocation.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3. The description adds extra meaning beyond the schema by quantifying body segmentation/cost and explaining the thread-attachment effect of contactId, lifting 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 clearly states 'Send an SMS message to a phone number immediately' – a specific verb, resource, and temporal scope. The word 'immediately' distinguishes it from sms_send_scheduled, making the tool easy to separate from 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 word 'immediately' establishes the primary use case (instant send vs. scheduled send), and 'Pass contactId when available' offers practical when-to-do guidance. However, it does not explicitly name sms_send_scheduled or state when not to use this tool, so it stops short of full exclusions.

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

sms_send_scheduledAInspect

Schedule an SMS message for future delivery. scheduledAt must be an ISO 8601 timestamp in the future (UTC or with offset). The per-minute cron dispatches scheduled messages as their time arrives. Same billing as send_now — final balance debit happens at fire time, so a top-up between scheduling and sending works.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYesMessage text.
toPhoneYesRecipient phone in E.164.
contactIdNoOptional contact UUID to link to.
fromNumberNoOptional sending number; defaults to primary.
scheduledAtYesISO 8601 timestamp in the future, e.g. 2026-06-09T15:30:00Z.

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden. It discloses critical behavioral traits: the cron dispatch mechanism, billing timing (debit at fire time), and the implication that a top-up before sending works. It does not mention cancellation or editing behavior, but the covered aspects are significant and useful.

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

Conciseness4/5

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

The description is concise, with three sentences that front-load the core purpose and then add key constraints and billing behavior. It could be slightly more structured by separating the billing note, but it is efficient and well-ordered.

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

Completeness4/5

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

Given no annotations and no output schema, the description covers the essential details for correct invocation: future timestamp, billing timing, and dispatch mechanism. It lacks explicit mention of cancellation (handled by a sibling) but is generally complete for scheduling. The complexity is moderate, and the description fills the major gaps.

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

Parameters3/5

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

The schema description coverage is 100%, so all parameters are already documented. The description adds value by clarifying that scheduledAt must be a future ISO 8601 timestamp, which reinforces the schema's example but does not add new semantics for other parameters. This is baseline credit per the rubric.

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

Purpose5/5

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

The description clearly states the tool's purpose: scheduling an SMS for future delivery. It specifies the verb 'schedule', the resource 'SMS message', and the key concept of future delivery, which distinguishes it from immediate send tools like sms_send_now and management tools like sms_cancel_scheduled and sms_list_scheduled.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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 on when to use this tool (for future delivery) and implicitly contrasts with immediate sending via the billing comparison to 'send_now', but it does not explicitly state when not to use it or mention alternatives like sms_send_now or sms_cancel_scheduled by name. The context is clear but lacks explicit exclusions.

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

sms_templates_createAInspect

Create a new SMS template. Use {{first_name}} / {{last_name}} / {{full_name}} / {{company}} placeholders — they're substituted at send time. Returns the new template id.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYesTemplate body with {{variable}} placeholders.
nameYesShort label so users can pick it from a list.

TDQS

A3.6/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It does reveal the mutation (create) and the return value (new template id), which is useful, but it does not mention any side effects (e.g., whether the placeholder substitution is validated, whether the template can be used immediately, or if there are any restrictions on body length). For a mutation tool without annotations, this is a notable gap.

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

Conciseness5/5

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

The description is two sentences, front-loads the core action (create a new SMS template), and immediately provides the most critical usage detail (placeholder syntax). It is efficient and every sentence adds value, with no fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence 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 parameters, no output schema, no nested objects) and 100% schema coverage, the description is largely complete. It covers the creation purpose, placeholder usage, and return value. The only minor gap is the lack of explicit guidance on when to use this vs. update or list, but that is secondary given the clear verb.

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

Parameters3/5

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

Schema description coverage is 100%, with each parameter having a description (body: 'Template body with {{variable}} placeholders.', name: 'Short label so users can pick it from a list.'). The description adds the specific placeholder names ({{first_name}}, etc.) and confirms that the body parameter accepts these placeholders, which is helpful beyond the schema. However, it does not explain the required status or any constraints, but the schema already covers those.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 ('Create'), the resource ('a new SMS template'), and the key behavior (placeholder substitution). It distinguishes from siblings like sms_templates_list and sms_templates_update because it explicitly says 'create' and mentions the returned template id, which is unique to creation. The sibling list contains many similar create tools, but the description is specific enough to disambiguate from them.

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

Usage Guidelines3/5

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

The description explains what to do (create a new template) and mentions placeholder substitution, but does not explicitly state when to use this tool vs alternatives (e.g., sms_templates_update for editing, or sms_templates_list for browsing). No exclusions or alternative references are given, leaving some inference to the agent based on the verb 'create'.

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

sms_templates_deleteBInspect

Soft-delete a SMS template. DESTRUCTIVE — confirm first.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

B3/5.0
Behavior3/5

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

With no annotations provided, the description bears the full burden of behavioral disclosure. It explicitly flags the operation as 'DESTRUCTIVE' and characterises it as a 'soft-delete,' which is useful behavioral context. However, it does not explain what 'soft-delete' means in practice (e.g., reversibility, impact on existing references) or what response to expect.

Agents need to know what a tool does to the world before 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 appropriately short and front-loaded with the primary action, followed by a relevant destructiveness warning. It wastes no words, though it is minimal enough to border on under-specification. Still, for a one-parameter tool, the length is reasonable.

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 the tool's low complexity (single required parameter, no output schema, no annotations), the description conveys the essential action and risk but leaves gaps: it does not explicitly state where the 'id' should come from, what 'soft-delete' entails, or what a successful call returns. It is adequate but not fully 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?

The input schema has a single required 'id' string parameter with 0% description coverage. The description does not explicitly document this parameter; it only implies by context that 'id' identifies the SMS template. At 0% schema coverage, the description should compensate by clarifying parameter semantics, which it fails to do.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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: 'Soft-delete a SMS template.' It clearly identifies what the tool does and adds the meaningful qualifier 'soft-delete.' However, it does not explicitly differentiate from sibling delete tools (e.g., email_templates_delete) beyond the resource name, so it does not earn a 5.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. The warning 'DESTRUCTIVE — confirm first' is a caution about how to invoke it, not a usage selection criterion. No sibling alternatives or exclusion conditions are mentioned.

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

sms_templates_getBInspect

Fetch a single SMS template by id.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

B3.2/5.0
Behavior2/5

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

Annotations are absent, so the description carries the full burden. It only states 'Fetch a single SMS template by id' and does not disclose behavioral traits such as read-only nature, error handling (e.g., 404 if not found), response format, or any permissions needed. 'Fetch' implies a read, but this is not explicit.

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

Conciseness5/5

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

The description is a single, front-loaded sentence with no wasted words. It states the action and the key parameter immediately, making it easy to parse quickly.

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

Completeness3/5

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

For a simple one-parameter get tool with no output schema and no annotations, the description covers the basic action but omits return behavior, error cases, and any usage context. It is minimally viable but leaves gaps that an agent might need, such as what a successful response contains.

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 only says 'by id', which adds minimal meaning beyond the parameter name 'id'. It does not explain the format, constraints, or what the id refers to beyond the obvious. The description fails to compensate for the lack of 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 'Fetch a single SMS template by id' clearly specifies the verb (fetch), the resource (SMS template), and the scope (single, by id). This distinguishes it from sms_templates_list (which would fetch multiple) and other sms_templates_* siblings without needing to open the schema.

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

Usage Guidelines2/5

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

No guidance is given on when to use this tool versus alternatives. There is no mention of 'use sms_templates_list to get all templates' or any exclusions or prerequisites. The intended usage is only implied by the tool name and the phrase 'by id'.

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

sms_templates_listAInspect

List the user's SMS templates. Each template has a name, body, and (for email) subject. Use this to find an existing template before drafting a new one.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral burden. It discloses that the tool lists the user's templates and describes the main fields returned (name, body, and subject). 'List' clearly implies a read-only operation, and the field-level detail adds useful behavioral context beyond the bare tool name.

Agents need to know what a tool does to the world before calling 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 with no filler. The action is front-loaded in the first sentence, and the second sentence adds both output-field information and a practical use case. 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 is adequate for selecting and invoking a zero-parameter list tool, and it names some returned fields. However, it omits an identifier field in the returned templates, which an agent would likely need to subsequently get, update, or delete a template. There is also no explicit mention of output format or pagination, though the absence of an output schema raises the burden on the 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?

The input schema has zero parameters and 100% schema coverage, so there is no parameter burden for the description to carry. The description correctly implies an unfiltered listing of the user's templates, which is sufficient for a parameterless tool.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'List the user's SMS templates.' This clearly distinguishes the tool from related siblings like sms_templates_get, sms_templates_create, and email_templates_list by operation and resource type. The added statement about finding an existing template before drafting reinforces the intended 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 gives an explicit usage context: 'Use this to find an existing template before drafting a new one.' This helps an agent know when to call the tool, but it does not provide exclusions or compare against alternatives such as sms_templates_get or email_templates_list, 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.

sms_templates_updateCInspect

Edit an existing SMS template.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
bodyNo
nameNo

TDQS

C2.9/5.0
Behavior2/5

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

There are no annotations, so the description carries the full burden of behavioral disclosure. 'Edit an existing SMS template' conveys that the operation mutates state and requires the resource to already exist, but it does not explain whether fields are partially updated or wholly replaced, whether the operation is reversible, or what happens if the id does not exist. This is a meaningful gap for a mutation tool with no annotation support.

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, front-loaded sentence with no filler, which is structurally clean. However, it is under-specified for a tool with three undocumented parameters and no annotations, making brevity more of a deficiency than an asset.

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 three-parameter tool with no annotations, no output schema, and zero parameter descriptions, this is not complete. The description leaves out field semantics, update behavior, and any indication of what a successful edit returns. An agent could guess the basics from the tool name stub 'sms_templates_update', but the description does not sufficiently equip it to invoke the tool correctly.

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%, so the description is the only source of parameter meaning, but it names no parameters. It does not clarify that 'id' identifies the template or that 'body' and 'name' are the editable fields. The schema's property names are somewhat self-explanatory, but the description itself adds no parameter 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 states a specific verb ('Edit'), a specific resource ('SMS template'), and scopes it to an existing entity, which clearly differentiates it from sms_templates_create, sms_templates_get, sms_templates_list, and sms_templates_delete. An agent can infer what this tool does immediately from the description alone.

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

Usage Guidelines3/5

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

The word 'existing' implies this is for updating already-created templates rather than creating new ones, and the sibling names reinforce that. However, the description does not explicitly state when to choose this tool over sms_templates_create or sms_templates_get, nor does it mention any prerequisites such as needing a valid template id.

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

tags_applyAInspect

Apply a tag to one or more contacts in bulk. Idempotent — contacts already tagged are skipped without error. Returns count of contacts the tag was newly applied to.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagIdYesTag UUID.
contactIdsYesContact UUIDs.

TDQS

A3.8/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and discloses meaningful behavior: idempotency, skipping already-tagged contacts without error, and returning the count of newly applied tags. It does not cover permissions or failure modes, but the disclosed behaviors are directly useful 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?

Two sentences with no filler; the action is front-loaded and the idempotency/return behavior is presented compactly. Every sentence adds 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 two-parameter bulk mutation, the description covers the operation, its idempotent behavior, and the return value, which is sufficient for correct invocation. It omits potential error cases and auth requirements, but these are not critical for a simple apply operation.

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

Parameters3/5

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

Schema description coverage is 100% (both tagId and contactIds have descriptions), so the baseline is 3. The description adds no param-specific semantics beyond the schema, though the idempotency note clarifies how contactIds are processed (already-tagged are skipped).

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 ('Apply') and resource ('a tag to one or more contacts in bulk'), making the tool's function immediately clear. It does not explicitly name sibling alternatives like tags_remove, but the verb and resource are specific enough to distinguish the operation from tag management tools.

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

Usage Guidelines3/5

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

The description implies usage context with 'in bulk' and idempotency, suggesting it is safe for bulk operations and retries. However, it gives no explicit guidance on when to prefer this over tags_remove or tags_create, nor does it state any 'when not to use' conditions.

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

tags_createBInspect

Create a new tag. Name is required. Color is a hex string like "#B91C1C".

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
colorNoHex color, e.g. "#B91C1C". Optional.

TDQS

B3.4/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It only repeats schema facts (name is required, color is a hex string) and does not mention any behavioral traits such as return values, duplicate handling, validation behavior, or side effects. This is a meaningful gap for a tool with zero annotation coverage.

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

Conciseness5/5

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

The description is two short sentences with no wasted words. The core action is front-loaded, and the parameter notes are directly relevant. Every sentence earns its place.

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

Completeness3/5

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

For a simple two-parameter create operation with no output schema, the description covers the required inputs and the color format. However, it omits any information about response behavior, error conditions, or whether duplicate names are handled, leaving minor but real gaps for an agent to call 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%, with the name parameter lacking any schema description. The tool description adds 'Name is required', which is already captured by the schema's required field, and the color example duplicates the schema description. It does not explain what constitutes a valid name or any additional nuance, failing to compensate for the missing schema coverage.

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

Purpose5/5

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

The description opens with the specific verb-resource pair 'Create a new tag', which directly states the tool's function. This clearly distinguishes it from siblings like tags_apply, tags_delete, tags_update, and tags_remove, each of which performs a different operation on tags.

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

Usage Guidelines3/5

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

Usage is implied by the create verb: use this when a new tag is needed. However, the description gives no explicit guidance about when not to use it or how it relates to sibling tools like tags_update or tags_apply. There are no stated alternatives or exclusions, so the guidance is only implicit.

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

tags_deleteAInspect

Delete a tag. Contacts previously tagged with it lose the tag but are NOT deleted. DESTRUCTIVE — confirm first.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

A3.9/5.0
Behavior4/5

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

With no annotations, the description carries the full behavioral burden and discloses the key risks: the operation is destructive, requires confirmation, and has the side effect that contacts lose the tag but are not deleted. It does not cover reversibility or response details, but the essential safety-relevant behavior is clearly exposed.

Agents need to know what a tool does to the world before 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 action, the critical side effect, and the warning without filler. The content is front-loaded with the verb-object statement and the uppercase warnings add emphasis efficiently.

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

Completeness4/5

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

For a simple one-parameter destructive delete with no output schema and no annotations, the description covers the core behavior and main side effect well. It could strengthen completeness by explicitly naming tags_remove as the alternative for non-destructive tag removal and by confirming that id is the tag ID, but these are minor for a tool this simple.

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 only parameter, id, has no schema-level description (0% coverage), and the description adds no explicit parameter guidance beyond implying that the ID refers to the tag to delete. The tool name and action make this inferable, but the description does not truly compensate for the missing 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 opens with the specific verb-object action 'Delete a tag,' so the resource and operation are unambiguous. It also distinguishes itself from sibling operations by stating that contacts are not deleted, clarifying that this deletes the tag definition itself rather than removing contacts.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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 signals caution with 'DESTRUCTIVE — confirm first' and indicates the general effect on contacts. However, it does not explicitly name alternatives such as tags_remove for detaching a tag from a contact, so an agent must infer the boundary between deleting a tag and removing a tag from contacts.

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

tags_listAInspect

List all tags the user has defined. Useful before applying a tag to find its UUID, or to see what tags already exist before creating new ones.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior3/5

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

No annotations are present, so the description carries the full burden. It reveals a read-only intent and hints that responses include tag UUIDs ('to find its UUID'), but does not disclose pagination, ordering, or whether additional tag fields are returned. For a simple list operation this is adequate but not comprehensive.

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

Conciseness5/5

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

Two sentences with no filler. The core function is front-loaded, and the second sentence adds genuine value by explaining why the list matters. Every word 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 list tool with no output schema, the description covers the operation, scope, and practical use cases. An agent knows what the tool does and how to use the result. Nothing essential is missing.

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

Parameters4/5

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

The tool has zero parameters, so the schema already conveys all there is to know. The description adds no parameter details, but none are needed. Baseline 4 applies for parameterless tools.

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

Purpose5/5

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

The description states a specific verb and resource: 'List all tags the user has defined.' It distinguishes itself from sibling tools like merge_tags_list by scoping to user-defined tags, and from tags_apply/tags_create/tags_delete which are clearly mutations. An agent can immediately understand 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 description provides concrete usage context: use it before applying a tag to find its UUID, or before creating tags to see existing ones. It does not explicitly mention when not to use it or name alternative tools, but the context alone is clear and actionable.

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

tags_removeAInspect

Remove a tag from one or more contacts in bulk. Idempotent.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagIdYes
contactIdsYes

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations, the description carries the burden of behavioral disclosure. It usefully states that the operation is idempotent, which is a meaningful behavioral trait beyond the obvious mutation. However, it does not mention permissions, edge cases, partial failures, or what happens to non-existent contacts or tags, leaving some 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 two short sentences with no filler. The primary action is front-loaded, and the idempotence note is placed efficiently as a separate clarifying statement, so every sentence earns its place.

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

Completeness4/5

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

For a simple bulk-remove tool with two self-explanatory parameters, the core invocation details are present: what to remove, from whom, and the bulk/idempotent behavior. It lacks return-value information and explicit failure semantics, but given the simplicity and lack of output schema, those are relatively minor gaps.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate. It adds meaning by clarifying that contactIds can hold one or more contacts and that the action is bulk, which maps to the array parameter. Still, it does not explain ID formats, uniqueness requirements, or behavior for invalid IDs, 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 uses the specific verb 'remove' with a clear resource ('a tag') and target ('one or more contacts'), making the tool's action unmistakable. It also distinguishes itself from siblings like tags_apply (opposite action) and tags_delete (likely deletes the tag definition itself), so an agent can separate it without inspecting schemas.

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

Usage Guidelines2/5

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

The description states what the tool does but gives no explicit guidance on when to use it versus alternatives, no exclusions, and no mention of related tools like tags_apply. Usage context is only weakly implied by the verb 'Remove', which is not enough to route an agent confidently.

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

tags_updateBInspect

Rename a tag or change its color.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
nameNo
colorNo

TDQS

B3.3/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It only names the actions, omitting important details such as whether partial updates are allowed (e.g., only name or only color), what happens on an invalid id, whether the operation is idempotent, or any permission requirements. For a mutation tool, this is insufficient transparency.

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

Conciseness5/5

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

The description is one short sentence that front-loads the operation with no filler, redundancy, or unnecessary context. Every word contributes to understanding the tool's purpose.

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

Completeness2/5

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

With no annotations, no output schema, and zero parameter descriptions, this minimal definition leaves out essential calling information. It fails to explain the required id parameter, the effect of omitting optional fields, the response format, or potential errors, making it incomplete for reliable 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%, so the description must compensate. It clarifies that 'name' and 'color' are the changed fields, but it does not explain that 'id' identifies the target tag or specify constraints such as color format or whether at least one of name/color is required. The description adds minimal meaning beyond what the property names already convey.

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

Purpose5/5

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

The description uses specific verbs 'rename' and 'change color' against the tag resource, making the operation unmistakable. It distinguishes itself from sibling tag tools (tags_create, tags_delete, tags_list, tags_apply, tags_remove) by clearly focusing on modification, so an agent can select it correctly.

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

Usage Guidelines3/5

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

The description states the intended use case ('rename a tag or change its color'), giving clear context for when to use it. However, it provides no explicit alternatives, exclusions, or conditions for preferring this over other tag tools, leaving the comparison to inference.

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

tasks_completeAInspect

Mark a task done. For recurring tasks, the server automatically spawns the next occurrence so the series keeps going — you don't need to create it manually.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

A3.8/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It discloses the recurring-task behavior (auto-spawning next occurrence), which is valuable. However, it omits any side effects, reversibility, or return behavior. For a mutation tool without annotations, this is a gap, though the core mutation is implied.

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

Conciseness5/5

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

Two sentences, front-loaded with the core action and a useful caveat. No fluff or redundancy.

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

Completeness3/5

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

For a simple completion action with one parameter, the description covers the main action and a key behavior (recurring). However, it omits any mention of response format, errors, or prerequisites (e.g., task must exist). Without annotations or output schema, this is a minor gap but acceptable for a simple 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 0% and the description does not explain the 'id' parameter. The tool name and context imply 'id' is the task identifier, but the description fails to explicitly state this. With low schema coverage, the description should compensate but doesn't.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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: 'Mark a task done'. It clearly distinguishes from sibling tasks_update (which implies editing fields) by focusing on completion. The recurring task note adds context without muddying the primary 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?

It provides a clear usage hint: for recurring tasks, the server auto-spawns the next occurrence, so the agent doesn't need to create it manually. This implicitly guides against using tasks_create for the next occurrence. However, it doesn't explicitly contrast with tasks_update or tasks_delete, but the action is clear enough.

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

tasks_createAInspect

Create a task, event, or meeting. • task — has dueAt + optional recurrence (daily/weekly/monthly/yearly/weekdays). • event — has startAt + endAt. • meeting — has startAt + endAt + location. Title is required. Link to a contact (contactId), company (companyId), or deal (dealId).

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNoDefault: task.
dueAtNoISO 8601 — when the task is due (for kind=task).
endAtNoISO 8601 — end time (for event/meeting).
notesNo
titleYes
dealIdNo
startAtNoISO 8601 — start time (for event/meeting).
locationNoFor meetings.
companyIdNo
contactIdNo
recurrenceNoRepeat rule for kind=task. One of: daily, weekly, monthly, yearly, weekdays. Repeats relative to dueAt — e.g. dueAt on a Monday with "weekly" repeats every Monday. RRULE strings are NOT supported. Omit for a one-off task.

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations provided, the description carries the behavioral disclosure burden. It discloses the key behavior: title is required, task/event/meeting have different required time fields, recurrence applies only to tasks, and the item can be linked to contact/company/deal. It does not describe the response shape or side effects, but the creation semantics and conditional field requirements are clearly 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?

The description is compact and front-loaded: the core purpose appears first, followed by a tight bulleted breakdown of the three kinds. Every sentence adds useful information, with no filler or repetition of the tool name.

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

Completeness4/5

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

For an 11-parameter tool with no output schema and no annotations, the description does a solid job: it covers the main behavior, distinguishes the three kinds, and explains the linking parameters. Minor gaps remain—notes is not mentioned and the default kind=task is only in the schema—but the description plus schema together provide enough to call 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 55%, so the description meaningfully compensates by explaining the kind-specific meanings of dueAt, startAt, endAt, location, and recurrence. It also adds semantics for the otherwise undocumented contactId, companyId, and dealId by stating they link to a contact, company, or deal. Only notes remains without added 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 a specific verb and resource: "Create a task, event, or meeting." It clearly distinguishes the tool from siblings like tasks_update, tasks_complete, tasks_get, tasks_list, and tasks_delete by focusing on creation. The bulleted breakdown of the three kinds further sharpens 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 gives clear context for when to call this tool: whenever a task, event, or meeting needs to be created. It does not explicitly name alternatives or state when not to use it, but the create-focused wording plus the sibling set makes the appropriate use case obvious.

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

tasks_deleteAInspect

Soft-delete a task. DESTRUCTIVE — confirm first.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

A3.9/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It explicitly labels the operation as 'DESTRUCTIVE' and warns to confirm first, which is meaningful for an AI agent. It stops short of explaining reversibility or side effects, but the soft-delete wording gives useful nuance.

Agents need to know what a tool does to the world before 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 entire description is one short, front-loaded sentence with no wasted words. The core action comes first, followed immediately by the destructive warning.

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

Completeness4/5

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

For a single-parameter delete operation with no output schema, the description covers the essential information: what action is performed and that it is destructive. It is concise but does not mention restoration options or what happens after deletion, leaving a minor gap.

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

Parameters2/5

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

The schema has 0% description coverage and the only parameter, id, is not explained. The description does not explicitly state that id identifies the task to delete, though the tool name and purpose make that inference fairly easy. This falls short of compensating for the missing 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 states a specific verb ('Soft-delete') and a specific resource ('a task'), which clearly identifies what the tool does. It is naturally distinct from sibling tools like tasks_complete, tasks_get, tasks_list, and tasks_update.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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 instruction 'confirm first' provides operational guidance, and the purpose implies it should be used when a task needs to be deleted. However, it does not explicitly name alternatives, such as tasks_complete for finishing a task, or state when not to use this tool.

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

tasks_getAInspect

Fetch a single task/event/meeting by id.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations, the description carries the burden of behavioral disclosure. 'Fetch' clearly signals a read-only operation with no mutation, but nothing is said about missing ids, return shape, or failure behavior. This is adequate for a simple getter but has clear 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?

A single sentence that is front-loaded with the verb and object, with no filler or repetition. Every word contributes to the meaning.

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

Completeness4/5

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

For a one-parameter get-by-id tool, the description is largely complete: it names the resource, the lookup key, and the singular return intent. The absence of an output schema and any mention of return format is a minor gap, but the tool is simple enough that the missing information is easily inferable.

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

Parameters3/5

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

The schema has 0% description coverage, so the description must compensate. It does confirm that 'id' is the identifier of the task/event/meeting being fetched, but adds no format, source, or usage details beyond what the parameter name already suggests. Minimal but real added meaning.

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

Purpose5/5

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

The description uses a specific verb ('Fetch') and resource ('single task/event/meeting by id'), making the tool's core operation clear. The 'single ... by id' scope distinguishes it from sibling tasks_list and other task mutators without needing to open the schema.

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

Usage Guidelines3/5

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

The description implies the appropriate use case: when you have an id and need exactly one task/event/meeting. However, it does not explicitly mention alternatives or state when to prefer tasks_list, tasks_get, or another sibling, so the guidance is more implied than explicit.

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

tasks_listBInspect

List tasks/events/meetings for the user. Filter by kind, status, contactId, or date range. Defaults to showing open (status=open) items of all kinds.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoISO 8601 — only items due on/before this date.
fromNoISO 8601 — only items due on/after this date.
kindNo
limitNo
dealIdNoLimit to a single deal.
offsetNo
statusNo
contactIdNoLimit to a single contact's tasks.

TDQS

B3.3/5.0
Behavior3/5

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

With no annotations, the description carries the behavioral burden. It usefully discloses that results default to open items of all kinds unless filters override, which is not inferable from the schema alone. It does not mention return shape or pagination, but the default-status disclosure adds 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?

The description is two short sentences with no filler. It front-loads the core action, then packs filter dimensions and default behavior into the second sentence efficiently.

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

Completeness3/5

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

For an 8-parameter optional filter tool with no annotations and no output schema, the description covers the main query axes and default behavior. It does not mention pagination, result shape, or how it relates to sibling list tools, leaving it minimally complete rather than fully specified.

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

Parameters3/5

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

Schema description coverage is 50%, leaving limit, offset, kind, and status without full descriptions. The description partially compensates by naming the key filter dimensions and clarifying the default status value. It does not explain limit/offset semantics or enumerate kind/status values beyond what the schema provides.

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

Purpose4/5

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

The description states a specific verb and resource: 'List tasks/events/meetings for the user.' It also enumerates filter dimensions, which clarifies scope. It does not explicitly differentiate from the sibling activity_list, but the item categories are clear enough.

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

Usage 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 tasks_list versus alternatives like activity_list or tasks_get. The intended use is only implied by the verb 'List', and no exclusions or alternative conditions are given.

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

tasks_updateBInspect

Patch a task. Only include fields to change. Recurrence can be turned on, changed, or removed here (pass an empty string to stop a task repeating).

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
kindNo
dueAtNo
endAtNo
notesNo
titleNo
statusNo
startAtNo
locationNo
recurrenceNoRepeat rule. One of: daily, weekly, monthly, yearly, weekdays. Pass an empty string to make a recurring task one-off again. RRULE strings are NOT supported.

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations, the description itself discloses that this is a partial mutation ('Patch... Only include fields to change') and that passing an empty recurrence string stops repetition, which is useful non-obvious behavior. It does not disclose auth requirements, idempotency, or effects on related fields, but the core update semantics are clear.

Agents need to know what a tool does to the world before calling 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, action first, no filler; every sentence carries operational information. The partial-update guidance is front-loaded and the recurrence caveat 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?

With 10 parameters, no annotations, 10% schema coverage, and no output schema, this short description leaves significant context implicit: what the tool returns, whether events/meetings are in scope, and how this relates to tasks_complete. It covers recurrence well but is incomplete for safe invocation at the stated complexity.

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

Parameters3/5

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

The recurrence sentence adds real meaning beyond the enum by saying recurrence can be turned on, changed, or removed, and it reinforces the schema's empty-string instruction. Since schema description coverage is only 10%, the other nine parameters rely on self-explanatory names; the description does not clarify ambiguous ones such as kind meaning task/event/meeting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 opens with a specific verb (Patch) and resource (a task), and clarifies partial-update semantics with 'Only include fields to change.' It does not, however, explain the tool's relationship to tasks_complete or that the schema also accepts event/meeting kinds, so it stops short of full sibling differentiation.

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

Usage Guidelines3/5

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

The phrase 'Only include fields to change' and the recurrence note give basic how-to direction and tell the agent this is the endpoint for changing recurrence. It does not state when to prefer tasks_complete, tasks_delete, or tasks_create, so the when-to-use guidance is implied rather than explicit.

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

time_listAInspect

List time entries, newest first, with the running timer and totals by customer for the range. Filter by contactId, companyId or dealId, and by status "unbilled" (billable, stopped, not on a live invoice) or "billed". from/to are ISO 8601; the summary defaults to the last 30 days.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoISO 8601, exclusive.
fromNoISO 8601, inclusive.
limitNoMax entries. Default 50, max 500.
dealIdNoDeal UUID. Fills in the deal's contact and company automatically.
statusNoOptional filter.
companyIdNoCompany UUID the time is for.
contactIdNoContact UUID the time is for.

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral disclosure burden, and it does so well: it reveals sort order, inclusion of running timer and customer totals, exact semantics of 'unbilled' and 'billed', ISO 8601 format, and default 30-day range. It stops short of describing the response envelope, but the stated behavior is unusually concrete for a list tool.

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

Conciseness5/5

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

Two dense sentences with the core behavior first and optional filters second. Every phrase adds information, with no filler or repetition of schema boilerplate.

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

Completeness4/5

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

For a read-only listing tool with no required parameters and no output schema, the description is nearly complete: it covers ordering, filters, status semantics, date format, and default range. Remaining gaps such as response item shape are minor and partly covered by the parameter schema.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3; the description adds real value on top by explaining the status taxonomy ('billable, stopped, not on a live invoice'), how dealId fills in contact/company, and the default 30-day summary. This goes beyond field-name 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 and resource: 'List time entries, newest first' and further specifies it includes the running timer and totals by customer. This clearly distinguishes it from write/timer siblings such as time_log, time_timer_start, and time_timer_stop.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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 contextual guidance: it is for reading/filtering time entries, optionally by deal/company/contact or billing status, with a default 30-day summary range. It does not explicitly name when-not-to-use alternatives, but the read-vs-write contrast with sibling tools makes the intended use clear.

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

time_logAInspect

Log time already spent, e.g. "2 hours on the Riverbend job yesterday". Give duration ("1:30", "90m", "1.5h" or a number of hours) and optionally startedAt (ISO 8601); without startedAt the entry ends now. Or give both startedAt and endedAt. Max 24 hours per entry.

ParametersJSON Schema
NameRequiredDescriptionDefault
rateNoHourly rate as a decimal. Optional; inherited if omitted.
dealIdNoDeal UUID. Fills in the deal's contact and company automatically.
endedAtNoISO 8601 end. Optional.
billableNoDefault true.
currencyNoISO code for the rate.
durationNo"1:30", "90m", "1.5h", or hours as a number.
companyIdNoCompany UUID the time is for.
contactIdNoContact UUID the time is for.
startedAtNoISO 8601 start. Optional.
descriptionNoWhat the work was.

TDQS

A4.4/5.0
Behavior4/5

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

No annotations are provided, so the description must disclose behavior. It does so by stating the max 24-hour limit and the 'ends now' behavior when startedAt is omitted. This adds meaningful context beyond the schema, though it doesn't cover authentication or return value.

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

Conciseness5/5

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

Two concise sentences that front-load the purpose and then provide the key usage rules. No redundant 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 tool with 10 optional parameters, the description covers the critical usage patterns. The other parameters are well-described in the schema. The lack of an output schema means the agent doesn't need return details. The description is sufficient to invoke it correctly for typical cases.

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 covers all parameters at 100%, so baseline is 3. The description adds semantic value by explaining how duration, startedAt, and endedAt interact, and gives format examples for duration. This helps an agent construct valid calls.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 logs time already spent, gives a concrete example, and defines the primary parameters. It distinguishes from siblings by emphasizing 'already spent' vs. timer-based tools, though it doesn't name them explicitly.

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

Usage Guidelines4/5

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

It explains the two acceptable input patterns (duration alone, or startedAt+endedAt) and the behavior when startedAt is omitted. It doesn't explicitly compare to sibling tools like time_timer_start, but the phrasing 'already spent' implies it's for past time logging, providing enough context for selection.

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

time_timer_startAInspect

Start the user's timer, optionally against a contact, company or deal. Only one timer runs at a time: starting a new one stops and saves the running one (returned as stopped). The rate is taken from rate or, if omitted, from the last rate used for that deal/contact/company.

ParametersJSON Schema
NameRequiredDescriptionDefault
rateNoHourly rate as a decimal, e.g. "85". Optional.
dealIdNoDeal UUID. Fills in the deal's contact and company automatically.
billableNoDefault true.
currencyNoISO code for the rate. Defaults to the user's invoicing currency.
companyIdNoCompany UUID the time is for.
contactIdNoContact UUID the time is for.
descriptionNoWhat the work is.

TDQS

A4.4/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full behavioral burden. It discloses the important side effect that only one timer runs at a time and that starting a new one stops/saves the running one, returned as `stopped`. It also explains the rate fallback, though it does not describe the success return shape or any required permissions.

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

Conciseness5/5

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

Two sentences, both essential. The core action is front-loaded, followed by the critical single-timer exception and the rate rule. 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 7-parameter tool with no output schema and no annotations, the description is largely complete: it clarifies the timer lifecycle, entity association, rate fallback, and the stopped-timer return value. Minor gaps remain, such as whether contact/company/deal parameters are mutually exclusive and what exactly the started-timer response contains.

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 genuine value by explaining that the rate is taken from `rate` or falls back to the last rate used for the associated deal/contact/company, and by clarifying the optional entity association, which goes slightly beyond the schema's field 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 uses a specific verb ('Start') and resource ('the user's timer') and adds optional entity association to contact, company, or deal. The single-timer behavior further distinguishes it from sibling tools like time_timer_stop and time_log.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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 conveys when to use the tool: to start a timer, optionally scoped to a deal/contact/company, with rate fallback behavior. It does not explicitly name time_timer_stop as the alternative for stopping without starting, but the sibling name and the one-timer rule make that boundary clear enough.

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

time_timer_stopAInspect

Stop the running timer and save it. Returns the saved entry, or null if nothing was running.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations, the description carries the full behavioral burden. It clearly discloses the side effect (stopping and saving) and the null return when nothing was running. It does not go into deeper consequences like overwrite behavior, but for a zero-parameter operation this is reasonably transparent.

Agents need to know what a tool does to the world before 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 first states the action and then the return behavior. Every word 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.

Completeness5/5

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

For a zero-parameter tool with no output schema, the description fully covers the invocation contract: what action is performed, what is returned, and the edge case of nothing running. Nothing essential for calling this tool correctly is missing.

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

Parameters4/5

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

The input schema has no parameters and schema description coverage is 100%, so the baseline is 4. The description adds no parameter details because none exist, which is appropriate.

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

Purpose5/5

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

The description uses a specific verb ('Stop'), names the resource ('the running timer'), and states the outcome ('save it'), while also noting the return behavior. This clearly differentiates it from siblings like time_timer_start and time_list.

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

Usage Guidelines2/5

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

No explicit guidance is given about when to use this tool versus alternatives such as time_log or time_update. The only implicit signal is the name, and the description does not address exclusions or prerequisites beyond implying a timer may or may not be running.

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

time_updateAInspect

Edit or delete one time entry. Set delete: true to delete. Otherwise pass only the fields to change. Hours and rate cannot change while the entry is on an issued invoice.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesTime entry id.
rateNoNew hourly rate; empty string clears it.
dealIdNoDeal UUID. Fills in the deal's contact and company automatically.
deleteNoDelete the entry.
billableNo
durationNoNew duration.
companyIdNoCompany UUID the time is for.
contactIdNoContact UUID the time is for.
startedAtNoNew ISO 8601 start.
descriptionNo

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral burden and discloses the delete branch, partial-update semantics, and an important domain restriction around issued invoices. It doesn't disclose permissions or the response shape, so it stops short of a 5.

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

Conciseness5/5

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

Three tight sentences, each adding a distinct piece of behavior: edit-or-delete, delete flag usage, and the invoice constraint. No filler and the most important operational detail 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?

Despite having 10 parameters and no annotations, the description, together with the schema, covers selection, invocation, deletion, partial updates, and a critical constraint. Nothing needed to call this tool correctly is missing.

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

Parameters3/5

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

Schema coverage is already 80%, so the baseline is 3. The description adds meaning for `delete`, patch-only-changed-fields behavior, and the invoice-state restriction, but it leaves room for confusion by using 'Hours' when the schema uses `duration` and doesn't cover the few 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?

States the exact action ('Edit or delete') and resource ('one time entry'), and distinguishes it from sibling list/log/timer tools without ambiguity. It is specific enough that an agent can select it without opening the schema.

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

Usage Guidelines4/5

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

Gives concrete usage rules: use `delete: true` to delete, otherwise send only changed fields, and do not change hours/rate on entries tied to issued invoices. It does not name alternative sibling tools explicitly, but the usage context is clear and actionable.

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

twilio_balance_getAInspect

Get the balance on the user's connected Twilio account, in whatever currency Twilio reports. Answers "how much Twilio credit do I have left?". Returns available:false when no Twilio account is connected or the credentials were rejected — say so plainly rather than guessing at a number. Report the figure as given; do not convert it or judge whether it is low, since an invoiced Twilio account reports differently from a prepaid one.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations present, the description fully discloses important behaviors: it returns available:false when no account is connected or credentials are rejected, instructs the agent to state this plainly rather than inventing a number, and forbids conversion or subjective judgment. This is exactly the kind of non-obvious behavioral guidance 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?

Three sentences, each carrying unique weight: the first states purpose, the second covers failure modes, the third dictates reporting rules. It is front-loaded, succinct, and contains 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 zero-parameter tool with no output schema and no annotations, the description is remarkably complete. It covers the success path implicitly, the failure path explicitly, and the agent's expected behavior in both cases. Nothing essential for correct invocation is missing.

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

Parameters4/5

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

The tool has zero parameters, so the empty schema is 100% covered. The baseline for 0 parameters is 4. The description adds no parameter-level detail because none exist, but it enriches the output interpretation, which is relevant given the lack of an output 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 ('Get the balance on the user's connected Twilio account'), immediately distinguishing it from any billing-profile tool. It also frames the user question ('how much Twilio credit do I have left?'), making the purpose unmistakable even without a 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 context for when to use the tool (whenever the Twilio balance is needed) and how to handle the unconnected/rejected case, but it does not explicitly name alternative tools or exclusion scenarios. Since there are no parameter choices, this is adequate, though a mention of when not to use it would push it to 5.

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

voicemail_drops_createAInspect

Create a new empty voicemail drop. It has no audio yet — follow up with voicemail_drops_generate_emma to give it Felicia's voice, or have the user record by phone in the app. Returns the new drop's id.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoDisplay name (e.g. "Quick intro", "Follow-up after demo"). Defaults to "Untitled drop" if blank.

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral disclosure burden non-trivial: it states the drop has no audio, that it requires a subsequent voice-generation step, and that the return value is the id. It does not cover permissions or idempotency, but for a one-parameter create with a clear empty initial state, the description is substantially transparent.

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

Conciseness5/5

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

Two sentences, no filler, and the key point ('new empty voicemail drop') is front-loaded. The follow-up guidance and return value earn their place without bloating the description.

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

Completeness5/5

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

For a simple create tool with one optional parameter and no output schema, the description covers all necessary context: what is created, what state it is in, the next step alternatives, and the returned id. Nothing an agent needs to call it successfully 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 the optional 'name' parameter and its default. The description adds no new parameter semantics beyond what the schema already provides, establishing the baseline score of 3.

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

Purpose5/5

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

The description starts with the specific verb-resource pair 'Create a new empty voicemail drop' and immediately clarifies what state it is in ('no audio yet'), distinguishing it from the follow-up generation tool. It also names the return value ('Returns the new drop's id'), leaving no ambiguity about 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 Guidelines5/5

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

The description explicitly says to follow up with voicemail_drops_generate_emma to add Felicia's voice, or to have the user record by phone, which tells an agent exactly when and how to use this tool versus the obvious alternative. This is direct routing guidance rather than silent implication.

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

voicemail_drops_dropAInspect

Drop a pre-recorded voicemail on a contact's voicemail box. The Worker initiates a Twilio call with machine-detection; Twilio waits for the voicemail to pick up, plays the audio, then hangs up. NEVER plays at a live person — if AMD detects a human, Twilio hangs up silently. Standard voice rates apply ($0.05/min). Requires the drop to have audio (check has_audio via voicemail_drops_list).

ParametersJSON Schema
NameRequiredDescriptionDefault
dropIdYesUUID of the voicemail drop to play. From voicemail_drops_list.
toPhoneNoOptional explicit phone in E.164 (+1...). Use when there's no contact in the CRM.
contactIdNoOptional contact UUID. Worker pulls the contact's primary phone.
fromNumberIdNoOptional — specific Twilio number UUID to dial FROM. Defaults to user's first active number.

TDQS

A4.6/5.0
Behavior5/5

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

No annotations are present, so the description carries full responsibility for behavioral disclosure, and it does so strongly. It states the call NEVER plays at a live person, that Twilio hangs up silently if AMD detects a human, and that standard voice rates apply. This is exactly the safety and side-effect information an agent needs before invoking this tool.

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

Conciseness5/5

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

The purpose is front-loaded in the first sentence. The remaining sentences each earn their place: mechanism, live-person safety, cost, and audio prerequisite. It packs significant behavioral detail without 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?

The description covers prerequisite validation, phone selection, cost, and the core execution behavior, which is enough for a correct call. Minor gaps remain: how the agent should behave if both toPhone and contactId are supplied, and what the response/return value looks like. With no output schema, slightly more return context would be helpful.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. The description adds meaningful selection guidance for toPhone vs contactId, clarifies that fromNumberId defaults to the user's first active number, and adds a prerequisite tied to dropId (has_audio). This exceeds baseline without being exhaustive.

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

Purpose5/5

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

Opens with a concrete verb and resource ('Drop a pre-recorded voicemail...') and explains the actual mechanism: a Twilio call with machine detection that plays audio to a voicemail box. The distinction from sibling tools like voicemail_drops_create and voicemail_drops_list is clear from the action described.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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 an explicit precondition: verify has_audio via voicemail_drops_list before dropping. It also tells the agent when to use toPhone ('when there's no contact in CRM') versus contactId. It doesn't explicitly contrast with voicemail_drops_create, but the need to select an existing drop is clear enough.

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

voicemail_drops_generate_emmaAInspect

Synthesize the drop's audio in Emma's voice (Felicia, ElevenLabs). Overwrites any existing audio. Server bills per character of input against the user's communications credit balance (50¢ per 1000 characters at standard tier; the response includes cost_cents). 2000-character cap (~2 minutes spoken). Inline emotion tags work — e.g. [warm], [chuckles], [whispers]…[/whispers]. The user can edit + re-generate later; script_text is persisted on the drop.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesThe script Felicia will speak. Max 2000 chars. Inline emotion tags supported.
dropIdYesUUID of the drop to synthesize audio for. From voicemail_drops_list / voicemail_drops_create.

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations present, the description carries the full burden and does so impressively. It discloses the destructive overwrite behavior, billing model (50¢ per 1000 chars, cost_cents in response), character cap, inline emotion tags, persistence of script_text, and re-generation support. This leaves almost nothing about side effects or constraints to guesswork.

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

Conciseness5/5

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

Four tight sentences, each with a distinct purpose: core action, overwrite/cost, cap/tags, edit/persistence. The description is front-loaded with the essential verb and resource and contains zero 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 tool with only 2 parameters washes some complexity (cost, overwrite, voice persona), the description is fully sufficient. It covers what the tool does, the prerequisites (existing dropId), the side effects, cost, constraints, and re-usability. There is no output schema and no annotations, but the description supplies all the operational knowledge an agent needs.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds meaningful context beyond the schema: it explains that 'text' is spoken in Emma/Felicia's voiceaine, ties text length to cost per character, and notes the overwrite/persistence effects. This enriches the agent's understanding of how parameters affect invocation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 ('Synthesize the drop's audio') on a clear resource (the drop) using a specific voice ('Emma's voice (Felicia, ElevenLabs)'). This unambiguously distinguishes it from siblings like voicemail_drops_create, voicemail_drops_drop, and voicemail_drops_list, and even the name maps directly to the function.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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 implies clear usage: it synthesizes audio for an existing drop wether creating it first or regenerating later ('The user can edit + re-generate later'). The dropId source is given via 'From voicemail_drops_list / voicemail_drops_create', which guides sequencing. It does not explicitly enumerate when not to use it or name alternatives, but the context is unambiguous.

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

voicemail_drops_listAInspect

List the user's saved voicemail drops. Each drop has a name, has_audio flag (drops without audio can't be dropped — user needs to record/upload/Emma-generate first), duration_ms, source (user or emma_tts), and script_text for Emma-generated drops. Call this before voicemail_drops_drop so you know which drop_id to use.

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?

With no annotations, the description carries the full burden. It describes the return fields (name, has_audio, duration_ms, source, script_text) and their semantic meaning, especially the has_audio flag and its impact on dropping. It does not explicitly state that the operation is read-only or non-destructive, but as a list operation this is implied. It also lacks mention of pagination or limits, but for a simple list that is acceptable.

Agents need to know what a tool does to the world before 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 fluff. The first sentence states the purpose and lists key fields; the second gives actionable usage guidance. It is front-loaded with the core action and efficiently provides all necessary context.

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 parameterless list tool without an output schema, the description fully covers what an agent needs: it lists the returned fields, explains the has_audio caveat, and tells when to call it relative to voicemail_drops_drop. There are no hidden requirements or missing details that would impede 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 tool has zero parameters and the schema is empty (100% coverage), so the description does not need to explain parameters. The baseline for 0 params is 4, and the description adds no param-specific info but instead enriches the output semantics, which is appropriate here.

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

Purpose5/5

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

The description clearly states 'List the user's saved voicemail drops' with a specific verb and resource. It further distinguishes itself from siblings by noting it should be called before voicemail_drops_drop, making the purpose and differentiation 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 'Call this before voicemail_drops_drop so you know which drop_id to use,' providing a clear usage condition and relationship to a sibling tool. It also explains the has_audio flag and its implication for drop usability, guiding when the list is relevant.

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

workflows_createAInspect

Create a workflow. trigger_type is one of "entity_event" (fires on contact.created etc.), "scheduled" (cron/one-time), "inbound_webhook" (when a Groundbase inbound webhook receives a POST), or "manual" (only fired by workflows_run_now). For entity_event, set trigger_event to e.g. "contact.created", "deal.stage_changed", "task.completed". For scheduled, pass trigger_config like { recurrence: "one_time"|"daily"|"weekly"|"hourly", run_at?, time_of_day?, days_of_week?, minute_of_hour?, timezone? }. For inbound_webhook, trigger_event is the inbound webhook id from inbound_webhooks_list. Steps run sequentially. Step shapes: Each step is { type, config: { ...props } } — the per-type props below go INSIDE config, e.g. { "type": "create_note", "config": { "body": "hi" } } (flat props on the step are also accepted). The server validates on save and answers 400 INVALID_WORKFLOW listing every problem — unknown step type or operator, unknown trigger event, a schedule that would never fire, a bad timezone, a missing required prop, a webhook url on a private host — so read the message and fix the definition rather than retrying. Step types: send_sms { to?, body }; send_email { to?, subject, body_html?, body_text?, contact_id? } — blank to means the run's contact (on a deal, task or note, its contact); add_to_campaign { campaign_id } — puts the run's contact into an ONGOING campaign (enrolment_mode=ongoing, status sending) at its first step, under the campaign's rules; fails on a one-time or not-sending campaign; apply_tag { tag_name, entity_id?, entity_type? }; remove_tag { tag_name, entity_id?, entity_type? }; create_note { body, entity_type?, entity_id? }; create_task { title, description?, due_at?, due_in_days?, kind?, location?, contact_id? }; fire_webhook { url, method?, headers?, body? }; update_field { entity_type?, entity_id?, field, value } — restricted to a safe allow-list of native columns (first_name, last_name, email, phone, position, city, source, notes, primary_phone, company_id); set_custom_field { entity_type?, entity_id?, field_key, value } — writes to a custom field defined in Settings → Custom fields. field_key accepts "loan_amount" or "cf.loan_amount" (the cf. prefix is optional); delay { delay_seconds, stop_if? } — stop_if { reply?, meeting?, optout? } ends the run instead of continuing when, by the time the wait is over, the contact has replied (text or email), booked a meeting, or opted out since the run started. Only on a top-level wait longer than 60 seconds; branch { condition: { all|any: [{ field, op, value }] }, then: [Step], else: [Step] }. Templates supported in string fields: {{first_name}}, {{trigger.event}}, {{steps..output.}}. Step ids auto-generated as s_<8hex> if omitted; pass an explicit "id" to make {{steps.X.output.Y}} references stable across edits.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesDisplay name (required).
stepsYesOrdered list of steps. Each step is { type, config: { ...props } } — the per-type props below go INSIDE `config`, e.g. { "type": "create_note", "config": { "body": "hi" } } (flat props on the step are also accepted). The server validates on save and answers 400 INVALID_WORKFLOW listing every problem — unknown step type or operator, unknown trigger event, a schedule that would never fire, a bad timezone, a missing required prop, a webhook url on a private host — so read the message and fix the definition rather than retrying. Step types: `send_sms` { to?, body }; `send_email` { to?, subject, body_html?, body_text?, contact_id? } — blank to means the run's contact (on a deal, task or note, its contact); `add_to_campaign` { campaign_id } — puts the run's contact into an ONGOING campaign (enrolment_mode=ongoing, status sending) at its first step, under the campaign's rules; fails on a one-time or not-sending campaign; `apply_tag` { tag_name, entity_id?, entity_type? }; `remove_tag` { tag_name, entity_id?, entity_type? }; `create_note` { body, entity_type?, entity_id? }; `create_task` { title, description?, due_at?, due_in_days?, kind?, location?, contact_id? }; `fire_webhook` { url, method?, headers?, body? }; `update_field` { entity_type?, entity_id?, field, value } — restricted to a safe allow-list of native columns (first_name, last_name, email, phone, position, city, source, notes, primary_phone, company_id); `set_custom_field` { entity_type?, entity_id?, field_key, value } — writes to a custom field defined in Settings → Custom fields. field_key accepts "loan_amount" or "cf.loan_amount" (the cf. prefix is optional); `delay` { delay_seconds, stop_if? } — stop_if { reply?, meeting?, optout? } ends the run instead of continuing when, by the time the wait is over, the contact has replied (text or email), booked a meeting, or opted out since the run started. Only on a top-level wait longer than 60 seconds; `branch` { condition: { all|any: [{ field, op, value }] }, then: [Step], else: [Step] }. Templates supported in string fields: {{first_name}}, {{trigger.event}}, {{steps.<id>.output.<key>}}. Step ids auto-generated as s_<8hex> if omitted; pass an explicit "id" to make {{steps.X.output.Y}} references stable across edits.
isActiveNoDefaults to true (workflow starts active).
conditionNoOptional workflow-level filter — if present, the workflow is skipped (status=skipped) when this evaluates false. Shape: { all|any: [{ field, op, value }] } — `all` requires every clause, `any` requires one. Field paths: entity.<column> (entity.email, entity.source, entity.tags), cf.<field_key> for a custom field, trigger.event / trigger.entity_type / trigger.entity_id, and trigger.payload.<key> for what the event carried (e.g. trigger.payload.tag_name on tag.applied) — NOT payload.<key>, which never resolves; the server refuses it on save. Text ops: equals, not_equals, contains, not_contains, starts_with, ends_with. Presence ops: is_set, is_not_empty, is_empty, includes_tag. Numeric/date ops: greater_than, greater_or_equal, less_than, less_or_equal (numeric when both sides parse as numbers, else lexicographic, which sorts ISO timestamps correctly), plus older_than_days and newer_than_days which take a day count and compare against a date field such as entity.last_contacted_at.
descriptionNo
triggerTypeYesRequired.
triggerEventNoFor entity_event: the event name (e.g. "contact.created"). For inbound_webhook: the inbound webhook id.
triggerConfigNoFor scheduled triggers, the schedule shape. Otherwise null.

TDQS

A4.6/5.0
Behavior5/5

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

With no annotations, the description carries the full burden and excels: it discloses server-side validation with 400 INVALID_WORKFLOW, sequential step execution, side effects like add_to_campaign failing on non-ongoing campaigns, delay restrictions, update_field allow-list, and template resolution behavior. This goes well beyond a simple 'create' description.

Agents need to know what a tool does to the world before 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 densely organized with clear sections: trigger types, step types, templates, and step id generation. Every sentence contributes essential detail for a highly complex tool, though there is notable redundancy with the schema's steps description.

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

Completeness5/5

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

For a complex create tool with no output schema, this description covers all important aspects: trigger configuration, complete step type inventory, validation error behavior, condition filtering, template syntax, and automatic id generation. Nothing an agent needs to correctly construct a valid workflow 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 high (88%), but the description adds concrete meaning beyond the schema: it specifies the trigger_config shape (recurrence, run_at, time_of_day, etc.), the triggerEvent semantics for inbound_webhook, and the ambiguity that field_key accepts 'loan_amount' or 'cf.loan_amount'. Some step details are duplicated from the schema, but the added parameter context is valuable.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 the specific verb+resource 'Create a workflow' and then details the trigger types and step types. It is clearly differentiated from sibling tools like workflows_update, workflows_get, and workflows_delete by focusing on creation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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 to use each trigger type and references workflows_run_now for manual triggers. It does not explicitly contrast with workflows_update or other alternatives, so it stops short of full when/not guidance.

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

workflows_deleteAInspect

Soft-delete a workflow. DESTRUCTIVE — confirm with the user before calling unless they explicitly asked to delete.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesWorkflow UUID.

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It does disclose that the operation is destructive and requires confirmation, which is critical. However, it does not explain what 'soft-delete' means in practice—whether it is reversible, how it affects running workflow runs, or what permissions are needed.

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

Conciseness5/5

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

The description is two sentences with zero filler. The destructive warning is front-loaded, and every word contributes to either purpose or safe usage.

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

Completeness4/5

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

For a single-parameter destructive tool, the description covers the essential points: what it deletes, that it is destructive, and when to call it. The main gaps are the semantics of 'soft-delete' and the lack of any return-value guidance, which are relevant because there is no output schema.

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

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already documents id as 'Workflow UUID' with 100% coverage. The description adds no parameter-specific meaning, so it remains at the baseline for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening phrase 'Soft-delete a workflow' names the exact verb and resource, and the 'soft-' qualifier adds important specificity beyond a generic delete. It is clearly distinct from sibling tools like workflows_pause, workflows_resume, and workflows_update.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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 states a precondition: 'confirm with the user before calling unless they explicitly asked to delete.' This gives the agent a clear when-not-to-invoke rule. It does not name alternatives such as workflows_pause for temporary stoppage, so it falls just short of full routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

workflows_getAInspect

Fetch one workflow by id, including the full step tree and condition. Use this after workflows_list to inspect details before editing.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesWorkflow UUID.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden. It discloses the operation is a fetch (read-only) and specifies the response includes the full step tree and condition. This is transparent about the primary behavior, though it doesn't discuss error handling or authorization, which are minor for a simple get-by-id operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences with no wasted words. The core purpose is front-loaded, and the usage guidance is succinct.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple single-parameter get operation, the description is complete: it explains what the tool does, what it returns, and when to use it. With no output schema, the description adequately covers the return content.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% (the only parameter 'id' is described as 'Workflow UUID.'). The description adds no additional meaning beyond what the schema provides, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description states a specific verb ('Fetch') and resource ('one workflow by id'), and explicitly includes what is returned ('full step tree and condition'). It clearly differentiates from workflows_list by emphasizing the detail level.

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: 'Use this after workflows_list to inspect details before editing.' This provides clear context and implies the exclusion of using it before listing or for editing itself.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

workflows_listAInspect

List the user's workflows with their trigger summary, step count, active/paused state, and last-run timestamp. Use this to see what automations exist before creating new ones or before modifying an existing one.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses what data is returned (trigger summary, step count, state, last-run timestamp) and implies a read-only operation via the verb 'List'. However, it does not mention pagination, rate limits, or return format details, which would be relevant for a list tool. The disclosure is adequate but not exhaustive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no redundancy. The first sentence front-loads the action and output fields; the second gives a concise usage context. 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 list tool with no parameters and no output schema, the description is largely complete: it states what it returns and when to use it. It lacks explicit output format (e.g., array of objects) and pagination details, but these are minor for a straightforward list operation and do not impede 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 tool has zero parameters, so parameter semantics are trivially satisfied. Per the baseline rule for 0-parameter tools, a score of 4 is appropriate; the description correctly avoids adding any parameter-specific information that does not exist.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states the action 'List' and the resource 'the user's workflows', and enumerates the returned fields (trigger summary, step count, active/paused state, last-run timestamp). This is specific and distinct from sibling tools like workflows_get (single workflow) or workflows_runs (runs), even though they are not named.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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 when-to-use guidance: 'Use this to see what automations exist before creating new ones or before modifying an existing one.' It does not explicitly exclude alternative tools or name them, but the context is sufficient for an agent to know this is the discovery/list step.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

workflows_pauseAInspect

Pause a workflow so it stops firing on its trigger. Existing runs continue but no new ones start. Reversible via workflows_resume.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesWorkflow UUID.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full behavioral disclosure and does so well: it states that existing runs continue, no new runs start, and the operation is reversible via workflows_resume. This is meaningful behavioral detail beyond a simple 'pause' label.

Agents need to know what a tool does to the world before 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 purpose, the key behavioral distinction, and the reversal path with zero filler. The most important 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?

For a simple one-parameter tool, the description is nearly complete: it explains the immediate effect, the boundary between existing and future runs, and how to undo the operation. It does not mention idempotency or result/error behavior, but the low complexity and clear scope make this 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 covers the single parameter fully with 100% coverage, including its type and meaning ('Workflow UUID'). The description does not need to repeat this, and it adds no extra parameter-level nuance, so the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the action (pause) and resource (workflow), and explains the operational effect: it stops firing on its trigger. It also distinguishes itself from the related workflows_resume sibling without needing to open either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when to use this tool: stop future workflow firings while letting existing runs continue. It also points to workflows_resume as the reversal alternative, though it does not explicitly mention when not to use it, such as preferring workflows_delete for permanent removal.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

workflows_resumeAInspect

Resume a paused workflow so it starts firing on its trigger again.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesWorkflow UUID.

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden. It does disclose the key state change: the workflow will resume firing on its trigger, and the word 'again' suggests it will not fire immediately. However, it omits edge behavior such as calling it on a workflow that is not paused, idempotency, and any permission requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence with no filler; the action, target, and outcome are all stated up front. 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 single-parameter state-transition tool with no output schema or nested objects, the description plus the schema is nearly complete. It lacks only an explicit statement about error cases or prerequisites beyond 'paused,' but the core call is fully specified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single parameter id is fully described in the schema as 'Workflow UUID,' so schema coverage is 100%. The description adds no parameter-level detail, which is acceptable under the baseline because the schema already carries the meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource ('Resume a paused workflow') and states the resulting behavior ('starts firing on its trigger again'). This clearly distinguishes it from the sibling workflows_pause and workflows_run_now.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'paused workflow' supplies clear context for when to call it, and the trigger language implies it is the counterpart to workflows_pause. It does not explicitly name alternatives or exclusions, but the intended use is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

workflows_run_nowAInspect

Manually fire a workflow on a specific entity, bypassing its trigger. Useful for testing a workflow you just authored, or for one-off automations the user invokes by name (e.g. "run my onboarding workflow on John Doe"). The entity must already exist; the workflow's trigger context is synthesized as { entity_type, entity_id, payload }.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesWorkflow UUID.
payloadNoOptional extra payload data merged into the trigger context (alongside the loaded entity).
entityIdYesUUID of the entity.
entityTypeYesWhat entity to run the workflow against.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden, and it delivers: it discloses the bypass behavior, the precondition that 'the entity must already exist,' and the exact synthesized trigger context shape { entity_type, entity_id, payload }. It stops short of warning that firing a workflow may have real side effects such as emails or record mutations, which would be valuable for a mutation tool with zero 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, each earning its place: action plus differentiator, use cases with an illustrative example, and preconditions plus context semantics. The essential scoping information is front-loaded ahead of the longer motivational example, 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 tool with no output schema, the description covers purpose, selection criteria, preconditions, and context formation — the bulk of what an agent needs to call it. The gaps are the undocumented return value (with no output schema, an agent cannot learn what a successful fire returns, e.g., a run ID to track via workflows_runs) and behavior with paused workflows.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds runtime meaning beyond the schema by mapping the parameters into the synthesized trigger context ({ entity_type, entity_id, payload }) and stating the entity-existence precondition on entityId. This tells an agent how the four parameters interrelate at execution time rather than just describing each field in isolation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence names a specific verb and resource — 'Manually fire a workflow on a specific entity' — and adds the distinguishing trait 'bypassing its trigger,' which separates it from normal trigger-driven execution and from siblings like workflows_pause, workflows_resume, and workflows_runs. The concrete example ('run my onboarding workflow on John Doe') further pins down the operation. No other sibling tool claims to execute a workflow.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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 when-to-use scenarios: 'testing a workflow you just authored, or for one-off automations the user invokes by name.' It implies the negative case — when the workflow's own trigger would fire — by emphasizing 'bypassing its trigger,' but it never explicitly names an alternative tool or a when-not-to-use condition.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

workflows_runsAInspect

Run history for one workflow, newest first (up to 100). Use this when a workflow "did nothing" or the user asks what it did: each run has status completed | skipped | failed | paused, the trigger data it started from, and per-step results whose detail says why a step was skipped (e.g. "no record in context to text") or what it produced. A skipped run means the workflow-level condition was false for that event; a paused run is parked on a delay step.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesWorkflow UUID.
limitNoMost recent N runs to return (default 20).

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden and does well: it explains statuses, trigger data, per-step results, and the semantics of skipped versus paused runs. It does not explicitly state read-only behavior, but 'run history' strongly implies no side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose and use case are front-loaded, followed by useful behavioral details without filler. It is dense but each clause earns its place; slightly overlong compared to the leanest examples, but well organized.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description adequately supplies return-value semantics: statuses, trigger data, per-step details, and explanations for skipped and paused runs. An agent has enough context to select and invoke this tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and both id and limit are already documented. The description adds no additional parameter-level detail beyond what the schema provides, so the baseline score of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the exact purpose: run history for one workflow, newest first, up to 100 runs. This clearly differentiates it from siblings like workflows_get (workflow configuration) and workflows_run_now (triggering runs).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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 trigger conditions: use this when a workflow 'did nothing' or the user asks what it did. It does not name alternatives or exclusions, but no sibling tool appears to cover run history, so the context is clear enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

workflows_updateAInspect

Patch a workflow. Only include fields you want to change. Useful for tweaking step config, updating the trigger event, switching trigger types (e.g. from manual to entity_event), or rewording the name. To toggle active/paused state, prefer workflows_pause / workflows_resume. NOTE: changing triggerType to entity_event or inbound_webhook usually means you also want to pass triggerEvent in the same call — otherwise the workflow may end up in an inconsistent state where the type is set but no matching event is configured.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesWorkflow UUID.
nameNo
stepsNo
conditionNo
descriptionNo
triggerTypeNoRequired to switch a workflow between trigger families. See workflows_create for details on each type.
triggerEventNo
triggerConfigNo

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of disclosing behavior. It reveals that this is a partial patch (only included fields change), and it warns about a specific behavioral trap: changing triggerType without triggerEvent can leave the workflow in an inconsistent state. It does not explicitly mention permissions, reversibility, or response format, but for a patch tool, the provided information is valuable and largely sufficient. The lack of more detail on side effects prevents a 5, but it is well above the minimum.

Agents need to know what a tool does to the world before 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: the core action and the partial-update rule come first, followed by concrete use cases and the alternative tool. The NOTE is appended for an important edge case. Every sentence adds value, and there is no redundancy. It is appropriately sized for the tool's complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence 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 8 parameters, nested objects, an enum, and no output schema, the description covers the essential operational points: partial update semantics, common use cases, the distinction from pause/resume siblings, and the trigger consistency warning. It does not discuss the response format (no output schema is given) or error conditions, but an agent can call the tool correctly with the provided guidance. It is not fully exhaustive, but it is sufficiently complete for a patch operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 25% (only id and triggerType have descriptions), so the description must compensate. It does by tying the listed use cases to parameters: 'tweaking step config' (steps), 'updating the trigger event' (triggerEvent), 'switching trigger types' (triggerType), and 'rewording the name' (name). It also advises keeping triggerType and triggerEvent consistent. It does not explain every parameter (e.g., condition, description, triggerConfig), but the general rule 'Only include fields you want to change' covers the partial-update semantics and gives enough context for the most critical fields.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Patch a workflow') and the resource (workflow), and then lists specific use cases: tweaking step config, updating the trigger event, switching trigger types, and rewording the name. It also distinguishes itself from siblings by explicitly naming workflows_pause / workflows_resume as the preferred tools for toggling active/paused state, so an agent can confidently select this tool for partial updates.

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 opens with 'Only include fields you want to change,' which is explicit guidance on the partial-update semantics. It goes further by naming alternatives ('To toggle active/paused state, prefer workflows_pause / workflows_resume') and includes a critical NOTE about triggerType and triggerEvent needing to be passed together to avoid an inconsistent state. This is exactly the kind of when-to-use and when-not-to-use guidance an agent needs.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 5 tool updates
    • Addedtime_list
    • Addedtime_log
    • Addedtime_timer_start
    • Addedtime_timer_stop
    • Addedtime_update
  2. 1 tool update
    • Changedemail_send2 fields changed
      • addedInput schema / properties / fromEmail
        Added value: +{
        +  "description": "Optional Send-as alias to send from, e.g. \"adam@example.com\". Must be the mailbox's own address or an alias registered on it under Settings → Email; anything else is refused with INVALID_FROM. Does not pick the mailbox — pair with accountId when there is more than one.",
        +  "type": "string"
        +}
      • addedInput schema / properties / fromName
        Added value: +{
        +  "description": "Optional display name for the From header. Defaults to the alias's or mailbox's saved name.",
        +  "type": "string"
        +}
  3. 119 tool updates
    • First observedactivity_list
    • First observedaddresses_create
    • First observedaddresses_delete
    • First observedaddresses_list
    • First observedaddresses_update
    • First observedbilling_profile_create
    • First observedbilling_profile_get
    • First observedbilling_profiles_create
    • First observedbilling_profiles_get
    • First observedbilling_profiles_list
    • First observedbilling_profiles_update
    • First observedcalls_get
    • First observedcalls_list
    • First observedcampaigns_analytics
    • First observedcampaigns_list_recipients
    • First observedcampaigns_manage
    • First observedcampaigns_preview_audience
    • First observedcompanies_create
    • First observedcompanies_delete
    • First observedcompanies_get
    • First observedcompanies_list
    • First observedcompanies_update
    • First observedcontacts_create
    • First observedcontacts_delete
    • First observedcontacts_get
    • First observedcontacts_list
    • First observedcontacts_update
    • First observedcustom_fields_create
    • First observedcustom_fields_delete
    • First observedcustom_fields_list
    • First observedcustom_fields_set_value
    • First observedcustom_fields_update
    • First observeddashboard_summary
    • First observeddeal_stages_create
    • First observeddeal_stages_list
    • First observeddeal_stages_reorder
    • First observeddeal_stages_update
    • First observeddeals_create
    • First observeddeals_delete
    • First observeddeals_get
    • First observeddeals_list
    • First observeddeals_move_stage
    • First observeddeals_update
    • First observedemail_accounts_list
    • First observedemail_get_message_body
    • First observedemail_get_thread
    • First observedemail_list_threads
    • First observedemail_send
    • First observedemail_templates_create
    • First observedemail_templates_delete
    • First observedemail_templates_get
    • First observedemail_templates_list
    • First observedemail_templates_update
    • First observedfrontdesk_settings
    • First observedinbound_webhooks_manage
    • First observedinvoice_items_create
    • First observedinvoice_items_list
    • First observedinvoice_items_update
    • First observedinvoice_payments_list
    • First observedinvoice_payments_record
    • First observedinvoice_payments_reverse
    • First observedinvoice_settings_get
    • First observedinvoice_settings_update
    • First observedinvoices_create_draft
    • First observedinvoices_get
    • First observedinvoices_issue
    • First observedinvoices_list
    • First observedinvoices_send
    • First observedinvoices_update_draft
    • First observedinvoices_void
    • First observedmeeting_types_create
    • First observedmeeting_types_list
    • First observedmerge_tags_list
    • First observednotes_create
    • First observednotes_delete
    • First observednotes_list
    • First observednotes_update
    • First observedoutbound_webhooks_manage
    • First observedresend_manage
    • First observedsaved_views_create
    • First observedsaved_views_list
    • First observedsending_settings
    • First observedsms_cancel_scheduled
    • First observedsms_list_scheduled
    • First observedsms_list_thread
    • First observedsms_optouts
    • First observedsms_send_now
    • First observedsms_send_scheduled
    • First observedsms_templates_create
    • First observedsms_templates_delete
    • First observedsms_templates_get
    • First observedsms_templates_list
    • First observedsms_templates_update
    • First observedtags_apply
    • First observedtags_create
    • First observedtags_delete
    • First observedtags_list
    • First observedtags_remove
    • First observedtags_update
    • First observedtasks_complete
    • First observedtasks_create
    • First observedtasks_delete
    • First observedtasks_get
    • First observedtasks_list
    • First observedtasks_update
    • First observedtwilio_balance_get
    • First observedvoicemail_drops_create
    • First observedvoicemail_drops_drop
    • First observedvoicemail_drops_generate_emma
    • First observedvoicemail_drops_list
    • First observedworkflows_create
    • First observedworkflows_delete
    • First observedworkflows_get
    • First observedworkflows_list
    • First observedworkflows_pause
    • First observedworkflows_resume
    • First observedworkflows_run_now
    • First observedworkflows_runs
    • First observedworkflows_update

Publisher details

Operator
Groundbase
Vendor relationship
First-party
Trust center
Not applicable
Restrictions
Requires a Groundbase account. $9/mo flat, 14-day free trial. OAuth or API key.

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Enables brand visibility monitoring across major AI platforms like ChatGPT, Claude, Gemini, and Perplexity. It allows users to track visibility scores, analyze competitor data, and receive actionable insights to improve AI-generated brand recommendations.
    16
    7 npm
    1
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables tracking competitor websites, changelogs, blog feeds, and pricing pages with meaningful diffs, classification, and Markdown digests via MCP tools for listing, adding, removing competitors, running checks, and retrieving digests or changes.
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Browse IndustryLens's published competitive-intelligence reports and head-to-head competitor comparisons from any AI agent — real, source-backed data.
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources