Skip to main content
Glama

brreg-mcp

MCP server for the Norwegian Central Coordinating Register for Legal Entities (Brønnøysundregistrene / Enhetsregisteret). Gives Claude Code and other MCP-compatible clients direct access to Norwegian company data — lookup, search, roles, subunits, and live updates.

No API key needed. Data is served by the free, public Brønnøysund Open Data API.

Why

Norwegian devs, accountants, and analysts constantly need to look up orgnumbers, find board members, or track subsidiary changes. Doing it through the web UI is slow; doing it with curl loses context. With this MCP, you just ask Claude.

Related MCP server: CompanyIQ MCP Server

Install

Claude Code

Add to your MCP config (~/.claude/settings.json or per-project .claude/settings.json):

{
  "mcpServers": {
    "brreg": {
      "command": "npx",
      "args": ["-y", "brreg-mcp"]
    }
  }
}

Restart Claude Code. Verify with /mcp — you should see brreg listed with 5 tools.

Claude Desktop

claude_desktop_config.json:

{
  "mcpServers": {
    "brreg": {
      "command": "npx",
      "args": ["-y", "brreg-mcp"]
    }
  }
}

Cursor / Windsurf / Zed / any MCP client

Same command: npx, args: ["-y", "brreg-mcp"] configuration.

Local development

git clone https://github.com/hellosverre/brreg-mcp
cd brreg-mcp
npm install
npm run build

Then point your MCP client at node /absolute/path/to/brreg-mcp/dist/index.js.

Tools

Tool

What it does

lookup_company

Full details for one company by its 9-digit orgnr — name, address, NACE codes, employees, VAT status, bankruptcy, foundation date.

search_companies

Search by name and optional filters (municipality, org form, industry code, VAT-registered, bankruptcy status). Paginated.

get_company_roles

All registered roles (board, CEO, chair, auditor, sole proprietor) for a company.

search_subunits

Find subunits (branch offices, production sites) — scope to a parent company or by municipality/industry.

get_recent_updates

Feed of entity changes for monitoring new registrations, bankruptcies, status shifts.

Example prompts

"Look up orgnr 984661177 and show me the board."

"Find all VAT-registered software consultancies (NACE 62.010) in Oslo."

"List every subunit of Vygruppen AS."

"What Norwegian companies were just registered in the last hour?"

Data source

All data comes from data.brreg.no. Per Brønnøysund's open data terms, the data is free to use. Some endpoints (roles with personal identification numbers) require Maskinporten authentication and are not exposed by this server.

Development

npm install          # install deps
npm run dev          # run server in watch mode via tsx
npm run smoke        # hit the real brreg API to verify connectivity
npm run build        # compile to dist/
npx tsx scripts/mcp-probe.ts  # end-to-end stdio test

License

MIT

Disclaimer

Not affiliated with Brønnøysundregistrene or the Norwegian government. This is an independent open-source project using the public open-data API.

Available Tools

5 tools
get_company_rolesGet roles (board, directors, auditor) of a companyA

Retrieves all registered roles — board members (styre), CEO (daglig leder), chair (styreleder), auditor (revisor), sole proprietor (innehaver), etc. — for a Norwegian company. Returns structured role groups with person or entity role-holders. Does NOT include personal identification numbers (that requires Maskinporten auth).

ParametersJSON Schema
NameRequiredDescriptionDefault
orgnrYes9-digit Norwegian organization number

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full behavioral burden. It discloses a key exclusion (no personal identification numbers, which require Maskinporten auth) and describes the return format ('structured role groups with person or entity role-holders'). This goes beyond a simple retrieval statement, though it doesn't cover error handling or pagination.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the action and scope, and uses examples efficiently. No unnecessary jargon or repetition; every sentence contributes useful information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (one parameter, no output schema, no annotations), the description covers the main functional purpose, a significant exclusion, and the nature of the return value. It could mention error conditions or broader authentication requirements, but it is largely complete for a straightforward retrieval tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema fully documents the only parameter (orgnr as a 9-digit Norwegian organization number) with 100% coverage. The description adds minimal extra meaning beyond noting the Norwegian context, which is already implied by the schema. Baseline for high schema coverage is 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Retrieves') and identifies the exact resource ('all registered roles... for a Norwegian company'). It lists example roles, which clearly distinguishes it from sibling tools like lookup_company or search_companies that focus on other aspects of company data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when a company's roles are needed and clarifies that personal identification numbers require separate auth, but it does not explicitly contrast with sibling tools or state when to prefer this tool over alternatives. There is no explicit 'when-to-use' or 'when-not-to-use' guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_recent_updatesGet recently updated companiesA

Fetches a feed of entities (companies) that were recently updated in the Norwegian business registry. Useful for monitoring changes to specific companies or watching for new registrations / status changes. Each update references the changed entity by orgnr along with the change type and timestamp.

ParametersJSON Schema
NameRequiredDescriptionDefault
datoNoISO-8601 timestamp — return updates from this point onward (e.g. '2026-04-20T00:00:00Z')
sizeNo
oppdateringsidNoContinue from a specific update id (pagination cursor)

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden. It communicates that the tool returns a feed and describes each update's content (orgnr, change type, timestamp), but it does not disclose ordering, pagination behavior, or any potential limitations. This is adequate but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the main action and resource, and each sentence provides meaningful context (use cases and output shape). No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple feed tool with three optional parameters and no output schema, the description covers the purpose, use cases, and the core return elements. It could mention pagination or result ordering, but the essentials are present and proportionate to the tool's complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67% with descriptions for 'dato' and 'oppdateringsid', and 'size' is self-explanatory. The description adds no parameter-specific detail beyond what the schema provides, so it neither strongly compensates nor falls short.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Fetches a feed') and the resource ('entities (companies) that were recently updated in the Norwegian business registry'). It also distinguishes itself from sibling tools like lookup_company and search_companies by emphasizing the update-feed nature and the inclusion of change type and timestamp.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit use cases: 'monitoring changes to specific companies' and 'watching for new registrations / status changes.' It does not explicitly mention alternatives or when not to use, but the context is clear enough for an agent to select this tool for update feeds versus lookup/search tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lookup_companyLook up Norwegian company by organization numberA

Retrieves full details of a Norwegian business entity from the Brønnøysund Register Centre (Enhetsregisteret) by its 9-digit organization number. Returns name, address, industry (NACE) codes, organization form, employee count, VAT registration status, bankruptcy status, foundation date, and more. Use this when the user provides or asks about a specific Norwegian orgnr.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgnrYes9-digit Norwegian organization number (organisasjonsnummer), e.g. '923609016'

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It discloses the operation as a read ('Retrieves') and lists specific return fields (name, address, NACE codes, etc.), which is useful context. It does not mention error handling for invalid org numbers, but the scope is clear.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences: the first clearly states the function and output, the second provides usage guidance. No redundant wording, well-structured and front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With a single parameter and no output schema, the description provides a comprehensive list of return fields, the data source, and when to use it. It lacks explicit handling of invalid or missing org numbers or rate limits, but these are minor for a simple lookup tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, with the schema already describing 'orgnr' as a 9-digit Norwegian organization number with an example. The description adds no new parameter information beyond repeating the 9-digit format. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves full details of a Norwegian business entity by its 9-digit organization number. The verb 'Retrieves' and specific resource (Brønnøysund Register Centre) distinguish it from sibling tools like search_companies (search) and get_company_roles (roles).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says 'Use this when the user provides or asks about a specific Norwegian orgnr.' This gives clear context for when to invoke the tool. It doesn't explicitly mention alternatives, but the sibling tool names imply search for vague queries, and the condition is precise.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_companiesSearch Norwegian companiesA

Searches the Norwegian business registry (Enhetsregisteret) by name and optional filters. Returns a paginated list of matching entities. Use this when the user wants to find a company by name, or filter by municipality, industry code, organization form, or registration status.

ParametersJSON Schema
NameRequiredDescriptionDefault
navnNoCompany name or substring (case-insensitive)
pageNoPage number (0-indexed, default 0)
sizeNoResults per page (1-100, default 20)
konkursNoFilter by bankruptcy status (true = only bankrupt, false = only non-bankrupt)
postnummerNo4-digit postal code filter
naeringskodeNoNACE industry code filter (e.g. '62.010' for computer programming)
kommunenummerNo4-digit municipality number (kommunenummer) to filter by location
organisasjonsformNoFilter by organization form code, e.g. 'AS' (aksjeselskap), 'ENK' (enkeltpersonforetak), 'ASA', 'DA', 'NUF'
registrertIMvaregisteretNoFilter to only VAT-registered companies

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

