Skip to main content
Glama
7nashinick

norwegian-data-mcp

README.md
# norwegian-data-mcp

Norwegian public data in your AI assistant: companies, statistics, addresses, property. One MCP server, zero API keys, zero signup.

Ask Claude (or any MCP client) things like *"who is on the board of Equinor and what was their revenue last year?"* or *"how has Norwegian inflation moved this year?"* and it answers from the official registers, with sources.

## Install

Claude Code:

```
claude mcp add norway -- uvx norwegian-data-mcp
```

Claude Desktop (`claude_desktop_config.json`):

```json
{
  "mcpServers": {
    "norway": {
      "command": "uvx",
      "args": ["norwegian-data-mcp"]
    }
  }
}
```

Any other MCP client: run `uvx norwegian-data-mcp` (or `pip install norwegian-data-mcp` and run `norwegian-data-mcp`) as a stdio server.

## Tools

| Tool | Answers | Source |
|---|---|---|
| `search_companies` | "find companies that..." | Brønnøysundregistrene |
| `get_company` | full company record by orgnr | Brønnøysundregistrene |
| `get_company_roles` | board, CEO, auditor | Brønnøysundregistrene |
| `get_company_financials` | latest filed revenue, profit, balance sheet | Regnskapsregisteret |
| `get_group_structure` | subsidiaries and ownership stakes as a tree | Brønnøysundregistrene |
| `search_statistics` | find any of SSB's ~7,000 tables | SSB (Statistics Norway) |
| `get_table_info` | a table's variables and value codes | SSB |
| `get_statistics` | the numbers, as compact CSV | SSB |
| `get_key_series` | CPI, population, unemployment, house prices, wages, interest rates in one call | SSB |
| `get_exchange_rates` | daily NOK rates for any currency | Norges Bank |
| `search_address` | address to coordinates + gnr/bnr | Kartverket |
| `reverse_geocode` | coordinates to nearest addresses | Kartverket |
| `get_property` | cadastral parcel location and boundary | Kartverket |
| `get_place` | mountains, lakes, farms to coordinates | Kartverket |

## Try these

- "Who is on the board of Equinor, and what was their revenue last year?"
- "Find all breweries in Bergen. Any of them bankrupt?"
- "What's Norway's inflation rate right now, and how does the last year look?"
- "Population of Oslo over the last 10 years."
- "What are the coordinates and gnr/bnr of Karl Johans gate 22, Oslo?"
- "Norwegian mortgage and policy interest rates over the last two years."
- "How has the krone moved against the dollar and euro this month?"
- "Map Equinor's subsidiaries with ownership stakes."

## How responses look

Every tool returns a compact JSON envelope: the data (statistics come as CSV, the most token-efficient table format), a `hints` list that tells the model how to narrow or continue, and a `source` string naming the register and license. Responses are capped in size; SSB's dense JSON-stat2 cubes are flattened to plain tables with time on the rows.

When SSB closes a table (it happens: CPI table 03013 was replaced by 14700 in 2026), the server reads the succession note and follows or suggests the successor instead of failing.

## Data sources and licenses

| Register | License | Terms |
|---|---|---|
| SSB, Statistics Norway | [CC BY 4.0](https://www.ssb.no/en/diverse/lisens) | 30 requests/minute, respected client-side |
| Brønnøysundregistrene (Enhetsregisteret, Regnskapsregisteret) | [NLOD 2.0](https://data.norge.no/nlod/en/2.0) | open API, fair use |
| Norges Bank (exchange rates) | [NLOD 2.0](https://data.norge.no/nlod/en/2.0) | open SDMX API |
| Kartverket (addresses, cadastre, place names) | [CC BY 4.0](https://www.kartverket.no/en/api-and-data/terms-of-use) | © Kartverket |

All four are open government data with no key or registration. Every response carries its attribution, so the model can cite it.

### What this server will not do

- **Property owners, buildings, valuations, grunnbok**: Norway keeps these behind a licensed Matrikkel agreement that private individuals cannot apply for. No open API exists, so no tool pretends otherwise.
- **Shareholder registers and tax lists**: no open APIs exist; tax-list searches are logged and the searched person is notified.
- **Person search**: looking up all roles a person holds across companies is legally restricted (enhetsregisterloven §9-1). Per-company roles are the lawful slice and that is what `get_company_roles` serves.
- **Historical financials**: the open Regnskapsregisteret API serves the latest filed year only; the tool links the official annual-report PDF for the rest.

## Development

```
python -m venv .venv && .venv/bin/pip install -e '.[dev]'
.venv/bin/pytest                                # offline, fixtures only
.venv/bin/pytest -m live --override-ini addopts=''  # live smoke against the real APIs
```

Runtime dependencies are `mcp` and `httpx`, nothing else. Responses are cached with per-source TTLs (in memory plus `~/.cache/norwegian-data-mcp`, disable with `NORWEGIAN_DATA_MCP_CACHE=off`), and a stale cached copy is served with a note if a register is briefly unreachable.

## Roadmap

- plot area via the Teig WFS, daily policy-rate series, elevation and kommune info tools
- streamable HTTP transport for hosted use

<!-- mcp-name: io.github.7nashinick/norwegian-data-mcp -->

TDQS

A4.5/5.0

Scored across 14 tools

Disambiguation5/5

Every tool targets a clearly distinct resource or action, and descriptions explicitly delimit boundaries (e.g., search_companies vs. get_company, search_address vs. get_place, get_statistics vs. get_key_series). The statistics pipeline (search, table info, fetch, shortcut) and address/property tools have non-overlapping roles that an agent can follow without confusion.

Naming Consistency5/5

All 14 tool names use consistent snake_case with a verb_noun pattern (search_companies, get_company_roles, reverse_geocode, etc.). There are no mixed conventions or ambiguous prefixes.

Tool Count5/5

14 tools is within the ideal range for a multi-domain public-data server, and each tool covers a necessary read operation (search, get, or reverse lookup) for companies, statistics, addresses, or exchange rates. No tool feels redundant or out of place.

Completeness4/5

The surface covers core workflows for companies (search, full record, roles, financials, group), statistics (discovery, metadata, fetch, key series), and addresses/properties/places. Minor gaps remain, such as no shareholder/ownership lookup and only the most recent financial year, which could cause dead ends for some ownership or historical queries.

Maintenance

ActivityMaintained
ResponsivenessNo issues