Nordic Registry MCP Server

Consulte empresas, membros do conselho e cargos empresariais nos registros oficiais de negócios da Noruega, Dinamarca, Finlândia e Suécia.

Documentação

Nordic Registry MCP Server

CI lint License CodeScene Average Code Health

O que é isso?

Verifique a legitimidade de empresas na Noruega, Dinamarca, Finlândia e Suécia em segundos. Consulte situação de falência, membros do conselho, poderes de assinatura e dados financeiros nos registros oficiais, sem alternar entre quatro sites governamentais.

23 ferramentas que integram as APIs públicas de Brønnøysundregistrene, CVR, PRH e Bolagsverket. Funciona com Claude Desktop, Claude Code, Cursor e qualquer cliente MCP.

O que faz:

  • Pesquisa empresas por nome em quatro países nórdicos
  • Obtém detalhes da empresa: status, funcionários, setor, endereços
  • Consulta membros do conselho, CEOs, auditores e funções
  • Verifica quem pode assinar legalmente em nome de uma empresa
  • Acessa relatórios anuais suecos (årsredovisningar)
  • Consultas em lote para validar listas de IDs de empresas

O que não faz:

  • Altera dados dos registros (somente leitura)
  • Armazena ou armazena em cache dados pessoais além da sessão
  • Exige pagamento (todas as APIs subjacentes são gratuitas)

Países Suportados

PaísRegistroFerramentasFormato do ID
NoruegaBrønnøysundregistrene129 dígitos (ex.: 923609016 ou 923 609 016)
DinamarcaCVR58 dígitos (ex.: 10150817 ou DK-10150817)
FinlândiaPRH27+1 dígitos (ex.: 0112038-9)
SuéciaBolagsverket410 dígitos (ex.: 5560125790 ou 556012-5790)

Todas as APIs são gratuitas. Noruega, Dinamarca e Finlândia não exigem autenticação. A Suécia usa a API värdefulla datamängder, que exige credenciais OAuth2 (registro gratuito).


O Que Você Pode Fazer?

Depois de conectar, basta perguntar à sua IA:

Você diz...O que acontece
"Encontre empresas norueguesas chamadas Equinor"Pesquisa no Brønnøysundregistrene
"Obtenha detalhes do número de organização 923609016"Retorna informações completas da empresa
"Quem está no conselho de 923609016?"Lista membros do conselho, CEO, funções
"Encontre a empresa dinamarquesa Novo Nordisk"Pesquisa no registro CVR
"Consulte a empresa finlandesa Nokia"Pesquisa no registro PRH
"Obtenha a empresa 0112038-9 da Finlândia"Retorna os detalhes completos da Nokia
"Obtenha a empresa sueca 5560125790"Retorna informações da empresa no Bolagsverket
"Liste relatórios anuais da empresa sueca X"Lista os årsredovisningar disponíveis

Casos de Uso

Processamento de Casos: Verificar Empresas Candidatas

Ao processar pedidos de licença, renovações de alvará ou solicitações de subsídios, verifique se a empresa solicitante existe e está em situação regular.

You: "A company applied for an environmental permit. Org number 923609016.
      Check if they're active and who can sign on their behalf."

AI: Let me verify the company and check signing authority.
→ norway_get_company("923609016")
→ norway_get_signature_rights("923609016")

Result: Equinor ASA - Active since 1972, registered for VAT, 21,200 employees.
Authorized signatories: [Name 1] (CEO), [Name 2] + [Name 3] (joint signature).
The application signature matches an authorized signatory.

Compras Públicas: Validar Fornecedores Antes da Contratação

Antes de adjudicar um contrato municipal, verifique se as empresas licitantes são legítimas e não estão em falência.

You: "We received bids from three Danish companies for the IT contract.
      CVR numbers: 10150817, 25063783, 37553472. Are they all legitimate?"

