# registry-mcp — the company registry MCP: company data for AI agents, any country One MCP server and one REST API over national business registries — same JSON from both: lookup, name search, statutory filing deadlines. Live now: Norway (NO), Enhetsregisteret / Brønnøysundregistrene ("brreg"), by organisasjonsnummer (orgnr), with VAT status; the United Kingdom (GB, never UK), Companies House, by company number (CRN), with accounts and confirmation statement dates; and Sweden (SE), Bolagsverket, by organisationsnummer, with the aktiebolag general-meeting and årsredovisning deadlines. Sweden has no name search: Bolagsverket's free API has four operations and none takes a company name, so search_company for SE returns not_implemented. Look a Swedish company up by its ten-digit organisationsnummer (a sole trader is looked up by their twelve-digit personnummer, which is that trader's company number). ## Add it as an MCP server claude mcp add registry-mcp --transport http https://api.foretak.dev/mcp?src=llms uvx registry-mcp # local stdio server (Python) npx registry-mcp # local stdio server (Node) Tools: lookup_company(id, country="NO"), search_company(name, country="NO"), company_deadlines(id, country, today), validate_company_id(id, country), list_countries(). Resource: registry://rules/{country}. Prompt: explain_company. ## Or call the REST API curl https://api.foretak.dev/v1/NO/company/923609016 curl https://api.foretak.dev/v1/GB/company/00445790 curl https://api.foretak.dev/v1/SE/company/5560160680 Returns a CompanyReport: name, legal_form, status, vat_registered, addresses, industry_codes, employees, share_capital, euid, advertising_protected, confidence, cached, fetched_at, and source_url + license for citation. A field one register publishes and another does not is null — never "", never 0, never invented. status is a lifecycle enum and status_detail is the sentence behind it: read status_detail and notes, because "active" is derived differently in each register — from four brreg flags in Norway, from one published status in the UK, and from three independent signals in Sweden, which publishes no status field at all. For SE, is_active means "on the register and not winding down", which is not the same as trading. Other routes: GET /v1/countries, GET /v1/{country}/search?q={name}, GET /v1/{country}/company/{id}/deadlines?today=YYYY-MM-DD, GET /v1/{country}/validate/{id}, GET /health. Errors are always {"error": {"code", "message", "hint"}}. The hint names the next call you can make — read it before retrying. ## More Full endpoint and tool docs: https://api.foretak.dev/llms-full.txt MCP manifest: https://api.foretak.dev/server.json Source (MIT): https://github.com/foretak/registry-mcp Data: Enhetsregisteret (NLOD 2.0, attribution required); Companies House (Crown copyright, free to re-use); Bolagsverket and Statistics Sweden (free re-use under the EU high-value-datasets regime — the publisher names no licence, so neither do we).