Skip to main content
Glama

Server Details

MCP server for Quaderno — tax-rate calculation, invoices, contacts, products, receipts & expenses.

Status
Healthy
Last Tested
Transport
Streamable HTTP
URL
Repository
m190/usefulapi-mcp
GitHub Stars
0

Glama MCP Gateway

Connect through Glama MCP Gateway for full control over tool access and complete visibility into every call.

MCP client
Glama
MCP server

Full call logging

Every tool call is logged with complete inputs and outputs, so you can debug issues and audit what your agents are doing.

Tool access control

Enable or disable individual tools per connector, so you decide what your agents can and cannot do.

Managed credentials

Glama handles OAuth flows, token storage, and automatic rotation, so credentials never expire on your clients.

Usage analytics

See which tools your agents call, how often, and when, so you can understand usage patterns and catch anomalies.

100% free. Your data is private.
Tool DescriptionsA

Average 4.1/5 across 22 of 23 tools scored.

Server CoherenceA
Disambiguation5/5

Each tool targets a distinct resource or action: tax calculation, contacts, invoices, items, transactions, credit notes, expenses, receipts, webhooks, jurisdictions, tax codes, and a ping for connectivity. Even create_invoice and create_transaction are clearly differentiated by scope (invoice vs. sales/refund with tax computation). The catch-all quaderno_request is a safety valve without overlapping with dedicated tools.

Naming Consistency5/5

All tools use a consistent verb_noun pattern with lowercase and underscores: calculate_tax, create_contact, list_invoices, get_item, update_contact, etc. The pattern is uniform across all 23 tools, making it predictable for an agent.

Tool Count5/5

With 23 tools, the server covers the major entities and actions for a tax compliance API: CRUD for contacts and items, list/get for financial documents (invoices, credit notes, expenses, receipts), plus tax utilities and a ping. The count feels well-scoped—neither sparse nor bloated.

Completeness2/5

The tool set lacks essential mutation operations: no delete tools for any resource, no update for invoices, items, transactions, or other document types. Only contacts and a single update_contact exist. Create operations are limited to contacts, invoices, items, and transactions, while credit notes, expenses, receipts, and webhooks have no create/update/delete. This leaves significant gaps for a complete workflow.

Available Tools

23 tools
calculate_taxCalculate tax rateA
Read-only
Inspect

Calculate the correct tax rate/amount for a sale given the customer's location and product. This is Quaderno's flagship endpoint — it applies the right VAT / GST / US sales-tax rules per jurisdiction. READ-ONLY (no record is created). Quaderno API: GET /tax_rates/calculate. Returns { name, rate, country, region, county, city, tax_code, status (taxable|non_taxable|not_registered|reverse_charge), tax_amount, subtotal, total_amount }.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNoTransaction date (YYYY-MM-DD); defaults to today.
amountNoTransaction amount to compute the tax on.
tax_idNoThe customer's tax ID / VAT number (may trigger reverse-charge).
to_cityNoThe customer's city (recommended for US sales tax).
currencyNoISO 4217 currency code (e.g. "USD").
tax_codeNoProduct tax code, e.g. "standard", "reduced", "exempt", "eservice", "ebook", "saas", "consulting".
to_streetNoThe customer's street address (recommended for US sales tax).
to_countryYesThe customer's country — 2-letter ISO code (e.g. "US", "DE"). Required.
from_countryNoThe seller's country (2-letter ISO); defaults to the account country.
product_typeNoWhether the product is a good or a service.
tax_behaviorNoWhether the amount includes tax or not.
to_postal_codeNoThe customer's ZIP / postal code (recommended for US sales tax).
from_postal_codeNoThe seller's postal code.
Behavior4/5

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

The description aligns with the readOnlyHint annotation and adds behavioral context: it's a GET endpoint, no record is created, and it returns a specific set of fields. No contradictions detected.

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

Conciseness5/5

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

The description is four sentences, front-loaded with the main purpose, and every sentence adds value. No unnecessary words 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 tool with 13 parameters and no output schema, the description covers the core purpose, read-only nature, API endpoint, and return fields. It lacks guidance on parameter combinations but is reasonably complete given the high schema coverage.

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

Parameters3/5

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

The input schema has 100% description coverage, so the schema already explains each parameter. The description adds minimal extra meaning beyond stating 'Required.' for one parameter, but provides context like tax_code examples.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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: 'Calculate the correct tax rate/amount for a sale given the customer's location and product.' It specifies it's Quaderno's flagship endpoint and applies VAT/GST/US sales-tax rules, distinguishing it from sibling CRUD 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 notes 'READ-ONLY (no record is created)' which implies it's for querying tax rates, but it does not explicitly state when to use this tool versus alternatives or provide exclusions. No sibling tax tools exist, so guidance is limited.

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

