datanorge
by tenki-labs
README.md
# datanorge
**Finn og hent norske offentlige data fra [data.norge.no](https://data.norge.no) — rett fra Claude Code.**
Spør deg selv «hvor finner jeg data om dette?» — og la Claude lete for deg. Dette er en
liten Claude Code-**plugin** med to deler som spiller sammen:
- 🔎 en **`/finn-datakilde`-kommando/skill** som leter iterativt i Felles datakatalog og
finner offentlige datasett og API-er for et tema;
- 🧰 en **MCP-server** med verktøy for å søke, hente metadata og laste ned selve dataene.
Den krever **ingen API-nøkkel** og nesten null oppsett, fordi API-ene bak data.norge.no er
helt åpne. Og den **henter alltid fram lisens og krediteringskrav**, slik at kilden blir
kreditert når den skal.
> **English:** A Claude Code plugin to find and fetch Norwegian open government data from
> data.norge.no. Ships a `/finn-datakilde` skill (iterative data-source discovery) plus an
> MCP server (search / metadata / download). No API key. Always surfaces the licence and
> required attribution. See the tools table and the *Kreditering* section below.
---
## Kom i gang
### Alternativ A — som plugin (anbefalt: kommando + MCP i ett)
I Claude Code:
```text
/plugin marketplace add tenki-labs/datanorge-mcp
/plugin install datanorge@datanorge-mcp
```
Det kobler opp både `/finn-datakilde`-skillen og MCP-verktøyene. Start Claude Code på nytt
hvis den ber om det. Eneste krav: **Node.js 18+**.
### Alternativ B — bare MCP-serveren (uten skillen)
Vil du bare ha verktøyene, rett fra GitHub, uten kloning eller npm-publisering:
```bash
claude mcp add datanorge -- npx -y github:tenki-labs/datanorge-mcp
```
### Alternativ C — fra kildekode (utvikling)
```bash
git clone https://github.com/tenki-labs/datanorge-mcp.git
cd datanorge-mcp
npm install # bygger også via "prepare"
```
Åpne Claude Code i mappa (den bundlede [`.mcp.json`](.mcp.json) plukkes opp automatisk), eller
registrer eksplisitt: `claude mcp add datanorge -- node /absolutt/sti/dist/index.js`.
---
## Slik bruker du den
Bare spør på vanlig norsk — skillen trigger på spørsmål som dette:
- *«Hvor finner jeg data om luftkvalitet i Oslo?»*
- *«Finnes det åpne data på ladestasjoner for elbil?»*
- *«Er det noe offentlig statistikk på befolkning per kommune?»*
…eller bruk kommandoen direkte:
```text
/finn-datakilde befolkning per kommune
```
Claude søker iterativt, forfiner søket, henter detaljer, og presenterer en kort liste med
kilder — **inkludert hvordan du krediterer hver kilde**.
### Verktøyene (MCP)
| Verktøy | Funksjon |
|---|---|
| `search_datasets` | Søk i datasettkatalogen |
| `get_dataset` | Full metadata + nedlastingslenker + **lisens/kreditering** |
| `search_apis` | Søk i API-katalogen (SSB, Kartverket, MET m.fl.) |
| `get_api` | Endepunkt-URL-er for ett API |
| `fetch_data` | Henter de faktiske dataene (CSV/JSON/XML/GeoJSON) |
Typisk flyt: **søk → get_dataset → fetch_data**.
---
## Kreditering / attribution
Dette er viktig, og verktøyet hjelper deg med det automatisk.
Når du bruker data du finner her, følger plikten til å oppgi kilde av **datasettets egen
lisens** — ikke av data.norge.no. `get_dataset` og `get_api` viser derfor alltid en
**«Kreditering / attribution»-seksjon** med lisensen og en ferdig kildehenvisning:
- **NLOD** (Norsk lisens for offentlige data) — **krever kreditering**:
> Inneholder data under Norsk lisens for offentlige data (NLOD) tilgjengeliggjort av *{utgiver}*.
- **CC BY 4.0** o.l. — **krever kreditering**:
> «*{tittel}*» av *{utgiver}*, lisensiert under CC BY 4.0. Kilde: *{lenke}*.
- **CC0 / public domain** — kreditering er ikke et krav, men god skikk er å lenke til kilden.
- **Uavklart lisens** — sjekk vilkårene på kildens landingsside før bruk.
Tar du dataene videre i en rapport, et notat eller en app: **ta krediteringen med** — ikke
bare nevn at den finnes. Lenk gjerne også til datasettet på data.norge.no.
---
## Slik virker det
Serveren snakker med to åpne, uautentiserte FDK-endepunkter:
- **Søk** — `POST https://search.api.fellesdatakatalog.digdir.no/search/{type}`
- **Resource** — `GET https://resource.api.fellesdatakatalog.digdir.no/v1/{type}/{id}`
`fetch_data` laster så ned direkte fra distribusjons-/endepunkt-URL-en katalogen peker til
(disse ligger hos utgiverne selv, f.eks. SSB, Kartverket, Statens vegvesen).
### Begrensninger
- **Rate limit:** søke-API-et tillater ~10 forespørsler/minutt. Serveren prøver automatisk
på nytt ved HTTP 429.
- **Nedlastingstak:** `fetch_data` leser maks 256 KB som standard (opp til 5 MB via
`maxKilobytes`). Binært innhold returnerer kun metadata.
- **Språk:** norske søkeord treffer best; resultater inkluderer `nb`/`nn`/`en` der det finnes.
---
## Utvikling
```bash
npm install # installer + bygg
npm run watch # bygg på endring
npm run smoke # ende-til-ende MCP-sjekk mot live-API
npm run inspector # åpne MCP Inspector mot serveren
```
Struktur:
[`src/index.ts`](src/index.ts) registrerer MCP-verktøyene ·
[`src/fdk.ts`](src/fdk.ts) er FDK-klienten ·
[`src/format.ts`](src/format.ts) formaterer svar og klassifiserer lisens/kreditering ·
[`skills/finn-datakilde/SKILL.md`](skills/finn-datakilde/SKILL.md) er skillen ·
[`commands/finn-datakilde.md`](commands/finn-datakilde.md) er slash-kommandoen ·
[`.claude-plugin/`](.claude-plugin/) er plugin- og marketplace-manifestene.
## Publisering (vedlikeholdere)
Pakka publiseres til npm automatisk når en versjons-tag pushes:
```bash
npm version patch
git push --follow-tags
```
Dette trigger [`.github/workflows/publish.yml`](.github/workflows/publish.yml). Det krever en
`NPM_TOKEN`-hemmelighet med publiseringsrett til `@tenki-labs`-scopet. Plugin- og
MCP-installasjon fungerer uansett rett fra GitHub via `npx`, uten npm-publisering.
---
## Lisens
[MIT](LICENSE) © Tenki Labs.
Data leveres av [data.norge.no](https://data.norge.no), driftet av Digitaliseringsdirektoratet
(Digdir). Prosjektet er ikke tilknyttet eller godkjent av Digdir. Følg hvert datasetts egen
lisens — se *Kreditering* over.
TDQS
A4.1/5.0
Scored across 5 tools
Disambiguation5/5
Each tool has a clearly distinct purpose: search for datasets vs search for APIs, retrieve metadata for each, and fetch actual data. There is no overlap or ambiguity.
Naming Consistency5/5
All tool names follow a consistent verb_noun pattern (e.g., fetch_data, get_api, search_datasets), using lowercase with underscores. No mixing of conventions.
Tool Count5/5
Five tools is an appropriate scope for a data catalogue server, covering search, metadata retrieval, and data download without being excessive or too minimal.
Completeness4/5
The core operations for accessing public data are covered: search both datasets and APIs, retrieve full metadata, and download data. Minor gaps like browsing by theme or listing all catalogs are not critical but would be nice additions.
Maintenance
ActivityStale
ResponsivenessResponsive