Publikováno 25. června 2026

rejstrik-mcp: české firemní registry pro AI agenty

Jak jsem postavil bezklíčový MCP server, který agentům zpřístupňuje české registry, výroční zprávy v PDF a deterministickou finanční analýzu.

Když člověk prověřuje českou firmu ručně, pořád dokola přepíná mezi ARES, Sbírkou listin a dalšími veřejnými registry. Nejdřív musí správně určit subjekt, potom najít konkrétní podání, stáhnout PDF, přečíst účetní výkazy, porovnat několik let a teprve nakonec si poskládat obrázek o tom, co se ve firmě děje.

Samotná data přitom veřejná jsou. Problém je v cestě k nim. Část informací je dostupná jako strukturovaná odpověď registru, ale finanční čísla často zůstávají pouze ve výroční zprávě v PDF formátu — někdy s textovou vrstvou, jindy jako naskenované stránky. Při porovnání několika let je navíc potřeba hlídat jednotky, protože jeden výkaz může uvádět celé koruny a jiný tisíce korun.

Právě kvůli tomu vznikl rejstrik-mcp: ne jako další web nad registry, ale jako otevřená integrační vrstva pro AI agenty. Claude Code, Codex nebo jiný MCP klient může firmu vyhledat, stáhnout její podané dokumenty, přečíst je a využít server pro kontroly a výpočty.

V Claude Code stačí:

claude mcp add rejstrik -- uvx rejstrik-mcp

V Codexu lze stejný balíček přidat do ~/.codex/config.toml:

[mcp_servers.rejstrik]
command = "uvx"
args = ["rejstrik-mcp"]

Potom už se lze ptát běžným jazykem:

  • „Najdi firmu podle názvu a ukaž její poslední účetní závěrky.“
  • „Analyzuj hospodaření firmy za poslední tři roky.“
  • „Prověř insolvenci, DPH, vedení firmy, dotace a smlouvy z Registru smluv.“

Agent si sám vybere potřebné nástroje a poskládá jejich výsledky do odpovědi. Uživatel se nemusí učit další rozhraní ani ručně obcházet jednotlivé registry.

Odkud projekt přišel

Tenhle směr mi dával smysl už při vývoji obchodnirejstrik-ai. Tam se ukázalo, že cesta od názvu firmy přes veřejné registry a podané dokumenty až k validovaným finančním datům není jen jedna funkce produktu. Je to samostatná integrační vrstva, kterou lze použít i v jiných aplikacích.

U rejstrik-mcp jsem proto nekopíroval celý produkt. Oddělil jsem obecnější část: přístup k českým registrům, práci se Sbírkou listin, předání dokumentů agentovi a deterministické výpočty. obchodnirejstrik-ai nad podobnými daty staví hotový report pro koncového uživatele, zatímco rejstrik-mcp poskytuje stavební bloky pro libovolného agenta nebo další aplikaci.

Proč MCP a ne pouze skill

Skill je především znovupoužitelný pracovní postup. Může agentovi vysvětlit, v jakém pořadí má hledat dokumenty, která čísla má z výkazu opsat nebo jak má výsledek interpretovat. Samotný problém rejstrik-mcp ale nebyl jen v instrukcích. Agent potřeboval nástroje, které registry skutečně zavolají, stáhnou PDF a nad strukturovanými vstupy vždy provedou stejné výpočty.

MCP pro tuto část poskytuje společný kontrakt. Nástroj má jméno, přesně popsané parametry a strukturu odpovědi. Stejný server tak může použít více podporovaných klientů a oprava parseru nebo výpočtu zůstává na jednom místě. Skill by nad MCP mohl dál popsat doporučený postup celé analýzy, ale bez integrační vrstvy by byl hlavně návodem a sadou lokálních skriptů.

Tyto přístupy se proto nevylučují. MCP dává agentovi schopnosti a skill může určovat, jak je nejlépe poskládat. rejstrik-mcp už pro nejčastější scénáře nabízí vestavěné prompty analyze-company a company-health-check, které klienta provedou celým postupem.