create_contactCreate a contactA
Destructive
Inspect

MUTATES Quaderno data — create a contact (customer or vendor). Provide kind plus a name; use fields for any other Quaderno contact attribute (phone_1, region, postal_code, city, street_line_1/2, tax_status, language, discount, notes, processor/processor_id). Quaderno API: POST /contacts. Returns the created contact.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindYesContact kind.
emailNoContact email address.
fieldsNoAdditional raw Quaderno fields merged into the request body (escape hatch for any field not typed above).
tax_idNoThe contact's tax ID / VAT number.
countryNo2-letter ISO country code.
last_nameNoThe person's last name (persons only).
first_nameNoFor a person: their first name. For a company: the company name (Quaderno stores it here).
contact_nameNoThe contact person's name at a company (companies only).
Behavior4/5

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

Annotations indicate destructiveHint=true, description adds that it mutates data and returns created object. No contradictions; adds value by specifying API method (POST) and 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.

Conciseness4/5

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

Two sentences: first states purpose and required inputs, second gives API endpoint and return value. No wasted words, but could be slightly more structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence 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 8 parameters and no output schema, description covers essential usage: required parameter, fields usage, API path, and return. Lacks details on returned contact shape, but sufficient for selection.

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% (baseline 3), but description adds meaning: explains required 'kind' plus a name, and clarifies 'fields' as escape hatch with example attributes.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 'create a contact (customer or vendor)', with verb 'create' and resource 'contact'. Distinguishes from sibling tools like get_contact (reading) and list_contacts (listing).

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?

Implies usage scenario (when you need to create a contact) via first sentence. Context from sibling tools clarifies it's for creation, not listing or updating. Lacks explicit when-not or alternatives.

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

create_invoiceCreate an invoiceA
Destructive
Inspect

MUTATES Quaderno data — create an invoice for a contact. Provide contact_id (or a contact via fields) and items; use fields for any other attribute (currency, issue_date, due_date, po_number, notes, tag_list, custom_metadata, payment_details). Each item = { description, quantity, unit_price, tax_1_name?, tax_1_rate?, discount_rate?, … }. Quaderno API: POST /invoices. Returns the created invoice (incl. permalink, pdf).

ParametersJSON Schema
NameRequiredDescriptionDefault
itemsNoLine items, e.g. [{ description, quantity, unit_price, tax_1_name, tax_1_rate }].
notesNoFree-text notes on the invoice.
fieldsNoAdditional raw Quaderno fields merged into the request body (escape hatch for any field not typed above).
currencyNoISO 4217 currency code.
due_dateNoDue date (YYYY-MM-DD).
po_numberNoPurchase-order number.
contact_idNoThe id of an existing contact to invoice. Omit only if you pass a full `contact` object via `fields`.
issue_dateNoIssue date (YYYY-MM-DD).
Behavior4/5

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

With destructiveHint: true already present, the description explicitly calls out the mutation ('MUTATES'), mentions the API endpoint (POST /invoices), and notes the return value (created invoice with permalink, pdf). This adds useful context beyond annotations.

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

Conciseness4/5

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

The description is a single paragraph, front-loaded with the mutation nature, and every sentence adds value. It could be slightly more structured, but it is efficient and without waste.

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

Completeness4/5

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

For a creation tool with 8 parameters, the description covers all essential aspects: required inputs, how to use the escape hatch, and what is returned. No output schema exists, but the return value is described. It is complete for the given complexity.

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

Parameters4/5

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

Schema coverage is 100%, but the description adds extra meaning: explains the relationship between contact_id and fields, provides a template for items, and lists typical keys for the 'fields' parameter. This significantly enhances understanding beyond the bare 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 'MUTATES Quaderno data — create an invoice for a contact,' clearly stating the action (create) and resource (invoice). It distinguishes itself from sibling tools like create_contact and create_transaction by specifying it's for invoices.

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 guidance on required inputs: 'Provide contact_id (or a contact via fields) and items.' It explains how to use fields for other attributes. However, it does not explicitly state when not to use this tool or mention alternatives among siblings.

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

create_itemCreate a product (item)A
Destructive
Inspect

MUTATES Quaderno data — create a product/item in the catalog. Provide name + unit_cost; use fields for any other attribute (code, description, tax_class, tax_type, currency, country, stock). Quaderno API: POST /items. Returns the created item.

