🇩🇪 Germany — Gemeinsames Registerportal der Länder — Handelsregister (Amtsgericht, Registergerichte der 16 Länder; Verfahrensführer: Ministerium der Justiz des Saarlandes)
Access Germany's official company register in real time via the OpenRegistry MCP endpoint. Unified schema, source-linked, live passthrough (no caching).
Data license: Handelsregister public record under §9 HGB; free public access since 2022-08-01 per DiRUG (BGBl. 2021 I S. 3338) implementing EU Directive 2019/1151. Copyright notice on upstream pages reserves use of the bundled IT infrastructure; the registered data itself (Handelsregistereintragungen / Urkunden) is amtliches Werk under §5 UrhG and therefore not subject to copyright. Portal terms of use cap a single IP at 60 retrievals per hour.
Real-time: yes — every call hits upstream
Caching notes: In-adapter caches: 10 seconds for cross-call deduplication within a single AI turn; otherwise every call hits upstream fresh. Pass fresh=true to bypass even the 10s cache.
Germany's joint court-register portal. company_id is '{court-slug}:{Registerart}:{Nummer}[:{Suffix}]'. Free since 2022 but capped at 60 requests/hour. PSC and charges not exposed.
Company ID format
Canonical DE slug '{court-slug}:{Registerart}:{Registernummer}[:{Suffix}]' — e.g. 'amtsgericht-charlottenburg-berlin:HRB:183284:B', 'amtsgericht-muenchen:HRB:252027', 'amtsgericht-hamburg:HRA:109516'. Registerart ∈ {HRA (Personengesellschaften), HRB (Kapitalgesellschaften), GnR (Genossenschaften), PR (Partnerschaften), VR (Vereine)}. The registering court MUST be part of the id because '{Registerart} {Nummer}' is not unique across Bundesländer. Natural-language fallbacks accepted on input: 'HRB 183284 B Amtsgericht Charlottenburg' or the pipe form emitted by search results.
Native values upstream reports: AKTUELL, CURRENTLY_NOT_ACTIVE, in Liquidation (i.L.), in Insolvenz, gelöscht
Mapping to the unified four-value enum:
Unified
Native values
active
AKTUELL
inactive
in Liquidation (i.L.), in Insolvenz
dissolved
CURRENTLY_NOT_ACTIVE, gelöscht
unknown
(none)
Known quirks
id_formatblocker — company_id must be the canonical slug '{court-slug}:{Registerart}:{Registernummer}[:{Suffix}]' (e.g. 'amtsgericht-charlottenburg-berlin:HRB:183284:B'). Registerart is HRA/HRB/GnR/PR/VR. The court is part of the id because '{Registerart} {Nummer}' is NOT unique across Bundesländer. Natural-language forms like 'HRB 183284 B Amtsgericht Charlottenburg' are also parsed.
rate_limitwarning — Upstream caps a single caller at 60 retrievals per hour. Sustained high-concurrency fan-out will be throttled.
searchinfo — search_companies is a simple keyword search (query + limit only). Exact-phrase / contains-all / contains-any / Registerart / Bundesland / Registergericht filters exposed by the portal UI are NOT currently plumbed through the adapter options.
officerswarning — get_officers returns one synthetic UnifiedOfficer per AD role block (Vertretungsregelung / Vorstand / Geschäftsführer / Aufsichtsrat / Liquidator / Prokura). `name` is an AD-block marker like '[AD-Block - Geschäftsführer]', NOT a person. Raw legal prose sits verbatim in jurisdiction_data.message and jurisdiction_data.entries — the client LLM must parse names and signature rules itself.
shareholderswarning — get_shareholders returns no structured rows. For GmbH/UG/KGaA-like HRB it returns pointers to Gesellschafterliste DK filings (latest_gesellschafterliste + all_gesellschafterlisten); the caller must fetch_document and parse. For AG/SE-like HRB, GnR and VR it returns shareholders_publicly_disclosed=false with a note (Aktionärsregister is held privately under §67 AktG and never filed).
pscblocker — get_persons_with_significant_control returns 501 permanently. Germany's beneficial-ownership register is AML-gated to obliged entities with legitimate-interest proof — no public programmatic access.
chargesblocker — get_charges returns 501 permanently. Germany has no central charges register; real-estate charges live in per-property land books at each local court, movable-asset security is contractual (not publicly registered), ship/aircraft mortgages live in separate specialty registers.
officersblocker — get_officer_appointments and search_officers return 501. The register has no cross-company person index; queries must start from the entity.
filingsinfo — list_filings surfaces filings the court has received — shareholder lists / annual accounts / articles / notarised instruments. It does NOT cover the separate central financial-statements publication channel (for those, follow the alternative_url).
documentsinfo — fetch_document supports document types AD (Aktueller Abdruck), CD, HD, UT, SI (XJustiz XML) and DK (indexed filings). document_id format is '{company_id_slug}|{AD|CD|HD|UT|SI|DK}[|{index}]'. MIMEs are typically application/pdf or application/xml; some Gesellschafterlisten are application/msword. All free.
statusinfo — Native status values AKTUELL / CURRENTLY_NOT_ACTIVE / in Liquidation / in Insolvenz / gelöscht. Coarse mapping: AKTUELL=active; Liquidation/Insolvenz=inactive; CURRENTLY_NOT_ACTIVE/gelöscht=dissolved.
Available jurisdiction_data fields
Every tool response carries a jurisdiction_data object with the raw upstream fields (names unchanged). The full field set per record type: