Skip to main content
Glama

Billomat MCP by usefulapi

billomat_add_invoice_item

Destructive

WRITE: add one line item to an invoice that is still a DRAFT (Billomat refuses it for any other status). Does not complete or send the invoice.

Input Schema

NameRequiredDescriptionDefault
typeNoPRODUCT or SERVICE.
unitNoUnit, e.g. Stunde, Stueck, hour.
titleNoItem title (required unless article_id is given).
optionalNoOffers only: mark the item as optional (its price is left out of the total).
quantityNoQuantity (required unless article_id is given).
tax_nameNoTax name; with tax_rate overrides the standard tax of the account.
tax_rateNoTax rate in percent; the account's standard rate when omitted.
reductionNoDiscount: absolute (10) or percent (10%).
article_idNoAn article id (from billomat_list_articles): title, unit, price and tax missing here are taken from the article.
invoice_idYesThe draft invoice id.
unit_priceNoUnit price, net or gross as net_gross of the document (required unless article_id is given).
descriptionNoItem description.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false and destructiveHint=true, so the safety profile is covered. The description adds real value beyond that by disclosing a server-side validation rule (status must be DRAFT) and clarifying it does not finalize/send the document. It stops short of covering idempotency behavior, which is notable given idempotentHint=false — repeated calls presumably append duplicate items, and that is not stated.

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 an uppercase WRITE marker and the core constraint. Every clause carries routing or behavioral information; there is 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?

For a 12-parameter mutation tool the description plus a fully documented schema is nearly sufficient, and the draft-only constraint is the key missing piece it supplies. With no output schema, however, it never says what comes back (e.g. the created item id), which would help an agent chain subsequent calls.

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 all 12 parameters — including the article_id fallback semantics for title/quantity/unit_price — are already documented in the schema. The description adds no parameter-level meaning beyond it, which is the expected baseline when the schema carries the load.

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 states a specific verb and resource ('add one line item to an invoice') and immediately scopes it to draft invoices only. An agent can distinguish this from billomat_list_invoice_items or billomat_create_draft_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?

It gives an explicit precondition ('an invoice that is still a DRAFT') and an explicit when-not ('Billomat refuses it for any other status'), plus a negative scope ('Does not complete or send the invoice'). Nothing about when to call it is left to inference.

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.