AI: I'll verify each company's status.
→ denmark_get_company("10150817")
→ denmark_get_company("25063783")
→ denmark_get_company("37553472")

Result:
- 10150817: Novo Nordisk A/S - Active, 47,000+ employees ✓
- 25063783: Mærsk A/S - Active, established company ✓
- 37553472: [Company name] - BANKRUPT ✗

Recommendation: Exclude 37553472 from consideration.

Administração de Subsídios: Verificar Status de Organizações Sem Fins Lucrativos

Ao processar pedidos de subsídios de organizações voluntárias, verifique seu registro no Frivillighetsregisteret.

You: "An organization applied for cultural funding.
      They claim to be a registered non-profit. Org number 971274808."

AI: Let me check their voluntary organization status.
→ norway_get_company("971274808")

Result: Norges Røde Kors - Registered in Frivillighetsregisteret since 2009.
Organization form: FLI (Forening/lag/innretning).
Activity: Humanitarian aid and emergency response.
Confirmed as eligible non-profit organization.

Supervisão Regulatória: Monitorar Mudanças no Setor

Acompanhe novos registros de empresas ou mudanças de status em setores regulados.

You: "I need to monitor new companies in the financial sector.
      What relevant registrations happened this week?"

AI: Let me check recent registry updates.
→ norway_get_updates(since="2024-01-08T00:00:00Z", size=100)

Result: 12 new registrations in financial services sector:
- 3 new AS companies (aksjeselskap)
- 2 new NUF branches of foreign financial institutions
- 7 updates to existing financial companies
[List with org numbers for follow-up]

Coordenação Transfronteiriça: Rastrear Presença Multinacional

Ao coordenar com outras autoridades nórdicas, identifique a presença de uma empresa em diferentes jurisdições.

You: "We're investigating a company that may operate across Nordic countries.
      Check if Volvo has registered entities in Norway and Denmark."

AI: Let me search both registries.
→ norway_search_companies("Volvo")
→ denmark_search_companies("Volvo")

Result: Found registered entities:
- Norway: Volvo Norge AS (org 923609016) - 450 employees, automotive
- Denmark: Volvo Danmark A/S (CVR 12345678) - 320 employees
Both are subsidiaries of Swedish parent company.

Qualidade de Dados: Validar Submissões aos Registros

Ao receber submissões de dados em lote que referenciam identificadores de empresas, valide-os contra os registros oficiais.

You: "A ministry submitted a list of 50 org numbers for a new subsidy program.
      Validate which ones are current and active."

AI: I'll validate them against Brønnøysundregistrene.
→ norway_batch_get_companies([list of 50 org numbers])

Result:
- 47 companies: Active and valid ✓
- 2 companies: Marked as bankrupt - may need review
- 1 org number: Not found in registry - possibly incorrect

Flagged entries exported for manual review.

Estatísticas: Demografia Empresarial por Município

Apoie a análise de políticas públicas examinando a composição empresarial em áreas específicas.

You: "How many AS companies are registered in Oslo municipality?"

AI: Let me search with municipality filter.
→ norway_search_companies(query="*", org_form="AS", municipality="0301")

Result: Found 45,231 AS companies registered in Oslo (municipality 0301).
Paginated results available for detailed analysis.

Due Diligence: Verificar Composição do Conselho

Antes de aprovar auxílios estatais ou contratos acima do limite, verifique a governança da empresa.

You: "Check the board composition of company 914778271.
      We need this for the state aid application review."

AI: Let me retrieve their roles.
→ norway_get_company("914778271")
→ norway_get_roles("914778271")

Result: [Company name] - AS registered 2015
Board members:
- [Name 1] - Styreleder (Chair)
- [Name 2] - Styremedlem
- [Name 3] - Styremedlem
- [Name 4] - Daglig leder (CEO)
Auditor: [Audit firm name]

Recuperação de Documentos: Acessar Relatórios Anuais Suecos

Ao revisar empresas suecas para assuntos transfronteiriços, consulte a documentação financeira disponível.

