Skip to main content
Glama

Joist by Cotlet

Create invoice

create_invoice
Destructive

New saved invoice for a client without an estimate. Nothing is sent to the client. Creates an invoice with the next invoice number, the client's details, line items, tax, discount, deposit and payment terms (due date = invoice date + payment_terms_days). For work you estimated, use convert_estimate_to_invoice instead. Nothing is sent: the client sees it only after send_invoice.

Input Schema

NameRequiredDescriptionDefault
notesNoNotes shown on the document.
tax_idNoA saved tax rate from list_items (taxes) instead of tax_rate.
depositNoRequested deposit, shown as Deposit Due: percent or amount.
discountNoDiscount on the subtotal: percent or amount.
tax_rateNoTax percent on every line, e.g. 7.25. Uses your tax rate with that percent, or adds one.
client_idYesFrom list_clients or add_client.
po_numberNoPO number.
line_itemsYesLines: name, rate, optional quantity, description, item_id.
document_dateNoInvoice date. Default: today.
payment_terms_daysNoDays after the invoice date the payment is due (0: due on receipt).

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the annotations (readOnly=false, destructive=true, idempotent=false, openWorld=true), the description adds substantive behavior: the invoice number is auto-assigned, the due date is computed as invoice date + payment_terms_days, and nothing is delivered until send_invoice is called. The auto-numbering also implicitly explains why the call is non-idempotent, filling the gap the idempotentHint leaves.

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?

Short and front-loaded: purpose first, then alternatives. The one weakness is redundancy — 'Nothing is sent to the client' and 'Nothing is sent: the client sees it only after send_invoice' say the same thing twice, and one of them could be cut.

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

Completeness4/5

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

For a 10-parameter tool with nested line_items, discount, and deposit objects, the description covers the important semantic behavior and the sibling routing. The remaining gap is that there is no output schema and the description never says what is returned (e.g. the new invoice identifier), which an agent would need to chain into send_invoice.

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 and the schema carries most parameter meaning. The description still adds value by disclosing the derived relationship due date = invoice date + payment_terms_days, which is not spelled out in the payment_terms_days schema text.

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

Purpose5/5

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

The opening sentence names a specific verb and resource ('New saved invoice for a client') and immediately bounds the scope ('without an estimate'), which separates it from the sibling convert_estimate_to_invoice. An agent can distinguish this from create_estimate and convert_estimate_to_invoice without opening any schema.

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

Usage Guidelines5/5

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

Both routing decisions are explicit: use convert_estimate_to_invoice when work was estimated, and use send_invoice to actually deliver the document. It also states the negative case ('Nothing is sent to the client'), so the agent knows creation alone does not notify anyone.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.