Vi bruker informasjonskapsler til autentisering og — med ditt samtykke — til analyse. Les mer.

Hopp til innhold
KETL Data
DataApperMCPPriserLogg inn
  1. Hjem
  2. For utviklere
Quickstart · 5 min

Koble AI-agenten din til norsk offentlig data

KETL er en MCP-server med Streamable HTTP. Ett endepunkt, én Bearer-token, 160+ norske kilder. Fungerer rett ut av boksen i Claude Desktop, Cursor og Cline — eller bruk TypeScript-SDK-en for egen agent.

Fire steg til første vellykket MCP-kall

Mål: under 5 minutter fra signup til svar i agenten.

1ca. 30 sek

Registrer en konto

Logg inn med Google eller e-post. Dev-tier aktiveres automatisk — 1 000 MCP-kall/mnd og tilgang til alle åpne datakilder. Ingen betalingskort.

2ca. 1 min

Generer en API-nøkkel

Gå til /dashboard → API-nøkler. Gi nøkkelen et navn (f.eks. «claude-desktop-laptop») og kopier den. Nøkler kan roteres og revokeres når som helst.

3ca. 2 min

Konfigurer klienten din

Lim inn én av kode-snippene under. KETL eksponerer verktøy via Streamable HTTP — én MCP-server per connector på data.ketl.no/mcp/<connector>.

4ca. 1 min

Kjør første kall

Spør agenten: «Søk opp Equinor i Brreg og sjekk mot EU-sanksjonslisten». Du får svar + kilde-referanser + audit-event i /dashboard.

Tre måter å koble seg til

Samme endepunkt, samme audit-logg — velg klient etter workflowen din.

Claude Desktop

Lim inn i ~/Library/Application Support/Claude/claude_desktop_config.json (macOS). Start Claude på nytt. KETL-verktøyene dukker opp i tool-panel.

claude_desktop_config.json
JSON
{
  "mcpServers": {
    "ketl-brreg": {
      "url": "https://data.ketl.no/mcp/brreg",
      "transport": "streamable-http",
      "headers": {
        "Authorization": "Bearer ketl_live_••••"
      }
    }
  }
}

Cursor / Cline

Cursor støtter MCP via ~/.cursor/mcp.json (Settings → MCP). Samme Streamable HTTP-oppsett virker i Cline og Windsurf.

mcp.json
JSON
{
  "mcp.servers": {
    "ketl-brreg": {
      "type": "streamable-http",
      "url": "https://data.ketl.no/mcp/brreg",
      "headers": {
        "Authorization": "Bearer ketl_live_••••"
      }
    }
  }
}

TypeScript SDK

For egen agent eller backend-bruk. Anthropic’s offisielle @modelcontextprotocol/sdk kobler direkte til KETL via Streamable HTTP — samme verktøy som Claude Desktop. Du kan også bruke fetch mot REST-endepunktene (se /mcp).

index.ts
TypeScript
// npm install @modelcontextprotocol/sdk
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";

const transport = new StreamableHTTPClientTransport(
  new URL("https://data.ketl.no/mcp/brreg"),
  {
    requestInit: {
      headers: { Authorization: `Bearer ${process.env.KETL_API_KEY}` },
    },
  },
);
const ketl = new Client({ name: "min-agent", version: "1.0.0" });
await ketl.connect(transport);

// Robust wrapper med retry på 429 og distinkte feilkoder
async function callKetl(name: string, args: Record<string, unknown>) {
  try {
    return await ketl.callTool({ name, arguments: args });
  } catch (err) {
    const status = (err as { status?: number; code?: number }).status
      ?? (err as { code?: number }).code;
    if (status === 401) throw new Error("Ugyldig eller utløpt API-nøkkel — roter via /dashboard");
    if (status === 403) throw new Error("Verktøyet krever høyere tier — sjekk /pricing");
    if (status === 404) throw new Error(`Ukjent verktøy: ${name}`);
    if (status === 429) {
      // Rate-limit: vent og prøv på nytt (én gang). Ved 2× 429 → bubble opp.
      await new Promise((r) => setTimeout(r, 2_000));
      return ketl.callTool({ name, arguments: args });
    }
    if (status && status >= 500) throw new Error(`KETL upstream nede (${status}) — prøv igjen senere`);
    throw err;
  }
}

// Søk i Enhetsregisteret + sanksjonssjekk
const result = await callKetl("brreg_search", { query: "Equinor", type: "entity" });
const risk = await callKetl("sanctions_check", {
  orgnr: "923609016",
  lists: ["EU", "OFAC", "UK", "UN"],
});

console.log(result, risk);

Foretrekker du REST og curl? Eksempel med eksplisitt statuskode-håndtering (4xx/5xx/429):