You: "A Swedish company applied for recognition in Norway.
      What financial reports are available for org 5560125790?"

AI: Let me check Bolagsverket for filed documents.
→ sweden_get_company("5560125790")
→ sweden_get_document_list("5560125790")

Result: [Company name] - Active Swedish AB
Available årsredovisningar: 8 annual reports (2016-2023)
Most recent: Financial year ending 2023-06-30, filed 2023-08-15.

Início Rápido

Opção 1: Baixar o Binário

Acesse Releases e baixe para sua plataforma.

Opção 2: Compilar a Partir do Código-Fonte

git clone https://github.com/olgasafonova/nordic-registry-mcp-server.git
cd nordic-registry-mcp-server
go build .

Requer Go 1.24+


Configuração

Cursor Marketplace

/add-plugin nordic-registry

Claude Code CLI

claude mcp add nordic-registry ./nordic-registry-mcp-server

Claude Desktop

Adicione em ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "nordic-registry": {
      "command": "/path/to/nordic-registry-mcp-server"
    }
  }
}

Reinicie o Claude Desktop após as alterações.

Não está funcionando? Conte-nos o que dificultou — até uma frase ajuda.


Todas as Ferramentas

Noruega (Brønnøysundregistrene)

FerramentaDescrição
norway_search_companiesPesquisa empresas por nome
norway_get_companyObtém detalhes da empresa pelo número de organização
norway_get_rolesObtém membros do conselho, CEO, auditores
norway_get_signature_rightsObtém direitos de assinatura e prokura
norway_batch_get_companiesConsulta várias empresas de uma vez
norway_get_subunitsLista filiais de uma empresa
norway_get_subunitObtém detalhes de uma filial específica
norway_search_subunitsPesquisa filiais por nome
norway_get_updatesObtém alterações recentes no registro
norway_get_subunit_updatesObtém alterações recentes em filiais
norway_list_municipalitiesLista códigos de municípios
norway_list_org_formsLista códigos de formas de organização (AS, ENK, etc.)

Dinamarca (CVR)

FerramentaDescrição
denmark_search_companiesPesquisa empresas por nome (retorna a melhor correspondência única)
denmark_get_companyObtém detalhes da empresa pelo número CVR
denmark_get_production_unitsLista unidades de produção (números P), paginado
denmark_search_by_phoneEncontra empresa por número de telefone
denmark_get_by_pnumberObtém empresa pelo número P

Observação: A pesquisa dinamarquesa retorna apenas um resultado. Empresas grandes costumam ter múltiplas entidades. Tente variações como "[Empresa] Dinamarca", "[Empresa] A/S" ou nomes anteriores à fusão se o primeiro resultado parecer errado.

Finlândia (PRH)

FerramentaDescrição
finland_search_companiesPesquisa empresas por nome (paginado, use filtros para consultas amplas)
finland_get_companyObtém detalhes da empresa pelo ID comercial

Observação: Nomes comuns como "Nokia" retornam mais de 900 resultados. Use o nome legal exato ("Nokia Oyj"), filtre por company_form (OY/OYJ) ou filtre por location para restringir os resultados.

Suécia (Bolagsverket)

Requer credenciais OAuth2. Defina as variáveis de ambiente BOLAGSVERKET_CLIENT_ID e BOLAGSVERKET_CLIENT_SECRET.

FerramentaDescrição
sweden_get_companyObtém detalhes da empresa pelo número de organização
sweden_get_document_listLista relatórios anuais (årsredovisningar)
sweden_download_documentBaixa relatório anual pelo ID do documento
sweden_check_statusVerifica disponibilidade da API e status OAuth2

Observação: A Suécia não tem pesquisa por nome nesta API — você precisa ter o número de organização.


Exemplos de Prompts

