# Registeropslag (Beta)

> Forbind en AI-assistent med Registeropslag, komplais MCP-server til CVR, Retsinformation, Danmarks Statistik og Folketinget, med en personlig API-nøgle.

Registeropslag er i (Beta). Det er en MCP-server, der lader din AI-assistent slå op i offentlige danske registre: CVR, Retsinformation, Danmarks Statistik og Folketinget. Alle værktøjer læser; ingen af dem ændrer data. Registeropslag bruger ingen AI og tæller ikke med i AI-forbruget eller organisationens månedlige loft for AI-forbrug.

Registeropslag har sin egen adresse og er ikke en del af `api.komplai.dk`, så det har ingen side i API-referencen. Serveren taler Model Context Protocol over Streamable HTTP.

- **Adresse:** `https://mcp.komplai.dk/mcp`
- **Transport:** MCP Streamable HTTP med POST, GET og DELETE på samme adresse
- **Autentificering:** `Authorization: Bearer` med en personlig API-nøgle (`kp_live_...`), der har scopet `mcp:read`

## Før du starter

- Jeres organisation har Registeropslag i aftalen, og en administrator har givet dig adgang under **Organisation › Personer › Adgang til værktøjer** i hubben.
- Du har en personlig API-nøgle med `mcp:read`. Åbn **Registeropslag** (`/modules/mcp`) i hubben, og vælg **Opret nøgle til Registeropslag**, eller opret nøglen på siden **API-nøgler** på [hub.komplai.dk/api-access](https://hub.komplai.dk/api-access). Organisationens integrationsnøgle (`kp_org_...`) afvises med `integration_not_permitted`.
- Brug kun testdata, mens Registeropslag er i beta.

## Forbind VS Code

Siden **Registeropslag** i hubben viser den samme konfiguration med en knap til at kopiere den. Den indeholder ingen nøgle.

1. Opret en personlig nøgle med `mcp:read`.
2. Kør **MCP: Open User Configuration** i VS Code, og flet konfigurationen herunder ind i dine eksisterende indstillinger.
3. Start serveren. VS Code spørger efter nøglen i et skjult felt, så den ikke havner i en fil.

```json
{
  "inputs": [
    {
      "type": "promptString",
      "id": "komplai-api-key",
      "description": "komplai personal API key (mcp:read)",
      "password": true
    }
  ],
  "servers": {
    "komplai": {
      "type": "http",
      "url": "https://mcp.komplai.dk/mcp",
      "headers": {
        "Authorization": "Bearer ${input:komplai-api-key}"
      }
    }
  }
}
```

Konfigurationen virker i VS Codes extension host, ikke i Agent Host-sessioner. Andre klienter virker, hvis de understøtter Streamable HTTP og en personlig Bearer-header; [MCP-klienter](https://developers.komplai.dk/da/guides/mcp-clients) beskriver dem.

## Prøv det med curl

En MCP-klient tager disse trin for dig. Med curl kan du se hvert af dem.

Start en session med `initialize`. `-i` viser svarets headere, hvor `Mcp-Session-Id` indeholder sessionens id:

```bash
curl -i https://mcp.komplai.dk/mcp \
  -H "Authorization: Bearer $KOMPLAI_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc": "2.0", "id": 1, "method": "initialize", "params": {"protocolVersion": "2025-03-26", "capabilities": {}, "clientInfo": {"name": "curl", "version": "1"}}}'
```

Sæt id'et i `KOMPLAI_MCP_SESSION_ID`, bekræft sessionen med notifikationen `initialized`, og kald et værktøj. Dette søger i Retsinformation:

```bash
curl https://mcp.komplai.dk/mcp \
  -H "Authorization: Bearer $KOMPLAI_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -H "Mcp-Session-Id: $KOMPLAI_MCP_SESSION_ID" \
  -H "MCP-Protocol-Version: 2025-03-26" \
  -d '{"jsonrpc": "2.0", "method": "notifications/initialized"}'

curl https://mcp.komplai.dk/mcp \
  -H "Authorization: Bearer $KOMPLAI_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -H "Mcp-Session-Id: $KOMPLAI_MCP_SESSION_ID" \
  -H "MCP-Protocol-Version: 2025-03-26" \
  -d '{"jsonrpc": "2.0", "id": 2, "method": "tools/call", "params": {"name": "retsinfo_search", "arguments": {"query": "forvaltningsloven", "limit": 3}}}'
```

Svaret kommer som en server-sent event: en `data:`-linje med JSON-RPC-resultatet, hvor `content` indeholder værktøjets resultat som JSON-tekst. Med `tools/list` i stedet for `tools/call` får du alle værktøjer med deres inputschema.

Luk sessionen, når du er færdig. At lukke en session tilbagekalder ikke nøglen.

```bash
curl -X DELETE https://mcp.komplai.dk/mcp \
  -H "Authorization: Bearer $KOMPLAI_TOKEN" \
  -H "Mcp-Session-Id: $KOMPLAI_MCP_SESSION_ID" \
  -H "MCP-Protocol-Version: 2025-03-26"
```

## Værktøjer

| Værktøj | Register | Hvad det returnerer | Hvor opslaget sendes hen |
| --- | --- | --- | --- |
| `cvr_lookup` | CVR | En virksomhed ud fra CVR-nummer eller navn: navn, adresse, branchekode, antal ansatte, virksomhedsform, konkursmarkering og ejere | cvrapi.dk |
| `retsinfo_search` | Retsinformation | Love, bekendtgørelser og cirkulærer som henvisninger: titel, type, ministerium, dato og link. Ikke selve lovteksten. | retsinformation.dk |
| `dst_find_tables` | Danmarks Statistik | Statistiktabeller ud fra et søgeord med id, indhold, enhed og periode | api.statbank.dk |
| `dst_describe_table` | Danmarks Statistik | En tabels variable og de værdikoder, hver variabel tager imod | api.statbank.dk |
| `dst_get_data` | Danmarks Statistik | Tal fra en tabel for de variabelkoder, du vælger | api.statbank.dk |
| `oda_search_cases` | Folketinget | Folketingssager ud fra titlen: type, status, afgørelse og seneste opdatering | oda.ft.dk |
| `oda_get_entity` | Folketinget | Rækker fra Folketingets åbne data: sager, dokumenter, personer og organer, afstemninger og møder | oda.ft.dk |
| `komplai_detect` | Redact | Personoplysninger i en tekst, fundet alene med regler | I tjenesten |
| `komplai_redact` | Redact | Teksten med betegnelser som `[CPR-1]` og listen over betegnelser | I tjenesten |
| `komplai_rehydrate` | Redact | Teksten med de oprindelige oplysninger sat tilbage ud fra listen over betegnelser | I tjenesten |
| `list_connectors` | | Alle forbindelser på serveren, og hvor deres data sendes hen | |

- CVR er et offentligt register, men for små virksomheder tilhører de registrerede kontaktoplysninger og ejernavne private personer. Behandl dem som personoplysninger. Når `marketing_protected` er true, har virksomheden frabedt sig brug i markedsføring.
- Værktøjerne `komplai_` kræver også `redact:detect` på samme nøgle og adgang til Redact i jeres organisation. De bruger kun regler og finder derfor ikke navne. Serveren gemmer ikke listen over betegnelser: `komplai_rehydrate` skal have den liste, `komplai_redact` returnerede. `komplai_detect` og `komplai_redact` tager op til 50.000 tegn pr. kald. Til navne og længere tekster bruger du [Redact](https://developers.komplai.dk/da/tools/redact) via API'et.

## Sessioner og grænser

- Hver forespørgsel, også GET og DELETE, skal have den personlige nøgle med. En nøgle i adressen afvises: URL'en må ikke have en forespørgselsstreng.
- Den første forespørgsel er en POST med `initialize`. Sessionen er bundet til jeres organisation, til dig og til nøglen; en anden nøgle kan ikke bruge den. Tilbagekaldelse, udløb og fjernet adgang kontrolleres ved hver forespørgsel og igen, når et værktøj kører.
- Højst 5 sessioner pr. nøgle og 500 på serveren. En session slutter efter 30 minutter uden aktivitet.
- En body må højst fylde 4 MiB. Serveren har sin egen grænse for HTTP-forespørgsler pr. minut, og hvert værktøjskald tæller også med i kontoens grænser for kald.

## Når en forespørgsel afvises

Afvisninger kommer som en JSON-body med `error`:

| Status | `error` | Hvad du kan gøre |
| --- | --- | --- |
| 400 | `query_credentials_not_supported` | Fjern forespørgselsstrengen. Send nøglen i headeren `Authorization`. |
| 400 | `initialize_required` | Start en session med en POST af `initialize`. |
| 400 | `invalid_session` | Send `Mcp-Session-Id` én gang. |
| 401 | `api_key_required` | Send `Authorization: Bearer` med din personlige nøgle. |
| 401 | `invalid_api_key` | Nøglen er ukendt, udløbet eller tilbagekaldt. Opret en ny. |
| 403 | `integration_not_permitted` | Brug en personlig nøgle, ikke organisationens integrationsnøgle. |
| 403 | `insufficient_scope` | Brug en nøgle med `mcp:read`. |
| 403 | `session_owner_mismatch` | Sessionen tilhører en anden nøgle. Start en ny session. |
| 403 | `origin_refused` | Forespørgslen kom fra en webside på en adresse, serveren ikke tager imod. |
| 404 | `unknown_session` | Sessionen er slut. Start en ny med `initialize`. |
| 429 | `session_limit` | Luk sessioner, du ikke bruger, med DELETE, eller vent, til inaktive sessioner slutter. |
| 429 | `rate_limited` | Vent et minut, før du sender flere forespørgsler. |
| 503 | `account_access_unavailable` | Nøgler og adgang kunne ikke kontrolleres. Prøv igen om lidt. |

Et værktøjskald, din konto ikke må foretage lige nu, fx fordi din adgang er fjernet, eller din grænse for kald er nået, returnerer et værktøjsresultat med `isError: true`, hvor teksten nævner årsagen.

## Hvor data sendes hen

- Søgeoplysningerne sendes til det register, du slår op i, på adressen i tabellen ovenfor. Adgangen følger din personlige nøgle.
- Serveren kører på komplais servere i Tyskland (EU). Værktøjerne `komplai_` behandler tekst dér i hukommelsen.
- Organisationens hændelseslog indeholder værktøjet, hvem der kaldte det, og metadata om forbruget, aldrig opslaget, teksten, listen over betegnelser eller nøglen.
- Registeropslag bruger ingen AI og tæller ikke med i AI-forbruget.

[Hvor data behandles](https://developers.komplai.dk/da/data-processing) beskriver alle værktøjer.

---

https://developers.komplai.dk/da/tools/register-lookup
