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

101. 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.

101.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:

101.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
Zakázkyčtení i zápis — založení, úprava, archivace, rozpočty a ziskovost
Dokumentymetadata, fulltext a omezené čtení vytěženého textu; úprava tagů a vazeb
Kniha jízdčtení i zápis — vozidla, jízdy a tankování; daňový souhrn jen ke čtení
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 skladkompletní správa včetně zápisu — zboží, obsah karet, ceny, dodavatelé, média, kategorie, číselníky, sklady, příjemky a výdejky, inventury (viz § 101.9)
Objednávky u dodavatelečtení i zápis — založení, odeslání, potvrzení, uzavření, storno, příjemka z objednávky a hromadné objednání podle návrhu doplnění zásob (§ 101.9)
Hledáníglobální vyhledávání napříč odběrateli a doklady

Nástrojů je aktuálně 181; v režimu jen pro čtení (MYUCTO_READ_ONLY=1, § 101.4) se jich asistentovi nabídne 105 — zbylých 76 mění data a server je vůbec nezveřejní. Přesný počet vypíše server při startu do stderr (§ 101.3, krok 4).

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 78.6).

101.3 Zprovoznění

101.3.1 Krok 1 — API token

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

101.3.2 Krok 2 — příprava serveru

Server vyžaduje Node 20 nebo novější. Ve vydané distribuci je už připravený hotový build; nic nemusíš sestavovat ani instalovat. Máš dvě možnosti.

Pokud Node nemáš: Windows — winget install --id OpenJS.NodeJS.LTS --exact; macOS — brew install node.

A) Hotový build z distribuce (doporučeno). Použij přiložený soubor:

MCP/dist/myucto-mcp.mjs

Jde o jediný soubor bez externích balíčků. Můžeš ho nechat v instalaci nebo zkopírovat kamkoliv, třeba na jiný počítač. V konfiguraci asistenta pak jen nastavíš jeho úplnou cestu. V artefaktech vydání je navíc ke stažení také jako samostatný soubor MCP serveru.

B) Vývoj 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.

101.3.3 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.cz/MCP/dist/myucto-mcp.mjs

Na stránce v aplikaci se dá přepnout, jestli má konfigurace ukazovat na hotový MCP/dist/myucto-mcp.mjs, nebo na vývojový 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.

101.3.4 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.

101.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.

101.5 Příklady dotazů

Fakturace a pohledávky

Odběratelé

Výkazy práce a materiálu

Podrobnosti v § 101.7.

Zakázky, dokumenty a kniha jízd

Podrobnosti v § 101.8.

Daně

Účetnictví

Statistika

E-shop a sklad

Celá kapitola: § 101.9.

101.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.

101.6.1 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í.

101.6.2 Ú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.

101.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.

101.7.1 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č“).

101.7.2 Který doklad se použije

101.7.3 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.

101.8 Zakázky, dokumenty a kniha jízd

101.8.1 Zakázky

Asistent umí zakázku založit, upravit, archivovat i bezpečně smazat, pokud ještě nemá doklady. Při úpravě nejdřív načte současný stav a zachová všechna nezadaná pole. Změna výchozí kategorie tržby může doplnit tuto kategorii i do dosavadních faktur zakázky; proto ji zadávej výslovně.

Přehled ziskovosti je jen ke čtení. V podvojném účetnictví vychází z deníku, v daňové evidenci z dokladů, a upozorní i na nezaúčtované doklady. Asistent přes něj nic nezaúčtuje ani neopraví.

101.8.2 Dokumenty

MCP umí dokumenty vypsat, hledat v názvu, popisu i vytěženém textu, přečíst omezený úsek textu, upravit název, popis a tagy a připojit dokument k odběrateli, dokladu nebo zakázce. Dlouhý text se vrací po částech nejvýše 50 000 znaků. Platí stejná firemní a osobní oprávnění jako v aplikaci.

Přes tento MCP server se nenahrávají ani nestahují binární soubory. PDF, obrázek nebo ZIP nahraj v aplikaci; asistent pak pracuje s jeho metadaty a vytěženým textem. Odpojení vazby vyžaduje potvrzení, dokument samotný ale nemaže.

101.8.3 Kniha jízd