Pesquisa de Empresas

  • "Encontre empresas norueguesas chamadas Telenor"
  • "Pesquise empresas AS em Oslo"
  • "Encontre empresas dinamarquesas chamadas Carlsberg"
  • "Consulte a empresa finlandesa Kone"
  • "Encontre organizações voluntárias chamadas Røde Kors"

Detalhes da Empresa

  • "Obtenha detalhes da organização norueguesa 923609016"
  • "Consulte o CVR 10150817"
  • "Obtenha a empresa finlandesa 0112038-9"

Conselho e Funções (somente Noruega)

  • "Quem está no conselho de 923609016?"
  • "Encontre o CEO da Equinor"
  • "Liste todos os diretores da organização 914778271"

Direitos de Assinatura (somente Noruega)

  • "Quem pode assinar pela empresa 923609016?"
  • "Obtenha direitos de assinatura da Equinor"
  • "Quem tem prokura para 914778271?"

Filiais

  • "Quais filiais a 923609016 tem?"
  • "Pesquise filiais chamadas Equinor"
  • "Liste unidades de produção do CVR 10150817"

Atualizações do Registro (somente Noruega)

  • "Quais empresas mudaram desde ontem?"
  • "Obtenha atualizações recentes do registro"
  • "Quais filiais mudaram recentemente?"

Operações em Lote (somente Noruega)

  • "Consulte estas empresas: 923609016, 914778271, 985399077"
  • "Valide estes números de organização da minha planilha"
  • "Obtenha detalhes de várias empresas norueguesas de uma vez"

Dados de Referência (somente Noruega)

  • "Liste todos os municípios noruegueses"
  • "Qual é o código do município de Oslo?"
  • "O que significa AS?"
  • "Liste os códigos de formas de organização"

Consulta por Telefone e Número P (Dinamarca)

  • "Encontre empresa com telefone 33121212"
  • "Consulte a unidade de produção com número P 1234567890"

Consultas na Suécia

  • "Obtenha a empresa sueca 5560125790"
  • "Consulte o número de organização da Volvo na Suécia"
  • "Quais relatórios anuais estão disponíveis para 5560125790?"
  • "Liste årsredovisningar da empresa sueca X"
  • "A API sueca está funcionando?"

Configuração da Suécia

A API do Bolagsverket na Suécia exige autenticação OAuth2 (gratuita).

  1. Registre-se na API värdefulla datamängder (envie o formulário de registro de cliente)
  2. Acesse o Portal do Desenvolvedor para obter suas credenciais OAuth2
  3. Defina as variáveis de ambiente:
    export BOLAGSVERKET_CLIENT_ID="your-client-id"
    export BOLAGSVERKET_CLIENT_SECRET="your-client-secret"
    

O servidor registrará no log se as credenciais da Suécia estão configuradas na inicialização. Se não estiverem configuradas, as ferramentas da Suécia simplesmente não serão registradas.


Modo HTTP

Para acesso remoto ou integração com outras ferramentas:

# Start HTTP server
./nordic-registry-mcp-server -http :8080

# With authentication
./nordic-registry-mcp-server -http :8080 -token "your-secret-token"

# Full production setup
./nordic-registry-mcp-server -http :8080 \
  -token "your-secret-token" \
  -origins "https://app.example.com" \
  -rate-limit 60 \
  -trusted-proxies "10.0.0.0/8"

Recursos de Segurança

  • Autenticação por Bearer Token: Autenticação opcional via flag -token ou variável de ambiente MCP_AUTH_TOKEN. A vinculação a um endereço não-loopback sem token é recusada na inicialização; vinculações loopback (127.0.0.1, localhost) continuam funcionando sem token para desenvolvimento local.
  • Proteção CORS: Restrinja origens via flag -origins (separadas por vírgula)
  • Limitação de Taxa: Limitação por IP via -rate-limit (requisições por minuto)
  • Proxies Confiáveis: Respeita X-Forwarded-For de redes confiáveis via -trusted-proxies
  • Limites de Tamanho de Requisição: 2MB padrão, 10MB máximo no corpo da requisição