There are no annotations, so the description carries the full burden. It discloses that results are paginated and that filters include municipality, industry code, organization form, and registration status. However, it does not explicitly state that the operation is read-only, nor does it mention error cases, result ordering, or rate limits. This is adequate but minimal.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description consists of two sentences that are compact and front-loaded. The first sentence states the core function, and the second provides usage guidance. There is no wasted wording.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 9 parameters and no output schema, the description gives sufficient context for selection and invocation. It covers what the tool does and when to use it, but it does not elaborate on the return structure beyond 'paginated list'. The rich schema compensates for most gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description summarizes the filters at a high level but does not add syntax or format details beyond the schema. It meets the minimum viable bar.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function with a specific verb ('Searches'), a resource ('Norwegian business registry'), and scope ('by name and optional filters'). It distinguishes itself from siblings by emphasizing search over lookup and mentioning paginated results.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly provides usage context with 'Use this when the user wants to find a company by name, or filter by...' It does not explicitly name alternative tools or exclusions, but the guidance is clear enough for an agent to select this tool for search scenarios.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_subunitsSearch subunits (branch offices) of Norwegian companiesA

Searches subunits (underenheter — branch offices, departments, production sites) in the Norwegian business registry. Typically used to find all branches of a parent company, or to locate subunits in a specific municipality. A subunit shares the parent's organization but has its own orgnr for reporting purposes.

ParametersJSON Schema
NameRequiredDescriptionDefault
navnNoSubunit name or substring
pageNo
sizeNo
naeringskodeNoNACE industry code
kommunenummerNo4-digit municipality number
overordnetEnhetNo9-digit orgnr of the parent entity to list all its subunits

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the burden of behavioral disclosure. It explains the entity concept ('A subunit shares the parent's organization but has its own orgnr for reporting purposes') and scopes the search to the registry, but does not disclose pagination, return format, authentication, or any side effects. This is adequate for a read-only search tool but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences, each purposeful: the first defines the action, the second gives example use cases, and the third clarifies a domain-specific relationship. No redundant filler, front-loaded with the primary purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a search tool with 6 optional parameters, no output schema, and no annotations, the description provides a solid purpose and use cases but lacks details on result shape, pagination, and any prerequisites. It is sufficient for basic invocation but incomplete for a fully informed agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 67% (4 of 6 parameters described). The description indirectly references filtering by municipality and parent company, aligning with 'kommunenummer' and 'overordnetEnhet', but does not add syntax or format details for these or the pagination parameters. The added domain context slightly improves understanding beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Searches') and identifies the resource ('subunits (underenheter — branch offices, departments, production sites)') in the Norwegian business registry. It clearly distinguishes from sibling tools like search_companies by focusing on subunits and their parent relationship.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear typical usage contexts: 'find all branches of a parent company' or 'locate subunits in a specific municipality'. It does not explicitly mention when not to use the tool or name alternative tools, but the use cases strongly imply differentiation from general company search.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 5 tool updatesv0.1.1
    • First observedget_company_roles
    • First observedget_recent_updates
    • First observedlookup_company
    • First observedsearch_companies
    • First observedsearch_subunits

TDQS

A4.3/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose: lookup by ID, search by name/filters, retrieve roles, search subunits, and get recent updates. The descriptions explicitly differentiate between main entities (enheter) and subunits (underenheter), eliminating any overlap confusion.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern (lookup_company, search_companies, get_company_roles, search_subunits, get_recent_updates) using snake_case. Verb choices are appropriate and parallel, with minor pluralization differences but no stylistic inconsistency.

Tool Count5/5

With 5 tools, the set is well-scoped for a read-only business registry API. Each tool covers a distinct need (lookup, search, roles, subunits, updates) without superfluous additions, fitting comfortably in the ideal 3-15 range.

Completeness5/5

The tool surface comprehensively covers the core operations for the Norwegian business register: retrieving a specific entity, searching for entities, accessing roles, exploring subunits, and monitoring updates. Given the read-only nature of the registry, there are no obvious gaps in lifecycle coverage.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    D
    maintenance
    Enables comprehensive access to the Norwegian Business Registry API for querying company information, board members, subsidiaries, organizational data, and voluntary organizations. Provides real-time access to over 1 million registered Norwegian entities with detailed corporate structure and governance data.
    15
    19
    8
    MIT
  • F
    license
    Not graded
    quality
    Not graded
    maintenance
    Provides comprehensive Norwegian business intelligence through Brønnøysund and Statistics Norway APIs, enabling company search, financial analysis, ownership mapping, market research, and automated financial data extraction.
    -
  • A
    license
    B
    quality
    C
    maintenance
    Enables interaction with the Norwegian Business Registry (Brønnøysundregistrene) API to search and retrieve detailed information about Norwegian companies, subunits, roles, organization forms, municipalities, and NACE industry codes.
    18
    19
    1
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides access to Norway's official business registry for searching companies, looking up organizational details, and identifying company roles and sub-units. It utilizes data from Brønnøysundregistrene to enable detailed queries by industry, municipality, or organization number.
    15
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/hellosverre/brreg-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server