@pipeworx/cvr-dk

Connect: https://gateway.pipeworx.io/cvr-dk/mcp

Tools: 2

Danish company registry (CVR) lookup. This pack is complete and is intentionally absent from MCP_PACKS. If you arrived here because Denmark is a gap in company-registry coverage: the pack already exists — do not build a second one from the brreg-no template.

Why it is not wired

Its upstream, cvrapi.dk, enforces a per-IP quota. Probed 2026-08-12 from a plain residential IP:

GET https://cvrapi.dk/api?search=25313763&country=dk
200 OK
{"error":"QUOTA_EXCEEDED","message":"Your quota has been exceeded...","ip":"99.106.168.49"}

Two things matter in that response. First, it is a quota, not a Cloudflare block — an earlier note recorded it as CF-blocked, which pointed at the wrong fix (an egress proxy would not help; the quota follows whatever IP you arrive on). On shared Cloudflare egress we share one address pool with every other CF tenant, so the quota would be exhausted essentially permanently. A tool that fails unpredictably is worse than one that is absent, which is why this stays unwired.

Second, the failure arrives as HTTP 200 with an error body. Any check that reads status codes calls this healthy.

What would unblock it — one email, not a rebuild

Erhvervsstyrelsen publishes the complete CVR register itself:

GET http://distribution.virk.dk/cvr-permanent/virksomhed/_search
401 Unauthorized

401 rather than 403 or a timeout: it wants credentials, and Erhvervsstyrelsen grants them free on request (Virk data distribution / cvrselvbetjening). That is a human step — the request itself, the draft wording, and the redistribution question to settle first are written up in docs/cvr-dk-virk-access.md.

With credentials in hand the remaining work is small and fully specified:

  1. Set the Virk credentials as a platform key on the gateway and registry-api.
  2. Repoint BASE in src/index.ts from https://cvrapi.dk/api to the Virk Elasticsearch endpoint.
  3. Adjust the response mapping — Virk returns Elasticsearch hits, cvrapi.dk returns a flat object.
  4. Add the MCP_PACKS entry and run node scripts/sync-catalog.mjs.

Tools, schemas and tool-examples.json entries are already written. Until then, a Danish-registry question correctly returns an honest no_match that names the missing registry rather than answering from Norway.

Tools (as built)

  • lookup_company(search) — company by CVR number or name.
  • lookup_by_vat(vat) — company by VAT number.

Data source

https://cvrapi.dk/api today; distribution.virk.dk/cvr-permanent is the intended official source.

Tools

  • lookup_company — Look up a Danish company in the official CVR register (Det Centrale Virksomhedsregister) by name, 8-digit CVR number, phone number, or P-number (production-unit number). Returns the SINGLE best-match
  • lookup_by_vat — Look up a Danish company by its explicit 8-digit CVR/VAT number. Returns the single best-match record (same fields as lookup_company). Use this when you already have the CVR number. e.g. {vat:“2425679

Tools

  • lookup_by_vat — Look up a Danish company by its explicit 8-digit CVR/VAT number. Returns the single best-match record (same fields as lookup_company). Use this when you already have the CVR number. e.g. {vat: 2425679
  • lookup_company — Look up a Danish company in the official CVR register (Det Centrale Virksomhedsregister) by name, 8-digit CVR number, phone number, or P-number (production-unit number). Returns the SINGLE best-match

Regenerated from source · build August 30, 2026