Skip to main content
Glama

Look up a company in a national business register

lookup_company
Read-onlyIdempotent

Look up a company by its national identifier and receive the full official report—legal form, status, address, VAT, board, and accounts—from Norway's Brønnøysundregistrene or UK Companies House.

Instructions

Look up a company by its national identifier and get the full CompanyReport — legal form, status, address, VAT registration where the register publishes it, board and accounts duties, employees, and more.

country="NO" is the norway company lookup for the norwegian business registry: Brønnøysundregistrene / Enhetsregisteret (brreg), by organisasjonsnummer (orgnr, org.nr). country="GB" is the uk company lookup at Companies House, by company number (company registration number, CRN) — eight characters, digits or a two-letter prefix and six digits, e.g. 00445790 or OC303675; short numbers are zero-padded for you, and "UK" is not a country code here, use "GB".

Use it once you have the identifier — from the user, an invoice, a contract, or a search_company hit's id; the identifier is normalised for you, so spaces, dots and a Norwegian VAT suffix ('NO...MVA') are all accepted. Call list_countries if you are unsure a country is supported. Read the returned notes before acting on the result — it carries caveats such as bankruptcy, dissolution, a deleted entity, or an unclassified legal form.

On error, this tool raises with the error text {"error": {"code", "message", "hint"}} (DECISIONS.md D-007). invalid_id means the identifier is malformed — fix it or call search_company with the company name instead of retrying the same string. not_found means the identifier is well-formed but no such entity exists — call search_company. unsupported_country means no module exists for that country yet — call list_countries. upstream_error/upstream_timeout means the national register is unavailable; it has already been retried once here, so wait roughly a minute before trying again yourself.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
idYesThe company's national identifier. Norway (country='NO'): a nine-digit organisasjonsnummer (orgnr), e.g. '923609016'; spaces, dots and a 'NO...MVA' VAT suffix are accepted and normalised. United Kingdom (country='GB'): a Companies House company number (CRN), eight characters, e.g. '00445790' or 'OC303675'; a short number is zero-padded for you.
countryNoISO-3166-1 alpha-2 country code. 'NO' = Norway (Brønnøysundregistrene / Enhetsregisteret), 'GB' = United Kingdom (Companies House). 'UK' is not a country code here and is rejected. Call list_countries for the current set rather than hard-coding one.NO

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
idYesCanonical national identifier, digits/letters only, no spaces or dots.
nameYesCurrent registered name.
emailNoContact email as registered.
notesNoCaveats an agent should surface to the user, plain English, one per item.
phoneNoContact phone as registered.
cachedNoTrue when served from our cache rather than a live fetch.
sectorNoInstitutional sector description.
sourceNoHuman-readable source name, e.g. 'Enhetsregisteret (brreg.no)'.
statusNoNormalised lifecycle status.unknown
countryYesISO-3166-1 alpha-2, upper-case, e.g. 'NO'.
licenseNoLicence of the upstream data, e.g. 'NLOD 2.0'.
purposeNoStatutory purpose / objects clause, joined into one string.
websiteNoWebsite as registered.
activityNoFree-text description of actual activity.
in_groupNoPart of a corporate group.
registryYesRegistry slug, e.g. 'brreg'.
employeesNoRegistered number of employees. None = not reported.
id_schemeNoName of the identifier scheme, e.g. 'organisasjonsnummer'.
is_activeNoConvenience mirror of `status == active`, so agents need no enum table.
parent_idNoIdentifier of the parent/owning entity, if any.
registersNoOther national sub-registers this entity is or is not in, keyed by a lower-case slug, e.g. {'stiftelsesregisteret': false}.
confidenceNoHow sure we are this record is the entity the caller meant (D-005).
fetched_atNoUTC timestamp of the live fetch this record came from.
founded_atNoIncorporation / foundation date.
is_subunitNoTrue when this record is a branch/sub-unit, not a legal entity.
legal_formNoEnglish label, e.g. 'Private limited company'.
source_urlNoDirect URL of the upstream record, for citation.
vat_numberNoVAT identifier if it differs from `id` (Norway: id + 'MVA').
sector_codeNoInstitutional sector code.
id_formattedNoThe identifier as a local would write it, e.g. '923 609 016'.
registered_atNoDate first entered in the central register.
share_capitalNoRegistered share capital.
status_detailNoOne sentence in English explaining the status and the flag it came from.
has_board_dutyNoTrue when this legal form must have a registered board.
industry_codesNoIndustry classifications, primary first.
postal_addressNoPostal address.
previous_namesNoFormer registered names, newest first.
vat_registeredNoRegistered for VAT (Norway: Merverdiavgiftsregisteret).
bankruptcy_dateNoDate bankruptcy was opened.
deregistered_atNoDate the entity was deleted from the register.
legal_form_codeNoNational legal-form code, e.g. 'AS', 'ASA', 'ENK'.
business_addressNoVisiting/registered office.
confidence_basisNoWhy that confidence, e.g. 'exact identifier lookup'.
legal_form_localNoLocal label, e.g. 'Aksjeselskap'.
limited_liabilityNoTrue when owners are not personally liable for debts.
vat_registered_atNoDate of VAT registration.
employees_reportedNoWhether the registry holds an employee figure at all (distinguishes 0 from unknown).
published_deadlinesNoFiling dates the upstream register publishes for this entity itself, carried verbatim. Empty for a register that publishes none — most of them. This is the input `Registry.deadlines(report, today)` needs to prefer the register's own figure over any calculation (DECISIONS.md D-018), and it is what keeps that method the pure function of (report, today) its contract promises.
in_business_registerNoListed in the commercial register (Norway: Foretaksregisteret).
share_capital_currencyNoISO-4217 code for `share_capital`.
has_annual_accounts_dutyNoTrue when this legal form must file annual accounts with the state.
last_annual_accounts_yearNoMost recent financial year for which accounts were filed.
business_register_registered_atNoDate entered in the commercial/business register, where that is separate.

Schema Changelog

Changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. First observedv0.1.0

TDQS

A4.6/5.0
Behavior5/5

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

Beyond the annotations (readOnly, openWorld, idempotent, non-destructive), the description discloses important behaviors: identifier normalization and zero-padding, country-specific register behavior, the requirement to read returned notes for caveats like bankruptcy or dissolution, and retry/error semantics including that upstream errors have already been retried once.

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

Conciseness4/5

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

The description is front-loaded with the core purpose and is information-dense, with country details and error handling clearly separated. It is somewhat long and partially duplicates the schema's parameter documentation, but the length is justified by the multi-country behavior and error guidance.

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

Completeness5/5

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

For a tool with two well-documented parameters, rich annotations, an output schema, and sibling tools, the description is complete: it covers when to use it, country-specific identifier formats, error handling, retries, and warnings about the returned data. Nothing essential is missing for correct invocation.

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 even if the description adds no parameter info. The description does reinforce the schema's details about organisasjonsnummer, CRN, zero-padding, and accepted country codes, but it mostly duplicates what the input schema already states rather than adding substantial new parameter-level meaning.

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 opens with a specific verb and resource: 'Look up a company by its national identifier and get the full CompanyReport'. It clearly distinguishes lookup from search by stating that lookup is used once the identifier is already known, and it names the sibling search_company as the source of an id.

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

Usage Guidelines5/5

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

It explicitly states when to use the tool: 'Use it once you have the identifier — from the user, an invoice, a contract, or a search_company hit's id.' It also provides alternative routing on errors: use search_company for invalid_id/not_found and list_countries for unsupported_country.

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

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/foretak/registry-mcp'

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