Norwegian public data (companies, statistics, addresses) as MCP tools. No API keys.
Strong foundation with 14 well-named, verb-prefixed tools (search_, get_, reverse_) and comprehensive descriptions (avg 180 chars, well above 34-char baseline). All tools have input schemas with types and descriptions. Output schemas are documented in descriptions. Key strengths: clear use-case guidance ('Use when...', 'Use for...'), dependency hints ('call search_companies first if you only have a name'), and parameter constraints (min/max, enums via descriptions). Weaknesses: output structure not formally documented in schema; some parameter descriptions could be more prescriptive about format/range; no explicit error handling guidance in descriptions; no batch variants despite tools that agents might call in loops (e.g., multiple get_company calls).
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).
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'.
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'.
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 `periods` business days. Use for 'USD/NOK rate', 'how has the krone moved against the euro'. For interest rates use get_key_series(series='interest_rates') instead. Example: currencies=['USD', 'EUR'], periods=30.
Output schemas not formally documented. Descriptions mention returned fields (e.g., 'orgnr', 'driftsinntekter') but no structured schema definition visible. LLMs cannot reliably extract or chain results without explicit output type documentation.
No error handling guidance in tool descriptions. Descriptions do not explain what happens on failure (e.g., 'company not found', 'API unavailable', 'invalid table_id'). The _tool wrapper catches UpstreamError and returns hints, but tool descriptions should guide LLM recovery.
Parameter format constraints not explicit in descriptions. E.g., 'orgnr' is '9-digit', 'kommunenummer' is '4-digit', but descriptions do not state regex patterns or validation rules. LLMs may pass invalid formats (e.g., 'orgnr=123' instead of '123456789').
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 63 | 2026-07-28+ | v2 |
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.
Curated headline statistics from Statistics Norway: CPI, population, unemployment, house prices, wages, interest rates. Pass a series name and optional number of periods. Returns a CSV table with time on rows. Use for quick access to Norway's most-requested economic indicators. Example: series='cpi', periods=24.
Search Norwegian place names (natural and settled places) by name. Returns up to `limit` places with type (e.g. 'city', 'mountain', 'lake'), municipalities, counties, and coordinates. Use for 'find the place called X', 'where is Y'. For street addresses use search_address instead. Fuzzy matching handles typos. Example: query='Sognefjord'.
Cadastral property details for a Norwegian parcel by municipality code (kommunenummer), garden number (gardsnummer), and plot number (bruksnummer). Returns coordinates and optionally the boundary polygon. Answers 'what's the boundary of this property', 'where is this parcel'. Owners and valuations require a licensed Matrikkel agreement. Example: kommunenummer='0301', gardsnummer=1, bruksnummer=1.
Extract data from a Statistics Norway (SSB) table with optional filtering. Pass a table ID and optional selection (variable codes to include). Returns a CSV table with time on rows and dimensions on columns. Answers 'what was Norway's population in 2020', 'show me unemployment by region'. Call get_table_info first to see available variables and codes. Example: table_id='07459', selection={'ContentsCode': ['Personer1']}.
Metadata for a Statistics Norway (SSB) table: variable names, value codes, labels, time span, and whether each variable is required. Use before calling get_statistics to understand the table structure and build a selection. Example: table_id='07459' (population).
Find Norwegian addresses near a coordinate (lat/lon). Returns up to `limit` addresses within `radius` meters, with full address text, postal code, municipality, and cadastral references. Use for 'what's at this location', 'find addresses near X'. Example: lat=59.9139, lon=10.7522 (Oslo city center), radius=500.
Search Norwegian addresses by street name, place, or postal code. Returns up to `limit` addresses with coordinates (lat/lon), postal code, municipality, and cadastral references (garden/plot numbers). Use for 'find the address of X', 'what's the postcode for Y'. Fuzzy matching handles typos. Example: query='Stortingsgata 22, Oslo'.
Search the Norwegian company register (Enhetsregisteret) by name and/or filters. Returns up to `limit` companies with orgnr (9-digit organisation number), organisational form, address, industry code (naeringskode, NACE), employee count, and status flags (konkurs = bankrupt, underAvvikling = being dissolved). Use when the user names a company without an orgnr or asks 'find companies that...'. If you already have an orgnr, call get_company instead. Example: name='Equinor'. Example: naeringskode='11.05' (breweries), kommunenummer='0301' (Oslo), min_employees=10.
Search Statistics Norway (SSB) tables by keyword. Returns table IDs, titles, time periods, update frequency, and variable names. Use to find the right table before calling get_statistics or get_table_info. Example: query='unemployment', query='population'.
No batch variants for tools agents call in loops. E.g., if an agent needs financials for 10 companies, it must call get_company_financials 10 times sequentially. A batch_get_company_financials(orgnrs: list) would reduce latency and token waste.
Pagination limit enforcement not visible in code. search_companies and search_statistics accept 'limit' params with max constraints (50, 40), but no evidence of server-side enforcement or truncation warnings in the visible code snippet.