Endpoints

Todos os endpoints, exceto as sondas /health e /ready, compartilham o mesmo caminho de autenticação: quando um token é definido, /, /metrics, /status e /tools exigem todos ele. As sondas permanecem sem autenticação para que orquestradores possam acessá-las.

EndpointDescriçãoAutenticação
/Protocolo MCP (HTTP Streamable)Exigida quando o token está definido
/healthVerificação de atividade (liveness)Pública
/readyVerificação de prontidão (valida conectividade da API)Pública
/toolsLista todas as ferramentas por paísExigida quando o token está definido
/statusEstatísticas do circuit breakerExigida quando o token está definido
/metricsMétricas PrometheusExigida quando o token está definido

Arquitetura

nordic-registry-mcp-server/
├── main.go                 # Entry point, HTTP/stdio transport, security middleware
├── internal/
│   ├── base/              # Shared HTTP client with resilience
│   │   └── client.go      # Connection pooling, retries, rate limiting
│   ├── errors/            # Shared error types
│   │   └── errors.go      # NotFoundError, ValidationError
│   ├── infra/             # Resilience infrastructure
│   │   ├── cache.go       # LRU cache with TTL
│   │   └── resilience.go  # Circuit breaker, request deduplication
│   ├── norway/            # Norwegian registry (Brønnøysundregistrene)
│   ├── denmark/           # Danish registry (CVR)
│   ├── finland/           # Finnish registry (PRH)
│   └── sweden/            # Swedish registry (Bolagsverket, OAuth2)
├── tools/
│   ├── definitions.go     # Tool specifications (23 tools)
│   ├── handlers.go        # MCP tool registration
│   └── registry.go        # Tool metadata types
├── metrics/               # Prometheus metrics (namespace: nordic_registry_mcp)
└── tracing/               # OpenTelemetry tracing

Recursos de Resiliência

  • Cache LRU: TTL varia por tipo de endpoint (pesquisas: 2min, detalhes: 5-15min, documentos: 30min, dados de referência: 24h)
  • Circuit Breaker: Abre após 5 falhas consecutivas, timeout de recuperação de 30s
  • Deduplicação de Requisições: Requisições concorrentes idênticas compartilham uma única chamada de API
  • Limitação de Taxa: Controle de concorrência baseado em semáforo (15 requisições concorrentes)
  • Tentativas com Backoff: Backoff exponencial com jitter em falhas transitórias
  • Limites de Tamanho de Resposta: 10MB para respostas de API, 100MB para downloads de documentos
  • Eficiência de Tokens: Respostas paginadas (padrão de 20 resultados) para minimizar o uso de contexto do LLM

Documentação

DocumentoDescrição
Guia de ConfiguraçãoInstalação, configuração e solução de problemas
Referência da APIReferência completa das 23 ferramentas com parâmetros, valores de retorno e exemplos
ArquiteturaDesign do sistema, fluxo de requisições, padrões de resiliência
Prontidão para ProduçãoContêineres Linux, Docker, Kubernetes, monitoramento

Desenvolvimento

# Build
go build .

# Test
go test ./...

# Lint (requires golangci-lint)
golangci-lint run

Visão Futura: Integração com Public 360°

Este servidor foi projetado para funcionar em conjunto com o public360-mcp-server, que fornece acesso por IA aos sistemas de gestão de documentos e casos Public 360° usados por organizações do setor público nórdico. O cenário de integração:

Um analista de casos recebe um pedido de licença de uma empresa. Fluxo de trabalho atual:

  1. Abrir o caso no Public 360°
  2. Consultar manualmente a empresa no Brønnøysundregistrene
  3. Verificar se a empresa está ativa e não está em falência
  4. Verificar se o signatário tem autoridade
  5. Copiar os detalhes relevantes de volta para o caso

Com ambos os servidores MCP conectados:

