Czech registry MCP that reads the documents
Project description
rejstrik-mcp
Add the Czech business registry to your Claude in 30 seconds — no API key. It reads the actual filed PDFs with your own subscription.
claude mcp add rejstrik -- uvx rejstrik-mcp
Then ask: "What happened to Budějovický Budvar's finances last year?" — your agent resolves the company (ARES), pulls the filed statement PDF from the Sbírka listin, reads it itself, and gets deterministic ratios, red flags, and trends back from the server. No OCR pipeline, no server-side AI key, no scraping middleman.
Why this one
| agent-native (MCP) | reads filed PDFs | free & open source | works without any API key | |
|---|---|---|---|---|
| cz-agents-mcp and similar | ✅ | ❌ | ✅ | ✅ |
| chytryrejstrik.cz | ❌ | partly (paid) | ❌ | — |
| rejstrik-mcp | ✅ | ✅ | ✅ | ✅ |
Install
Claude Code: claude mcp add rejstrik -- uvx rejstrik-mcp
Claude Desktop: download rejstrik-mcp.mcpb from the latest GitHub
release and double-click it (requires uv) —
or add to claude_desktop_config.json:
{ "mcpServers": { "rejstrik": { "command": "uvx", "args": ["rejstrik-mcp"] } } }
Codex (~/.codex/config.toml):
[mcp_servers.rejstrik]
command = "uvx"
args = ["rejstrik-mcp"]
Any HTTP host: uvx rejstrik-mcp --http serves streamable HTTP on
http://127.0.0.1:8000/mcp.
Two modes, one server
Keyless (default). Your agent does the reading with your existing subscription; the server does everything deterministic:
| Tool | What it does |
|---|---|
find_company |
Resolve a company by name or IČO (ARES) |
list_filings |
List Sbírka listin documents, financial statements first |
get_filing |
Download a statement PDF (latest, by year, or by id) — returns local path + embedded PDF |
analyze_financials |
Your extracted figures in → ratios, red flags, year-over-year trends out (no LLM) |
render_card |
The report as an interactive HTML card (MCP UI hosts) |
check_insolvency |
Insolvency register (ISIR) |
get_statutory_bodies |
Directors / statutory bodies (ARES) |
check_vat |
VAT registration + unreliable-payer flag (ARES + ADIS) |
get_subsidies |
State subsidies received (IS ReD / former CEDR) |
get_contracts |
Public contracts involving the company (Registr smluv) |
Beneficial owners. The public part of ESM (Evidence skutečných majitelů) closed on 2026-12-17 following an EU Court of Justice ruling, so beneficial-owner lookups are intentionally not offered here — a documented scope decision, not a gap.
Use the built-in analyze-company prompt (shows up as a slash command
in Claude) to run the whole loop — find → fetch PDFs → extract → analyze →
card — including multi-year trends.
Keyed power mode (optional). Set ANTHROPIC_API_KEY or
OPENAI_API_KEY where the server runs and four more tools activate, doing
the PDF reading server-side with schema-locked extraction and page
citations: extract_financials, ask_filing,
analyze_company_financials, analyze_company_card. Without a key they
politely point you back to the keyless flow.
See it work
The interactive report card (MCP UI hosts):
How it works
core/ shared HTTP + text utilities
registry/ ARES, ISIR (insolvency), ADIS (VAT), statutory bodies
filings/ verejnerejstriky.msp.gov.cz Sbirka listin client
documents/ native-PDF extraction + document Q&A
analysis/ normalize -> ratios -> red flags -> trends (pure, no I/O)
service/ orchestration (registry + filings + documents + analysis)
cli/ mcp/ two faces over one core
The document engine sends PDFs directly to the configured model, so there is no OCR pipeline or vector database. Structured extraction uses Pydantic schemas; open-ended Q&A uses the same document abstraction and returns citations when the provider supports them.
A Note On Real-World Drift
Midway through the build, the Czech Ministry of Justice migrated the Sbirka
listin from or.justice.cz to a new Nuxt portal
(verejnerejstriky.msp.gov.cz). The filings client was re-pointed at the new
portal's API. Registry, filings, insolvency, statutory-body, VAT, and ADIS
lookups are covered by fixtures/unit tests; live smoke testing verified the
registry/document analysis path against Budejovicky Budvar with OpenAI.
CI
The GitHub Actions workflow in .github/workflows/ci.yml runs ruff and
pytest on Python 3.11 and 3.12. The test suite is deliberately offline and
key-free, so a green CI run means the fixtures, parsers, service layer, CLI, and
MCP registrations are internally consistent without live endpoint luck.
Development
pip install -e ".[dev]"
ruff check src/ tests/
ruff format --check src/ tests/
python -m pytest -q
Useful manual smoke tests:
rejstrik analyze "Budejovicky Budvar"
rejstrik-mcp
python scripts/smoke.py # live network required — run before releases, not in CI
Attribution
The insolvency (ISIR), VAT/unreliable-payer (ADIS), and statutory-body registry
clients are adapted from
cz-agents-mcp (MIT, Martin
Havel). See LICENSES/cz-agents-mcp-LICENSE.
Releasing
- One-time: on pypi.org, add a Trusted Publisher for this GitHub repo
(workflow
release.yml, environmentpypi). - Bump the version in
pyproject.toml, commit, tagvX.Y.Z, push the tag. CI builds, publishes to PyPI, and attaches artifacts to the GitHub release.
License
MIT.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file rejstrik_mcp-0.4.0.tar.gz.
File metadata
- Download URL: rejstrik_mcp-0.4.0.tar.gz
- Upload date:
- Size: 137.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f6ee73df633135e12faced79d592bf67545c04cda88f4913ab9384577d42abc4
|
|
| MD5 |
02a23a0076dcec9d379843ca3bca3ea3
|
|
| BLAKE2b-256 |
110aec0af4d54599b2cb990ae1716d06ec4d43fb0430387bc5dfa0479f0f09c0
|
Provenance
The following attestation bundles were made for rejstrik_mcp-0.4.0.tar.gz:
Publisher:
release.yml on janF19/rejstrik-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rejstrik_mcp-0.4.0.tar.gz -
Subject digest:
f6ee73df633135e12faced79d592bf67545c04cda88f4913ab9384577d42abc4 - Sigstore transparency entry: 2151930734
- Sigstore integration time:
-
Permalink:
janF19/rejstrik-mcp@2f29d9bcc32c05e0ac9c6541a24fc6ea21f74fa6 -
Branch / Tag:
refs/tags/v0.4.0 - Owner: https://github.com/janF19
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@2f29d9bcc32c05e0ac9c6541a24fc6ea21f74fa6 -
Trigger Event:
push
-
Statement type:
File details
Details for the file rejstrik_mcp-0.4.0-py3-none-any.whl.
File metadata
- Download URL: rejstrik_mcp-0.4.0-py3-none-any.whl
- Upload date:
- Size: 35.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e309153d400404e527c9d98fd0871e4e60ae2e4e585ed74fb8b768c2079e8b80
|
|
| MD5 |
833e5f9ede31a5b5ec9457fb3653a2f5
|
|
| BLAKE2b-256 |
67a9e143403b1497bc4fdb68d657adbfa6b9902b30319870cd188794e8a2f1fd
|
Provenance
The following attestation bundles were made for rejstrik_mcp-0.4.0-py3-none-any.whl:
Publisher:
release.yml on janF19/rejstrik-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rejstrik_mcp-0.4.0-py3-none-any.whl -
Subject digest:
e309153d400404e527c9d98fd0871e4e60ae2e4e585ed74fb8b768c2079e8b80 - Sigstore transparency entry: 2151930761
- Sigstore integration time:
-
Permalink:
janF19/rejstrik-mcp@2f29d9bcc32c05e0ac9c6541a24fc6ea21f74fa6 -
Branch / Tag:
refs/tags/v0.4.0 - Owner: https://github.com/janF19
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@2f29d9bcc32c05e0ac9c6541a24fc6ea21f74fa6 -
Trigger Event:
push
-
Statement type: