Skip to main content
Glama
billingengine

BillingEngine MCP server

Official

Update a draft invoice

update_invoice
Idempotent

Modify a draft invoice by sending the complete item list; new items replace existing ones. Sent invoices cannot be changed.

Instructions

Changes a draft invoice. Passing items replaces all existing items, so send the complete list. Sent invoices cannot be changed.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
idYes
dateNoInvoice date, defaults to today
itemsNo
due_daysNoDays until payment is due
signatureNo
introductionNo
service_period_end_dateNo
service_period_start_dateNo

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.1.0

TDQS

A4/5.0
Behavior4/5

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

Annotations cover safety (readOnlyHint=false, destructiveHint=false, idempotentHint=true), and the description adds genuinely non-derivable behavior: items replacement overwrites the full list and only drafts are mutable. This is real context beyond the annotations, though it omits what happens to omitted optional fields and error behavior on non-draft invoices.

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, then the highest-risk gotcha (items replacement), then the precondition. 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?

With an output schema present, return values need not be explained, and the description covers the mutation scope and the two main hazards. Partial-update semantics for omitted fields and the failure mode for a non-draft id are left implicit, which is the only meaningful 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?

Schema coverage is only 25% across 8 parameters, so the description must add meaning. It does add the critical items semantics ('passing items replaces all existing items, so send the complete list'), but says nothing about date, due_days, signature, introduction, or the service period fields, leaving half the surface undocumented in both places.

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 verb and resource ('Changes a draft invoice'), with the scope qualifier 'draft' that separates it from create_invoice and the read-only invoice siblings. It does not explicitly name a sibling to route away from, so it falls short of 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 Guidelines4/5

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

Provides a clear when-not condition: 'Sent invoices cannot be changed,' which tells the agent the tool only applies to drafts. It doesn't name an alternative for the sent-invoice case, but no obvious sibling covers that path, so this is a strong but not exhaustive usage statement.

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