curl-eksempel
bash
# Søk i Enhetsregisteret — med curl --fail-with-body for å fange 4xx/5xx
curl --fail-with-body --silent --show-error \
  --max-time 30 \
  -H "Authorization: Bearer $KETL_API_KEY" \
  -H "Accept: application/json" \
  "https://data.ketl.no/api/connectors/brreg/search?navn=Equinor" \
  | jq '.'

# Statuskode-håndtering i shell-skript
status=$(curl -o /tmp/body -w "%{http_code}" -s \
  -H "Authorization: Bearer $KETL_API_KEY" \
  "https://data.ketl.no/api/connectors/brreg/search?navn=Equinor")

case "$status" in
  200) jq '.' /tmp/body ;;
  401) echo "Ugyldig API-nøkkel — roter via /dashboard" >&2; exit 1 ;;
  429) echo "Rate limit — vent 60 sek og prøv igjen" >&2; exit 2 ;;
  5*)  echo "KETL upstream nede ($status) — prøv igjen senere" >&2; exit 3 ;;
  *)   echo "Uventet feil ($status):" >&2; cat /tmp/body >&2; exit 4 ;;
esac

Statuskoder du vil møte:

  • 401 ugyldig/utløpt API-nøkkel — roter via/dashboard
  • 403 verktøyet krever høyere tier — se/pricing
  • 404 ukjent verktøy eller objekt
  • 429 rate-limit nådd — vent og prøv igjen (header Retry-After respekteres)
  • 5xx upstream nede — implementer retry med eksponentiell backoff

Bygget for produksjon

MCP-native

Direkteintegrasjon med Claude Desktop, Cursor og Cline. Ingen egen proxy-server, ingen OAuth-dans.

160+ datakilder

421+ verktøy eksponert — Brreg, SSB, Kartverket, Sokkel, Norges Bank og resten av norsk offentlig data.

Audit-logg default

Hvert MCP-kall logges med kilde, tidsstempel og response-hash. Eksport som signert JSON for revisor.

Stabile kontrakter

OpenAPI + MCP-manifest på data.ketl.no/.well-known/mcp.json. Semver på verktøy-responser.

Dev-tier: 1 000 kall/mnd gratis

Aktiveres automatisk ved signup. Ingen betalingskort, ingen sales-samtale. Pro- og Team-tier er selvbetjent via Stripe når du trenger mer volum eller pro-datakilder (Kartverket, NAV, Sokkeldirektoratet-dybde).

Hva du slipper å bygge selv

De fem moats — for AI-startups som bygger på Ketl

MCP og REST gir tilgang til 162 kilder; under ligger fem strukturelle moats som dekker det startup-en ellers måtte bygge selv. Hver moat har et eget startup-use-case med kode- og arkitektur-vinkel — agent-state, webhooks, EU AI Act- audit-format, SOC2-bevisgrunn, og norsk eiendoms-stack.

Living business record

Per-tenant stateful kontekst, vektor-db-init, snapshot- diff, GDPR art. 20-eksport og SOC2 CC6.5-deprovisioning — som agent-state by default, ikke som du må bygge.

Event-driven review engine

Webhook-multiplikator: Cloud Scheduler, dedup på event- IDs, retry-policy med backoff og signature-verifisering — multi-tenant routing uten å designe egen pipeline.

Explainability by design

EU AI Act-klar fra dag én — kilde, regel, konfidens og modellversjon i hver `Explanation`-pakke. Slipp å designe eget audit-felt-format for kundenes compliance-team.

Audit trail by default

SOC2/ISO 27001/GDPR-bevisgrunn med tamper-evident hash- kjede ferdig fra dag én. Eksport pr. kunde uten å bygge eget audit-store eller revisor-eksport-format.

Kartverket-kobling

Norsk eiendoms-stack uten egen Matrikkel-/Grunnbok- integrasjon. Proptech og insurtech får tomt, bygning, tinglyste rettigheter og eiendoms-events via ett API.

Mount alle moats som MCP-verktøy

Claude Desktop, Cursor, Cline og Windsurf får tilgang til samme audit- og webhook-stack via Streamable HTTP. Ett kontaktpunkt for både agent-state og produksjons-API.

KETL Data

Nordisk åpen-data- og compliance-infrastruktur. Kilde, regel og konfidens på hvert svar.

Produktlenker

  • Data
  • Apper
  • MCP
  • Priser
  • Ordliste
  • Hva er nytt
  • Kontakt
  • Sitemap

Juridiske lenker

  • AI-transparens
  • Personvern
  • Kredittopplysning
  • Vilkår
  • SLA
  • Cookies
  • Sikkerhet

© 2026 ketl data

build e132518d