Co je klient a co server

MCP klientem je v tomto projektu aplikace, ve které běží rozhovor s modelem — například Claude Code nebo Codex. Klient rozumí otázce, rozhoduje o dalším kroku a volá dostupné nástroje. V uvedené instalaci je MCP serverem lokálně spuštěný Python balíček rejstrik-mcp. Neobsahuje vlastní AI model; přijímá přesně definované požadavky, komunikuje s registry, pracuje s dokumenty a vrací strukturovaná data.

Server zpřístupňuje třináct nástrojů ve třech skupinách:

  • vyhledání firmy a dokumentů: find_company, list_filings, get_filing, read_filing_text a read_filing_page_images;
  • analýza a prezentace výsledku: analyze_financials, estimate_valuation a render_card;
  • další veřejné kontroly: check_insolvency, get_statutory_bodies, check_vat, get_subsidies a get_contracts.

Klient například zavolá find_company, z odpovědi získá IČO a následně přes list_filings najde dostupné účetní závěrky. Server stáhne vybrané PDF a vrátí cestu k souboru. Klient dokument přečte a nalezené hodnoty pošle zpět do analyze_financials. Server je normalizuje a vrátí výpočty, trendy a rizikové signály. MCP je v tomto toku společný jazyk mezi aplikací s modelem a Pythonem, který obstarává data a matematiku.

Bez klíče není nouzový režim

První verze projektu měly dva režimy. Vedle základního použití bez klíče mohl server po nastavení OPENAI_API_KEY nebo ANTHROPIC_API_KEY sám volat model a vytěžovat dokumenty. Tahle větev postupně přidávala závislosti, konfiguraci i druhé místo, na kterém bylo potřeba řešit schopnosti a cenu modelu.

Ve verzi 0.8.0 jsem ji odstranil. Aktuální server je výhradně bezklíčový: žádný klíč k modelovému API nepotřebuje ani nepřijímá. Dokument čte model, který už používá MCP klient, a server dělá jen práci, která má být opakovatelná a kontrolovatelná.

Typický tok vypadá takto:

  1. Agent vyhledá firmu podle názvu nebo IČO přes ARES.
  2. Server načte Sbírku listin a stáhne vybranou účetní závěrku.
  3. Klient přečte lokální PDF, textovou vrstvu nebo obrázky naskenovaných stran.
  4. Agent přepíše hodnoty do schématu FinancialStatement, včetně období, jednotky a čísel zdrojových stran.
  5. Server normalizuje jednotky a spočítá ukazatele, index IN05, trendy a varovné signály.
  6. Výsledek vrátí jako strukturovaná data, Markdown nebo interaktivní kartu ve formátu MCP Apps.

Server tedy nepotřebuje OCR službu, vektorovou databázi ani skrytou modelovou vrstvu. Neznamená to, že by z procesu zmizela AI. Model je stále užitečný při čtení různorodých dokumentů a vysvětlení výsledku, jen neběží pod druhým účtem uvnitř serveru.

Co se počítá deterministicky

Agent z dokumentu přečte účetní hodnoty, ale samotná finanční matematika nevzniká jako volný text modelu. Server kontroluje deklarovanou jednotku výkazu, převádí hodnoty na společné měřítko a umí upozornit na podezřelý tisícinásobný rozdíl mezi roky.

Nad normalizovanými daty počítá likviditu, zadluženost, rentabilitu, marže, obrat aktiv, úrokové krytí, víceleté trendy a index IN05. Dokáže také připravit orientační ocenění podle účetní hodnoty, kapitalizovaných zisků a oborového násobku EV/EBITDA z dat Damodaran Europe. Ocenění je pouze orientační a není investičním doporučením.

Vedle finančních výkazů může agent prověřit insolvenci, registraci a spolehlivost plátce DPH, statutární orgány, přijaté státní dotace a smlouvy z Registru smluv. Výsledný report lze zobrazit jako interaktivní kartu v klientech s podporou MCP Apps nebo jako běžný textový přehled.