ParametersJSON Schema
NameRequiredDescriptionDefault
codeNoSKU / product code.
kindNoWhether it is a one-off or a subscription product.
nameYesProduct name.
fieldsNoAdditional raw Quaderno fields merged into the request body (escape hatch for any field not typed above).
currencyNoISO 4217 currency code.
unit_costYesUnit price of the product.
product_typeNoWhether the product is a good or a service.
Behavior3/5

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

Description adds that the tool mutates data and returns the created item, which is consistent with the destructiveHint annotation. However, it lacks details about authorization, rate limits, or error conditions. The addition of the API endpoint (/items) provides some context but is not fully comprehensive.

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

Conciseness5/5

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

The description is concise with three sentences that front-load the main action, provide key instructions, and mention the return value. No unnecessary words.

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

Completeness4/5

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

For a creation tool with 7 parameters and no output schema, the description covers inputs, required fields, and the return type. It does not explain output structure or error handling, but these are not critical given the tool's nature and lack of 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 100%, so baseline is 3. The description adds value by clarifying required parameters (name, unit_cost) and explaining the role of 'fields' as an escape hatch for other attributes. This goes beyond the 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 clearly states 'create a product/item in the catalog' with specific verb and resource. It distinguishes from siblings by specifying the resource type and action, though it does not explicitly contrast with other create tools like create_contact.

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

Usage Guidelines3/5

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

The description implies usage for creating a product/item but provides no explicit guidance on when to use this tool versus alternatives like create_contact or create_invoice. The annotation destructiveHint=true hints at mutation but does not serve as usage guidance.

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

create_transactionCreate a transactionA
Destructive
Inspect

MUTATES Quaderno data — record a sale or refund transaction (Quaderno computes tax and produces the compliant document). Provide the customer, items, and payment. Use fields for any other attribute (date, currency, shipping_address, evidence, processor, processor_id, processor_fee_cents, exchange_rate, po_number, notes, tags, custom_metadata). Quaderno API: POST /transactions. Returns the created invoice/credit-note object.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoTransaction type (default "sale").
itemsYesRequired. Transaction line items, e.g. [{ description, amount, quantity, tax_code, product_type }].
fieldsNoAdditional raw Quaderno fields merged into the request body (escape hatch for any field not typed above).
paymentNoPayment object, e.g. { payment_method, amount, date }.
currencyNoISO 4217 currency code.
customerNoThe customer contact object (or reference), e.g. { first_name, last_name, email, country, tax_id }.
Behavior4/5

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

Annotations already indicate destructiveHint=true, so the bar is lower. The description adds value by explaining that the tool mutates data, records a sale/refund, and that Quaderno computes tax and produces a compliant document. This goes beyond the annotation's simple hint.

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 efficiently convey purpose, required inputs, and extensibility. It is front-loaded with the main action and includes relevant details without verbosity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence 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 output schema, the description covers return value (created invoice/credit-note object) and includes the API endpoint. It explains core behavior (tax computation, document production) and lists optional fields, making it fairly complete for a creation tool with nested objects.

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 meaning by listing additional attributes that can go into the `fields` parameter (e.g., date, currency, shipping_address) and by explaining the purpose of key parameters like customer, items, and payment. This provides guidance beyond the schema.

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

Purpose5/5

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

The description clearly states the tool records a sale or refund transaction, which is a specific verb+resource. It distinguishes from siblings like create_invoice by focusing on transactions that may result in invoices or credit notes, and it explicitly mentions the resulting document type.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives like create_invoice or when not to use it. It only implies usage by stating to provide customer, items, and payment, but lacks 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.

get_contactGet a contactA
Read-only
Inspect

Fetch a single contact by id. Quaderno API: GET /contacts/{id}.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe resource id.
Behavior3/5

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

Annotations already declare readOnlyHint=true. The description adds the API endpoint but not additional behavioral details like error handling or authentication 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 concise sentences front-load the purpose and include the API reference, no wasted words.

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

Completeness4/5

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

Given the tool's simplicity and annotation coverage, the description is nearly complete. Adding output format or error behavior would improve it.

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

Parameters3/5

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

Schema coverage is 100% with parameter 'id' described. The description does not add further meaning beyond the schema.

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

Purpose5/5

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

The description explicitly states 'Fetch a single contact by id' with a verb and specific resource, clearly distinguishing it from sibling list operations.

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 use when a single contact id is known, contrasting with list_contacts for multiple. However, no explicit when-not or alternatives are given.

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

get_credit_noteGet a credit noteA
Read-only
Inspect

Fetch a single credit note by id. Quaderno API: GET /credit_notes/{id}.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe resource id.
Behavior3/5

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

