norwegian-data-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| NORWEGIAN_DATA_MCP_CACHE | No | Set to 'off' to disable caching. By default, caching is enabled. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| search_companiesA | Search the Norwegian company register (Enhetsregisteret) by name and/or filters. Returns up to |
| get_companyA | Full record for one Norwegian company by its 9-digit organisation number (orgnr): registered name, business and postal address, industry codes with text, organisational form, employee count, registration dates, VAT registration, bankruptcy/dissolution status, institutional sector. Falls back to sub-unit (underenhet) lookup if the orgnr is a business location rather than a legal entity. Use search_companies first if you only have a name. Example: orgnr='923609016' (Equinor ASA). |
| get_company_rolesA | Board and management of a Norwegian company by orgnr: chair (styrets leder), board members, CEO (daglig leder), auditor (revisor), with names and resignation flags. Answers 'who is on the board of X', 'who runs X', 'who audits X'. Data from Enhetsregisteret; role holders can be persons or companies. Example: orgnr='923609016'. |
| get_company_financialsA | Latest filed annual accounts (aarsregnskap) for a Norwegian company from Regnskapsregisteret: revenue (driftsinntekter), operating profit (driftsresultat), net result (aarsresultat), total assets (sumEiendeler), equity (egenkapital), debt split, accounting period and currency. Only the most recent filed year is available; a link to the official annual-report PDF is included. Answers 'what was X's revenue/profit'. Not available for all entities (sole proprietorships may not file); a clear 'no accounts filed' answer is returned, not an error. Example: orgnr='923609016'. |
| get_group_structureA | Registered group structure (konsern) for a Norwegian company by orgnr: the parent and its subsidiaries as a nested tree with ownership stakes (eierandel). Answers 'what companies does X own', 'is X part of a group', 'who are X's subsidiaries'. Companies outside a registered group get a clear answer, not an error. Example: orgnr='923609016' (Equinor) returns its subsidiary tree. |
| get_exchange_ratesA | Daily NOK exchange rates from Norges Bank (the central bank). Pass ISO currency codes; every column is normalized to NOK per 1 unit of the currency, most recent |
| search_statisticsA | Search Statistics Norway's ~7,000 statistical tables by keyword. Returns table IDs with titles, time coverage, and last-updated dates. Always the first step for statistics questions unless get_key_series covers it (CPI, population, unemployment, house prices, wages, interest rates; use that instead, it is one call). After finding a table, call get_table_info to see its variables, then get_statistics to fetch numbers. Example: query='electricity prices household'. Example: query='innvandring' (Norwegian works too). |
| get_table_infoA | Structure of one SSB table before fetching data: its variables (dimensions), the value codes each accepts, time span, and any successor table if this one is closed. Use between search_statistics and get_statistics when you need a specific breakdown (region, industry, age group); skip it when defaults are fine (totals, recent periods). Example: table_id='07459' shows Region, Kjonn (sex), Alder (age), Tid (time) and their codes. |
| get_statisticsA | Fetch numbers from an SSB table as a compact CSV table. With no selection, sensible defaults apply: totals where the table allows it and the last 12 periods, good for 'recent trend' questions. For breakdowns, pass selection mapping variable codes (from get_table_info) to value-code lists; expressions allowed: ['from(2020M01)'], ['top(24)'], ['*'] (all). If the table is closed, its successor is used or suggested in hints. Example: table_id='14700' (CPI) with no selection returns the last 12 months. Example: table_id='07459', selection={'Region': ['0301'], 'Tid': ['top(5)']} returns Oslo population for the last 5 years. |
| get_key_seriesA | One-call shortcut for Norway's most-requested numbers, no table IDs needed: cpi (consumer price index + 12-month inflation), population, unemployment (LFS, seasonally adjusted), house_prices (existing-dwellings index), wages (average monthly earnings), interest_rates (NIBOR + Norges Bank policy rate). Returns the last |
| search_addressA | Search official Norwegian addresses. Returns matched addresses with coordinates (lat/lon, EPSG:4258), municipality (kommune), postal code/place, and cadastral identifiers (gardsnummer/bruksnummer, i.e. gnr/bnr), so this also resolves address to property ID in one call. Handles partial input and typos. Use for 'where is ' and as the first step before get_property. For place names that are not street addresses (mountains, lakes, farms), use get_place. Example: query='Karl Johans gate 22, Oslo'. |
| reverse_geocodeA | Nearest official Norwegian addresses to a coordinate. Returns addresses with distance in meters, municipality, and cadastral identifiers. Use for 'what address is at lat X, lon Y' or to anchor GPS positions. Example: lat=59.9139, lon=10.7522, radius=100. |
| get_propertyA | Locate a Norwegian cadastral property (matrikkelenhet) by matrikkel number: kommunenummer + gardsnummer/bruksnummer (gnr/bnr), e.g. from a search_address result. Returns the property's representation point (lat/lon) and optionally its boundary polygon (GeoJSON). NOTE: Norway's open APIs do not expose owners, buildings, or valuations; those require a licensed Matrikkel agreement, so say so rather than guessing. Example: kommunenummer='0301', gardsnummer=207, bruksnummer=100. |
| get_placeA | Search official Norwegian place names (stedsnavn): mountains, lakes, valleys, farms, islands, neighborhoods. Returns name, type (navneobjekttype), municipality, and coordinates. Use when the target is not a street address; for street addresses use search_address. Example: query='Galdhøpiggen'. Example: query='Preikestolen'. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 14 tools
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.
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.
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.
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.