V čem je projekt jiný

Chytrý rejstřík nabízí hotovou komerční databázi, web, API i vlastní MCP nad širokým množstvím předzpracovaných firemních dat. Je vhodný pro uživatele, kteří chtějí spravovanou službu, monitoring a širší obchodní databázi; vzdálený přístup používá přihlašovací token, placený tarif a denní limity.

Projekt s otevřeným zdrojovým kódem cz-agents-mcp zase pokrývá ARES, insolvenci, DPH, sankce, zahraniční registry a další KYC/AML scénáře. Některé klienty pro registry jsem z tohoto projektu adaptoval s uvedením autorství.

Odlišení rejstrik-mcp proto není v tom, že by jako jediný zpřístupňoval české registry agentům. Je v konkrétní cestě ke skutečně podaným účetním dokumentům: server najde a stáhne PDF ze Sbírky listin, zpřístupní text nebo obrázky jeho stran a nad hodnotami přečtenými modelem provede bezklíčovou finanční analýzu. Projekt nesoutěží šíří databáze, ale snaží se jít hlouběji od registru až k původnímu dokumentu.

Běžné testy nestačí

U veřejných registrů existují dva odlišné druhy poruch. První vzniká uvnitř projektu: chyba v parseru, výpočtu nebo schématu. Druhý přichází zvenčí: provozovatel změní rozhraní, přesune portál nebo začne automatizované požadavky blokovat.

Běžné CI se proto při každém pushi a pull requestu spouští bez sítě nad uloženými vzorky odpovědí. Kontroluje formátování, parsery, servisní vrstvu, finanční výpočty, příkazovou řádku i registraci MCP nástrojů. Díky tomu nejsou výsledky testů závislé na momentální dostupnosti státních systémů.

Vedle toho běží každé pondělí v 6:00 UTC samostatný canary test. Ověřuje nový i starší portál Sbírky listin a selže teprve tehdy, když neodpovídá ani jeden. V takovém případě GitHub Actions automaticky založí nebo aktualizuje issue. Tento test nepotvrzuje správnost všech dat ve všech registrech; je to úzký provozní signál, že alespoň jedna cesta k podaným dokumentům stále funguje.

Před vydáním lze ručně spustit širší živý test. Ten ověří vyhledání firmy přes ARES, seznam podání, stažení PDF, živé kontroly insolvence a DPH i vytvoření reportu nad zkušebními výkazy. Samostatný postup pro vydání potom po vytvoření tagu sestaví balíček a publikuje ho na PyPI a GitHub Release.

Není to tedy jedna věc označená neurčitě jako CI/CD. Offline testy jsou průběžná integrace, týdenní kanárek je provozní monitoring a automatizace nad verzovacím tagem zajišťuje vydání.

Co jsem se naučil

Nejtěžší částí projektu nebylo přidat co nejvíc AI funkcí. Důležitější bylo správně určit hranici mezi modelem a běžným softwarem. Model dobře čte různorodé dokumenty a umí vysvětlit jejich obsah. Identifikace firmy, práce s jednotkami, finanční vzorce, přístup k registrům a chování při chybě ale potřebují pevná pravidla a testy.

Stejně důležité bylo přijmout, že integrace veřejných dat není jednorázově dokončená práce. Registry se mění i ve chvíli, kdy se zdrojový kód projektu nezměnil. Proto je vedle jednotkových testů potřeba sledovat i skutečné živé zdroje a otevřeně rozlišovat mezi tím, co testujeme offline, a tím, co jsme ověřili proti reálnému světu.

To je pro mě hlavní pointa rejstrik-mcp. Není to další vrstva „AI magie“ nad veřejnými údaji, ale auditovatelné rozhraní mezi agentem, původními dokumenty a deterministickým výpočtem. Zdrojový kód je veřejný pod licencí MIT na GitHubu.