2026 / Public

rejstrik-mcp

A public MCP server that connects AI agents to Czech company registries and filed financial statements — with no extra key to a model API.

What it is

rejstrik-mcp is a public MCP server for working with Czech companies. It connects AI agents, such as Claude Code or Codex, to ARES, the Collection of Deeds, the insolvency registry, and other public sources. An agent can thus find a company, open a financial statement that was actually filed, read it, and have financial indicators computed over the extracted numbers.

The source code is public under the MIT license, and since version 0.8.0 the server works exclusively without a key to the API of OpenAI, Anthropic, or any other model provider. Documents are read by the model used by the MCP client. The server takes care of obtaining the source materials, passing them along, and performing reproducible calculations.

Problem

Data about a Czech company is public, but spread across several systems. Basic details are in ARES, documents in the Collection of Deeds, any proceedings in the insolvency registry, and further information in the VAT, subsidy, or contract registries. On top of that, the accounting figures are often not available as clean structured data, but only inside a PDF — sometimes with a text layer, sometimes only as a scan.

A manual review therefore takes more than a single query. You need to correctly identify the company, find the documents, select the relevant years, go through dozens of pages, and watch the units, for example whether the statement is kept in korunas or in thousands of korunas. Only then can you safely compare periods and compute indicators.

How the solution works

The MCP client in this case is the application in which the user works with the model — for example Claude Code or Codex. The client understands the request, decides on the next step, and calls the tools. The MCP server is the installed Python package rejstrik-mcp: it does not contain an AI model of its own, but it accepts precisely defined requests, communicates with the registries, works with documents, and returns structured results. MCP is the shared protocol that lets the client and server communicate with each other.

The server offers thirteen tools in three groups: finding a company and working with filings (find_company, list_filings, get_filing, reading page text and images), analysis and output (analyze_financials, estimate_valuation, render_card), and checks of other registries (insolvency, VAT, statutory bodies, subsidies, and the Contracts Registry).

The server separates the work where the model is useful from the steps that are meant to be unambiguous and testable:

  1. The agent looks up a company by name or business ID through ARES.
  2. The server loads the list of filings from the Collection of Deeds and downloads the selected financial statement.
  3. The MCP client reads the PDF directly from the file. If its environment cannot do this, it can request a text layer page by page or PNG images of the scanned pages.
  4. The agent transcribes the found values into a fixed FinancialStatement data schema built in Pydantic, including the period, currency, unit, and the source page number.
  5. The server normalizes the data and deterministically computes the ratio indicators, the IN05 index, year-over-year changes, multi-year trends, and warning signals.
  6. It returns the result as structured data and, depending on the client’s capabilities, also as an interactive card in the MCP Apps format or an overview in Markdown.

The server therefore does not need its own model, an OCR service, or a vector database. Reading and interpreting the document is done by the agent the user is already working with. The registries, input validation, and the financial math stay in ordinary Python, so they can be tested repeatedly.

What it can do

  • Look up a company by name or business ID and return basic details, including CZ-NACE industry codes.
  • List documents from the Collection of Deeds and download a specific or the latest financial statement.
  • Expose the PDF text layer as well as images of individual pages for scanned documents.
  • Compute liquidity, indebtedness, profitability, margins, asset turnover, interest coverage, and other indicators.
  • Evaluate the IN05 index, year-over-year changes, multi-year trends, and risk flags.
  • Prepare an indicative valuation based on book value, capitalized earnings, and industry EV/EBITDA multiples. The industry multiples are based on Damodaran Europe data; the result is not an investment recommendation.
  • Check for insolvency, VAT registration, and the unreliable-payer flag.
  • Look up statutory bodies, received state subsidies, and contracts from the Contracts Registry.

Why key-free only

In the first versions there was also an optional mode in which the server itself called a model through an external API. That has now been removed. The current server neither needs nor accepts any key to a model API, and all of its tools work without one.

This architecture is simpler for installation and for controlling costs. The user does not add another provider or send a key to a separate service. At the same time it stays clear which part of the result came from the model reading the document and which is the result of a strictly defined calculation.

Quick start

In Claude Code you can add the server with a single command:

claude mcp add rejstrik -- uvx rejstrik-mcp

For Codex you can use the same package in ~/.codex/config.toml:

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

After that there is no need to call the individual tools by hand. The agent’s built-in prompts guide it through the whole process, so you can ask, for example: “Analyze the finances of the company ISOTRA over the last three years” or “Check Budějovický Budvar — insolvency, VAT, company management, subsidies, and contracts from the Contracts Registry.”

Resilience to registry changes

Public registries are not a stable API that you can connect to once and then stop watching. During development, the Collection of Deeds moved to a new Ministry of Justice portal, and that portal began to block some automated requests. The client therefore recognizes error and non-standard responses and can fall back to the older source.

The project distinguishes three kinds of automation. Ordinary CI runs on every push and pull request; without a connection to the registries, it checks formatting and runs tests against stored samples of responses. A separate canary test runs in GitHub Actions every Monday at 6:00 UTC and verifies both paths to the Collection of Deeds. It does not check the correctness of all data — only whether at least one of the portals responds without an error. If both fail, the check opens or updates a GitHub issue. A broader live test runs manually before a release and verifies lookup through ARES, listing and downloading a PDF, insolvency and VAT checks, and the creation of a report over test statements.

So this is not a single CI/CD job. ci.yml is continuous integration, the weekly canary.yml is operational monitoring, and release.yml, which after a tag is created publishes the package to PyPI and a GitHub Release, plays the role of automated release.

This very combination is what matters to me about the project: having correct calculations is not enough when the actual data source has changed in the meantime. For a tool built over public registries, operational resilience is part of the product, not just a technical detail.

How it differs from other solutions

Chytrý rejstřík offers a ready-made commercial database, a website, an API, and its own MCP over a broad set of preprocessed company data; remote access is paid, uses a login token, and has daily limits. The open-source project cz-agents-mcp covers ARES, insolvency, VAT, sanctions, and other KYC/AML checks. rejstrik-mcp adapts some of the registry clients from that project with attribution, but it focuses on a different path: it downloads the actually filed PDF from the Collection of Deeds, lets the user’s model read it, and over the extracted values performs a key-free and deterministic financial analysis.

How it fits into obchodnirejstrik-ai

rejstrik-mcp is not a copy of the obchodnirejstrik-ai application. obchodnirejstrik-ai is a finished product that drives the whole process and produces the final report for the user. rejstrik-mcp is a smaller, public, and reusable integration layer for agents. It handles access to registries, filed documents, and deterministic calculations, but it does not dictate what final application someone builds on top of them.

What I learned

The most important thing was not to add as many “AI features” as possible, but to draw the boundary between the agent and the server well. The model is useful for reading varied documents and for explaining the result. Identifying a company, working with units, financial calculations, and registry checks, however, need firm rules, traceable inputs, and tests. Thanks to this split, the server is simpler, more transparent, and usable in various MCP clients without an additional account with a model provider.