MyÚčto MyÚčto.cz Manuál
Stáhnout PDF Zpět na hlavní stránku

78. MCP server (napojení AI asistenta)

MCP server propojí AI asistenta — Claude, ChatGPT přes Codex, Gemini, Copilota — s daty tvé firmy. Po zprovoznění se ptáš běžnou češtinou („kolik zaplatíme na DPH“, „kdo nám dluží“, „jaký byl loni zisk“) a asistent si sám vybere správný nástroj a zavolá ho přes REST API.

Nastavení najdeš v aplikaci: Firma → MCP server. Ta stránka ukazuje adresu API konkrétně tvojí instance a hotovou konfiguraci pro vybraného asistenta.

78.1 Co je MCP

Model Context Protocol je otevřený standard pro připojení nástrojů k AI modelům. Server je malý program, který běží u tebe na počítači, mluví s aplikací přes REST API a asistentovi nabízí sadu pojmenovaných nástrojů (list_unpaid_invoices, vat_return_preview, trial_balance, …).

Podstatné vlastnosti:

78.2 Rozsah — co asistent umí

OblastRozsah
Fakturacečtení, vystavování, odesílání, evidence úhrad, upomínky
Odběratelévyhledání, založení a úprava karty, dotažení údajů z ARES
Výkazy práce a materiálupřidání a odebrání řádků u konceptu faktury, automatická hodinová sazba
Pohledávky a závazkyzaplacené / nezaplacené / po splatnosti, stáří pohledávek
Daněodhad DPH za měsíc i kvartál, kontrolní a souhrnné hlášení, daň z příjmů, daňový kalendář — jen čtení
Účetnictvíobratovka, rozvaha, výsledovka, hlavní kniha, saldo, deník — jen čtení
Statistikatržby, zisk, trendy, top odběratelé a dodavatelé, cash flow, platební morálka, koncentrace, riziko odchodu
E-shop a skladzboží, kategorie, výrobci, ceny, zásoby, dostupnost, ocenění
Hledáníglobální vyhledávání napříč odběrateli a doklady
Důležité

Do účetnictví a daní asistent nezapisuje. Zaúčtovat doklad, uzavřít období, zaevidovat opravu podle § 46 / § 74b ani odeslat podání na EPO nemůže. Je to agenda s daňovou odpovědností, kde chyba znamená opravné podání — dělá ji člověk v aplikaci. Zákaz vynucuje server, ne jen MCP: i token s právem zápisu dostane na takovou operaci 403 token_write_forbidden (viz kapitola 76.6).

78.3 Zprovoznění

Krok 1 — API token

V Firma → API tokeny vytvoř nový token. Zobrazí se jen jednou, hned si ho zkopíruj.

Krok 2 — příprava serveru

Server je součástí projektu ve složce MCP/ a vyžaduje Node 20 nebo novější. Máš dvě možnosti.

A) Jeden soubor (doporučeno). Sestav si jednosouborovou verzi:

pwsh -File cmd/build-mcp.ps1      # Windows
./cmd/build-mcp.sh                # Linux / macOS

Vznikne MCP/dist/myucto-mcp.mjs — jediný soubor bez závislostí, který můžeš zkopírovat kamkoliv, třeba na jiný počítač. Ve vydaných balíčcích je hotový už přiložený, takže tenhle krok obvykle přeskočíš; u každého vydání je navíc ke stažení samostatně jako myucto-mcp-<verze>.mjs.

B) Přímo ze zdrojáků. Hodí se, když si chceš nástroje upravovat:

cd MCP
npm install

Server pak běží z MCP/src/index.mjs a potřebuje vedle sebe node_modules.

Poznámka

Sestavení neodstraňuje potřebu Node. Výsledek je pořád JavaScript, jen bez externích závislostí — Node musí být nainstalovaný v obou případech. Odpadá jen npm install a adresář node_modules.

Krok 3 — registrace u asistenta

Na stránce Firma → MCP server vyber v kroku 3 svého asistenta; zobrazí se hotová konfigurace i s adresou tvojí instance, kterou stačí zkopírovat.

