FirmenData for Claude
Search German companies, financials, owners and official filings — directly from Claude.
On this page
What it does
The FirmenData MCP server connects Claude to the German Unternehmensregister and Handelsregister. From within any Claude conversation, you can search millions of German companies with firmographic filters, pull multi-year P&L and balance-sheet data, retrieve chronological register history, inspect Gesellschafterlisten (cap tables), trace ultimate beneficial owners for KYC, and download original register filings as presigned URLs.
All tools are thin wrappers around the same service helpers that power our public REST API, so MCP and REST callers see identical data.
Setup
- Create a FirmenData account. Sign up at firmendata.com/signup. You need an active plan with API access — see Pricing.
- Open Claude → Settings → Connectors.
- Add the FirmenData connector. Choose one of the two paths below.
Option A — Custom connector (available now)
In the Connectors panel, choose Add custom connector and paste the server URL below. This is the supported path today and works for any Claude account with custom-connector access.
https://mcp.firmendata.com/mcp
Option B — Claude Connectors Directory (coming soon)
Coming SoonOnce FirmenData is published in the official Claude Connectors Directory, you'll be able to install it with a single click from the directory — no URL entry required. We're working on the listing; until then, use Option A.
- Authorize. Claude redirects to FirmenData (Auth0) for the OAuth 2.1 consent flow. Sign in with the account from step 1 and approve access.
- Start using it. Ask Claude about any German company. The connector exposes 7 tools (see Tools reference).
Authentication
The server uses OAuth 2.1 with PKCE (S256) via Auth0. Claude discovers the authorization server automatically from the Protected Resource Metadata published at /.well-known/oauth-protected-resource. No manual configuration of client IDs or redirect URIs is required.
The OAuth token is bound to the FirmenData account that authorized the connector. All tool calls are billed to and rate-limited against that account.
Tools reference
The server exposes 7 tools. All company-scoped tools accept an eu_id (FirmenData company identifier, e.g. DEF1103R.HRB279792B); use autocomplete_companies or search_companies first to resolve a name to an eu_id.
autocomplete_companies
Lightweight name suggestions for picking the right entity
Up to 25 hits for a company-name fragment (≥3 characters). Returns just enough context (name + register reference) to disambiguate. Use this before any other tool when the user gives a fuzzy name.
search_companies
Filter search over the German commercial register with cursor pagination
Filter by name, eu_id, register number/type/court, city, Bundesland, founded date range, revenue / profit / employee count ranges, WZ 2025 industry codes, high-level industry slug, legal form (Rechtsform), board-member or shareholder name, CPV procurement code, and average-birth-year range. Up to 50 hits per page; total_approx caps at 10,000 — tighten filters for an exact count.
get_company
Full detail profile for one company by eu_id
Identity, registered seat, register reference, headline financials, management, ownership graph, contact, insolvency status, AI insights, and the list of downloadable register documents. fetch_realtime=true refreshes the register snapshot from the German registries before responding.
get_company_history
Chronological register-entry history for one company
Aggregated timelines for every kind of change — company name (firma), seat (sitz), capital (kapital), board members, business purpose, etc. Includes a derived current_board snapshot. fetch_realtime=true refreshes the chronological register history from the German registries before responding.
get_company_financials
Multi-year P&L, balance sheet, employees, and group structure
Annual top-line metrics, structured P&L, balance-sheet rows (AKTIVA / PASSIVA), employee time series, group relationships (parent / subsidiaries), and the list of filed Bilanzen (Jahresabschluss / Konzernabschluss).
get_company_shareholders
Latest Gesellschafterliste (cap table) for a GmbH or UG
Coverage status (available, not_applicable for legal forms that do not file Gesellschafterlisten, or not_filed when expected but missing) plus the list of shareholders with share counts, percentages, and share class. fetch_realtime=true scrapes the Liste der Gesellschafter (or Musterprotokoll fallback) and re-parses it before responding.
get_company_ubo
Ultimate beneficial owners under §3 GwG (all-or-nothing rule)
Walks the company's ownership chain and identifies the natural persons who ultimately benefit from it. Returns the ownership graph (nodes + edges), beneficial owners attributed >25% effective share, potential beneficial owners (unresolved orgs that could hide a UBO), and a coverage status. fetch_realtime=true refetches the Liste der Gesellschafter for every German GmbH/UG visited in the chain before building the graph — designed for KYC workflows where the freshest possible chain matters.
Example prompts
Paste any of these into Claude after enabling the connector — Claude will pick the right tools automatically.
M&A Target Screening
"Find profitable German manufacturing GmbHs with €20M–€100M revenue, 50–1,500 employees, and net profit between €10M and €15M, sorted by profit"
M&A Target Deep-Dive
"Pull a full profile on n8n GmbH — 3 years of P&L and balance sheets, current ownership, the capital-increase history, and the Satzung-amendment timeline"
KYC / Ultimate Beneficial Owner Check
"Onboarding Cloudfleet GmbH (Berlin). Walk the ownership chain to the ultimate beneficial owners over 25%, flag any unresolved corporate shareholders, and use live registry data"
Competitive Benchmarking
"Show the largest profitable software GmbHs in Berlin with €30M–€100M revenue — list revenue, net profit, and registered office, ranked by revenue"
Pricing & rate limits
Every successful tool call deducts credits from your FirmenData account. Failed calls (4xx / 5xx and rate-limit rejections) are free — you only pay for data you actually receive. Credits are shared with the public REST API, so MCP and REST usage aggregate cleanly in your Usage Dashboard.
Rate limits are applied per FirmenData account with the same sliding-window throttle as the REST API. When you hit the limit, the tool returns an error indicating the window and a retry-after duration; the rejected call does not consume credits.
See the Plans page for plan-level credit allocations and rate-limit tiers.
Limitations
- German entities only. Coverage is limited to entities filed with the Unternehmensregister / Handelsregister and adjacent German registers (Genossenschaftsregister, Partnerschaftsregister, Vereinsregister, Gesellschaftsregister).
- Search totals cap at 10,000. search_companies returns total_approx capped at 10,000 — tighten filters when you need an exact count.
- fetch_realtime adds latency. Live registry refreshes typically add several seconds, sometimes longer. On upstream failure the response falls back to indexed data and reports the status in freshness.realtime_fetching_status.
- Cap-table coverage varies by legal form. Only GmbHs and UGs file Gesellschafterlisten. Small GmbHs founded under the simplified §2 Abs. 1a GmbHG procedure file a Musterprotokoll in place of separate Articles of Association and shareholder list — get_company_shareholders falls back transparently.
- Register history coverage gaps. get_company_history can return an error for entities outside chronological-register coverage (some Vereine and Genossenschaften).
Troubleshooting
"OAuth redirect failed" / "Could not connect"
Confirm you are signing in with the same FirmenData account that holds your API plan. If your browser blocks the popup, allow popups for claude.ai and retry.
"Rate limit exceeded"
You exceeded the request-window throttle on your plan. The error message includes the window length and a retry-after in seconds. Wait it out or upgrade for a higher limit; rejected calls are free.
"No company with id ..."
The eu_id was not recognised. Run autocomplete_companies or search_companies first to resolve the entity from a name, then pass the returned eu_id verbatim.
Tool returns "not_filed" or "not_applicable"
This is a coverage status, not an error. not_applicable means the company's legal form does not file the requested document (e.g. an AG has no Gesellschafterliste). not_filed means the document was expected but is missing from the register — try fetch_realtime=true to refresh from the source.
Authentication suddenly fails after working
The Auth0 token expired and Claude could not silently refresh. Disconnect and reconnect the connector in Claude's connector settings.
Support
Email [email protected] for help with the connector, billing questions, or to report a data-quality issue. Include your account email and, if relevant, the eu_id and tool name involved.
For programmatic access outside Claude, see the REST API reference.