# 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