tools/call over
POST /cvr/mcp. CVR is a managed connector: there is no per-tenant connect
step and no per-tenant credential. Every read is a bounded, normalized query
against Erhvervsstyrelsen’s public CVR distribution (distribution.virk.dk,
Elasticsearch index cvr-permanent).
Endpoint:
https://mcp.consile.ai/cvr/mcp. CVR is its own named connector with
only its own tools. The transport namespaces each tool as cvr__<tool> (e.g.
cvr__soeg_virksomhed); your AI assistant invokes these for you, so the names
below are the bare tool names.This connector is read-only by construction. Access runs on Consile’s single
shared ERST account (HTTP Basic over the CVR distribution API), synthesized from
env, so a tenant connects nothing and the tools work immediately once the
connector is in the subscription. Entitlement is still re-checked on every call.
The client never exposes raw
scroll / search_after / unbounded size; it only
ever issues bounded _search reads and never a write.Shared parameters & limits
integer
default:"10 or 50"
Max results to return, bounded to 1..50. Available on the search and
list tools (
soeg_virksomhed, find_produktionsenheder,
find_virksomheder_for_person). The default is 10 for soeg_virksomhed and
find_virksomheder_for_person, and 50 for find_produktionsenheder. A value
outside 1..50 (e.g. 0 or >50) is rejected with a validation error, not
clamped; there is no deep paging or scroll.integer
required
Danish CVR number (8 digits), e.g.
24256790. Accepted as a string and coerced to
an integer. Required on hent_virksomhed, find_produktionsenheder and
find_ejere.CVR_MAX_CONCURRENT). This protects Erhvervsstyrelsen’s fair-use, so very large
extracts are not possible.
GDPR: the
reklamebeskyttet (advertising-protection) flag is surfaced on every
company and production-unit result and never hidden. CVR exposes no CPR numbers
at all; persons are identified by an internal enhedsNummer.Companies
soeg_virksomhed
Search companies by their current name. Returns{ total, companies: [...] }, where
total is the full match count before the size cap and each company carries
cvrNummer, navn, status, virksomhedsform, branchekode / branchetekst,
adresse, stiftelsesDato, latest beskaeftigelse and reklamebeskyttet.
kapital is not included by search (use hent_virksomhed).
string
required
Search text, typically a company name. Matched against the newest registered name
(
operator: and).integer
default:"10"
Max results (1..50).
hent_virksomhed
Fetch one company’s current master data by CVR number. Returns the company object (cvrNummer, navn, status, virksomhedsform, branchekode / branchetekst,
adresse, stiftelsesDato, beskaeftigelse, kapital, kapitalValuta,
reklamebeskyttet), or { found: false, cvrNummer } when no company matches. This
is the only tool that returns share capital (kapital / kapitalValuta).
integer
required
CVR number (8 digits), e.g.
24256790.Production units
find_produktionsenheder
Find production units (P-numbers, physical operating sites) for a CVR number. Returns{ total, units: [...] }, where each unit carries pNummer, navn, status (e.g.
Aktiv), branchekode / branchetekst, adresse, latest beskaeftigelse and
reklamebeskyttet. total is the full number of P-units; up to 50 are returned per
call.
integer
required
CVR number of the owning company.
integer
default:"50"
Max units (1..50).
Participants (owners & persons)
find_ejere
Find participants (owners, management, founders, legal and real owners, auditors) for a CVR number. Returns{ cvrNummer, navn, antal, antalAktive, ejere: [...] }, or
{ found: false, cvrNummer } when the company has none. antal counts all relations
(incl. historical members and auditors); antalAktive counts only active owner /
management relations (excludes auditors and historical). Each ejere[] entry carries
navn, type (PERSON / VIRKSOMHED), enhedsNummer, the participant’s own
cvrNummer (set when type === "VIRKSOMHED", for walking the ownership chain; null
for persons, never CPR), an aktiv flag, roller[] (each with its own active /
historical period), current funktioner, and ejerandel / stemmeret shares.
Ownership and voting shares are normalized to 0-100 percent with the raw CVR value
(raavaerdi) and source register (kilde) preserved.
integer
required
CVR number of the company whose participants you want.
find_virksomheder_for_person
Find the companies a person is or was a participant in, searched by person name. Returns{ total, personer: [...] }, where each person carries enhedsNummer (never
CPR) and virksomheder[], and each company relation carries cvrNummer, navn, an
aktiv flag (an open period, i.e. gyldigTil is null, distinguishes current from
past engagement) and roller[]. Each role carries an organisation name (the organ
or register, e.g. Direktion, Bestyrelse, Stiftere, EJERREGISTER, Revision)
and a separate funktion field holding the FUNKTION value within that organ (e.g.
DIREKTOER).
The person’s full name.
integer
default:"10"
Max matching persons (1..50).
Because the ERST account is shared, credential failures are a platform-side
concern, not a tenant reconnect: an auth failure surfaces as
CvrAuthError (CVR
rejected the shared credentials) and a non-2xx as CvrApiError (carrying the HTTP
status, never a secret). If the CVR env is not configured at all, the connector is
dormant and an entitled tenant’s call fails with the platform’s generic
CredentialMissingError; CvrConfigError fires only for a malformed or incomplete
credential. See Errors & limits.