Asistent umí spravovat vozidla, přidávat a upravovat jízdy a tankování a číst roční souhrn kilometrů a spotřeby. U nové jízdy vyžaduje vozidlo, datum, vzdálenost nebo oba stavy tachometru a hlavně výslovně vybranou kategorii. Soukromou či služební povahu cesty nikdy neodhaduje — pokud kategorii neřekneš, nejdřív nabídne číselník a doptá se.

Smazání vozidla, jízdy nebo tankování vyžaduje potvrzení. Používané vozidlo nelze smazat; lze ho pouze archivovat. Roční daňový souhrn je dostupný jen ke čtení a žádný účetní zápis z MCP nevytváří.

101.9 E-shop a sklad

Na rozdíl od účetnictví je e-shopová a skladová agenda obousměrná — asistent umí katalog nejen číst, ale i zakládat, upravovat a mazat. Důvod je prostý: skladový pohyb je dohledatelný ve skladové knize a zaúčtovaný doklad jde stornovat protidokladem, takže se chyba dá v aplikaci napravit. Účetní dopad vzniká až v účetní vrstvě, která zůstává jen ke čtení.

Poznámka

Celá tahle agenda je volitelný modul. Když ho firma nemá zapnutý, nástroje vracejí 403 stock_disabled — zapíná se v nastavení firmy.

101.9.1 Co asistent umí