You: "I received permit application case 2024/12345.
      The applicant is org 923609016. Verify the company
      and check if the signature is valid."

AI: [Calls public360: sif_get_cases to get case details]
    [Calls nordic-registry: norway_get_company to verify company]
    [Calls nordic-registry: norway_get_signature_rights to check authority]

Result: Case 2024/12345 - Environmental permit application
        Applicant: Equinor ASA (923609016) - ACTIVE
        Signed by: [Name] - Authorized signatory ✓

        Recommendation: Signature is valid. Company is in good standing.

Pontos de integração planejados:

Nordic RegistryPublic 360°Caso de Uso
norway_get_companysif_get_enterprisesSincronizar dados da empresa com contatos
norway_get_rolessif_get_contactsImportar membros do conselho como contatos
*_search_companiessif_create_casePreencher automaticamente o caso com informações verificadas da empresa
sweden_download_documentsif_upload_fileAnexar relatórios anuais aos casos

Isso transforma duas fontes de dados separadas em um fluxo de trabalho conectado, onde a IA pode verificar dados externos e atualizar sistemas internos em uma única conversa.

Dados Aprimorados de Registro (Futuro)

A implementação atual usa APIs gratuitas e abertas. Dados mais abrangentes estão disponíveis por meio de serviços premium:

Suécia (Bolagsverket)

Atual (Gratuito)Potencial Premium
Informações básicas da empresaMembros do conselho e funções
Relatórios anuais (årsredovisningar)Signatários autorizados (firmatecknare)
Situação da empresaHipotecas da empresa (företagsinteckningar)
Atualizações em tempo real (não em lote diário)
Histórico de mudanças no conselho

A API värdefulla datamängder gratuita que usamos hoje fornece informações básicas da empresa e relatórios anuais. O Bolagsverket oferece e-serviços adicionais para signatários autorizados e hipotecas da empresa. Agregadores de terceiros como Roaring.io fornecem conjuntos de dados enriquecidos que combinam múltiplas fontes.

Finlândia (PRH)

Atual (Gratuito)Serviço Virre
Detalhes básicos da empresaMembros do conselho e diretores executivos
Demonstrações financeiras digitais (IXBRL)Signatários autorizados
Notificações de registroTitulares de procuração
Demonstrações financeiras não digitais
Extratos traduzidos do Registro Comercial
Estatutos sociais

A API de Dados Abertos do PRH gratuita fornece informações básicas da empresa atualizadas diariamente. O Serviço de Informações Virre oferece detalhes de membros do conselho, informações de signatários e compra de documentos. Clientes com contrato obtêm tarifas reduzidas para acesso de alto volume.

Por que isso importa:

A Noruega já fornece membros do conselho, funções e autoridade de assinatura por meio da API gratuita do Brønnøysundregistrene. Adicionar dados premium da Suécia e da Finlândia proporcionaria cobertura consistente em todos os quatro países para:

  • Verificar quem pode assinar contratos
  • Verificar a composição do conselho para due diligence
  • Acessar documentação financeira completa

Mais Servidores MCP

Confira meus outros servidores MCP:

ServidorDescriçãoEstrelas
gleif-mcp-serverAcesse o banco de dados GLEIF LEI. Consulte identidades de empresas, verifique entidades legais.GitHub stars
mediawiki-mcp-serverConecte IA a qualquer wiki MediaWiki. Pesquise, leia, edite conteúdo de wiki.GitHub stars
miro-mcp-serverControle quadros brancos Miro com IA. Quadros, diagramas, mapas mentais e mais.GitHub stars
productplan-mcp-serverFale com seus roadmaps do ProductPlan. Consulte OKRs, ideias, lançamentos.GitHub stars
tilbudstrolden-mcpCaça a ofertas de supermercado nórdicas. Encontre ofertas, planeje refeições, acompanhe gastos.GitHub stars

Licença

Apache License 2.0

Créditos