ucetka-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@ucetka-mcpVystav fakturu Vzorové firmě na 4 h konzultací po 2 500 Kč, splatnost 14 dní."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
ucetka-mcp
AI-native accounting for Czech freelancers (OSVČ), driven from an AI chat via MCP.
Tell your AI assistant "issue an invoice to Vzorová firma for 4 hours of consulting at 2 500 CZK" and ucetka-mcp produces a legally complete Czech invoice (PDF/A-3 with embedded ISDOC and a QR payment code), records it, and later turns your records into the VAT return, control statement and income-tax estimate. Everything runs locally on your Mac.
Sample invoice and dashboard with fictional data.
Not tax advice. ucetka-mcp is a personal open-source tool, not a certified accounting product. Tax and insurance calculations are estimates. Always review generated invoices, VAT returns and statements before you file them, and consult a tax advisor (daňový poradce) when in doubt. The authors accept no liability for errors or penalties.
What it does
Invoices and credit notes that meet the Czech VAT Act (§ 28–35 and § 45 of Act 235/2004 Coll.): PDF/A-3a with an embedded ISDOC 6.0.2 XML (
invoice.isdoc, validated against the official XSD and Schematron rules), so accounting software can import them, and a QR Platba code (SPAYD, optionally QR Platba+F with invoice data).VAT payer or non-payer, EU reverse charge, foreign currencies with the Czech National Bank rate on the tax point date, Czech or English PDF layout.
Records: issued invoices (the single source of invoice numbering), received invoices for VAT deduction, payments; received invoices are read from ISDOC (embedded in the PDF or a standalone
.isdocfile) and the rest is entered by the AI from the PDF; import of existing ISDOC PDFs, company lookup in the public ARES registry.VAT filings as XML for the tax portal (EPO): VAT return (DPHDP3), control statement (DPHKH1) and EC sales list (DPHSHV).
Income tax and insurance: personal income tax with flat-rate or actual expenses, social and health insurance for side activity, year-end forecast, monthly advances (with QR codes), deadlines, limits.
Cash-basis bookkeeping (daňová evidence): income and expense book as CSV/PDF.
Pohoda XML export (Stormware, validated against the vendored XSD).
Local web dashboard (FastAPI) for people who prefer clicking to chatting.
Related MCP server: Scribo MCP Server
Who it is for
Czech sole traders (OSVČ) who invoice in CZK or EUR and want to run their paperwork from Claude (or another MCP client) instead of a SaaS like Fakturoid. It encodes Czech rules (VAT Act, Income Tax Act, ČSSZ/VZP), so it is of little use outside the Czech Republic. Currently macOS only (Homebrew, LaunchAgent, Mail.app drafts).
How it works
Claude Desktop / Claude Code / Antigravity
│ MCP (stdio)
▼
ucetka-mcp server ──► issue pipeline: Pydantic model → WeasyPrint PDF/A-3 → ISDOC (Jinja2 + lxml XSD) → pikepdf embed
│ → QR Platba (SPAYD)
├─► records ~/.ucetka/ (YAML + JSON, plain files)
├─► PDFs ~/Documents/Účetnictví/Vydané faktury/YY_MM_vydane/
└─► filings ~/Documents/Účetnictví/Přehledy/<year>/ (EPO XML, book of income and expenses)
ucetka CLI · web dashboard http://127.0.0.1:8765/prehledThe MCP server exposes about 25 tools, for example issue_invoice, issue_credit_note, lookup_company,
list_invoices, mark_paid, add_expense, export_vat_return, tax_overview, advance_schedule, export_book,
draft_invoice_email (creates a Mail.app draft and never sends it) and open_dashboard.
Installation
Requirements: macOS, Homebrew.
git clone https://github.com/kubanekmartin/ucetka-mcp.git ~/ucetka-mcp
cd ~/ucetka-mcp
./install.sh
ucetka initinstall.shinstallsuvandpango(for WeasyPrint), the Python environment, theucetkaanducetka-mcpcommands in~/.local/bin, the dashboard as a LaunchAgent,~/Applications/Faktury.app, and registers the MCP server for Claude Desktop and Antigravity. It is safe to run again (for example aftergit pull).ucetka initasks for your company ID (IČO, the rest comes from ARES), bank account, VAT status and tax profile, and writes~/.ucetka/supplier.yamland~/.ucetka/tax.yaml.Restart your AI client.
Claude Code: claude mcp add ucetka -- ~/.local/bin/ucetka-mcp.
Usage
In the chat (Czech or English both work):
Vystav fakturu Vzorové firmě na 4 h konzultací po 2 500 Kč, splatnost 14 dní.
Kolik mám letos zaplatit na daních a pojištění?
Připrav přiznání k DPH a kontrolní hlášení za 3. čtvrtletí.
Faktura 2610001 je zaplacená k dnešku.From the terminal:
ucetka issue --invoice muj.yaml # YAML like examples/2605001.yaml; supplier comes from ucetka init
ucetka list
ucetka dph --rok 2026 --q 3
ucetka kniha --rok 2026
ucetka dashboardAll names, company IDs and bank accounts in examples/ and tests/ are fictional.
Development
uv sync
DYLD_FALLBACK_LIBRARY_PATH=$(brew --prefix)/lib uv run pytest -q
make issue # demo invoice from examples/ into build/smoke, isolated from your real recordsWeasyPrint needs DYLD_FALLBACK_LIBRARY_PATH to find Homebrew's libgobject; macOS SIP strips DYLD_* from child
processes, so it has to be set before Python starts (the wrappers from install.sh do that).
Ground rules: the ISDOC XSD validation is a hard gate (an invalid ISDOC is worse than none), inputs are validated with
Pydantic and fail fast, and tax rates live in src/ucetka/tax_params.py with links to their official sources.
Limitations
Not supported yet: main (non-side) business activity with minimum advances, self-employed without an exemption from the health-insurance minimum, depreciation of assets over 80 000 CZK, travel allowances, reduced VAT deduction (§ 75), simplified tax documents. The EPO XML follows real filings, but the official EPO schema is not public: always run the "Kontrola" check in EPO before submitting.
License
MIT, see LICENSE.
Česky
ucetka-mcp je fakturace a daňová evidence pro OSVČ na macOS, ovládaná z AI chatu (Claude Desktop, Claude Code, Gemini v Google Antigravity) přes MCP nebo z webového přehledu v prohlížeči.
Faktury a dobropisy jako PDF/A-3 s vloženým ISDOC 6.0.2 a QR Platbou (i QR Platba+F).
Evidence vydaných a přijatých faktur, odpočet DPH, přiznání k DPH, kontrolní a souhrnné hlášení jako XML pro EPO.
Daň z příjmů, sociální a zdravotní pojištění: odhad, prognóza do konce roku, zálohy.
Výdajový paušál nebo daňová evidence se skutečnými výdaji (kniha příjmů a výdajů v PDF/CSV).
Všechna data zůstávají lokálně (
~/.ucetka,~/Documents/Účetnictví).
Upozornění: nejde o daňové poradenství ani certifikovaný účetní software. Výpočty daní a pojistného jsou odhad. Faktury, přiznání a hlášení si před podáním vždy zkontroluj, v nejasných případech se obrať na daňového poradce.
Instalace: ./install.sh a ucetka init (viz výše). Podrobný návod pro netechnické uživatele je v
scripts/NAVOD.txt.
Co | Kde |
Profil, evidence, zálohy |
|
Vydané faktury (PDF) |
|
Přijaté faktury (PDF, ISDOC) |
|
Přiznání DPH, KH, SH, kniha |
|
Složky jde změnit proměnnými UCETKA_HOME, UCETKA_OUT, UCETKA_RECEIVED, UCETKA_REPORTS.
Daňový profil (~/.ucetka/tax.yaml)
expense_mode: actual # actual = skutečné výdaje (daňová evidence), flat_rate = paušál
flat_rate_percent: 60 # jen u paušálu
health_status: employee # employee = zaměstnanec, student = pojištěnec státu
employment_income: 600000 # roční hrubá mzda, jen pro odhad daně
social_advance_monthly: 1574
vat_period: quarterly
deductions: 0 # nezdanitelné části (penzijní spoření…)
last_tax_liability: 0 # poslední daň, určuje zálohy na daňPřed prvním exportem DPH doplň hlavičku podání (opiš ji ze svého posledního XML z EPO):
epo:
c_ufo: "451" # kód finančního úřadu
c_pracufo: "2001" # kód územního pracoviště
dic: "1234567890" # DIČ bez CZ
jmeno: Jan
prijmeni: Novák
zkrobchjm: JAN NOVÁK
ulice: Hlavní
c_pop: "1"
naz_obce: Praha
psc: "11000"
email: jan@example.comVolitelně pro QR platbu zálohy ČSSZ (údaje z dopisu ČSSZ): cssz_payment: {account: "…/0710", variable_symbol: "…"}.
Skutečné výdaje
Přijaté faktury ukládej do
Přijaté faktury/RR_MM_prijate/jakoRRMMNNN.pdf. Načítají se v tomto pořadí:RRMMNNN.isdocvedle PDF (nebo samotné, bez PDF), např. ISDOC stažený z účtu na Alze;ISDOC vložený v PDF (Pohoda, FakturaOnline…);
text faktury od Alzy;
zbytek označí k zadání a AI ho v chatu přečte z PDF a zapíše sama (
list_import_issues→add_expense).
Do daně jde výdaj až zaplacený: na stránce Výdaje klikni „Zaplaceno“.
Soukromé použití:
business_share(např. telefon 50 %) krátí výdaj pro daň z příjmů. Krácený odpočet DPH (§ 75) export zatím neumí a odmítne ho.
Available Tools
25 toolsadd_customerA
Přidá odběratele do adresáře podle IČO (data z ARES). Existující záznam nepřepíše.
| Name | Required | Description | Default |
|---|---|---|---|
| ico | Yes | IČO — údaje se doplní z ARES. | |
| No | E-mail pro zasílání faktur. | ||
| customer_id | Yes | Krátký klíč do adresáře, např. 'vzorova-firma'. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are given, so the description carries the full behavioral burden. It does disclose two non-obvious traits: the record is enriched from the external ARES registry, and an existing record is not overwritten (effectively a no-op/skip rather than an upsert). It does not say what happens when the IČO is invalid or not found in ARES, nor whether any permission or connectivity is required.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short, front-loaded sentences with zero filler; the core action comes first and the non-overwrite caveat follows immediately. Nothing could be removed without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 ID scheme and ARES sourcing are covered. For a mutation tool with no annotations, though, a brief note on failure behavior (missing/invalid IČO, unreachable ARES) would close the remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters (ico, email, customer_id) are already documented in the schema, including the ARES enrichment note for ico. The description only reiterates the IČO/ARES linkage and adds no semantics about the format or constraints of customer_id or email beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Uses a specific verb ('Přidá') and resource ('odběratele do adresáře') and names the mechanism ('podle IČO, data z ARES'), which clearly separates it from read-side siblings like list_customers or lookup_company. It stops short of explicitly naming the sibling it replaces, so a 5 isn't warranted.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Existující záznam nepřepíše' gives an important usage constraint — calling it for an already-present customer is a no-op rather than an update. However, there is no explicit statement of when to choose this over lookup_company (read ARES data) or how to then modify an existing entry.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_expenseB
Ručně zapíše přijatou fakturu (výdaj) — hlavně doklady, které import neumí přečíst.
| Name | Required | Description | Default |
|---|---|---|---|
| vat | No | DPH v Kč dle dokladu. Prázdné = dopočítat ze základu. | |
| base | Yes | Základ (bez DPH) v Kč. | |
| note | No | Poznámka. | |
| goods | No | Reverse charge: pořízení zboží z EU (ř. 3), jinak služba. | |
| pdf_path | No | Cesta k PDF (u flagovaných dokladů z list_import_issues). | |
| vat_rate | No | Sazba DPH v % (21/12/0). | 21 |
| paid_date | No | Datum úhrady YYYY-MM-DD — při skutečných výdajích se výdaj počítá až zaplacený. | |
| claim_date | No | YYYY-MM-DD: doklad dorazil až po podání období DUZP → odpočet uplatnit v období tohoto data (§ 73). | |
| expense_id | Yes | ID dokladu = název PDF bez přípony (např. '2603002'). | |
| supplier_dic | No | DIČ / VAT ID dodavatele. | |
| supplier_name | Yes | Dodavatel. | |
| business_share | No | Podíl použití pro podnikání v % (telefon napůl soukromě = 50). | |
| reverse_charge | No | Zahraniční služba bez české DPH (Google, OpenAI…) — DPH se samovyměří. | |
| tax_deductible | No | Daňově uznatelný pro daň z příjmů. Nedaňový doklad (pohoštění…) zadej s vat_rate 0, aby DPH nešlo do odpočtu. | |
| tax_point_date | Yes | DUZP YYYY-MM-DD. | |
| document_number | Yes | Číslo faktury dodavatele. | |
| supplier_country | No | Země SÍDLA dodavatele (ISO, např. IE, PL, US) — u reverse charge povinné. Podle adresy na faktuře, ne podle prefixu DIČ (Anthropic, PBC s irským DIČ = US). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It says the tool writes a record but is silent on what happens if expense_id already exists (overwrite vs. duplicate error), whether the write is reversible, what validation failures look like, or that this is a mutating, non-read-only operation requiring accurate accounting data. For a 17-parameter write tool with zero annotation coverage, this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler and the purpose stated first. It is efficient, though for a tool with 17 parameters and a multi-step import-recovery workflow the brevity edges toward under-specification rather than true concision.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Has an output schema, so return values need not be described, and 100% schema coverage handles parameters. Given that, the description only needs to establish purpose and the import-failure entry point, which it does. The gap is the missing tie to list_import_issues, not missing return or param detail.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every one of the 17 parameters already carries its own meaning (including the non-obvious reverse_charge, claim_date, supplier_country and business_share semantics). The description adds no parameter guidance beyond what the schema states, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource in Czech: 'Ručně zapíše přijatou fakturu (výdaj)' — manually records a received invoice as an expense. It also scopes it to documents the import cannot read. However, it does not distinguish itself from the similarly-named sibling add_manual_invoice, so an agent must guess between the two.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'hlavně doklady, které import neumí přečíst' implies the entry point (documents flagged by import), but never names the sibling that surfaces those documents (list_import_issues) nor contrasts with add_manual_invoice, remove_expense, or mark_expense_paid. Usage is inferable but not stated as an explicit condition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_manual_invoiceA
Zapíše do evidence vydanou fakturu, kterou import nepřečetl (PDF už existuje, nic se negeneruje).
| Name | Required | Description | Default |
|---|---|---|---|
| lines | Yes | Položky (ceny bez DPH). | |
| number | Yes | Číslo faktury. | |
| due_date | Yes | Splatnost YYYY-MM-DD. | |
| pdf_path | Yes | Cesta k existujícímu PDF vydané faktury (z list_import_issues). | |
| paid_date | No | Datum úhrady, pokud už je zaplacená. | |
| issue_date | Yes | Datum vystavení YYYY-MM-DD. | |
| customer_dic | No | DIČ odběratele. | |
| customer_ico | No | IČO odběratele. | |
| customer_name | Yes | Odběratel. | |
| tax_point_date | No | DUZP. Default = vystavení. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It does disclose one important behavioral fact — that no document is generated and an existing PDF must be supplied — but says nothing about duplicate invoice numbers, idempotency, validation, required permissions, or whether the record links back to the import issue.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with the action front-loaded and the qualifying condition immediately after it. No filler, and the parenthetical carries real disambiguating information rather than restating the name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter write tool, the description supplies the workflow context an agent needs (import failure, pre-existing PDF) while the schema fully documents parameters and an output schema covers the return. Only edge-case behavior such as duplicate numbers or failure modes is unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, including nested LineInput fields with Czech explanations for unit, quantity, VAT rate, and net unit price. The description adds no parameter-level meaning beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ("Zapíše do evidence vydanou fakturu") and adds a distinguishing clause: the invoice is one the import could not read and the PDF already exists, so nothing is generated. That separates it from issue_invoice, which produces a PDF, though it never names that sibling directly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The when-to-use condition is explicit and narrow: only for issued invoices that the import failed to parse, with an existing PDF. The parenthetical "nic se generuje" implicitly rules out the generation path, but no alternative tool is named and no explicit when-not case is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
advance_scheduleA
Rozpis měsíčních záloh ČSSZ: které měsíce jsou zaplacené / po splatnosti, a odhad zálohy na příští rok.
| Name | Required | Description | Default |
|---|---|---|---|
| year | No | Rok. Default letošní. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full behavioral burden. It discloses that results include per-month paid/overdue status and a computed next-year estimate (useful computed-value disclosure), but never states that it is read-only, whether ČSSZ data requires prior authentication/setup, or anything about data freshness. For a simple lookup this is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One tightly packed sentence with a colon-delimited enumeration of outputs; no filler, and the resource is front-loaded before the details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 sole parameter is fully documented in the schema. The description is nearly complete for a one-parameter read tool; the only omission is any note on access requirements or what to do if ČSSZ data is not configured.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single 'year' parameter is already documented in the schema with its default ('Rok. Default letošní.'). The description adds no additional meaning about the year parameter, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource and its scope: monthly ČSSZ advance payments, showing which months are paid or overdue plus a next-year advance estimate. An agent can immediately tell this is a payment-schedule lookup, distinct from every sibling tool (invoicing, customers, VAT). No explicit verb is used, which keeps it just 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied by the listed contents – an agent infers it is for checking advance payment status or forecasting next year's advance. There is no explicit when-to-use statement, no prerequisites, and no mention of alternatives (none of the siblings actually overlap, so this gap is minor).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cancel_invoiceA
Stornuje vydanou fakturu (zůstane v evidenci, nepočítá se). Jen pokud ji uživatel výslovně ruší.
Pokud už byla doručena odběrateli, nestornuj — vystav dobropis přes issue_credit_note.
| Name | Required | Description | Default |
|---|---|---|---|
| number | Yes | Číslo vydané faktury. | |
| reason | Yes | Důvod, např. 'chybná, nahrazena fakturou 2609001'. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose the key consequence: the invoice stays in the records but is not counted, and delivery to the customer changes the correct action entirely. It does not cover permissions required, whether the cancellation is itself reversible, or any rate/duplicate-call concerns, which is a real but modest gap for a destructive mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, effect first, exception second, with no filler. The phrasing is slightly terse and the split into a fragment as the second sentence is a little clipped, but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter mutation the description covers the effect on data, the user-intent prerequisite, and the branch to the sibling tool; an output schema exists so return values need not be explained. Only authorization and reversibility are unaddressed, which is a minor residual gap given no annotations are supplied.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both parameters are documented in the schema, including a concrete example for 'reason'. The description adds no further meaning about the number format or what makes a good reason, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Stornuje vydanou fakturu') and immediately disambiguates scope from the nearest sibling by naming issue_credit_note as the alternative path. An agent can distinguish cancel_invoice from issue_credit_note without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit precondition ('Jen pokud ji uživatel výslovně ruší') and an explicit exclusion with the substitute tool ('Pokud už byla doručena odběrateli, nestornuj — vystav dobropis přes issue_credit_note'). Both the when and the when-not, plus the named alternative, are present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
draft_invoice_emailA
Otevře v Mail.app KONCEPT e-mailu s PDF fakturou v příloze. Nic neodesílá — odeslání je na uživateli.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | Adresát. Default e-mail odběratele z adresáře. | |
| number | Yes | Číslo faktury z evidence. | |
| message | No | Vlastní text e-mailu místo výchozího. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose the two behaviors that matter most: it writes into a local Mail.app mailbox (side effect on the user's machine) and it never transmits anything. Gaps remain around preconditions — the invoice presumably must exist and be issued, and Mail.app must be present on macOS — and around failure behavior for an unknown number.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the action and followed immediately by the non-sending guarantee. No filler, no restatement of the name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 no explanation, and the parameter set is small and fully described. What is missing for a tool that touches the user's mail client is precondition and failure context (invoice must exist, Mail.app required), which keeps it short of a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the field meanings (recipient defaulting to the customer's address from the directory, invoice number, custom message body) are already fully documented in the schema. The description adds nothing parameter-specific beyond implying that a PDF for that invoice gets attached.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a concrete verb and artifact: it opens a DRAFT email in Mail.app with the invoice PDF attached. The added 'Nic neodesílá' immediately separates it from the sending/issuing siblings such as issue_invoice, so an agent can place it without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It makes the key usage boundary explicit — this prepares a draft, sending is left to the user — which is exactly the distinction an agent needs before choosing a mail-related action. It does not, however, say what to do if the invoice is not yet issued (issue_invoice first) or which sibling to prefer for other mail tasks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_bookB
Kniha příjmů a výdajů (daňová evidence) za rok jako CSV + PDF do složky Přehledy//.
| Name | Required | Description | Default |
|---|---|---|---|
| year | No | Rok. Default letošní. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It does disclose the important side effect — files are written to Přehledy/<rok>/ — and the two output formats, but says nothing about overwriting existing files, whether the operation is safe to repeat, or whether permissions or a closed year are required.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One front-loaded sentence stating resource, scope, formats, and destination with zero filler. Nothing is padded or repeated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 no explanation, and the destination and formats are covered. The only real gap is file naming/overwrite semantics for a tool that writes to disk.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single parameter already documents that it defaults to the current year. The description adds only the indirect hint that the year also determines the target subfolder, which is marginal beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource (the income/expense book, i.e. Czech tax evidence) with a year scope and the concrete deliverables (CSV + PDF) written to a named folder. That is enough to distinguish it from export_invoice_pohoda and export_vat_return, though it never names those siblings explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to choose this export over export_vat_return, tax_overview, or export_invoice_pohoda, and no prerequisites (e.g. whether the book must be closed or the year complete). Usage is only inferable from the word 'daňová evidence'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_invoice_pohodaB
Uloží fakturu jako Pohoda XML (windows-1250, validováno XSD) vedle PDF.
| Name | Required | Description | Default |
|---|---|---|---|
| number | Yes | Číslo faktury z evidence. | |
| eu_classification | No | Zkratka členění DPH z Pohody pro službu do EU — povinné u reverse charge. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose the key side effect: a file is written next to the existing PDF, in windows-1250, validated against XSD. It omits failure behavior, overwrite semantics, and whether exporting twice is idempotent — material gaps for a file-producing write operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence that packs the action, the artifact, the encoding, the validation guarantee, and the file location with zero filler. Nothing could be removed without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 both parameters are fully documented in the schema. However, for an export that mutates the filesystem, the definition leaves out preconditions and repeat-run behavior that an agent would need to call it confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema itself explains that 'number' is the invoice number from the records and that 'eu_classification' is the Pohoda VAT code required for reverse-charge EU services. The description adds no parameter meaning beyond that, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb and resource ('Uloží fakturu jako Pohoda XML') plus the output format specifics (windows-1250, XSD-validated, written alongside the PDF). This distinguishes it clearly from sibling exports like export_vat_return and export_book, though it never names or contrasts those siblings explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use or when-not-to-use guidance is given, and no prerequisites are stated (e.g. whether the invoice must already be issued, or whether this can be run repeatedly). The agent must infer that this is the Pohoda-specific export path purely from the format named in the sentence.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_vat_returnA
Přiznání k DPH (DPHDP3), kontrolní hlášení (DPHKH1) a při službách do EU i souhrnné hlášení (DPHSHV) pro EPO.
Uloží do ~/Documents/Účetnictví/Přehledy//_Q_přehledy/{DPH,KH,SH}/. Nic nepodává — soubory se nahrají ručně na Moje daně (EPO → Načíst soubor → Kontrola → Odeslat).
| Name | Required | Description | Default |
|---|---|---|---|
| year | Yes | Rok. | |
| preview | No | True = jen spočítat a ukázat, nic neukládat. | |
| quarter | Yes | Čtvrtletí 1–4. | |
| filed_on | No | Datum podání YYYY-MM-DD. Default dnes. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so well on the traits that matter: it writes files to a specific directory tree, it conditionally emits the SH statement only when EU services exist, and it explicitly does not submit anything. It is silent on overwrite behavior when prior quarter files already exist and on what happens if the necessary underlying data is missing, which are the remaining behavioral unknowns.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three compact sentences front-loaded with the output artifacts, followed by the destination and the crucial 'does not file' caveat. The path template is dense but earns its space because it encodes the naming convention. Slightly more formatting would help separate the conditional SH case from the unconditional outputs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 description covers what is generated, where it lands, the EU-services condition, and the manual upload follow-up. Overwrite semantics and error conditions for an incomplete quarter are the notable omissions for a file-writing export tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so year, quarter, preview, and filed_on are already documented in the schema. The path template in the description implicitly shows how year and quarter are consumed and hints at quarterly granularity, but adds no meaning about preview or filed_on beyond what the schema states. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the concrete artifacts produced (DPHDP3, DPHKH1, and conditionally DPHSHV) rather than just repeating 'VAT return' from the tool name, so it actually widens the scope the name suggests. It also states the target system (EPO) and the destination path, letting an agent identify the tool without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It makes clear this is the preparatory step in the filing workflow and that submission is manual afterwards, which tells the agent this tool should not be followed by any automated submit call. It does not address how it relates to the sibling tax_overview, which is the closest candidate for confusion, so it stops short of full alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_invoiceA
Detail faktury z evidence: položky, platební údaje, SPAYD řetězec QR kódu a cesta k PDF.
| Name | Required | Description | Default |
|---|---|---|---|
| number | Yes | Číslo faktury. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description bears the full burden. It does disclose the fields returned (items, payment data, SPAYD string, PDF path), which is meaningful behavioral context for a retrieval tool, but it omits what happens when the number is not found, whether it is strictly read-only, and any permission or error behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence, front-loaded with the operation and followed by a compact enumeration of returned content. Nothing is redundant or padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read tool with an output schema, the description covers the essentials and summarizes the payload without needing to restate the return structure. Minor gaps remain around not-found behavior and locating the invoice number, but the core is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a single required parameter ('number', documented as 'Číslo faktury'), so the schema already does the work. The description adds no further meaning such as expected format, whether a variable symbol or prefix is accepted, or whether the number must come from list_invoices or peek_invoice_number. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource and action ('Detail faktury z evidence') and enumerates the content returned: items, payment details, SPAYD QR string, and PDF path. It reads clearly as a single-invoice retrieval tool, distinguishable from sibling list_invoices or get_supplier, though it never names those alternatives explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: 'detail of an invoice' suggests fetching one invoice by its number rather than listing. There is no explicit statement of when to use this versus list_invoices, nor any note that the invoice number must already be known, leaving the agent to infer the sibling routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_supplierB
Dodavatel (fakturující) ze supplier.yaml včetně výchozího účtu.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the whole burden. It does disclose useful behavior beyond the name: the data originates from a local supplier.yaml file rather than a remote system, and the response bundles a default account. It says nothing about failure modes if the file is missing or unconfigured, which is the main remaining gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single compact sentence with the resource and the data source front-loaded and no filler. It is terse to the point of omitting any usage guidance, but every word carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a simple zero-parameter read, and an output schema exists, so return values need not be spelled out. The description covers the source and contents of the result; only guidance on when to use it and what happens on a missing config file is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate. Baseline 4 applies; the mention of 'výchozí účet' clarifies the shape of the payload even though it is not a parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource precisely – the invoicing supplier read from supplier.yaml, plus the default account that comes with it – so an agent knows exactly what it returns. It lacks an explicit verb and does not differentiate itself from siblings such as list_customers or lookup_company, but the scope is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to call this versus alternatives, nor any prerequisite (for example, that supplier.yaml must exist or be configured). The agent must infer the usage context from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
issue_credit_noteA
Vystaví opravný daňový doklad (dobropis) k vydané faktuře — PDF/A-3 s ISDOC (DocumentType 2), bez QR.
Použij místo storna, když už faktura odešla odběrateli. Částky na dobropisu jsou kladné, v přehledech a v přiznání DPH se odečítají v období data opravy.
| Name | Required | Description | Default |
|---|---|---|---|
| lines | No | Jen částečný dobropis: položky snížení v KLADNÝCH částkách. Prázdné = dobropis celé faktury. | |
| reason | Yes | Důvod opravy (tiskne se na doklad), např. 'sleva za zpoždění dodávky'. | |
| issue_date | No | Datum vystavení = datum opravy YYYY-MM-DD. Default dnes. | |
| original_number | Yes | Číslo opravované faktury z evidence. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose non-obvious domain behavior: positive amounts on the document, deduction in VAT reporting in the correction-date period, and the exact file format produced. It stops short of stating preconditions (must the original be issued/paid?), whether the original invoice is flagged or left untouched, or failure modes such as crediting more than the invoice total.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short paragraphs, twenty-odd words each: the first states what is produced, the second states when to use it and the accounting consequence. Nothing is redundant and the core action is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists and all four parameters are documented, so the description only needs to cover intent and side effects. Those are largely covered, but for a mutation tool with no annotations a sentence on preconditions and on what happens to the original invoice would close the remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and every property — original_number, reason, issue_date and the lines sub-object — carries its own Czech explanation in the schema. The description adds no parameter-level detail beyond that, so the baseline 3 applies; it does at least reinforce the positive-amounts convention that governs 'lines'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ('Vystaví opravný daňový doklad (dobropis) k vydané faktuře') and pins down the output artifact precisely: PDF/A-3 with ISDOC, DocumentType 2, no QR. That level of specificity makes it unmistakable against siblings like issue_invoice or cancel_invoice.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit routing rule: 'Použij místo storna, když už faktura odešla odběrateli' — use this instead of cancellation once the invoice has left to the customer. The alternative (cancel_invoice/storno) is named and the selecting condition is stated, so the agent does not have to infer it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
issue_invoiceA
Vystaví fakturu: PDF/A-3a s ISDOC 6.0.2 a QR Platbou+F, uloží ji do evidence a vrátí shrnutí.
Před vystavením si ověř odběratele (list_customers / lookup_company) a částky s uživatelem.
| Name | Required | Description | Default |
|---|---|---|---|
| note | No | Poznámka na faktuře. | |
| lines | Yes | Položky faktury. | |
| currency | No | Měna faktury (CZK, EUR…). Kurz ČNB k DUZP se doplní sám. | CZK |
| due_days | No | Splatnost ve dnech od vystavení. | |
| language | No | Jazyk PDF faktury: cs (default) nebo en. | cs |
| issue_date | No | Datum vystavení YYYY-MM-DD. Default dnes. | |
| customer_id | No | Klíč z adresáře (list_customers). | |
| bank_account | No | Jiný než výchozí účet '[předčíslí-]číslo/kód'. | |
| customer_dic | No | DIČ / EU VAT ID odběratele bez IČO. | |
| customer_ico | No | IČO odběratele mimo adresář — údaje se vezmou z ARES. | |
| customer_zip | No | PSČ odběratele bez IČO. | |
| customer_city | No | Město odběratele bez IČO. | |
| customer_name | No | Odběratel bez IČO (např. zahraniční firma). | |
| invoice_number | No | Vynucené číslo. Default další z evidence. | |
| reverse_charge | No | Služba plátci DPH v jiném státě EU — daň odvede zákazník. | |
| tax_point_date | No | DUZP YYYY-MM-DD. Default = datum vystavení. | |
| customer_street | No | Ulice a číslo odběratele bez IČO. | |
| customer_country | No | Název země odběratele bez IČO, např. 'Německo'. | |
| customer_country_code | No | ISO kód země odběratele bez IČO. | CZ |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations supplied, the description carries the full burden and does disclose meaningful behavior: the exact output format/version, that the invoice is persisted to the records, and that a summary is returned. It omits whether issuing consumes the next number from the sequence, whether the operation is reversible, and what permissions are needed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences: the first front-loads what the tool produces and persists, the second front-loads the prerequisite checks. Nothing is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 19-parameter mutation tool with an output schema and full schema coverage, the description covers the essentials: outputs, persistence, and the pre-flight validation steps. It could go further on numbering behavior and reversibility/cancellation, but the core is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all 19 parameters, including the vat_rate and currency defaults and the customer ID source, are already documented in the schema. The description only reinforces where customer_id comes from (list_customers); it adds no line-item or rounding semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource ('Vystaví fakturu') and even names the concrete artifacts produced (PDF/A-3a, ISDOC 6.0.2, QR Platba+F) plus the side effect of storing it in the records. It does not, however, distinguish this tool from close siblings such as add_manual_invoice or issue_credit_note, so an agent still has to infer the boundary from the names alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states a real precondition workflow: verify the customer with list_customers / lookup_company and confirm the amounts with the user before issuing. That is clear when-to-use context naming actual sibling tools, but there is no guidance on when NOT to use it (e.g. versus add_manual_invoice or cancel_invoice).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_customersA
Adresář odběratelů (customers.yaml). customer_id použij v issue_invoice.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the behavioral burden, and it discloses the backing store (customers.yaml), which implies a simple read of local data. It does not explicitly state that the call is read-only and side-effect free, nor anything about ordering or emptiness, though the low-risk nature of a zero-argument directory read limits the exposure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with the resource and the file it reads stated first, followed by the actionable cross-reference. Nothing redundant or padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-argument listing tool with an output schema provided, the description contains what an agent needs: what is listed and how the resulting customer_id is consumed. Only the explicit read-only/no-side-effect statement is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4; there is no parameter meaning that could be added. The description's only semantic contribution is explaining that the returned customer_id is the value to feed into issue_invoice.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource (customer directory / customers.yaml) so it is clear this returns a customer listing, and the customer_id reference ties the output to the rest of the workflow. The verb itself is implicit in the noun 'directory' and carried mostly by the tool name, so it falls short of a fully self-contained verb+resource statement, but it is far from tautological.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides a downstream usage hint (use customer_id in issue_invoice) but never says when to call this versus siblings like lookup_company or get_supplier, nor what preconditions apply. Usage is only implicitly derivable from the fact that it is a zero-argument directory listing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_import_issuesA
Doklady, které import nepřečetl (bez ISDOC, cizí formát, zahraniční dodavatel).
U každého přečti PDF z uvedené cesty, údaje (dodavatel, číslo, DUZP, rekapitulace DPH, země sídla) zapiš přes add_expense s pdf_path, resp. add_manual_invoice u vydaných. Nejasné věci (reverse charge, soukromé použití) se zeptej uživatele, nehádej.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full behavioral burden. It discloses what the results contain (a PDF path per item) and implicitly that this tool is a read-only listing, because the writes happen through separate tools. It says nothing about ordering, whether every item has a downloadable PDF, or permission or authentication needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The scope-defining sentence comes first and is followed by a two-sentence procedure, so the structure is front-loaded and there is little waste. The workflow has been folded into the description, which adds length but each sentence does carry actionable content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The definition is adequate for a zero-parameter listing tool, and because an output schema exists, the return shape does not need to be restated. It covers what gets listed, how to follow up, and how to handle ambiguity. What it leaves out, such as ordering and what to do when no PDF path is provided, is minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, which is the baseline-4 case; there is no argument meaning to add. The description does mention the fields to extract (supplier, number, DUZP, VAT summary, country), but those belong to the downstream tools' parameters, not this schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence names a specific resource (documents the import could not read) and enumerates the three qualifying causes: missing ISDOC, foreign format, foreign supplier. That is a clear verb-plus-resource statement. The remainder shifts into a follow-up workflow rather than purpose, and it does not directly contrast with siblings such as list_invoices or sync_invoices.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description says what to do with each result (read the PDF, then route to add_expense via pdf_path or to add_manual_invoice for issued documents), so the alternative tools are named with their selecting conditions, and it tells the agent to ask the user rather than guess on reverse charge or private use. It never states when not to use this tool, nor any precondition for calling it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_invoicesC
Vydané faktury z evidence, včetně těch po splatnosti.
| Name | Required | Description | Default |
|---|---|---|---|
| month | No | Měsíc vystavení YYYY-MM. | |
| status | No | issued = nezaplacené, paid = zaplacené. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, yet it says nothing about whether the result is paginated, ordered, capped, or scoped to a workspace/company. It implies a read-only listing but never states it explicitly, nor does it mention any limits on the number of returned invoices.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with no filler; the scope qualifier is placed at the end where it reads naturally. It is efficient but so terse that brevity shades into under-specification.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists and both optional parameters are fully documented in the schema, which covers most of the load for a simple list tool. However, with no annotations and no statement of default filtering, ordering, or result limits, an agent still cannot predict what it will get back for a bare call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% — month is documented as YYYY-MM and status explains issued = unpaid, paid = paid — so the baseline is 3. The description adds only a loose hint about overdue invoices and does not clarify the default behavior when month or status is omitted.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Vydané faktury z evidence" largely restates the tool name (list_invoices) as a noun phrase, and the only added information is the scope note that overdue invoices are included. It does not distinguish this from siblings such as get_invoice (single invoice) or sync_invoices, leaving the agent to infer that this is the bulk retrieval path.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this versus get_invoice, sync_invoices, or export_book. The one contextual hint — that overdue invoices are included — is useful but describes scope, not when to choose this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lookup_companyA
Najde firmu v ARES podle IČO — název, sídlo, DIČ, registrace k DPH.
| Name | Required | Description | Default |
|---|---|---|---|
| ico | Yes | IČO firmy (8 číslic). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the behavioral load. It does disclose that the lookup hits the external ARES registry and enumerates what comes back, which implies a read-only operation, but it says nothing about failure behavior for an unknown or malformed IČO, rate limits, or whether the call is free of side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence: the action, the key parameter, and the returned fields, with no filler. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read tool with a full schema and an output schema, the description covers source, input, and returned fields. The remaining gap is the not-found / invalid-IČO case, which an agent would want to know before calling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single parameter, and the schema already specifies 'IČO firmy (8 číslic)'. The description only restates 'podle IČO' without adding format, validation, or fallback guidance, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ('Najde firmu') plus the data source (ARES) and the fields returned (název, sídlo, DIČ, registrace k DPH), which clearly separates it from the invoice/customer siblings. It does not explicitly contrast with a sibling like get_supplier, but the ARES-registry framing makes the distinction evident.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: an agent can infer this is the tool for resolving a Czech IČO to company details, presumably to fill in customer or supplier data. There is no explicit statement of when to prefer it over get_supplier/add_customer, and no preconditions or exclusion cases are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mark_expense_paidA
Označí přijatou fakturu (výdaj) jako zaplacenou — pro daňovou evidenci se skutečnými výdaji.
| Name | Required | Description | Default |
|---|---|---|---|
| paid_date | No | Datum úhrady YYYY-MM-DD. Default dnes. | |
| expense_id | Yes | ID výdaje (název PDF bez přípony). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Bez anotací nese popis plnou tíhu, ale podává jen účel — zmiňuje vazbu na daňovou evidenci skutečných výdajů, což je užitečný dopad operace. Neuvádí však, zda je označení vratné, co se stane při opakovaném volání, ani jaká oprávnění jsou potřeba.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Jediná věta, ihned sděluje akci a objekt, bez zbytečných slov. Nic podstatného nechybí ani nepřebývá.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Jde o jednoduchý mutační nástroj se dvěma plně popsanými parametry a existujícím výstupním schématem, takže popis je téměř dostačující. Rezervou je chybějící informace o chování při již zaplaceném výdaji a o možnosti vrácení.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Krytí schématu popisy je 100 % (expense_id jako název PDF bez přípony, paid_date s defaultem dnes), takže popis nemusí parametry vysvětlovat. Popis k nim nic dalšího nepřidává, což při úplném schématu odpovídá základu 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Uvádí konkrétní sloveso (označí jako zaplacenou) i objekt (přijatou fakturu/výdaj) a závorkou 'výdaj' ji odlišuje od faktur vydaných. Chybí však výslovné odlišení od sourozeneckých nástrojů 'mark_paid' a 'record_payment', se kterými se dá snadno splést.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Pro daňovou evidenci se skutečnými výdaji' naznačuje kontext použití (režim skutečných výdajů), ale není řečeno, kdy zvolit tento nástroj místo 'mark_paid' nebo 'record_payment', ani jaké jsou předpoklady (např. že výdaj existuje a není již zaplacený).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mark_paidB
Označí faktury jako zaplacené (např. podle výpisu z banky).
| Name | Required | Description | Default |
|---|---|---|---|
| numbers | Yes | Čísla faktur. | |
| paid_date | No | Datum úhrady YYYY-MM-DD. Default dnes; 'due' = ke dni splatnosti každé faktury. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure, and it discloses almost nothing. It does not state whether the operation is idempotent, what happens to an invoice that is already paid or whose number is unknown, whether a payment record is created, or what permissions are required.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a single short sentence with the verb and resource front-loaded, and it contains no padding. It is efficient, but the extreme brevity leaves little room to say anything useful for a mutation tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a bulk mutation of financial records with no annotations covering safety or reversibility, and the description does not compensate. An output schema exists, so return values need not be explained, but the missing behavioral details and the missing comparison with record_payment or mark_expense_paid leave the definition inadequate for a tool that changes invoice state.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and both parameters are documented in the schema, including the 'due' and default-today semantics of paid_date. The description adds no meaning beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource: it marks invoices as paid. That implicitly separates it from mark_expense_paid, but it never names or contrasts with the similar siblings record_payment and mark_expense_paid, so an agent must infer the boundary from the tool name alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The parenthetical '(napr. podle vypisu z banky)' gives one concrete usage scenario, which is useful context. However, there is no guidance on when to use this instead of record_payment, no prerequisites, and no exclusions, so the routing guidance is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
open_dashboardA
Otevře grafický přehled (dashboard) v prohlížeči. Běží jako služba na pozadí (LaunchAgent).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does add real context: the tool launches a browser UI and runs as a background LaunchAgent service. However it omits behavior an agent would want — whether calling twice reuses or spawns a second instance, where the browser opens, and that it returns immediately while the service keeps running.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the action and resource, then a single architectural note. Nothing is wasted and nothing is buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 no explanation, and there are no parameters to document. The only shortfall is the missing lifecycle detail (idempotency, port/URL, service installation), which is modest but real for a launcher tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes no parameters, so there is nothing for the description to disambiguate; the baseline for a zero-parameter tool applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource — opening a graphical dashboard in a browser — which is unambiguous. It also distinguishes itself implicitly from all siblings, none of which deal with a dashboard, though it doesn't say so explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no mention of alternatives, and no prerequisites such as whether the background service must already be installed. For a zero-argument launcher the implied usage is fairly clear, but nothing is stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
peek_invoice_numberA
Příští číslo faktury podle evidence (nic nerezervuje).
| Name | Required | Description | Default |
|---|---|---|---|
| issue_date | No | Datum vystavení YYYY-MM-DD. Default dnes. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does disclose the single most important trait — that nothing is reserved and the counter is not advanced — but omits whether the number could change before issuance, any permission requirements, or side effects. Adequate but not complete for an unannotated tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single compact sentence with no waste, and the non-reserving caveat is placed immediately after the purpose. It is arguably terse enough to leave gaps, but nothing is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A one-optional-parameter read tool with an output schema, so return values need not be explained. The description covers purpose and the non-reserving guarantee; only explicit guidance on its relationship to issue_invoice is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with issue_date documented as YYYY-MM-DD defaulting to today. The description adds nothing about the parameter, which is acceptable given the schema already covers it, but it does not explain how the date affects the returned number.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete resource and action: returns the next invoice number according to the records. The parenthetical '(nic nerezervuje)' distinguishes it from the write-side siblings such as issue_invoice, though the name itself carries much of that load.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The non-reserving note implies a preview/peek use case, but the description never explicitly says when to call this instead of issue_invoice or how the result should be used. The distinction is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
record_paymentB
Zapíše zaplacenou zálohu / doplatek (daň, sociální, zdravotní, DPH).
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | dpfo = daň z příjmů, cssz = sociální, zp = zdravotní, dph = DPH. | |
| note | No | Např. 'doplatek za 2025'. | |
| amount | Yes | Zaplacená částka v Kč. | |
| period | No | Měsíc, za který je měsíční záloha, YYYY-MM. U doplatků nevyplňovat. | |
| paid_on | No | Datum platby YYYY-MM-DD. Default dnes. | |
| tax_year | No | Za který rok (default rok platby). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, and it discloses almost nothing beyond 'records'. It does not say whether a new record is created, whether re-recording is idempotent, how it interacts with tax_overview or export_vat_return, or what permissions are required. For a financial mutation tool that is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with the verb and resource first and the tax domains in parentheses. No filler, nothing to trim, and no burying of the key information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The rich input schema plus the presence of an output schema mean return values and field formats do not need restating. However, a six-parameter financial write tool with zero annotations and several adjacent payment tools leaves the agent without enough to decide confidently when this tool is the right one.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with the kind enum, period format (YYYY-MM), paid_on, and tax_year defaults all documented in the schema. The description adds no parameter meaning beyond what the schema already provides, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: records a paid advance (záloha) or top-up payment (doplatek), scoped to four tax domains (income tax, social, health, VAT). An agent can tell this apart from generic payment tools like mark_paid. It stops short of a full 5 because it never names the tax-versus-invoice-payment boundary explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the parenthetical list of tax kinds signals this is for tax authority payments rather than invoices. There is no explicit when-to-use/when-not, and no routing to siblings such as mark_paid or mark_expense_paid, which an agent must infer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_expenseA
Odebere přijatou fakturu z evidence — jen když ji uživatel výslovně smazal / nechce ji evidovat.
| Name | Required | Description | Default |
|---|---|---|---|
| expense_id | Yes | ID výdaje (název PDF bez přípony). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden for a destructive operation. It implies removal from the records but says nothing about irreversibility, whether the deletion is soft or hard, what happens to linked payments or exports, or what permissions are required. Only the user-intent precondition is disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One front-loaded sentence with a scoping clause after the dash. Nothing is redundant and the constraint arrives before any elaboration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 single required parameter is fully documented in the schema. However, for a destructive tool with no annotations, the omission of reversibility and side-effect information leaves a meaningful gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single parameter already documents its format ('ID výdaje (název PDF bez přípony)'). The description adds no further meaning about the identifier, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource ('Odebere přijatou fakturu z evidence' — removes a received invoice from the records) and pairs it with a scope condition. It does not name or contrast any sibling such as add_expense or mark_expense_paid, and the wording switches from 'expense' in the tool name to 'received invoice' in the text, which is understandable in-domain but not fully crisp.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
A clear precondition is given: use it only when the user has explicitly deleted the invoice or does not want it recorded. That is real when-to-use guidance. There is no when-not guidance beyond that and no alternative tool is named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sync_invoicesA
Načte nové PDF z Vydaných faktur (ISDOC) a Přijatých faktur (ISDOC, jinak Alza) do evidence.
Zbylé doklady hned zpracuj: list_import_issues → přečti PDF → add_expense / add_manual_invoice.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full burden. It does disclose that this is an import/write operation ('načte ... do evidence') and that it only pulls new documents, which hints at incremental behavior, and it explains that unprocessed items surface through list_import_issues. It says nothing about what happens on duplicates, failed ISDOC parsing, permissions, or whether re-running is safe, which matters for a mutating sync with zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short blocks: the sync action first, then the follow-up procedure. Nothing is redundant. The second part reads as an imperative instruction to the agent rather than descriptive documentation, which is efficient but slightly atypical in tone.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 no explanation, and with zero parameters the surface is small. What remains under-specified is the substance of the sync itself: what counts as 'new', what happens to documents that fail to parse, and whether side-effect records (expenses vs. invoices) are created automatically or only via the listed follow-up tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate beyond the schema. The baseline for a parameterless tool applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource: it fetches new PDFs from issued (ISDOC) and received (ISDOC/Alza) invoices into the ledger. That clearly separates it from siblings like list_invoices or get_invoice, which only read existing records. The phrase 'do evidence' (into the records) is slightly vague about what exactly gets created, which keeps this from a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit follow-up workflow for leftover documents: list_import_issues, then read the PDF, then add_expense or add_manual_invoice. That routes the agent to the correct siblings once the sync runs. It does not state when to skip the sync or how it relates to list_invoices/get_invoice for already-synced documents, so it falls short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tax_overviewA
Jak jsem na tom: příjmy, odhad daně a pojištění vs. zálohy, DPH za období, nezaplacené faktury, flagy, termíny.
Nejdřív automaticky načte nové faktury ze složek Vydané/Přijaté faktury. Grafický přehled: ucetka dashboard.
| Name | Required | Description | Default |
|---|---|---|---|
| year | No | Rok. Default letošní. | |
| method | No | Prognóza z průměru všech dokončených měsíců (ytd) nebo posledních 3 (3m). | ytd |
| with_forecast | No | Přidat prognózu do konce roku (příjmy, daně, pojištění, limity). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it usefully discloses a non-obvious side effect: it "automatically first loads new invoices from the Issued/Received invoice folders." That tells the agent the call triggers invoice ingestion before reporting, which is valuable and not derivable from the schema. It still omits whether the overall operation is read-only, what permissions are needed, and whether the auto-load is idempotent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences/blocks: the first front-loads the reported metrics, the second covers the auto-load behavior and dashboard alternative. There is minor redundancy in the run-on metric list, but nothing that should be cut.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists and all parameters are documented, so the description only needs to convey purpose and the ingestion side effect, which it does. For a multi-metric aggregation tool the remaining gap—safety/return-shape—is largely covered by the output schema, leaving it adequately complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so year, method (ytd/3m), and with_forecast are already fully documented in the schema. The description adds nothing about how the period affects the reported figures, so it earns the baseline 3 rather than more.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description enumerates the specific report contents an agent will get: income, tax and insurance estimate vs. advances, VAT for the period, unpaid invoices, flags, and deadlines. This makes it identifiable as an aggregated tax/finance overview rather than a single-record tool, though it uses a colloquial header ("Jak jsem na tom") instead of an explicit verb and doesn't directly name distinguishing siblings like export_vat_return.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: "Grafický přehled: ucetka dashboard" hints that the visual dashboard is a separate route, implying this tool is for the data summary. There is no explicit when-to-use/when-not or named alternative in the tool family, so the agent must infer the division of labor.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
25 tool updates
v0.1.0- First observed
add_customer - First observed
add_expense - First observed
add_manual_invoice - First observed
advance_schedule - First observed
cancel_invoice - First observed
draft_invoice_email - First observed
export_book - First observed
export_invoice_pohoda - First observed
export_vat_return - First observed
get_invoice - First observed
get_supplier - First observed
issue_credit_note - First observed
issue_invoice - First observed
list_customers - First observed
list_import_issues - First observed
list_invoices - First observed
lookup_company - First observed
mark_expense_paid - First observed
mark_paid - First observed
open_dashboard - First observed
peek_invoice_number - First observed
record_payment - First observed
remove_expense - First observed
sync_invoices - First observed
tax_overview
TDQS
Scored across 25 tools
Most tools map to distinct resources/actions: supplier/customer lookup, invoice issuance, payment marking, expense handling, exports, and dashboarding are clearly separated. Mild overlap exists between tax_overview/open_dashboard and between issue_invoice/add_manual_invoice, but the descriptions clarify when each should be used.
The set mostly follows a predictable snake_case verb_noun convention: get_supplier, list_customers, issue_invoice, mark_paid, export_vat_return, etc. Minor deviations like tax_overview (noun phrase) and advance_schedule (less explicit verb/object) are noticeable but not disruptive.
The accounting domain is broad enough to justify many operations, but 25 tools sits at the heavy end of the scale. Some capabilities could likely be consolidated, especially dashboard/overview and import/tax reporting helpers, making the surface feel somewhat large.
Core invoice lifecycle and tax workflows are well covered: issue, list, get, mark paid, cancel, credit note, VAT export, book export, and imports are present. Minor gaps remain, notably no direct list/get tool for expenses and no customer update/delete, but agents can work around these via dashboard/export flows.
Maintenance
Related MCP Connectors
Czech invoicing for freelancers and SMEs: invoices, customers, expenses, payments, cash flow.
Compliant invoicing for freelancers: create, issue and track invoices from your AI agent.
AI bookkeeper for Swiss small companies: books invoices, reconciles the bank, keeps VAT current.
Create, send and track invoices from a conversation in Claude, ChatGPT or any MCP client that supports OAuth. Draft an invoice from one sentence or from last month's invoice for the same client, finalize it, email it to your client and send payment reminders for overdue ones. See revenue by month and by client, download PDFs and e-invoices (ZUGFeRD, XRechnung), and export DATEV packages for your tax advisor. Invoices follow the tax rules of 25 countries, including reverse charge and the small-business VAT exemption. New invoices are drafts, and nothing is emailed until you ask. Pay per invoice with no subscription: the first invoice is free.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to interact with the SuperFaktura invoicing system for managing invoices, clients, and expenses via natural language.4Apache 2.0
- FlicenseNot gradedqualityBmaintenanceEnables AI agents to create and manage e-invoices through natural language, supporting EU compliance formats like ZUGFeRD and XRechnung, as well as US plain PDF invoices.7-
- AlicenseBqualityAmaintenanceFree, open-source (MIT), local-first Swiss accounting MCP server: an AI agent posts double-entry journal entries, categorises and chases invoices, and prepares the MWST-Abrechnung (the Swiss VAT return), with a minimalist Studio for human oversight. Posted entries are append-only and immutable, corrections are reversing entries, and every query is tenant-scoped.500240 npm1MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to serve as the only interface for consultant and small-agency billing, recording clients, billable work, expenses and payments, and drafting and issuing invoices. It enforces billing rules server-side, numbering invoices, calculating totals, requiring exact-total approval before issue, and never rewriting an issued invoice.4 npm1MIT