# Firmaradar (remote · mcp.firmaradar.no)

Norwegian company intelligence: ownership, roles, financials, risk, KYC/AML/PEP (multi-source)

- Trust score: 74/100 (medium)
- Change this week: +7
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

- remote · `mcp.firmaradar.no`: 74/100 (this document), [markdown](https://verifymcp.io/servers/no-firmaradar-mcp/mcp.md), [page](https://verifymcp.io/servers/no-firmaradar-mcp/mcp)

## Channel facts

- Endpoint: `https://mcp.firmaradar.no/mcp`
- Transports: `streamable-http`
- Auth: `none`
- Version: `0.3.2`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-03.

- **Endpoint Security**: 83/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - Authorisation is enforced on tool calls, advertised via RFC 9728 protected-resource metadata. Discovery is public, which costs nothing: no tool can be invoked without a token.
  - HTTPS not yet verified: we couldn't determine whether a plaintext access path exists.
  - The HSTS (Strict-Transport-Security) header is present.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
  - The authorisation server offers only Dynamic Client Registration (RFC 7591), which MCP 2026-07-28 deprecated in favour of Client ID Metadata Documents.
- **Transport & Reachability**: 100/100
  - Verified streamable-http transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 62/100
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 7408 tokens (~211/item across 35 items; 35 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 27/100
  - Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 94/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 80% of tool parameters carry a description.
  - Structured output schemas are declared (100% of tools); any adoption earns full credit.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### Claude

```bash
claude mcp add --transport http no-firmaradar-mcp https://mcp.firmaradar.no/mcp
```

### Codex

```toml
[mcp_servers.no-firmaradar-mcp]
url = "https://mcp.firmaradar.no/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "no-firmaradar-mcp": {
      "type": "remote",
      "url": "https://mcp.firmaradar.no/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add no-firmaradar-mcp --url https://mcp.firmaradar.no/mcp --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  no-firmaradar-mcp:
    url: "https://mcp.firmaradar.no/mcp"
```

### Other

```json
{
  "mcpServers": {
    "no-firmaradar-mcp": {
      "type": "http",
      "url": "https://mcp.firmaradar.no/mcp"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-03 (score 74, +1)

No change was recorded against any check on this day. Stability & Change Management went from 23 to 27. That category is still filling its 30-day observation window: 7 days of observed history at the previous scan, 8 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-08-02 (score 73, 0)

- [functional] Schema quality: good → excellent
- [functional] Server version: 0.6.0 → 0.6.1

### 2026-08-01 (score 73, +1)

- [functional] Server version: 1.29.0 → 0.6.0

### 2026-07-31 (score 72, +4)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-30 (score 68, 0)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-28 (score 68, +1)

No change was recorded against any check on this day. Stability & Change Management went from 3 to 7. That category is still filling its 30-day observation window: 1 days of observed history at the previous scan, 2 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-07-27 (score 67, 0)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-26 (score 67)

First indexed and scored.

## MCP tools (35)

### `firmaradar_search_companies` (~597 tokens)

Search Companies

Search Norwegian companies with filters (name, NACE, location, status, employees, revenue range, founding date). Returns paginated list of candidate orgnr to investigate further. Use when you have a description and need to find matching companies; use `get_company` once you have a specific orgnr. Revenue filtering excludes companies with no reported NOK revenue figure — see `min_omsetning_nok`. Backed by the official Norwegian company register (BRREG). Each hit includes a canonical Firmaradar `url` and the fields that matched the requested filters.

Input parameters:

- `cursor`: Opaque pagination cursor from previous call.
- `fylke`: Norwegian fylkenummer — EXACTLY 2 digits, zero-padded. Examples: '03' = Oslo, '11' = Rogaland, '15' = Møre og Romsdal. Fylke-NAMES are NOT accepted — translate first.
- `kommune`: Norwegian kommunenummer — EXACTLY 4 digits, zero-padded. Examples: '0301' = Oslo, '4601' = Bergen, '5001' = Trondheim, '1103' = Stavanger. Kommune-NAMES are NOT accepted — translate the name to kommu…
- `limit` (integer)
- `max_ansatte`
- `max_omsetning_nok`: Maximum annual revenue (driftsinntekter) in NOK — same source and same exclusion rule as min_omsetning_nok.
- `min_ansatte`
- `min_omsetning_nok`: Minimum annual revenue (driftsinntekter) in NOK, from the company's own accounts (not consolidated/group figures), latest year with a reported figure. NOTE: companies with no reported revenue are EXC…
- `nace`: NACE code or prefix. Norwegian BRREG uses 5-digit SN2007 codes internally (e.g. '56.110' for restaurants, '47.111' for grocery stores). Any prefix works: '47' matches all retail (2-digit), '47.1' mat…
- `q`: Free-text search across company names.
- `status`: Filter on company status.
- `stiftet_etter`: ISO 8601 date — only companies founded on/after.
- `stiftet_for`: ISO 8601 date — only companies founded on/before.

Output parameters:

- `items` (array)
- `next_cursor`
- `omsetning_filter_note`: Set only when a revenue range was requested: explains that companies without a reported NOK revenue figure were excluded, so an empty result may mean missing accounts rather than no matching companie…
- `total_count`

### `firmaradar_get_company` (~280 tokens)

Get Company Profile

Fetch the full profile for one Norwegian company by orgnr: name, group structure, ownership data, grants, recent BRREG announcements and financial metrics. Opt-in `fields` add deeper enrichment — notably `fields=['ip']` for the company's intellectual-property portfolio (patents, trademarks and designs from Patentstyret). The primary 'show me this company' tool — use after `search_companies` returns an orgnr. Sourced from the official Norwegian registers (BRREG Enhetsregisteret + Skatteetaten + Patentstyret) and refreshed daily. The result includes a canonical Firmaradar `url`.

Input parameters:

- `fields` (array): Subset of sections to include. Omit to get the default profile. Notable opt-in sections: `ip` — intellectual-property portfolio (patents, trademarks and designs from Patentstyret); `group` — full gro…
- `include_financial_metrics` (boolean)
- `orgnr` (string, required): Norwegian organisation number — exactly 9 digits.
- `owners`: Owner-tier requested. 'full' requires Full eierskapsoversikt tier.

Output parameters:

- `brreg_tildelinger`
- `eiere`
- `endringer`
- `financial_metrics`
- `foretaksklassifisering`
- `ip_rettigheter`
- `konsernstruktur`
- `navn`
- `orgnr` (string)
- `source` (string): Authoritative source name.
- `summary`: Human-readable summary (LLM-friendly).
- `tildelinger`
- `url`: Canonical Firmaradar source URL for this company — cite this.

### `firmaradar_get_company_ip` (~149 tokens)

Get Company IP Rights

Intellectual-property portfolio for a Norwegian company (by orgnr), sourced from Patentstyret: patents, trademarks and designs — totals, active counts, and a list of individual rights (registration number, date, status, expiry date where applicable, title and a link to the Patentstyret case). Use this for ANY question about a company's patents, trademarks, designs or IP rights — Firmaradar covers this. The `rights` list is ordered newest-first, so the first N entries are the newest rights. Look up the orgnr via `search_companies` first if you only have a name.

Input parameters:

- `orgnr` (string, required): Norwegian organisation number — exactly 9 digits.

Output parameters:

- `available` (boolean): Whether Patentstyret IP data was found.
- `designs` (integer)
- `designs_active` (integer)
- `navn`
- `orgnr` (string)
- `patents` (integer)
- `patents_active` (integer)
- `rights` (array)
- `rights_more` (integer): Antall rettigheter ut over `rights`-lista.
- `source` (string): Authoritative source.
- `summary`
- `trademarks` (integer)
- `trademarks_active` (integer)
- `url`: Canonical Firmaradar source URL.

### `firmaradar_get_company_ownership` (~199 tokens)

Get Company Ownership

Get the ownership tree for a Norwegian company: who they own (direction=down), who owns them (direction=up / UBO), or both. Use when the user asks 'who owns X AS?' or to map a corporate group. Ownership comes from Skatteetaten's Aksjeeierbok (the official shareholder register) and reflects the latest filed holdings. The result contains ownership edges, percentages and company identifiers for the requested traversal direction.

Input parameters:

- `depth` (integer): Max recursion depth.
- `direction` (string): 'down' = who this company owns. 'up' = who owns this company (UBO). 'both' = both trees.
- `include_persons` (boolean): Include personal shareholders (requires Full eierskapsoversikt tier).
- `min_share_pct`: Drop branches where ownership < this percentage.
- `orgnr` (string, required): Norwegian organisation number — 9 digits.

Output parameters:

- `depth` (integer)
- `direction` (string)
- `orgnr` (string)
- `summary`
- `tree` (object)

### `firmaradar_get_company_roles` (~136 tokens)

Get Company Roles

List board members, daglig leder, signature holders, prokura and revisor for a Norwegian company. Set include_historic=true for people who previously held roles. Use when the user asks 'who runs X AS?' or 'who is on the board?' Roles come live from BRREG (the official enterprise register) and include role type and available appointment or resignation dates.

Input parameters:

- `include_historic` (boolean): Include roles that have ended.
- `orgnr` (string, required): 9-digit orgnr.
- `role_type`: Filter on a single role type. Omit to get all roles.

Output parameters:

- `orgnr` (string)
- `roles` (array)
- `total_count` (integer)

### `firmaradar_get_company_financials` (~175 tokens)

Get Company Financials

Fetch the last N years (default 5) of financial metrics for a Norwegian company: revenue, operating result, equity, debt, employees. Use when the user asks 'how is X AS doing financially?' or 'show me the revenue trend'. Figures come from the official annual accounts filed with BRREG. Amounts are in the company's reporting currency — check the `valuta` field (NOK for most companies, but e.g. USD for some international groups; 'MIXED' means the currency changed within the series).

Input parameters:

- `orgnr` (string, required): 9-digit orgnr.
- `regnskapstype` (string)
- `skip_freshness` (boolean): Skip the inline freshness fetch (faster, but may return stale data).
- `years` (integer)

Output parameters:

- `freshness`
- `orgnr` (string)
- `regnskapstype` (string)
- `summary`
- `valuta`: Reporting currency across the series (ISO 4217, e.g. 'NOK' or 'USD'). 'MIXED' when the years are filed in different currencies — then check valuta per year before comparing amounts across years.
- `years` (array)

### `firmaradar_get_company_announcements` (~81 tokens)

Get Company Announcements

List BRREG kunngjøringer (official announcements) for a Norwegian company: bankruptcy, mergers, demergers, ownership changes, address changes, etc. Free-text fields are wrapped in <untrusted_content> tags to prevent prompt injection from BRREG-sourced text.

Input parameters:

- `orgnr` (string, required): 9-digit orgnr.

Output parameters:

- `count` (integer)
- `items` (array)
- `orgnr` (string)

### `firmaradar_search_persons` (~119 tokens)

Search Persons

Search for Norwegian persons in the shareholder/role-holder dataset by name. PII-sensitive — requires the search_full_enabled tier. Returns separate shareholder and role-holder hit lists with stable IDs that can be passed to `get_person_companies` and `get_person_roles`.

Input parameters:

- `birth_year`: Filter on birth year (helps disambiguate common names).
- `kommune_hint`: Optional kommune name to help disambiguate matches.
- `limit` (integer)
- `q` (string, required): Name to search (min 2 characters).

Output parameters:

- `query` (string)
- `role_persons` (array)
- `role_persons_count` (integer)
- `shareholders` (array)
- `shareholders_count` (integer)

### `firmaradar_get_person` (~242 tokens)

Get Person Profile

Aggregated person profile: name, birth year, active roles, shareholdings and any AML/PEP risk hits. Also returns `konkurs_eksponering` — leadership roles the person held in companies that later went bankrupt (tenure-weighted, from the dated role history). That match is name-based (no national ID), so it is a REVIEW FLAG to verify, not a verdict. Note: this profile lookup does NOT run a PEP/sanctions screening — an empty `aml_pep_hits` is not a clean bill; use `firmaradar_check_aml_pep` for an actual screening. Strict PII-sensitive — requires search_full_enabled tier and F10.11 purpose confirmation. Minors are blocked except for super-admin accounts.

Input parameters:

- `person_id` (string, required): Person ID — either `person-YYYY-[24 hex]` (from `search_persons` shareholders) or `role-[24 hex]` (from `search_persons` role_persons).
- `purpose`: Purpose-of-processing string for the F10.11 audit trail. Required when calling against accounts with purpose-confirmation.

Output parameters:

- `active_roles` (array)
- `aml_pep_hits` (array)
- `aml_pep_note`
- `birth_year`
- `konkurs_eksponering` (object)
- `navn` (string)
- `person_id` (string)
- `shareholdings` (array)
- `summary`

### `firmaradar_get_person_roles` (~106 tokens)

Get Person Roles

List all company roles (styreleder, daglig leder, etc.) held by a person, current and historic. Use when the user asks 'what roles does Person A hold?' Pass the role_person_id returned by `search_persons`.

Input parameters:

- `include_historic` (boolean)
- `role_person_id` (string, required): Stable role-person ID, format `role-[24 hex chars]`. Obtain from `search_persons` role_persons[] results.

Output parameters:

- `navn` (string)
- `role_person_id` (string)
- `roles` (array)
- `total_roles` (integer)

### `firmaradar_get_person_companies` (~101 tokens)

Get Person's Companies

List all Norwegian companies where the given person holds shares. Use when the user asks 'what does Person A own?' Pass the owner_person_key returned by `search_persons`.

Input parameters:

- `include_historic` (boolean): Reserved for future support; currently only current holdings are returned.
- `person_key` (string, required): Shareholder key, format `person-YYYY-[24 hex]`. Obtain from `search_persons` shareholders[] results.

Output parameters:

- `navn` (string)
- `person_key` (string)
- `shareholdings` (array)
- `total_companies` (integer)

### `firmaradar_get_company_signals` (~134 tokens)

Get Company Risk Signals

Aggregated risk and growth signals for one company: bankruptcy/distress score, capital-loss flags, M&A interim-balance signals, KYC announcement anomalies, NAV hiring/growth signal, and merger/demerger (fusjon/fisjon) relations plus authoritative voluntary-org (Frivillighetsregister) status. Use as the second step after `get_company` to evaluate whether a company needs deeper due diligence.

Input parameters:

- `orgnr` (string, required): 9-digit orgnr.
- `since`: ISO 8601 date — only signals on/after this date. Defaults to 90 days back.

Output parameters:

- `distress_category`
- `distress_reasons` (array)
- `distress_score`
- `frivillighet`: Authoritative Frivillighetsregister (voluntary-org) membership: registered, registreringsdato, kategorier. Omitted when the source is off.
- `fusjon`: Merger/demerger relations: inbound (companies merged into this orgnr) + outbound (companies this orgnr was merged into), with dates.
- `generated_at`
- `hiring`: NAV Arbeidsplassen hiring/growth signal: active_postings, positions_active, postings_30d/90d, burst_score, is_hiring_burst.
- `interim_balance_signal`
- `kyc_signals` (array)
- `orgnr` (string)
- `recent_role_changes_count` (integer)
- `summary`

### `firmaradar_check_aml_pep` (~305 tokens)

AML / PEP Screening

Screen ONE natural PERSON's full name against sanctions (OFAC, EU, UN) and PEP lists. IMPORTANT — this is a PERSON tool only. Do NOT pass a company name, an organisation number (orgnr), or any non-person string here. For company-level AML risk use `firmaradar_get_aml_score` (by orgnr); to screen a company's owners/officers, first resolve the people via `firmaradar_get_company_roles` / `firmaradar_get_company_ownership`, then screen each PERSON name with this tool. Compliance-critical: PII-sensitive, requires a signed DPA and a legitimate purpose per call (free-text `purpose` parameter). Audit-logged for 60 months. Rate-limited to 50 calls / 30 min per API-key. Returns structured hits with category, sources, and match-ratio (default min 0.85).

Input parameters:

- `birth_year`
- `kategori` (string)
- `min_match_ratio` (number)
- `name` (string, required): Full name of ONE natural PERSON to screen (e.g. 'Ola Nordmann'). NOT a company name or orgnr — for company AML use firmaradar_get_aml_score instead.
- `purpose` (string, required): Legitimate purpose for this AML/PEP screening (free text, e.g. 'KYC verification for new customer acme-as'). Logged in compliance audit for 60 months.

Output parameters:

- `hit_count` (integer)
- `hits` (array)
- `note`
- `query_birth_year`
- `query_name` (string)
- `query_too_short` (boolean)

### `firmaradar_check_konkurs_eksponering` (~178 tokens)

Bankruptcy Exposure Screening (by Name)

Screen a person by NAME for bankruptcy exposure ('konkursgjenganger'): leadership roles (chair / managing director) held in companies that later went bankrupt, tenure-weighted, from the dated role history. Use this for HISTORICAL leaders who are no longer in any role index and so cannot be reached via search_persons/get_person. The match is name-based (no national ID), so a hit is a REVIEW FLAG to verify (birth year / address), not a verdict. PII-sensitive — requires the search_full_enabled tier.

Input parameters:

- `navn` (string, required): Full name to screen (min 2 characters), e.g. 'Karl Petter Ulriksen'.
- `purpose`: Purpose-of-processing string for the F10.11 audit trail. Required when calling against accounts with purpose-confirmation.

Output parameters:

- `antall_konkursforetak` (integer)
- `foretak` (array)
- `navn` (string)
- `note`

### `firmaradar_get_recent_changes` (~155 tokens)

Get Recent Changes

List changes (kunngjøringer for companies; role + ownership movements for persons) in the last N days. Use when monitoring a target entity for triggers ('has anything changed for X AS in the last month?'). Pair with `subscribe_company` for push notifications.

Input parameters:

- `category`: Optional kunngjøring (announcement) category filter. Values are Norwegian: konkurs (bankruptcy), fusjon (merger), eierbytte (change of ownership), ...
- `days` (integer)
- `entity_type` (string, required): 'company' = orgnr; 'person' = person_id.
- `id` (string, required): Orgnr (9 digits) or person_id depending on entity_type.

Output parameters:

- `count` (integer)
- `entity_type` (string)
- `id` (string)
- `items` (array)
- `since` (string)
- `until` (string)

### `firmaradar_list_companies_in_nace` (~471 tokens)

List Companies by Industry (NACE)

List Norwegian companies in a specific NACE industry code (or code prefix), optionally filtered by status, kommune and size. Useful for sector analysis ('all active restaurants in Oslo with > 5 employees').

\**NACE format warning:** Use the EU NACE Rev. 2 format with a trailing zero (e.g. `62.100`, `62.200`, `58.290`). **The Norwegian SN2007 format (`62.01`, `62.02`) returns 0 hits** — we do not store SN2007. If you are unsure about a code, call `firmaradar_list_nace_codes` first. Backed by the official Norwegian register (BRREG) and refreshed daily. Use `stiftet_etter` for newly-founded-company queries.

Input parameters:

- `code` (string, required): NACE code or prefix. Norwegian BRREG uses 5-digit SN2007 codes internally (e.g. '56.110' for restaurants, '47.111' for grocery stores). Any prefix works: '56' matches all serving (2-digit), '56.1' ma…
- `cursor`
- `kommune`: Norwegian kommunenummer — EXACTLY 4 digits, zero-padded. Examples: '0301' = Oslo, '4601' = Bergen, '5001' = Trondheim, '1103' = Stavanger. Kommune-NAMES are NOT accepted — translate the name to kommu…
- `limit` (integer)
- `max_ansatte`
- `min_ansatte`
- `status`
- `stiftet_etter`: ISO 8601 date (YYYY-MM-DD) — only companies founded on/after this date. Use for 'newly founded companies in this industry' queries (industry monitoring).
- `stiftet_for`: ISO 8601 date (YYYY-MM-DD) — only companies founded on/before this date.

Output parameters:

- `catalog`
- `items` (array)
- `nace_code` (string)
- `next_cursor`
- `total_count`

### `firmaradar_find_related_companies` (~157 tokens)

Find Related Companies

Find companies related to the given orgnr via shared persons (board members/shareholders), shared registered address, or shared ultimate owners. Use for cluster analysis, hidden-relation detection in DD, or fraud-pattern research.

Input parameters:

- `limit` (integer)
- `min_overlap` (integer): When via=person/owner: minimum number of shared entities to qualify.
- `orgnr` (string, required): 9-digit orgnr — the company to find relations for.
- `via` (string, required): 'person' = shared board members/shareholders. 'address' = same forretningsadresse. 'owner' = shares significant owners (>=10%) via the shareholder-book ownership graph (heavier — owner-graph traversa…

Output parameters:

- `orgnr` (string)
- `related` (array)
- `total_count` (integer)
- `via` (string)

### `firmaradar_find_shared_connections` (~151 tokens)

Find Shared Connections

Analyse hidden connections across 2–10 Norwegian companies at once: shared board members/signatories, shared registered address, shared owners or ultimate parent, circular ownership, shared auditor, and companies founded close together in time — returned with weighted risk indicators, an overall risk level (lav/middels/hoy) and a node/edge graph. Use for due-diligence cluster analysis, shell-company / straw-man detection and fraud-pattern research. Requires the customer's koblingsanalyse extension; the company count is capped by their tier. Look up orgnrs via search_companies first.

Input parameters:

- `orgnrs` (array, required): 2–10 Norwegian organisation numbers (9 digits each) to analyse together.

Output parameters:

- `felles_adresser` (array)
- `felles_eiere` (array)
- `felles_morselskap` (array)
- `felles_personer` (array)
- `felles_revisor_selskap` (array)
- `graf` (object): {noder, kanter} for graph rendering.
- `meta` (object)
- `risiko_indikatorer` (array)
- `risiko_niva` (string)
- `risiko_score` (number)
- `selskaper` (array): Companies analysed ({orgnr, navn}).
- `sirkulaer_eierskap` (array)
- `stiftet_tett` (array)
- `summary`

### `firmaradar_compare_companies` (~206 tokens)

Compare Companies

Compare key financial metrics of up to 5 Norwegian companies side-by-side across the last N years (default 5). Use for competitor analysis, benchmark research or 'which of these three companies is the strongest?' Amounts are in each company's reporting currency (see the `currencies` field; NOK for most Norwegian companies) — check it before comparing absolute amounts. `antall_ansatte` is a CURRENT-value register attribute with no per-year history: read it from the top-level `antall_ansatte` field ({orgnr: headcount}); its rows in `comparison` are always null.

Input parameters:

- `metrics`: Optional subset of metrics: omsetning, driftsresultat, aarsresultat, sum_egenkapital, sum_gjeld, antall_ansatte. Omit for the standard set.
- `orgnrs` (array, required): 1-5 orgnr to compare side-by-side.
- `years` (integer)

Output parameters:

- `antall_ansatte`: {<orgnr>: <current headcount|null>}. Present only when `antall_ansatte` is in the requested metric set. CURRENT value from Enhetsregisteret (the register attribute has no per-year history), mirroring…
- `comparison` (object): {<metric>: {<orgnr>: [<value_per_year>, ...]}}. For `antall_ansatte` the per-year lists are always null — headcount does not exist per fiscal year; use the top-level `antall_ansatte` field instead.
- `computed_at` (string)
- `currencies`: {<orgnr>: [<ISO 4217 currency per year, aligned with `years`>]}. None for years without data. Amounts in `comparison` are in the company's reporting currency for that year (NOK for most Norwegian com…
- `orgnrs` (array)
- `summary`
- `years` (array)

### `firmaradar_search_announcements` (~285 tokens)

Search Announcements

Search BRREG kunngjøringer across all Norwegian companies — filter by type (konkurs, fusjon, ...), date range, NACE-code, or location. Use for trend analysis ('all konkurser in restaurant sector last quarter') or radar-style monitoring.

Input parameters:

- `cursor`
- `from_date`: ISO date — inclusive lower bound.
- `fylke`: Norwegian fylkenummer — EXACTLY 2 digits, zero-padded (e.g. '03' = Oslo). NAMES not accepted.
- `kommune`: Norwegian kommunenummer — EXACTLY 4 digits, zero-padded (e.g. '0301' = Oslo). NAMES not accepted.
- `limit` (integer)
- `nace`: NACE code or prefix. Norwegian BRREG uses 5-digit SN2007 codes internally (e.g. '56.110'). Any prefix works (2-5 digits). If a 4-digit code yields no results, append '0' for the 5-digit form.
- `q`: Free-text on company name.
- `to_date`: ISO date — inclusive upper bound.
- `type`: Kunngjøring (announcement) type/category. Values are Norwegian: konkurs (bankruptcy), fusjon (merger), fisjon (demerger), eierbytte (change of ownership), ...

Output parameters:

- `filter` (object)
- `items` (array)
- `next_cursor`
- `total_count`

### `firmaradar_get_risk_score` (~264 tokens)

Get Company Risk Score

Structured risk score (0-100) with named level (lav/moderat/høy/kritisk) and component breakdown for a Norwegian COMPANY's financial health. Combines distress classification, BRREG status, age, capital signals and other factors into one comparable score. Returns blocked_enk error for sole-proprietorships (ENK).

SCOPE: Company financial health only. NOT a personal credit check on owners or officers. For full KYC pre-screening, combine with firmaradar_get_aml_score (PEP/sanctions on key persons).

\**Requires a one-time pre-screening-disclaimer confirmation.** If this returns HTTP 403 with error_code `kundebekreftelse_required` or `disclaimer_required`, inform the user that confirmation is required. Call `firmaradar_confirm_risk_score_disclaimer` only after the user has explicitly instructed you to confirm the disclaimer. The confirmation is per OAuth user, not per call, and is permanent and audit-logged. Alternatively the user can confirm manually at https://firmaradar.no/minbedrift/utvidelser/risikoscoring — both paths write to the same audit table.

Input parameters:

- `orgnr` (string, required): 9-digit norwegian organization number.

Output parameters:

- `components` (array)
- `data_gaps` (array)
- `level` (string): Norwegian risk level — one of: lav (low), moderat (moderate), høy (high), kritisk (critical).
- `orgnr` (string)
- `raw`
- `score` (number): Risk score on the 0-100 scale (higher = riskier).
- `sources` (array)

### `firmaradar_check_foretak_i_vanskeligheter` (~107 tokens)

Check Company in Difficulty (FIV)

Assess whether a Norwegian company qualifies as *foretak i vanskeligheter* (a 'company in difficulty') under NUES criteria a-e. Returns which criteria triggered, the overall distress status, and a data-completeness confidence score — a deterministic distress classification, not a raw registry flag. Use for EU state-aid eligibility, credit assessment, and supplier-risk screening.

Input parameters:

- `orgnr` (string, required): 9-digit norwegian organization number.

Output parameters:

- `as_of`
- `confidence` (number): Data-completeness confidence in [0.0, 1.0].
- `orgnr` (string)
- `raw`
- `rules_fired` (array)
- `score` (number): Confidence-weighted distress score in [0.0, 1.0].
- `status` (string): One of: not_distressed, insufficient_data, not_distressed_partial, exempt_young_company, distressed.

### `firmaradar_get_aml_score` (~257 tokens)

Get Company AML Risk Score

Structured COMPANY AML risk score (0-100) with named level (low/medium/high), by orgnr. This is the primary tool for 'what is the AML risk / AML score of company X'. Call it ONCE per company — it ALREADY screens the company's key persons and beneficial owners against PEP and sanctions lists internally and folds that into the score. You normally do NOT need to call `check_aml_pep` per owner/officer afterwards; do that only for ad-hoc screening of one specific named individual you need extra detail on. Complements `check_aml_pep` (binary match data for a single PERSON name). Generates an auditable AML report on the backend (rapport_id stored for 60 months per Hvitvaskingsloven §35); factor-level detail lives in the stored report links. The report is generated asynchronously — for very large/complex ownership structures the result can come back with level='pending' and a rapport_id; poll `get_aml_report` with that id until status is 'done'.

Input parameters:

- `orgnr` (string, required): 9-digit norwegian organization number.
- `purpose` (string): Purpose of the screening — recorded for audit trail.

Output parameters:

- `factors` (array): Always empty for the async report flow — factor detail lives in the stored report (json_url/pdf_url in `raw` when done).
- `level` (string): One of: low, medium, high — or 'pending' when the report is still generating (poll `get_aml_report` with rapport_id).
- `orgnr` (string)
- `rapport_id`: Persistent report-id for compliance audit (retrievable later).
- `raw`
- `score` (integer): AML risk score 0-100 (higher = riskier).

### `firmaradar_get_konsernstotte` (~165 tokens)

Get Group Support (Konsernstøtte)

Tree-structured overview of public grants (Innovasjon Norge, SkatteFUNN, BRREG støtteregister, Prosjektbanken) for a Norwegian company and its konsern. Returns ``selskap_stotte`` per node (støtte to that specific company) and ``konsern_aggregat`` (sum across the full hierarchy). NOTE: SkatteFUNN never reports amounts — use ``antall_prosjekter`` as the primary activity KPI since ``total_belop_nok`` excludes SkatteFUNN by source design. Use for due-diligence, state-aid compliance checks, or competitive intelligence.

Input parameters:

- `orgnr` (string, required): 9-digit norwegian organization number (typically konsern-toppen).

Output parameters:

- `antall_underselskaper` (integer)
- `barn` (array)
- `konsern_aggregat`
- `navn` (string)
- `orgnr` (string)
- `raw`
- `selskap_stotte`

### `firmaradar_start_aml_report` (~161 tokens)

Start AML Report (Async)

Start generating an AML risk report ASYNCHRONOUSLY for a Norwegian company. Returns immediately with a report_id and status 'pending' — the report is built in the background. Poll `get_aml_report` with the report_id until status is 'done' (then read score/level/factors) or 'failed'. Use this instead of `get_aml_score` for large/complex ownership structures that may otherwise time out, or to start many screenings in parallel. Generates an auditable report stored for 60 months per Hvitvaskingsloven §35.

Input parameters:

- `orgnr` (string, required): 9-digit norwegian organization number.
- `purpose` (string): Purpose of the screening — recorded for audit trail.

Output parameters:

- `orgnr` (string)
- `raw`
- `report_id` (string): Job/report id — poll with `get_aml_report` until status is 'done' or 'failed'.
- `status` (string): One of: pending, running, done, failed (starts at 'pending').

### `firmaradar_get_aml_report` (~118 tokens)

Get AML Report Status / Result

Poll the status and result of an asynchronous AML report started with `start_aml_report`. Pass the report_id; returns status (pending/running/done/failed). When status is 'done' it includes the AML risk score (0-100), level (low/medium/high) and links to the stored report; when 'failed' it includes the error reason. Poll periodically until the status is terminal (done/failed).

Input parameters:

- `report_id` (string, required): The report_id returned by `start_aml_report`.

Output parameters:

- `error`: Failure reason (only when status='failed').
- `level`: low/medium/high (only when status='done').
- `orgnr`
- `raw`
- `report_id` (string)
- `score`: AML risk score 0-100 (only when status='done').
- `status` (string): One of: pending, running, done, failed.

### `firmaradar_confirm_risk_score_disclaimer` (~190 tokens)

Confirm Risk-Score Disclaimer

Confirm the pre-screening disclaimer required by firmaradar_get_risk_score. This is a one-time confirmation per Firmaradar user (not per agent and not per call); it is permanent and audit-logged. Requires an OAuth token tied to a user whose plan has risk scoring enabled. Idempotent — if the user has already confirmed, the existing confirmation is returned (same audit_id). The confirmation declares that risk scoring is used only for legitimate purposes (KYC, credit pre-screening, due diligence, supplier screening) and NOT as a substitute for a formal credit assessment or an automated adverse decision. The disclaimer text and version are embedded in this tool and sent to the backend as an explicit string match, so an agent cannot confirm a version it has not seen. Call this tool only when the user has explicitly instructed you to confirm the disclaimer on their behalf.

Output parameters:

- `audit_id`: ID of the audit row in ``extension_kundebekreftelse_event``.
- `confirmed` (boolean): True if the disclaimer is confirmed for the user.
- `confirmed_at`: ISO timestamp of the confirmation.
- `confirmed_by_user_id` (integer): ID of the Firmaradar user the confirmation is registered against.
- `idempotent` (boolean): True if the confirmation already existed (no new row written).
- `raw`
- `version` (string): Disclaimer version that was confirmed (e.g. 'v1').

### `firmaradar_check_fiv_bulk` (~196 tokens)

Bulk Check Companies in Difficulty (FIV)

Bulk-endpoint for portfolio-screening of 'foretak i vanskeligheter' (financially distressed companies per NUES rules a-e). Max 50 orgnr per call. Each orgnr counts as one unit against your quota. Compliance-gates (ENK blocking, invalid orgnr) are returned per orgnr in the result list instead of failing the whole call — check each result's `error` field. Use for screening supplier lists, credit-portfolios, or EU state-aid eligibility on multiple companies at once.

Input parameters:

- `orgnrs` (array, required): List of 1-50 nine-digit Norwegian organization numbers. Each orgnr counts as one unit against your quota.
- `skip_freshness` (boolean): If True, accept FIV-data even if the underlying regnskap- or BRREG-snapshot is older than the normal freshness window. Use sparingly — recommended only for retrospective screening.

Output parameters:

- `_meta`: Aggregate count status for the whole bulk call.
- `results` (array)
- `summary`: Human-readable markdown table of the per-company FIV verdicts.

### `firmaradar_get_risk_score_bulk` (~162 tokens)

Bulk Company Risk Scores

Bulk-endpoint for portfolio-screening of risikoscore (0-100 with named level lav/moderat/høy/kritisk + component breakdown) on up to 50 Norwegian companies in one call. Each orgnr counts as one unit against your quota. Compliance-gates (ENK/NUF blocking, customer-confirmation required, extension disabled) are returned per orgnr in the result list instead of failing the whole call — check each result's `error` field. Use for credit-decision screening, supplier-portfolio review, and KYC risk triage at scale.

Input parameters:

- `orgnrs` (array, required): List of 1-50 nine-digit Norwegian organization numbers. Each orgnr counts as one unit against your quota.

Output parameters:

- `_meta`: Aggregate count status for the whole bulk call.
- `results` (array)
- `summary`: Human-readable markdown table of the per-company scores.

### `firmaradar_convert_nok` (~148 tokens)

Convert NOK to Foreign Currency

Convert a NOK amount to a foreign currency (EUR, USD, GBP, SEK, DKK) using daily exchange rates from Norges Bank (the Norwegian central bank). Firmaradar's financial figures are reported in NOK; use this to express them in another currency for international workflows. The NOK original is always preserved in the response. Omit amount_nok to fetch just the current rate.

Input parameters:

- `amount_nok`: Amount in NOK to convert. Omit to fetch only the current rate (the response 'amount' will be null).
- `to_currency` (string, required): Target ISO 4217 currency code. Supported: EUR, USD, GBP, SEK, DKK.

Output parameters:

- `amount`: Converted amount in the target currency.
- `amount_nok`: The original NOK amount (preserved, unchanged).
- `currency` (string): Target currency (ISO 4217).
- `rate` (number): Multiplier applied: amount = amount_nok * rate (target units per NOK).
- `rate_date`: ISO date of the Norges Bank observation.
- `source` (string): Rate source.

### `firmaradar_list_nace_codes` (~308 tokens)

Search NACE Industry Codes

Search and browse the Norwegian NACE industry-code catalogue. Use this to resolve the exact code before calling subscribe_nace (industry monitoring) or list_companies_in_nace. Free-text search with `q` ('restaurant', 'programvare'), drill the hierarchy with `parent` (omit for the top-level sections A–U), or convert an EU NACE Rev. 2 code to the Norwegian 5-digit sub-codes with `eu`. Each hit includes the Norwegian and (when available) English label plus company counts. Backed by the official catalogue (SSB/BRREG), refreshed daily.

Input parameters:

- `eu`: An EU NACE Rev. 2 code (e.g. '47.11', '62.01') — returns the Norwegian 5-digit sub-codes the register actually uses. Use this when you have an EU/international code and need the Norwegian equivalent…
- `limit` (integer)
- `parent`: Return the direct children of this code to drill down the hierarchy: a section letter ('G'), a 2-digit group ('47'), a 3-digit ('47.1') or 4-digit ('47.11') code. Omit to list the top-level sections…
- `q`: Free-text search on the Norwegian industry label (e.g. 'restaurant', 'programvare', 'bygg'). Returns the best-matching NACE codes ranked by relevance.

Output parameters:

- `count` (integer)
- `items` (array)

### `firmaradar_subscribe_nace` (~508 tokens)

Subscribe to Industry Monitoring (NACE)

Subscribe to industry (NACE) monitoring: when any Norwegian company in the chosen industry triggers a monitored event (new announcement, status change such as bankruptcy/dissolution, or ownership update), Firmaradar delivers a webhook to your URL. Use list_nace_codes first to resolve the exact code. A subscription on a parent code matches all child codes. Restrict `events` (e.g. ['status_changed']) and use geographic/size filters to cut volume in large industries, or pick a digest `aggregation_mode`. Idempotent — upserted on (user, nace_code), so re-subscribing the same code updates it. Requires a user whose plan has Firmaovervakning enabled. Call only when the user has asked to set up industry monitoring.

Input parameters:

- `aggregation_mode` (string): Delivery cadence. 'real_time' (default) posts each event immediately. 'hourly_digest' / 'daily_digest' batch events to reduce noise in high-volume industries.
- `aktivert` (boolean): Whether the subscription is active immediately (default true).
- `bearer_token`: Optional bearer token Firmaradar sends as `Authorization: Bearer <token>` when calling your webhook URL, so your endpoint can authenticate the delivery. Stored encrypted.
- `events` (array): Which event types to deliver. Omit for all of them. Restrict to e.g. ['status_changed'] to receive only bankruptcy/dissolution signals and cut volume dramatically in large industries.
- `fylke_filter`: Optional geographic filter: only companies in these fylker (county numbers).
- `kommune_filter`: Optional geographic filter: only companies in these kommuner (4-digit kommunenummer).
- `landsdel_filter`: Optional geographic filter: only companies in these landsdeler.
- `min_ansatte`: Optional size filter: only companies with at least this many employees.
- `min_omsetning_nok`: Optional size filter: only companies with at least this much revenue (NOK).
- `nace_code` (string, required): The NACE code to monitor. Accepts a section letter ('G'), a group ('47'), or a more specific code ('47.110'). Resolve the exact code first with list_nace_codes if unsure. A subscription on a parent c…
- `url`: HTTPS webhook URL that receives a POST for each matched event. Omit only if you intend to add it later via the portal.

Output parameters:

- `aggregation_mode`
- `aggregation_mode_en`
- `aktivert` (boolean)
- `created_at`
- `events` (array)
- `id`: ID of the created/updated subscription.
- `nace_code`
- `raw`
- `updated_at`
- `url`

### `firmaradar_list_my_subscriptions` (~95 tokens)

List My Industry Subscriptions

List the NACE industry-monitoring subscriptions of the authenticated Firmaradar user (created via subscribe_nace or the portal). Returns each subscription's id, NACE code, webhook URL, event filters, aggregation mode, geographic/size filters and active state. Use the returned `id` with delete_subscription to remove one. Encrypted bearer tokens are never returned (only `has_bearer_token`).

Output parameters:

- `count` (integer)
- `items` (array)

### `firmaradar_delete_subscription` (~121 tokens)

Delete Industry Subscription

Delete one NACE industry-monitoring subscription by its id (from list_my_subscriptions); Firmaradar then stops delivering webhooks for that industry. The subscription must belong to the authenticated user. Idempotent — deleting an id that is already gone returns already_absent=true rather than an error. Reversible only by re-subscribing. Call only when the user has asked to stop monitoring an industry.

Input parameters:

- `subscription_id` (integer, required): The id of the subscription to delete (from list_my_subscriptions). Must belong to the authenticated user.

Output parameters:

- `already_absent` (boolean): True if no subscription with that id existed for the user (nothing to delete).
- `deleted` (boolean): True if the subscription was removed.
- `id` (integer): The id that was targeted.
- `raw`

### `firmaradar_add_company_monitoring` (~266 tokens)

Add Company to Monitoring

Add a Norwegian company (by 9-digit orgnr) to the user's company-monitoring list. The user is then alerted when announcements, status changes (bankruptcy/dissolution), ownership changes or new public grants are registered for that company. New targets monitor ALL announcement categories by default; keep ip_alerts=true (default) to also turn on IP-change alerts when the account has the IP-monitoring add-on, or set ip_alerts=false to skip them. 409 if already monitored (idempotent — no duplicate). 403 (monitoring_cap_reached) if the account's company has hit its per-company monitoring cap — tell the user to contact Firmaradar to expand it. Requires a user whose plan has Firmaovervakning enabled. Call only when the user has asked to monitor a specific company.

Input parameters:

- `ip_alerts` (boolean): Also enable IP-change alerts for this company. Default true = monitor everything. Requires the IP-monitoring add-on (ip_overvakning) on the account; without it the company is still monitored for all…
- `orgnr` (string, required): Norwegian organisation number (9 digits) to add to monitoring.

Output parameters:

- `ip_alerts_enabled` (boolean): Whether IP-change alerts were turned on (false without the add-on).
- `ok` (boolean): True when the company was added.
- `orgnr`
- `raw`

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/no-firmaradar-mcp/mcp#diagnostics

## Score history

- 2026-08-03: 74
- 2026-08-02: 73
- 2026-08-01: 73
- 2026-07-31: 72
- 2026-07-30: 68
- 2026-07-29: 68
- 2026-07-28: 68
- 2026-07-27: 67
- 2026-07-26: 67

## Links

- Remote endpoint: https://mcp.firmaradar.no/mcp
- Repository: https://github.com/Tiwas/firmaradar-mcp
- Changelog RSS feed: https://verifymcp.io/servers/no-firmaradar-mcp/mcp/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/no-firmaradar-mcp/mcp/changelog.json
- HTML version of this page: https://verifymcp.io/servers/no-firmaradar-mcp/mcp