Annotations already provide 'readOnlyHint: true', so description adds the API endpoint but no additional behavioral traits like side effects or authentication requirements. Acceptable given 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?

Single sentence with no extraneous information, very concise and front-loaded with the core action.

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

Completeness3/5

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

No output schema is provided, and the description does not explain return values or error scenarios. For a simple retrieval tool, it is adequate but could mention what fields are returned.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is adequate. Description mentions 'by id' matching the schema's 'id' parameter but adds no further detail.

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

Purpose5/5

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

Clearly states 'Fetch a single credit note by id', which is a specific verb-resource combination. Distinguishes from siblings like 'list_credit_notes' (which retrieves multiple).

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?

Implies use when you need a specific credit note by ID, but does not explicitly mention when not to use it or alternatives like 'list_credit_notes' for multiple notes.

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

get_expenseGet an expenseA
Read-only
Inspect

Fetch a single expense by id. Quaderno API: GET /expenses/{id}.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe resource id.
Behavior3/5

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

Annotations already declare readOnlyHint=true, indicating a safe read operation. The description adds the API endpoint but no additional behavioral traits (e.g., error handling, pagination, rate limits). With annotations covering the safety profile, a 3 is appropriate.

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

Conciseness5/5

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

The description is extremely concise with two sentences, no fluff, and front-loads the core action. 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?

With low complexity (1 param, no output schema, no nested objects), the description sufficiently covers what an agent needs: what the tool does and the endpoint. No missing information.

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

Parameters3/5

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

Schema coverage is 100%, and the parameter 'id' is described as 'The resource id.' The description adds no further meaning beyond the schema, so baseline 3 applies.

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

Purpose5/5

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

The description clearly states the verb ('Fetch') and resource ('single expense by id'), distinguishing it from siblings like list_expenses and other get tools for different resources.

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?

While no explicit when-to-use or alternatives are given, the tool's straightforward nature (get-by-id) makes its use case obvious: use when you have an id and need a single expense. Adequate for a simple tool.

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

get_invoiceGet an invoiceA
Read-only
Inspect

Fetch a single invoice by id (full object incl. items, taxes, payments, permalink, pdf). Quaderno API: GET /invoices/{id}.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe resource id.
Behavior4/5

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

Annotations already declare readOnlyHint=true. Description adds value by listing what the full object includes (items, taxes, payments, permalink, pdf) and the API endpoint, providing useful 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?

Two concise sentences, front-loaded with action and details. Every sentence earns its place. No fluff.

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

Completeness5/5

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

For a simple read-only tool with one parameter and no output schema, the description is complete. It specifies what is returned and the API endpoint, sufficient for the agent.

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

Parameters3/5

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

Schema coverage is 100% with parameter 'id' described as 'The resource id.' Description does not add further meaning beyond the schema, so 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?

Description clearly states verb 'Fetch' and resource 'a single invoice by id', specifying the full object contents. Distinguishes from sibling tools like list_invoices (multiple) and create_invoice (write).

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

Usage Guidelines3/5

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

No explicit when-to-use or when-not-to-use guidance. Implied by context: use when you have an invoice id and need full details. Lacks alternatives or exclusions.

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

get_itemGet a product (item)A
Read-only
Inspect

Fetch a single product/item by id. Quaderno API: GET /items/{id}.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe resource id.
Behavior3/5

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

Annotations already declare readOnlyHint=true, indicating a safe read operation. Description adds the API endpoint (GET /items/{id}) which provides little extra behavioral context beyond what annotations convey.

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

Conciseness5/5

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

Single sentence, zero fluff. Every word is necessary and front-loaded with the key action and resource.

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

Completeness4/5

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

For a simple read tool with annotations and a single parameter, the description is adequate. However, it could briefly mention returning item details or indicate that it returns a single item object.

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

Parameters3/5

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

Schema has 100% coverage with description for 'id' parameter. Description repeats 'by id' but adds no semantic detail beyond the schema's resource id description.

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

Purpose5/5

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

Description explicitly states 'Fetch a single product/item by id', clearly identifying the verb (fetch) and resource (product/item). It distinguishes from sibling 'get_*' tools by specifying 'product/item' and from 'list_items' by using 'single'.

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

Usage Guidelines3/5

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

No guidance on when to use this tool vs alternatives like 'list_items' or other 'get_*' tools. The description implies usage for fetching by id, but no when-not or prerequisites are mentioned.

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

get_receiptGet a receiptA
Read-only
Inspect

Fetch a single receipt by id. Quaderno API: GET /receipts/{id}.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe resource id.
Behavior2/5

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