AsistentKam konfigurace patří
Claude Code (CLI i desktop)příkaz claude mcp add
Claude Desktopclaude_desktop_config.json (Settings → Developer → Edit Config)
ChatGPT přes Codex CLI~/.codex/config.toml
Gemini CLI~/.gemini/settings.json
VS Code (Copilot).vscode/mcp.json
Cursor.cursor/mcp.json

Například pro Claude Code:

claude mcp add myucto \
  --env MYUCTO_API_URL=https://tvoje-instance.cz/api/v1 \
  --env MYUCTO_API_TOKEN=mi_pat_tvuj_token \
  -- node /cesta/k/myucto-mcp.mjs

Na stránce v aplikaci se dá přepnout, jestli má konfigurace ukazovat na jednosouborový build, nebo na MCP/src/index.mjs — cesta se změní ve všech ukázkách naráz.

Poznámka

Webový ani desktopový ChatGPT tenhle server připojit neumí — pracuje jen se vzdálenými MCP servery přes HTTP, zatímco tenhle běží lokálně. Pro práci s daty MyÚčta v prostředí OpenAI použij Codex CLI.

Krok 4 — ověření

Napiš asistentovi „ověř připojení k MyÚčtu“. Zavolá nástroj whoami a vrátí uživatele, roli a firmu. Volání se hned objeví v logu na stránce MCP serveru.

78.4 Nastavení

Server se konfiguruje proměnnými prostředí:

ProměnnáVýchozíVýznam
MYUCTO_API_URLPovinné. Adresa API, musí končit /api/v1.
MYUCTO_API_TOKENPovinné. Token mi_pat_….
MYUCTO_SUPPLIER_IDFirma, se kterou pracovat. Jen u tokenů nevázaných na jednu firmu.
MYUCTO_READ_ONLY01 = zápisové nástroje se asistentovi vůbec nenabídnou.
MYUCTO_MAX_RPS8Nejvýš tolik požadavků za sekundu.
MYUCTO_MAX_CONCURRENT3Nejvýš tolik souběžných volání.
MYUCTO_TIMEOUT_MS30000Timeout jednoho požadavku.
MYUCTO_SYSTEM_CA1Načíst certifikační autority z operačního systému. 0 = nenačítat.
MYUCTO_INSECURE_TLS01 = vůbec neověřovat HTTPS certifikát. Jen pro vývojovou instanci.

MYUCTO_READ_ONLY=1 je užitečná pojistka i u tokenu, který právo zápisu má — zápisové nástroje se v takovém režimu asistentovi ani nezobrazí, takže si nenaplánuje postup, který by stejně nedokončil.

Stropy MAX_RPS a MAX_CONCURRENT nejsou kosmetika: API sdílí PHP procesy s běžícím webem, takže asistent bez omezení zpomalí i běžné uživatele. Přebytečná volání čekají ve frontě. Nezávisle na nich platí serverový rate limit tokenu.

78.5 Příklady dotazů

Fakturace a pohledávky

Odběratelé

Výkazy práce a materiálu

Podrobnosti v 78.7.

Daně

Účetnictví

Statistika

E-shop a sklad

78.6 Odběratelé a ARES

Nového odběratele stačí zadat IČEM:

„Založ klienta podle IČO 45274649.“

Asistent si vytáhne z ARES název, adresu, DIČ i registraci k DPH a kartu založí. Cokoli řekneš navíc („…a e-mail fakturace@firma.cz“) má přednost před tím, co vrátí rejstřík — může jít o změnu, která se do ARES ještě nepropsala.

Bez IČO je potřeba název, ulice, město a PSČ; asistent si o ně řekne.

Ochrana proti duplicitám

Před založením se kontroluje, jestli odběratel se stejným IČO nebo DIČ už neexistuje. Pokud ano, nic se nezaloží a asistent ukáže stávající kartu. Druhou kartu téže firmy lze vytvořit jen vědomě, na výslovné potvrzení.

Úprava

Stačí říct, co se má změnit — zbytek karty zůstane. Asistent si ji načte, změnu do ní vloží a uloží celou zpět, takže se nic nevynuluje.

Když se firma přestěhuje nebo přejmenuje, jde údaje přenačíst z rejstříku:

„Přenačti údaje ACME z ARES.“

Když je ARES nedostupný, u úpravy se nic nemění (raději nic než půlka starých a půlka nových údajů). U zakládání se použijí údaje ze zadání, pokud stačí — asistent do odpovědi napíše, odkud data vzal.

