agentic-firmenbuch
Austria's entire company register, queryable by AI agents in plain language. Official master data, annual accounts and key ratios for every firm – served over MCP, answered on real numbers instead of hallucinations.
Try the playground · Start free: 50 credits, 7 days · Quickstart ↓
A live, automated data product over the Austrian Firmenbuch (free EU HVD / High Value Datasets), served through a multi-tenant MCP server. A deterministic Azure pipeline pulls the published Jahresabschluss (annual financial statement) filings from the official register, parses them, consolidates per company, computes ratios/growth/trends, and serves the result to MCP clients. The whole register holds ~640k legal entities; the served slice is currently ~341k and grows as the backfill progresses. Version 1 = facts + clean derivations only (no scoring, no third-party enrichment, no NACE, no AI summaries).
Also available: Germany and the wider DACH region. Alongside this Austrian product, a unified agentic-register endpoint serves both the Austrian Firmenbuch and the German Handelsregister / Unternehmensregister over a single MCP. It is listed in the official MCP registry as io.github.jkbngb/handelsregister (spec: handelsregister.server.json) and reachable at https://register.agentic-firmenbuch.at/mcp with the same account and the same access rules (free trial, then Pro). A search returns matches from both countries, tagged by country (AT / DE).
Quickstart
Use the hosted service – query official Firmenbuch data from an MCP client that accepts an HTTP header key (Claude Code, VS Code with GitHub Copilot, Cursor, …):
- Get an API key at agentic-firmenbuch.at. Every new account starts with 50 free credits, valid for 7 days (1 credit per company, so about 50 companies), one allowance shared by the web console and Claude. After the trial, access from Claude, Cursor or any MCP/API client needs Pro at €79/month plus VAT: unlimited queries within fair-use limits (10,000 calls per day, 20,000 export rows and 50 documents per month), cancel monthly. Credit packs are a web-console product and do not unlock MCP/API access. (Connecting via a sandboxed client like Claude Cowork/claude.ai grants the 50 credits on first connect, no key needed, see below.)
- Add the server. Claude Code (terminal), one line:
GitHub Copilot / VS Code:
code --add-mcp "{\"name\":\"agentic-firmenbuch\",\"type\":\"http\",\"url\":\"https://mcp.agentic-firmenbuch.at/mcp\",\"headers\":{\"X-API-Key\":\"<your-key>\"}}". Any other HTTP-MCP-Header client: URL https://mcp.agentic-firmenbuch.at/mcp, header X-API-Key: <your-key>.
- Ask in natural language, e.g. "Aktive GmbHs in Oberösterreich mit Bilanzsumme über 5 Mio. €, sortiert nach Umsatz." The agent calls
search_companies / get_company_details and answers with official data – no SDK required.
Claude Cowork & claude.ai (sandboxed clients) don't take the API-key header – they connect via Settings → Connectors → Add custom connector with the URL https://mcp.agentic-firmenbuch.at/mcp and a one-time email login (OAuth, no key). Step-by-step with screenshots: agentic-firmenbuch.at/cowork.html.
Prefer to try before signing up? Use the playground.
Or run the pipeline yourself – clone, uv sync, uv run pytest (offline, no Azure). See Develop.
Available MCP tools
All tools return a processed derivative of official Austrian Firmenbuch data (source: BMJ – Justiz, CC BY 4.0). Concretely: we ingest the published filings from the register, parse and consolidate them, compute ratios, and serve that from our own database — no web scraping, no LLM-generated summaries, no third-party data mixed in (V1). Every response carries provenance.data_version + built_at and names the original source, so the agent can attribute it correctly; for the authoritative record, the official Firmenbuch always governs.
Currently served: ~341,000 active legal entities across all Rechtsformen (GmbH, AG, KG, OG, EU, Genossenschaft, Privatstiftung, SE …). The full register has ~640,000 entities; the gap is companies without a published Jahresabschluss plus inactive/deleted entries, which are added step by step.
Documentation
Full index with the versioning convention (shipped _v1 specs vs. the forward
ROADMAP.md + V2 design spec): docs/README.md.
The headline documents:
Monorepo layout (agentic-first)
This repository is the agentic-first monorepo umbrella. It separates source-agnostic
shared code from per-source products, so another source-specific product can be added without
touching the Austrian pipeline:
Additional source-specific products are added in their own separate repositories that consume
packages/{core,auth} as a dependency (they are not scaffolded here). The precise
1:1 / adapt / product-local reuse boundary is the reuse table (Appendix R) of the technical spec, and the generic recipe is in
docs/monorepo/ADDING_A_PRODUCT.md.
Product READMEs: agentic-firmenbuch · shared core · auth
Pipeline (numbered layers, 90 → 10)
90_raw is the immutable source of truth (every downloaded XML/PDF, kept forever). 70_parsed
is a write-through cache of the per-filing ParsedFiling JSON – always re-derivable from raw,
so safe to drop/rebuild; it exists so a reprocess (re-consolidate/derive after a logic change)
skips re-parsing all filings, and so the lineage inputs[] in each consolidated doc resolve to a
real parsed document. 50/30/10 are the queryable Cosmos layers; 10_presentation is what the MCP
serves.
LAYER_MAP – which code owns which layer
Each pipeline-stage package directory is prefixed with its layer number so the
owner of every data layer is obvious. (Python module names can't start with a digit, so
the importable package keeps its fbl_* name; the number is also exposed as a LAYER
constant in each stage package.)
All AT stage packages live under products/agentic-firmenbuch/packages/ (abbreviated …/ below).
Un-numbered. Shared (in packages/): core (fbl_core,
source-agnostic lineage/meta + metric contracts, config, storage) and
auth (fbl_auth, 00_accounts). AT-specific (in
products/agentic-firmenbuch/packages/): core_at
(fbl_core_at, UGB taxonomy + Firmenbuch domain models + ÖNACE + FI directories),
firmenbuch_client
(fbl_firmenbuch_client, HVD SOAP adapter),
orchestration
(fbl_orchestration, the --mode Job entrypoint),
mcp_server
(fbl_mcp_server, serving). Plus products/agentic-firmenbuch/tests/ (fixtures),
docs/ (incl. API probe findings).
Build status – live in production ✅
All build stages are implemented and the service is live in production: the multi-tenant MCP server is
deployed, the daily pipeline runs on a cron, and the backfill keeps growing the served slice. Since the V1
launch the register has gained semantic vector search, ÖNACE/WZ industry classification, register-change
events, German Handelsregister coverage through the unified endpoint, and the trial-then-Pro access model
described above. ruff + mypy --strict + pytest (with an 80% coverage gate) are green in CI;
deployment of the backend is manual after review.
Develop
True end-to-end (live): a separate, env-flag-guarded test runs a few real FNRs
through every layer (API → 90_raw → … → 10_presentation → MCP). Skipped by default.
See products/agentic-firmenbuch/tests/e2e/. It uses in-memory stores + a tiny real pull –
no Azure, no full backfill (deployment is manual after review).
License & data
Licensed under the MIT License (see LICENSE).
The data originates from the Austrian Firmenbuch (BMJ – Justiz), an EU High Value Dataset
licensed under CC BY 4.0. Any redistribution of the data must keep the attribution
"Quelle: Österreichisches Firmenbuch / BMJ – Justiz (CC BY 4.0)" (see NOTICE).
Disclaimer – no warranty, use at your own risk
This software and any data it produces are provided "AS IS", WITHOUT WARRANTY OF ANY KIND,
express or implied (see the MIT License). The processed data is derived automatically from the
public Firmenbuch and is provided without any guarantee of correctness, completeness, timeliness,
or fitness for a particular purpose. It is not legal, tax, or financial advice and does not
replace an official Firmenbuch extract – the official register always prevails.
Use of this software and the data is entirely at your own risk. To the maximum extent permitted
by law, the authors and copyright holders accept no liability for any direct, indirect,
incidental, or consequential damages arising from its use. You are responsible for complying with
the CC BY 4.0 attribution requirement and all applicable data-protection, competition, and copyright
law when using or redistributing the data.