Annotations already declare readOnlyHint=true, covering the safety profile. The description adds only the API endpoint (a structural detail) and no additional behavioral context (e.g., side effects, 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 that are immediately actionable. No extraneous content; 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 fetch-by-id tool with no output schema, the description is minimal but adequate. However, it lacks details about the return object or error conditions, which could be added for 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 100% with a clear description of the 'id' parameter. The description mentions 'by id' but adds no new semantic meaning beyond the schema.

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

Purpose5/5

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

The description clearly states 'Fetch a single receipt by id.' with a specific verb and resource, and includes the API endpoint for clarity. It distinguishes from sibling tools like list_receipts which fetch multiple.

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 usage when a specific receipt needs to be retrieved by ID. It does not explicitly state when not to use or list alternatives, but the context is clear for this simple read operation.

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

list_contactsList contactsA
Read-only
Inspect

List contacts (customers/vendors), newest first. Quaderno API: GET /contacts. Returns contact objects (id, kind, first_name, last_name, contact_name, email, country, tax_id, tax_status, …), wrapped as { data, pagination } when more pages exist.

ParametersJSON Schema
NameRequiredDescriptionDefault
qNoSearch by contact name, email, or tax ID.
pageNoPage number (legacy pagination; prefer created_before).
per_pageNoEntries per page (1-100, default 25).
created_beforeNoCursor for pagination: return records created before this id (from X-Pages-NextPage / a prior record id).
Behavior4/5

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

Annotations already declare readOnlyHint=true, so the description adds value by specifying ordering (newest first), pagination methods (cursor via created_before vs legacy page), and return structure (contact objects wrapped with pagination). No contradictions.

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

Conciseness5/5

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

Two efficient sentences plus a concise return description. Front-loaded with purpose and ordering. Every sentence contributes value without redundancy.

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

Completeness4/5

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

Given 4 parameters, no output schema, and present annotations, the description covers purpose, ordering, return format, and pagination summary. It lists key fields in contact objects but doesn't detail nested structures. Adequate for a list tool.

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

Parameters3/5

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

Schema coverage is 100%, so the schema already describes each parameter. The description restates the search parameter's purpose and explains pagination, but adds limited new meaning beyond schema descriptions. Baseline 3 is appropriate.

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

Purpose5/5

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

Description clearly states verb (list), resource (contacts with scope customers/vendors), and ordering (newest first). Differentiates from sibling tools like get_contact, create_contact, and other list tools by naming the specific resource. Provides API endpoint and return format.

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?

Context is clear: use to list contacts with search and pagination options. However, no explicit guidance on when not to use (e.g., when to use get_contact instead) or alternatives. Still adequate for most agents.

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

list_credit_notesList credit notesA
Read-only
Inspect

List credit notes (refund documents), newest first. Quaderno API: GET /credit_notes. Wrapped as { data, pagination } when more pages exist.

ParametersJSON Schema
NameRequiredDescriptionDefault
qNoSearch by number, customer name, or PO number.
dateNoDate range filter, e.g. "2026-01-01,2026-12-31".
pageNoPage number (legacy pagination; prefer created_before).
contactNoFilter by customer (contact) id.
per_pageNoEntries per page (1-100, default 25).
created_beforeNoCursor for pagination: return records created before this id (from X-Pages-NextPage / a prior record id).
Behavior4/5

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

Annotations already mark the tool as read-only (readOnlyHint=true). The description adds value by revealing the pagination wrapping format ({ data, pagination }) and the default sort order, which are behavioral details beyond the annotations.

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

Conciseness5/5

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

Two concise sentences with no wasted words. Front-loads the purpose and includes essential context (API path and response structure).

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

Completeness4/5

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

For a list tool with no output schema, the description covers the response structure and ordering. It could mention the default per_page value, but that is in the schema. Overall adequate.

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

Parameters3/5

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

All 6 parameters are explained in the schema (100% coverage). The description adds the ordering context and pagination wrapper, which do not directly expand parameter meaning. 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 clearly states it lists credit notes (refund documents) and specifies the sort order (newest first). It distinguishes from sibling tools by the resource type.

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

Usage Guidelines3/5

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

The description does not provide explicit guidance on when to use this tool versus alternatives (e.g., get_credit_note for a single record). It implies usage for listing but lacks exclusionary or comparative context.

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

list_expensesList expensesA
Read-only
Inspect

List expenses (bills you received), newest first. Quaderno API: GET /expenses. Wrapped as { data, pagination } when more pages exist.

ParametersJSON Schema
NameRequiredDescriptionDefault
qNoSearch by number or vendor name.
dateNoDate range filter, e.g. "2026-01-01,2026-12-31".
pageNoPage number (legacy pagination; prefer created_before).
contactNoFilter by vendor (contact) id.
per_pageNoEntries per page (1-100, default 25).
created_beforeNoCursor for pagination: return records created before this id (from X-Pages-NextPage / a prior record id).
Behavior4/5

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

Annotations provide readOnlyHint=true; description adds value by specifying ordering (newest first), pagination behavior, and return structure. No contradictions.

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

Conciseness5/5

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

Two concise sentences, front-loaded with purpose and ordering, no wasted words.

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

Completeness4/5

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

Given no output schema, description explains return format and pagination. It covers key behavioral aspects but lacks error handling or empty result details.

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

Parameters3/5

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

Schema description coverage is 100%, so description adds minimal extra meaning beyond schema. It provides ordering context but not parameter details.

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

Purpose5/5

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

The description clearly states it lists expenses (bills), ordered newest first, and mentions the API endpoint and return format. It distinguishes from sibling list tools by specifying the resource.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives like list_invoices or list_receipts. It does not provide context or exclusions.

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

list_invoicesList invoicesA
Read-only
Inspect

List invoices, newest first, with optional filters. Quaderno API: GET /invoices. Returns invoice objects (id, number, issue_date, due_date, currency, contact, items, taxes, payments, state, total_cents, subtotal_cents), wrapped as { data, pagination } when more pages exist.

ParametersJSON Schema
NameRequiredDescriptionDefault
qNoSearch by invoice number, customer name, or PO number.
dateNoDate range filter, e.g. "2026-01-01,2026-12-31".
pageNoPage number (legacy pagination; prefer created_before).
stateNoFilter by invoice state.
contactNoFilter by customer (contact) id.
per_pageNoEntries per page (1-100, default 25).
created_beforeNoCursor for pagination: return records created before this id (from X-Pages-NextPage / a prior record id).
Behavior5/5

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

The description adds significant behavioral context beyond the readOnlyHint annotation: it specifies the return object fields, pagination wrapper ({data, pagination}), and the API endpoint. No contradictions with annotations.

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

Conciseness5/5

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

Two sentences, front-loaded with the main purpose. Every sentence adds value: first states action and ordering, second provides API details and return format. 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 complexity (7 params, no output schema), the description covers the return fields and pagination. It does not explain pagination strategies (e.g., created_before vs page) or date format, but these are detailed in the schema. Slightly incomplete but adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales 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 mentions 'optional filters' but does not add new meaning to parameters beyond what the schema already provides.

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

Purpose5/5

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

The description clearly states the action (list), resource (invoices), ordering (newest first), and API endpoint (GET /invoices). It distinguishes this tool from sibling tools like create_invoice, get_invoice, and other list tools through specific resource naming.

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 usage context by stating 'with optional filters' and the resource type. However, it does not explicitly exclude alternative tools or provide when-not-to-use guidance. Sibling tools are clearly different resources, so confusion is minimal.

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

list_itemsList products (items)A
Read-only
Inspect

List products/items in the catalog, newest first. Quaderno API: GET /items. Returns item objects (id, code, name, kind, product_type, unit_cost, tax_class, tax_type, currency, stock, …), wrapped as { data, pagination } when more pages exist.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number (legacy pagination; prefer created_before).
per_pageNoEntries per page (1-100, default 25).
created_beforeNoCursor for pagination: return records created before this id (from X-Pages-NextPage / a prior record id).
Behavior4/5

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

Adds ordering and pagination details beyond readOnlyHint annotation; no contradictions.

Agents need to know what a tool does to the world before calling 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, first captures purpose and ordering, second adds API and return format; no waste.

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

Completeness5/5

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

Covers purpose, ordering, API endpoint, return fields, and pagination; no gaps for a list tool.

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

Parameters3/5

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

Schema coverage is 100%, and description adds no new parameter meaning beyond what schema provides.

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

Purpose5/5

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

Clearly states 'List products/items in the catalog, newest first' with specific verb and resource, distinguishing from sibling 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 Guidelines3/5

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

Implies usage for listing items, but no explicit when-to-use or alternatives compared to other list tools.

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

list_jurisdictionsList tax jurisdictionsA
Read-only
Inspect

List the tax jurisdictions (id, name, country, region) where the account is registered to collect tax. Quaderno API: GET /jurisdictions.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Behavior3/5

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

Annotations declare readOnlyHint=true, and the description identifies the API endpoint (GET) and typical response fields. This adds context beyond annotations but lacks details on authentication, rate limits, or edge 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?

Two sentences efficiently convey purpose, scope, and API reference. No redundant 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 parameterless, read-only list tool, the description covers the action, resource, key fields, and endpoint. No output schema needed as description suffices.

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

Parameters4/5

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

There are no parameters (0 params), so baseline is 4. The description does not need to add parameter information, and it correctly omits 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 clearly states the verb 'List', the resource 'tax jurisdictions', and the specific fields returned (id, name, country, region), distinguishing it from sibling tools like list_tax_codes.

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?

While there is no explicit when-to-use or alternative guidance, the straightforward nature of listing without parameters makes usage obvious. A slight improvement would be to mention when to use this over list_tax_codes.

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

list_receiptsList receiptsA
Read-only
Inspect

List receipts, newest first. Quaderno API: GET /receipts. Wrapped as { data, pagination } when more pages exist.

ParametersJSON Schema
NameRequiredDescriptionDefault
qNoSearch by number or customer name.
dateNoDate range filter, e.g. "2026-01-01,2026-12-31".
pageNoPage number (legacy pagination; prefer created_before).
contactNoFilter by customer (contact) id.
per_pageNoEntries per page (1-100, default 25).
created_beforeNoCursor for pagination: return records created before this id (from X-Pages-NextPage / a prior record id).
Behavior4/5

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

Annotations declare readOnlyHint=true. Description adds ordering ('newest first'), pagination behavior (cursor-based vs. legacy page), and response structure beyond the annotation.

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

Conciseness5/5

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

Two concise sentences with the main action first. No redundant words, 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?

No output schema exists; description mentions pagination wrapper. Adequate for a list tool with fully documented parameters, though could detail response fields.

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

Parameters3/5

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

All 6 parameters have schema descriptions (100% coverage). The description adds no additional parameter meaning beyond what the schema already provides, so baseline 3 is appropriate.

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

Purpose5/5

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

Clear verb ('List') and specific resource ('receipts'), with ordering ('newest first') and API endpoint. Distinct from sibling tools like list_invoices.

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

Usage Guidelines3/5

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

Implied usage context from the action and endpoint, but no explicit guidance on when to use this vs. other list tools, search, or filtering alternatives.

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

list_tax_codesList tax codesA
Read-only
Inspect

List the product tax codes Quaderno supports (id, name, description) — used as the tax_code on products / tax calculations. Quaderno API: GET /tax_codes.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Behavior2/5

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

Annotations already declare readOnlyHint=true. The description adds minimal behavioral context beyond confirming the operation and referencing the API endpoint. It does not elaborate on safety, side effects, or prerequisites.

Agents need to know what a tool does to the world before 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 directly states the action, resource, returned fields, and API reference. There is no wasted text, and all content 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 parameterless listing tool with no output schema, the description is complete: it specifies what is listed (tax codes), what fields are returned (id, name, description), and the context (used for tax_code on products/calculations). No additional information is 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 input schema has zero parameters with 100% coverage, so the description does not need to add schema details. The baseline for no parameters is 4, and the description adequately conveys the tool's purpose without needing parameter explanations.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 product tax codes with fields (id, name, description) and its usage context (tax_code on products/tax calculations). The verb 'list' and resource are specific, distinguishing it from sibling tools like list_contacts or list_invoices.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps 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 provide guidance on when to use this tool versus alternatives like calculate_tax or list_jurisdictions. It mentions the context but lacks explicit when-to-use or when-not-to-use instructions.

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

list_webhooksList webhooksA
Read-only
Inspect

List the account's configured webhooks (id, url, events). Quaderno API: GET /webhooks.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Behavior3/5

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

Annotations provide readOnlyHint=true; description adds that it lists account webhooks via GET /webhooks. With annotations already covering safety, description adds minimal extra behavioral detail.

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

Conciseness5/5

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

Two concise sentences: first covers purpose and output, second provides API reference. No redundant 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 parameterless tool with no output schema, the description fully covers what the tool does and returns. No missing context.

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

Parameters4/5

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

No parameters in input schema; schema coverage 100%. Description adds output fields (id, url, events) which adds value beyond schema, though parameter semantics dimension focuses on 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?

Clearly states 'List the account's configured webhooks' with specific fields (id, url, events) and API endpoint. Distinguishes from sibling list tools by targeting webhooks specifically.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives like list_contacts or list_invoices. Missing when-not-to-use or prerequisite context.

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

pingPing (verify auth)A
Read-only
Inspect

Verify the API key and connection by pinging Quaderno. Returns account/authentication status. Quaderno API: GET /ping.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Behavior4/5

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

Annotations declare readOnlyHint=true, and the description confirms it's a read operation ('verify', 'returns status'). It adds the HTTP endpoint (GET /ping) and the nature of return (account/authentication status). No contradictions.

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

Conciseness5/5

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

Two sentences, zero wasted words. Front-loads the purpose. Every sentence adds value: first states action, second describes return and API endpoint.

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 ping tool with no parameters and no output schema, the description provides sufficient context: purpose, return value, and API endpoint. Complete and concise.

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 (schema description coverage 100%). With 0 parameters, the description does not need to add param info; baseline is 4. No additional param details are required.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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: 'Verify the API key and connection by pinging Quaderno. Returns account/authentication status.' This is a specific verb (verify) and resource (auth status), and it uniquely distinguishes from sibling tools like list_contacts or create_invoice.

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 indicates when to use: for verifying API key and connection. It does not explicitly state when not to use or name alternatives, but the context is clear for a simple ping tool. 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.

quaderno_requestRaw read requestA
Read-only
Inspect

Power-user escape hatch: GET any Quaderno API path not wrapped by a dedicated tool. READ-ONLY — only GET is allowed. Path is taken after /api (e.g. "/tax_ids", "/evidence"). Quaderno API: GET {path}.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesAPI path after /api, starting with a slash, e.g. "/tax_ids".
queryNoOptional query params object.
Behavior3/5

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

The description reinforces the read-only nature (already declared in annotations with readOnlyHint=true) and specifies the method (GET only). Beyond the annotations, it adds path formatting details but no additional behavioral traits like error handling or rate limits. Annotations carry the main burden.

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

Conciseness5/5

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

The description is extremely concise (three sentences) and front-loaded with the core purpose. Every sentence adds value: 'escape hatch', read-only constraint, path format, and 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 generic GET escape hatch, the description covers the main usage aspects: path construction, read-only constraint, and relationship to dedicated tools. While it does not specify response format or error handling, these are less critical for this type of tool. Overall, it is sufficiently complete given its simplicity.

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

Parameters3/5

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

Schema coverage is 100%, so the description's role is limited. It adds context for the 'path' parameter (e.g., starting with '/', examples) but provides no extra semantics for the 'query' parameter. The description is adequate but does not significantly enhance understanding 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 clearly states the tool is a raw GET request for Quaderno API paths not covered by dedicated tools. The verb 'GET', resource 'any API path', and the phrase 'escape hatch' precisely define its role. It distinguishes itself from sibling tools which target specific endpoints.

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 use when no dedicated tool exists ('not wrapped by a dedicated tool') and emphasizes read-only. However, it does not explicitly state when NOT to use it or list alternatives; the guidance is clear but could be more direct.

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

update_contactUpdate a contactA
Destructive
Inspect

MUTATES Quaderno data — update an existing contact. Only the fields you pass are changed; use fields for any attribute not typed here. Quaderno API: PUT /contacts/{id}. Returns the updated contact.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe resource id.
emailNoContact email address.
fieldsNoAdditional raw Quaderno fields merged into the request body (escape hatch for any field not typed above).
tax_idNoTax ID / VAT number.
countryNo2-letter ISO country code.
last_nameNoPerson last name.
first_nameNoPerson first name / company name.
contact_nameNoContact person at a company.
Behavior4/5

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

Description adds value beyond the destructiveHint annotation by specifying the partial update mechanism and that the API endpoint is PUT /contacts/{id}, returning the updated contact. No contradictions with annotations.

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

Conciseness5/5

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

Two sentences: first announces mutation and verb, second explains partial update and references API. Information is front-loaded and each sentence serves a clear purpose with no redundancy.

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

Completeness4/5

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

Given no output schema, description notes return value ('Returns the updated contact'). It covers mutation behavior and partial update. Could mention required permissions or error cases, but sufficient for typical usage.

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 100% (all parameters described). Description adds key semantics: 'Only the fields you pass are changed; use `fields` for any attribute not typed here', explaining partial update and the escape hatch, which goes beyond 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?

Description clearly states 'MUTATES Quaderno data — update an existing contact', using a strong verb (update) and specific resource (contact). It distinguishes from sibling tools like create_contact, get_contact, and list_contacts by focusing on mutation.

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?

Description implicitly covers when to use: for updating existing contacts. It notes partial update behavior ('Only the fields you pass are changed') and provides an escape hatch (fields), but does not explicitly state when not to use or compare to similar tools.

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

Discussions

No comments yet. Be the first to start the discussion!

Try in Browser

Your Connectors

Sign in to create a connector for this server.