78.7 Výkazy práce a materiálu

Výkaz je navázaný na koncept faktury — přesně jako v aplikaci. Stačí tedy říct:

„Přidej mi do výkazu práce pro AVYX 3 hodiny práce na MCP serveru.“

Asistent zakázku dohledá, najde její koncept faktury a řádek přidá. Existující řádky zůstanou beze změny.

Jak se určí hodinová sazba

Sazbu zadávat nemusíš. Doplní se v tomhle pořadí a první nenulová vyhraje:

  1. poslední řádek výkazu — když už se výkaz jednou vyplnil, nová hodina má sedět s ním, ne s ceníkem;
  2. hodinová sazba zakázky;
  3. hodinová sazba odběratele;
  4. výchozí hodinová sazba firmy (Nastavení firmy).

Když sazbu nemá nikdo, asistent to řekne a požádá o ni — netipuje. Vlastní sazbu lze samozřejmě určit („…3 hodiny po 1 800 Kč“).

Který doklad se použije

Materiál

Řádky materiálu fungují stejně (množství, jednotka, cena za jednotku). Jediný rozdíl: sazbu DPH materiálu si asistent nevymýšlí. Převezme ji z už existujícího výkazu, jinak si o ni řekne — špatná sazba by se propsala do přiznání k DPH.

78.8 Log volání

Stránka Firma → MCP server má dole Log volání — každé volání tvých API tokenů včetně zamítnutých. U volání z MCP serveru je vidět i název nástroje, takže poznáš, co asistent dělal, ne jen jaké URL zavolal.

Filtruje se podle tokenu, metody, cesty, zdroje a na samotné chyby. Podrobnosti v kapitole 76.8.

78.9 Bezpečnost

78.10 Řešení problémů

ProjevPříčina a náprava
Server nenaběhne, hlásí chybnou konfiguraciMYUCTO_API_URL musí končit /api/v1 a token začínat mi_pat_.
Asistent hlásí, že server neodpovídáNejčastěji nedůvěryhodný HTTPS certifikát, ne výpadek — viz 78.11.
401 invalid_tokenToken je zrušený nebo expirovaný — vygeneruj nový.
403 token_ip_forbiddenToken má omezení podle IP a tahle adresa mezi nimi není.
403 insufficient_scopeToken má jen rozsah čtení, operace vyžaduje zápis.
403 token_write_forbiddenZápis do účetnictví nebo daní — přes API nikdy, viz 78.2.
403 stock_disabledSkladový a e-shopový modul není pro firmu zapnutý.
429Překročen limit — sniž MYUCTO_MAX_RPS.
Asistent nástroje nevidíRestartuj aplikaci asistenta; u Gemini CLI ověř příkazem /mcp.
V logu nejsou žádná voláníServer se nespustil — zkontroluj cestu k index.mjs a že proběhlo npm install.

78.11 Vlastní HTTPS certifikát

Instance s certifikátem od firemní nebo vlastní autority (typicky testovací prostředí) je zvláštní případ: Node má vlastní seznam kořenových autorit a úložiště operačního systému ve výchozím stavu nečte. Adresa, která v prohlížeči funguje bez varování, tedy asistentovi spadne — a protože fetch takovou chybu hlásí jako obyčejné selhání spojení, vypadá to, jako by server neběžel. Přesně tohle je za hláškou *„server momentálně neodpovídá“*.

Server proto při startu autority ze systému načte sám. Nainstalovaný root certifikát tak stačí a nic dalšího nastavovat nemusíš. Co načetl, vypíše na svůj chybový výstup:

MyÚčto MCP v1.0.0 připojen — 62 nástrojů, API https://…/api/v1; TLS: +134 systémových certifikátů

Když spojení i tak selže na certifikát, dostaneš konkrétní hlášku s postupem. Nejčastější zbylé příčiny:

Jako poslední možnost — a výhradně proti vývojové instanci — jde ověřování vypnout přes MYUCTO_INSECURE_TLS=1. Server na to při startu hlasitě upozorní. Na produkci to nepoužívej: bez ověření certifikátu jde spojení odposlechnout i podvrhnout, a token v hlavičce je to první, co útočník získá.