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. The server is keyless — it needs no model API key of its own. Documents are read by the model the user already works with in 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 more than 15 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 a keyless design

The server needs no key of its own to a model API. The user does not add another provider, does not send a key to a separate service, and does not have to deal with a second bill. Reading the document is handled by the model already working in the client.

This also keeps it clear which part of the result came from the model reading the document and which is the result of a strictly defined calculation in Python.

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 for this reason, not a single job labeled CI/CD. Tests over stored samples run on every push, without a connection to the registries. A weekly canary test verifies that at least one path to the Collection of Deeds still responds, and opens a GitHub issue if both fail. Releases are built and published automatically once a tag is created.

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