Skip to main content
Glama
yoyodyne7
by yoyodyne7

Update draft Wave invoice

wave_update_invoice

Update a draft invoice by changing supplied fields or replacing all line items. Refuses invoices that are no longer drafts.

Instructions

Change a DRAFT invoice. Only the fields you pass are changed, except items, which replaces ALL line items. Refuses invoices that are no longer drafts.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
memoNoNotes shown on the invoice
itemsNoReplaces all existing line items
titleNo
footerNo
currencyNoInvoice currency (default: business currency)
due_dateNoDue date (default: business payment terms)
po_numberNo
invoice_idYesInvoice ID exactly as returned by Wave (an opaque string)
customer_idNoCustomer ID exactly as returned by Wave (an opaque string)
invoice_dateNoIssue date (default: today)
exchange_rateNoRate from the invoice currency to the business currency; set it for foreign-currency invoices

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
idYes
memoYes
itemsYes
titleYes
totalYes
footerYes
statusYes
pdf_urlYes
currencyYes
due_dateYes
paymentsYes
view_urlYes
po_numberYes
tax_totalYes
amount_dueYes
amount_paidYes
customer_idYes
modified_atYes
invoice_dateYes
customer_nameYes
exchange_rateYes
customer_emailYes
invoice_numberYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.1.0

TDQS

A4.2/5.0
Behavior4/5

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

Annotations cover the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false), so the bar is lower, yet the description still adds the important PATCH-style semantics (only passed fields change) and the notable exception that `items` replaces ALL line items, plus the draft-only refusal. It does not mention permissions/auth or currency side effects, keeping it 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?

Two tight sentences with zero filler, and the merge-vs-replace rule is front-loaded right after the draft-only constraint. Every clause carries operational 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?

An output schema exists so return values need not be explained, and the mutation's core behavior and precondition are covered. Missing only auth/permission expectations and what the caller should do when the draft-only guard rejects the call.

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

Parameters3/5

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

Schema coverage is 73%, so the schema already documents most parameters (including the items replacement note, currency default, and exchange_rate guidance). The description adds the update-merge semantics usefully but names no parameters beyond `items`, so the baseline 3 for schema-driven documentation 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 (Change) and resource (DRAFT invoice) with an explicit scope restriction. It is immediately distinguishable from wave_create_invoice, wave_approve_invoice, and wave_send_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 Guidelines4/5

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

Gives a clear precondition (only draft invoices; refuses non-drafts), which is the key gating condition for this tool. It stops short of routing the agent to a specific alternative for non-draft invoices (e.g., revert/approve flows) or pointing at wave_get_invoice for reads, so it is clear but not fully exclusionary.

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