Skip to main content
Glama

Update invoice

wave_update_invoice
DestructiveIdempotent

Change an existing invoice by ID: update fields such as memo, due date, status, or currency; pass items to replace all lines or omit items to keep them. Paid invoices may be refused.

Instructions

Change an invoice. Passing items replaces every line; omit items to keep them. Wave may refuse changes to paid invoices.

Input Schema

NameRequiredDescriptionDefault
idYesInvoice ID
memoNoNotes shown to the customer
itemsNo
titleNo
footerNo
statusNo
dueDateNoDate, YYYY-MM-DD
subheadNo
currencyNoISO 4217 currency code, e.g. CAD or USD
hideNameNo
hideUnitNo
poNumberNo
discountsNo
hidePriceNo
itemTitleNo
unitTitleNo
customerIdNo
hideAmountNo
priceTitleNo
amountTitleNo
invoiceDateNoDate, YYYY-MM-DD
exchangeRateNoBusiness currency per document currency (foreign-currency documents only)
invoiceNumberNo
hideDescriptionNo
disableAmexPaymentsNo
disableBankPaymentsNo
disableCreditCardPaymentsNo
requireTermsOfServiceAgreementNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv1.0.0

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false, so the safety profile is covered structurally. The description adds real value beyond that by disclosing the destructive replacement semantics of items and the fact that paid invoices may be rejected. It still omits what happens to unmentioned fields, whether partial updates are atomic, and how refusals surface, which matters for a 28-param mutation.

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 core action, and each sentence carries a distinct decision-relevant fact. No filler, no restatement of the title.

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 28-parameter mutation with no output schema and thin schema documentation, the description is too terse. It covers the items-replacement hazard and the paid-invoice restriction, but leaves an agent without guidance on field-level update semantics, required permissions, or what a successful response contains.

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 21% across 28 parameters, so the description carries a heavy burden it does not fully meet. It does add meaning the schema cannot express on its own: that items is a full-replacement list rather than a merge. The other 27 parameters, including status, currency, exchangeRate, and the various hide* toggles, get no guidance in the description.

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

Purpose4/5

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

The description names a specific verb and resource ("Change an invoice"), so the agent knows it mutates an existing invoice rather than creating or reading one. It does not, however, distinguish itself explicitly from siblings like wave_create_invoice, wave_clone_invoice, or wave_approve_invoice, which also touch invoice state.

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

Usage Guidelines3/5

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

It implies usage for editing an existing invoice and gives one concrete conditional rule (pass items to replace lines, omit to preserve them), which is genuinely decision-guiding. There is no explicit statement of when this tool is preferred over wave_create_invoice or wave_clone_invoice, and no prerequisites such as needing the invoice ID from wave_list_invoices.

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

Deploy Server

Other Tools