MCP server + CLI + REST API for autonomous agents to generate, track, and manage invoices
Agent Invoice has well-structured tool definitions with consistent naming (verb_noun pattern), clear descriptions (avg 120 chars), and complete JSON schemas for all 12 tools. All parameters are typed and described. However, output schemas are not documented, LLMs cannot predict response structure for downstream chaining. Error handling is absent; tools provide no recovery guidance. Parameter descriptions lack format constraints (e.g., date format, currency codes, tax rate bounds). No tool annotations (readOnlyHint, destructiveHint) despite clear risk levels. Missing idempotency guidance for retry-safe operations.
Register a new client that can be billed. Supports default currency.
Apply a flat discount to an invoice.
Cancel an invoice.
Create a new invoice for a client. The client must already exist. Supports tax rates per line item, currency, and discounts.
Get full details of a specific invoice by ID, including tax, discounts, payments, and totals.
List all registered clients.
List invoices with optional filtering by status, client, or currency.
No output schemas documented. LLMs cannot predict response structure (field names, types, nested objects) for downstream tool chaining. E.g., create_invoice must return invoice_id for mark_paid to work, but this is not documented.
No error handling or recovery guidance. Tools provide no actionable error messages. E.g., if client not found, no suggestion to call add_client or list_clients first. If invoice already paid, no guidance on what to do next.
Parameter descriptions lack format constraints. 'payment_date' says 'YYYY-MM-DD format' but LLMs often ignore text constraints, should use JSON Schema format:'date-time' or pattern. 'tax_rate' lacks bounds (0-100%?). 'currency' lacks enum of supported codes.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 62 | 2026-07-28+ | v2 |
List all payments recorded against an invoice.
Mark an invoice as fully paid. For partial payments, use record_payment instead.
Mark an invoice as sent.
Record a payment against an invoice. Supports partial payments. If the payment covers the full remaining balance, the invoice is automatically marked as paid.
Remove a payment from an invoice. The invoice status will be recalculated.
No tool annotations despite clear risk levels. cancel_invoice and remove_payment are destructive but lack destructiveHint. mark_paid, mark_sent, list_* are read-only but lack readOnlyHint. Agents cannot distinguish safe from risky operations.
No idempotency guidance. record_payment and apply_discount modify state but do not document whether retries are safe. Agents may double-charge or double-discount on retry.