CLI tool, MCP server, and Discord notifier for Fakturoid.cz
11 tools with basic verb-noun naming and present descriptions, but significant gaps in schema completeness and parameter documentation. All tools return JSON strings rather than structured objects. Most parameter descriptions are minimal (10-30 chars). No output schemas documented. Error handling is absent, tools return raw API responses or generic strings without recovery guidance. Composition is reasonable (single responsibility per tool), but parameter validation and constraint documentation are weak. Naming is clear but descriptions lack LLM-optimization depth (most are 20-60 chars, below the 50-200 char baseline for A+ tools).
Create a new invoice.
Download invoice as PDF to local file.
Generate ABO payment order file from unpaid expenses.
Get account overview: company info, invoice stats, overdue amounts.
Get full detail of a contact/client by ID.
Get full detail of a specific invoice by ID.
List or search contacts/clients. Pass query to search, empty for all.
No output schemas documented. All tools return JSON strings; LLMs cannot infer response structure for downstream chaining. E.g., search_invoices returns a list but no field names are documented.
Parameter descriptions are minimal (10-30 chars) and lack constraint documentation. E.g., 'due_days' has no range (1-365?), 'currency' has no enum (CZK, EUR, USD?), 'status' in list_expenses has no valid values listed.
No error handling or recovery guidance. Tools return raw strings ('PDF not ready yet', 'Error: FAKTUROID_SENDER_ACCOUNT not set') without actionable next steps. LLMs cannot distinguish retryable from fatal errors.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 65 | 2026-07-28+ | v2 |
List expenses, optionally filtered by status (open, overdue, paid).
List all overdue invoices.
List all unpaid/open invoices.
Search invoices by text (client name, number, description).
Tool descriptions are too brief (20-70 chars vs. 50-200 char baseline). Missing WHEN to use, prerequisites, and dependencies. E.g., 'List all overdue invoices' does not explain when to call it vs. list_unpaid_invoices.
No pagination support. search_invoices and list_expenses cap results at 20-30 items but do not expose limit/offset parameters or document the cap in descriptions. Large result sets risk context window exhaustion.