datanorge
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@datanorgefinn datasett om befolkning i Norge"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
datanorge
Finn og hent norske offentlige data fra 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-datakildeskill (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:
/plugin marketplace add tenki-labs/datanorge-mcp
/plugin install datanorge@datanorge-mcpDet 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:
claude mcp add datanorge -- npx -y github:tenki-labs/datanorge-mcpAlternativ C — fra kildekode (utvikling)
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 plukkes opp automatisk), eller
registrer eksplisitt: claude mcp add datanorge -- node /absolutt/sti/dist/index.js.
Related MCP server: kartverket-mcp
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:
/finn-datakilde befolkning per kommuneClaude 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 |
| Søk i datasettkatalogen |
| Full metadata + nedlastingslenker + lisens/kreditering |
| Søk i API-katalogen (SSB, Kartverket, MET m.fl.) |
| Endepunkt-URL-er for ett API |
| 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_dataleser maks 256 KB som standard (opp til 5 MB viamaxKilobytes). Binært innhold returnerer kun metadata.Språk: norske søkeord treffer best; resultater inkluderer
nb/nn/ender det finnes.
Utvikling
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 serverenStruktur:
src/index.ts registrerer MCP-verktøyene ·
src/fdk.ts er FDK-klienten ·
src/format.ts formaterer svar og klassifiserer lisens/kreditering ·
skills/finn-datakilde/SKILL.md er skillen ·
commands/finn-datakilde.md er slash-kommandoen ·
.claude-plugin/ er plugin- og marketplace-manifestene.
Publisering (vedlikeholdere)
Pakka publiseres til npm automatisk når en versjons-tag pushes:
npm version patch
git push --follow-tagsDette trigger .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 © Tenki Labs.
Data leveres av data.norge.no, driftet av Digitaliseringsdirektoratet (Digdir). Prosjektet er ikke tilknyttet eller godkjent av Digdir. Følg hvert datasetts egen lisens — se Kreditering over.
Available Tools
5 toolsfetch_dataFetch data from a URLA
Download the actual data from a distribution's downloadURL or accessURL (from get_dataset), an API endpoint (from get_api), or any http(s) data URL. Returns the content for text formats (CSV, JSON, XML, GeoJSON); large responses are truncated and binary content returns metadata only. Use this to retrieve the data itself, not just its catalogue metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The http(s) URL to fetch — typically a downloadURL/accessURL from get_dataset. | |
| maxKilobytes | No | Maximum amount to download, in KB (default 256, hard cap 5000). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses return behavior: text formats return content, large responses are truncated, binary returns metadata only. This goes beyond a simple 'fetch' description. However, it omits authentication needs, rate limits, or error handling specifics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, no redundant information. The description is front-loaded with the key action and resource, then adds return behavior and usage guidance. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (2 params, no output schema), the description covers main scenarios: what URLs to use, what is returned for text vs binary, and size limits. It does not cover edge cases like invalid URLs or authentication, but for a straightforward fetch tool it is sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both parameters have descriptions in the schema. The description adds context about maxKilobytes (truncation behavior) and mentions text formats, which relates to the url parameter's effect. This provides slight additional meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool downloads data from specific URL types (downloadURL, accessURL, API endpoint, etc.) and contrasts it with sibling tools by noting it retrieves the data itself, not catalogue metadata. The verb 'download' with resource 'data' is specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use this tool (after obtaining a data URL from get_dataset or get_api) and implicitly when not to (for metadata). It names alternatives (get_dataset, get_api) but does not explicitly state exclusions like 'do not use for catalogue lookups.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_apiGet API detailsA
Fetch full metadata for one API / data service by its id (from search_apis), including its endpoint URL(s) and a link to the machine-readable description (e.g. OpenAPI spec).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The API/data-service id returned by search_apis. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Although no annotations are provided, the description discloses the read-only nature of the operation and specifies what data is returned (endpoint URLs, machine-readable description link). It does not mention potential side effects, which are minimal for a fetch operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that immediately conveys the tool's purpose and key details. Every word adds value, with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of an output schema, the description hints at important return fields (endpoints, machine-readable link) and is sufficient for a simple retrieval tool. However, it could be more explicit about the full set of metadata fields returned.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers 100% of parameters with a clear description for the 'id' parameter. The tool description reiterates the parameter's purpose but does not add new meaning beyond the schema, aligning with the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool fetches full metadata for one API/data service by its id, and specifies key included elements (endpoint URLs, link to OpenAPI spec). It distinguishes itself from sibling tools like search_apis which searches for APIs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description emphasizes using the id from search_apis, implying a prerequisite and a workflow. It provides clear context for when to invoke the tool, though it lacks explicit when-not-to-use guidance or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_datasetGet dataset detailsA
Fetch full metadata for one dataset by its id (from search_datasets), including every distribution with its download/access URL, format and licence. This is how you find where to actually get the data.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The dataset id returned by search_datasets (a UUID-like string). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description covers the return content (metadata, distributions, URLs, format, licence) and implies a read operation. It doesn't address authentication, rate limits, or side effects, which is acceptable for a simple fetch tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the action, no unnecessary words, and efficient communication of purpose and value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple tool (1 param, no output schema), the description sufficiently explains what is returned and how it fits into the workflow, making it complete for an AI agent to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%; the param 'id' already has a clear description in schema. Description reinforces its origin from search_datasets but adds no further semantic depth beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Fetch full metadata for one dataset by its id' with specific details about contents (distributions, URLs, format, licence) and explains that this is how to find where to actually get the data, distinguishing from siblings like search_datasets.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description implies using search_datasets first to get the id, and positions this as a step before fetching actual data. It doesn't explicitly name alternatives, but context from sibling tools provides differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_apisSearch APIs (data services)B
Search data.norge.no for APIs / data services — live endpoints serving Norwegian public data (e.g. Statistics Norway, Kartverket, Brønnøysundregistrene). Use get_api with a returned id for endpoint URLs.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Zero-based page number (default 0). | |
| limit | No | Max results (default 10). | |
| query | Yes | Free-text search for an API / data service, e.g. 'vær', 'adresser', 'foretak'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must cover behavioral traits. It mentions that it searches for live endpoints serving Norwegian public data, but omits details on rate limits, authentication, error handling, or what happens on empty results. The description lacks sufficient transparency for an unannotated tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two efficient sentences: the first states the purpose and provides examples, the second gives a clear follow-up action. No redundant information; front-loaded and concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description should indicate the response structure (e.g., presence of id, total results). It only mentions IDs for endpoint URLs, leaving the agent uninformed about other fields or pagination details. The description is incomplete for a search tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with each parameter having a description. The description adds domain context (Norwegian public data) and notes that returned IDs can be used with get_api, but does not add new meaning to the parameters themselves. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's verb ('Search') and resource ('APIs / data services' on data.norge.no), with specific examples (Statistics Norway, Kartverket, Brønnøysundregistrene) that distinguish it from siblings like search_datasets (which searches datasets).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a follow-up action ('Use get_api with a returned id for endpoint URLs') but does not explicitly state when to use this tool over alternatives like search_datasets or fetch_data. Usage context is implied but not fully elaborated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_datasetsSearch datasetsA
Search data.norge.no (the Norwegian national data catalogue) for datasets by keyword or topic. Returns matching datasets with their id, publisher, themes and a short description. Norwegian search terms usually match best. Use a returned id with get_dataset to get download links.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Zero-based page number for paging through results (default 0). | |
| limit | No | Maximum number of results to return (default 10). | |
| query | Yes | Free-text search, e.g. 'luftkvalitet', 'befolkning', 'eiendom', 'air quality'. | |
| orgPath | No | Filter by publisher org path, e.g. '/STAT/972417904/971032081'. | |
| openDataOnly | No | If true, only return datasets flagged as open data. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must convey behavioral traits. It mentions return fields and language preference but does not discuss pagination, rate limits, or error handling. The schema covers pagination details, so the description adds limited behavioral context beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loaded with the main purpose, and every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter search tool with no output schema and no annotations, the description provides a basic overview but lacks details on pagination, filtering, and error scenarios. It is adequate but not comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value by noting language preference and linking to get_dataset, but it does not explain parameter usage beyond what the schema already describes.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it searches for datasets on data.norge.no by keyword or topic, specifies return fields (id, publisher, themes, short description), and differentiates from sibling tools like get_dataset (which gets download links) and search_apis (likely different resource).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description advises that Norwegian search terms match best and suggests using the returned id with get_dataset for download links, giving practical usage guidance. However, it does not explicitly state when not to use this tool versus alternatives like search_apis.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
5 tool updates
v0.1.0- First observed
fetch_data - First observed
get_api - First observed
get_dataset - First observed
search_apis - First observed
search_datasets
TDQS
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.
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.
Five tools is an appropriate scope for a data catalogue server, covering search, metadata retrieval, and data download without being excessive or too minimal.
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
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
This MCP server provides seamless access to Malaysia's government open data, including datasets, w…
Hosted MCP server for finding authoritative primary data sources and official portals.
Netherlands Open Data (data.overheid.nl/data) CKAN MCP.
data.overheid.nl MCP — the Netherlands national open-data portal (CKAN API).
Related MCP Servers
- AlicenseBqualityDmaintenanceAn unofficial MCP server providing access to Dutch government open data from data.overheid.nl, CBS statistics, and KVK business registry. Enables natural language queries for discovering datasets, inspecting metadata, and querying data without API keys or authentication.14MIT
- AlicenseAqualityDmaintenanceMCP server that wraps Kartverket's open APIs for Norwegian geographic data including place names, addresses, elevation, municipalities, properties, statistical districts, and building points. Requires no authentication.780MIT
- AlicenseAqualityDmaintenanceMCP server that provides tools to search Norwegian addresses, reverse geocode, find place names, and get elevation data from Kartverket's open geographic datasets.4121MIT
- FlicenseAqualityDmaintenanceMCP server for querying Huwise/Opendatasoft data portals. Enables dataset search, metadata retrieval, record filtering with ODSQL, and data export.53-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/tenki-labs/datanorge-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server