OblastČteníZápis
Zboží — skladová kartaseznam, našeptávač, detail, skladová kniha (pohyby)založit, upravit (SKU, název, MJ, sazba DPH, minimální zásoba, aktivita), smazat
Zboží — obsah pro e-shopkarta i s kategoriemi, štítky a parametry; jazykové verzevýrobce, záruka, dodací lhůta, hmotnost, publikace, překlady, kategorie, štítky, parametry, poplatky
Cenyceny po měnách, maržeuložit cenotvorbu (přirážka / pevná cena / zaokrouhlení), vynutit přepočet
Dodavatelé zbožíseznam s nákupní cenou a dodací lhůtounahradit seznam dodavatelů zboží
Nabídky dodavatelů („u dodavatele")přehled dvojic zboží × dodavatel napříč katalogem — nákupní cena a měna, kód u dodavatele, dodací lhůta, minimální odběr, balení a množství hlášené dodavatelemzaložit a upravit nabídku (upsert podle dvojice zboží × dodavatel), odebrat nabídku
Médiaseznam obrázků a přílohpopisky, pořadí, hlavní obrázek, smazání
Kategoriestrom, detail, překladyzaložit, upravit, přesunout v stromu, uložit překlady, smazat
Číselníkyvýrobci, štítky, typy poplatků, parametry i jejich hodnotyu všech čtyř založit / upravit / smazat
Skladyseznam, detail, hodnota zásobzaložit, upravit, smazat
Zásobystav, dostupnost s rezervacemi, sestava stavu, ocenění k datu
Množstevní pohledyvšechny čtyři veličiny najednou (skladem, rezervováno, prodejné, na cestě), rozpad „na cestě" na konkrétní objednávky a rozpad rezervací na konkrétní faktury
Doplnění zásobnávrh, co a kolik doobjednat (zboží pod minimem)hromadně z návrhu založit objednávky seskupené po dodavatelích
Objednávky u dodavateleseznam se stavem a plněním (objednáno / přijato / zbývá), detail s řádkyzaložit koncept, upravit, odeslat, potvrdit, uzavřít zbytek, stornovat, znovu otevřít, smazat koncept, vytvořit příjemku
Příjemky, výdejky, převodkyseznam, detail s řádkyzaložit koncept, upravit, zaúčtovat, stornovat, smazat koncept
Inventuryseznam, detail s rozdílyzaložit, spustit, zapsat napočítané množství, uzavřít

101.9.2 Potvrzování nevratných kroků

Mazání, storno dokladu a uzavření inventury vyžadují výslovné potvrzení. První volání takového nástroje záměrně nic neprovede — jen vrátí, čeho by se změna týkala:

NEPROVEDENO — chybí potvrzení. Smazat se má výrobce: ACME — Acme s.r.o. Operace je nevratná. Ukaž to uživateli a teprve po jeho souhlasu zavolej nástroj znovu s confirm: true.

Funguje to tedy jako suchý běh: uvidíš konkrétní záznam včetně kódu a názvu, ne jen to, co si asistent myslí, že maže. Teprve druhé volání s potvrzením operaci provede. U médií a hodnot parametrů se navíc kontroluje, že záznam opravdu patří ke zboží (resp. parametru), které jsi uvedl — překlep v čísle tak nesmaže fotku cizímu zboží.

Praktický dopad: asistent se tě před smazáním vždycky zeptá. Řetězec „ukliď nepoužívané štítky“ neproběhne jedním vrzem, ale jako výpis a dotaz.

101.9.3 Kolekce se nahrazují celé

Ceny, dodavatelé, jazykové verze, kategorie, štítky, parametry a řádky skladového dokladu se ukládají jako celek — co v uloženém seznamu není, to se smaže. Není to nedostatek nástroje, ale způsob, jakým to ukládá i aplikace.

Nástroje na to asistenta upozorňují a jeho správný postup je: nejdřív si stav načíst, do něj vložit změnu a poslat zpátky kompletní seznam. Když si nejsi jistý, řekni si o vypsání současného stavu předem:

„Ukaž ceny toho zboží, pak k nim přidej eurovou cenu s marží 25 %.“

101.9.4 Skladové doklady mají dvě fáze

Příjemka, výdejka i převodka vznikají jako koncept, který se stavem skladu nedělá nic — teprve zaúčtování pohyb provede, přidělí dokladu číslo a doklad uzamkne. Nástroje ty dvě fáze schválně nespojují: asistent má doklad připravit a nechat si ho zkontrolovat, než se zásoby pohnou.

„Nasklaď 20 kusů kabelu na hlavní sklad za 89 Kč za kus.“ → asistent založí koncept příjemky a ukáže ti ho. „Souhlasím, zaúčtuj.“ → teprve teď se zásoba zvýší.

Zaúčtovaný doklad už upravit ani smazat nejde, jen stornovat — vznikne k němu opačný protidoklad v původních cenách a oba zůstanou ve skladové knize.

Server sám odmítne (409) výdej do minusu, jakýkoli pohyb na skladu s rozběhnutou inventurou a doklad do uzavřeného účetního období.

101.9.5 Objednávky u dodavatele

Asistent umí celý životní cyklus objednávky (§ 33.11) — a drží se v něm stejných pravidel jako aplikace:

Množstevní pohledy jsou jen ke čtení a odpovídají § 33.9: stock_quantities vrací u každé karty skladem, rezervováno, prodejné a na cestě, stock_in_transit rozpad na konkrétní objednávky a stock_reservations rozpad na konkrétní faktury.

„Kolik máme kabelů volných k prodeji a co z toho je jen rezervované?" „Co je potřeba doobjednat a od koho?" → asistent přečte množstevní pohledy a návrh doplnění, objednávky ale založí jako koncepty, které si odsouhlasíš.

101.9.6 Inventura

Postup kopíruje aplikaci: založit → spustit (udělá se snímek očekávaných stavů a sklad se zablokuje pro zaúčtování dokladů) → zapsat napočítané množství → uzavřít. Uzavření vygeneruje rozdílovou příjemku na přebytky a výdejku na manka, rovnou zaúčtované — proto vyžaduje potvrzení a proto asistent před ním hlásí, kolik řádků zůstalo nespočítaných (ty se přeskočí).

101.9.7 Co přes MCP nejde

101.10 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 jsou v § 99.8.

101.11 Bezpečnost

101.12 Ř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áČastou příčinou je nedůvěryhodný HTTPS certifikát — viz § 101.13; současně ověř dostupnost API.
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 § 99.6.
403 stock_disabledSkladový a e-shopový modul není pro firmu zapnutý.
409 u mazání zboží, výrobce, kategorie, skladu…Záznam je někde použitý — server ho nepustí. Archivuj ho (archived), případně zboží či sklad jen deaktivuj.
„NEPROVEDENO — chybí potvrzení“Není chyba: takhle vypadá náhled nevratné operace. Zkontroluj výpis a řekni asistentovi, ať to potvrdí.
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.

101.13 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 připojen — nástroje načteny, API https://…/api/v1; TLS: systémové certifikáty načteny

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á.