{"slug": "three-company-registers-one-word-what-active-actually-means-in-norway-the-uk-and", "title": "Three company registers, one word: what \"active\" actually means in Norway, the UK and Sweden", "summary": "A developer built registry-mcp, a Model Context Protocol tool that queries company registers in Norway, the UK, and Sweden and returns a unified status field. The tool reveals that the three registers define 'active' differently, and it returns explanatory notes to prevent agents from misreading the status.", "body_md": "An agent about to pay an invoice asks one question first: is this company still active? `registry-mcp` answers from three national registers — Brønnøysundregistrene / Enhetsregisteret (**brreg**) by **organisasjonsnummer** (orgnr, org.nr), **Companies House** by company number, and **Bolagsverket** by **organisationsnummer** — and returns the same field from all three:\n\n```\n{\"status\": \"active\", \"is_active\": true}\n```\n\nThe three registers do not mean the same thing by it. Only one of them even publishes it.\n\n`active` is the absence of all four\nbrreg has no status field. It publishes `konkurs`, `underAvvikling`, `underTvangsavviklingEllerTvangsopplosning` and `slettedato`; `active` is what is left when none of them fires. The branch worth copying is the one *before* `active`:\n\n```\nif bankrupt is None and under_liquidation is None and under_compulsory_liquidation is None:\n    return StatusResult(CompanyStatus.UNKNOWN, \"The registry record does not carry status flags.\", False, [note])\n\nreturn StatusResult(CompanyStatus.ACTIVE, \"Registered and active in Enhetsregisteret.\", True, [])\n```\n\n`None` is not `False`. A payload carrying no flags at all is `unknown`, never `active` — \"the register did not say\" and \"the register said no\" are different answers, and only one of them is safe to pay an invoice on.\n\nCompanies House does publish a status, and it is mapped one to one — no derivation at all. It also publishes `company_status_detail`, separately, and the pair `active` + `active-proposal-to-strike-off` is both legal and common. That detail arrives as a `notes` sentence:\n\n```\nCompanies House has published a proposal to strike this company off the register.\nIt is still active today, but it may be dissolved within about two months unless\nthe proposal is suspended. Do not treat it as a stable counterparty without\nchecking the filing history.\n```\n\nA UK `active` with a note is a different fact from a UK `active` without one. The enum cannot carry that difference, so the sentence does.\n\nBolagsverket publishes nothing called a status. It publishes a strike-off date; a *list* of ongoing procedures (`KK` konkurs, `LI` likvidation, `FR` företagsrekonstruktion and more, which can arrive two at a time); and — from Statistics Sweden, in the same payload — a flag saying whether the entity is *economically active*. Live, today:\n\n```\n{\n  \"name\": \"Telefonaktiebolaget LM Ericsson\",\n  \"status\": \"active\",\n  \"status_detail\": \"Registered with Bolagsverket and not marked as struck off or in any winding-up or restructuring procedure.\",\n  \"is_active\": true\n}\n```\n\nRead `status_detail`, not `status`. And read this twice: for Sweden, `is_active: true` means **on the register and not winding down**. It does not mean trading. Statistics Sweden's flag can say NEJ on a company in perfect standing — newly formed, dormant, a holding company with no operations — and that company is still `active` here, with a note saying so in plain English, and saying that SCB's question is a different one from being on the register.\n\nWe could have invented a `dormant` status. We didn't. That would change a shared enum for one country's convenience, and an agent would read it as a lifecycle claim about Norwegian and British companies that we have no data to make.\n\n`core/`\nThe enum is shared; the derivation is not. Each country folder derives its own status and writes the sentence naming the signal that decided it. Three registers, three unrelated derivations, one shape at the tool boundary.\n\nWhich is the argument for putting a register behind an MCP tool rather than a scraper. A scraper hands your agent the word. A tool can hand it the sentence.\n\n```\nclaude mcp add registry-mcp --transport http https://api.foretak.dev/mcp\n# or locally, over stdio: uvx registry-mcp\n```\n\nData: Enhetsregisteret (NLOD 2.0), Companies House (Crown copyright), Bolagsverket and SCB (free under the EU high-value-datasets regulation — and Bolagsverket names no licence, so neither do we).", "url": "https://wpnews.pro/news/three-company-registers-one-word-what-active-actually-means-in-norway-the-uk-and", "canonical_source": "https://dev.to/fargeroddotcom/three-company-registers-one-word-what-active-actually-means-in-norway-the-uk-and-sweden-51e2", "published_at": "2026-09-07 16:45:30+00:00", "updated_at": "2026-09-07 16:56:52.011672+00:00", "lang": "en", "topics": ["developer-tools", "ai-agents"], "entities": ["Brønnøysundregistrene", "Enhetsregisteret", "Companies House", "Bolagsverket", "Statistics Sweden", "Telefonaktiebolaget LM Ericsson", "registry-mcp"], "alternates": {"html": "https://wpnews.pro/news/three-company-registers-one-word-what-active-actually-means-in-norway-the-uk-and", "markdown": "https://wpnews.pro/news/three-company-registers-one-word-what-active-actually-means-in-norway-the-uk-and.md", "text": "https://wpnews.pro/news/three-company-registers-one-word-what-active-actually-means-in-norway-the-uk-and.txt", "jsonld": "https://wpnews.pro/news/three-company-registers-one-word-what-active-actually-means-in-norway-the-uk-and.jsonld"}}