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
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ís | Registro | Ferramentas | Formato do ID |
|---|---|---|---|
| Noruega | Brønnøysundregistrene | 12 | 9 dígitos (ex.: 923609016 ou 923 609 016) |
| Dinamarca | CVR | 5 | 8 dígitos (ex.: 10150817 ou DK-10150817) |
| Finlândia | PRH | 2 | 7+1 dígitos (ex.: 0112038-9) |
| Suécia | Bolagsverket | 4 | 10 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)
| Ferramenta | Descrição |
|---|---|
norway_search_companies | Pesquisa empresas por nome |
norway_get_company | Obtém detalhes da empresa pelo número de organização |
norway_get_roles | Obtém membros do conselho, CEO, auditores |
norway_get_signature_rights | Obtém direitos de assinatura e prokura |
norway_batch_get_companies | Consulta várias empresas de uma vez |
norway_get_subunits | Lista filiais de uma empresa |
norway_get_subunit | Obtém detalhes de uma filial específica |
norway_search_subunits | Pesquisa filiais por nome |
norway_get_updates | Obtém alterações recentes no registro |
norway_get_subunit_updates | Obtém alterações recentes em filiais |
norway_list_municipalities | Lista códigos de municípios |
norway_list_org_forms | Lista códigos de formas de organização (AS, ENK, etc.) |
Dinamarca (CVR)
| Ferramenta | Descrição |
|---|---|
denmark_search_companies | Pesquisa empresas por nome (retorna a melhor correspondência única) |
denmark_get_company | Obtém detalhes da empresa pelo número CVR |
denmark_get_production_units | Lista unidades de produção (números P), paginado |
denmark_search_by_phone | Encontra empresa por número de telefone |
denmark_get_by_pnumber | Obté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)
| Ferramenta | Descrição |
|---|---|
finland_search_companies | Pesquisa empresas por nome (paginado, use filtros para consultas amplas) |
finland_get_company | Obté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 porlocationpara restringir os resultados.
Suécia (Bolagsverket)
Requer credenciais OAuth2. Defina as variáveis de ambiente BOLAGSVERKET_CLIENT_ID e BOLAGSVERKET_CLIENT_SECRET.
| Ferramenta | Descrição |
|---|---|
sweden_get_company | Obtém detalhes da empresa pelo número de organização |
sweden_get_document_list | Lista relatórios anuais (årsredovisningar) |
sweden_download_document | Baixa relatório anual pelo ID do documento |
sweden_check_status | Verifica 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).
- Registre-se na API värdefulla datamängder (envie o formulário de registro de cliente)
- Acesse o Portal do Desenvolvedor para obter suas credenciais OAuth2
- 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
-tokenou variável de ambienteMCP_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-Forde 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.
| Endpoint | Descrição | Autenticação |
|---|---|---|
/ | Protocolo MCP (HTTP Streamable) | Exigida quando o token está definido |
/health | Verificação de atividade (liveness) | Pública |
/ready | Verificação de prontidão (valida conectividade da API) | Pública |
/tools | Lista todas as ferramentas por país | Exigida quando o token está definido |
/status | Estatísticas do circuit breaker | Exigida quando o token está definido |
/metrics | Métricas Prometheus | Exigida 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
| Documento | Descrição |
|---|---|
| Guia de Configuração | Instalação, configuração e solução de problemas |
| Referência da API | Referência completa das 23 ferramentas com parâmetros, valores de retorno e exemplos |
| Arquitetura | Design do sistema, fluxo de requisições, padrões de resiliência |
| Prontidão para Produção | Contê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:
- Abrir o caso no Public 360°
- Consultar manualmente a empresa no Brønnøysundregistrene
- Verificar se a empresa está ativa e não está em falência
- Verificar se o signatário tem autoridade
- 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 Registry | Public 360° | Caso de Uso |
|---|---|---|
norway_get_company | sif_get_enterprises | Sincronizar dados da empresa com contatos |
norway_get_roles | sif_get_contacts | Importar membros do conselho como contatos |
*_search_companies | sif_create_case | Preencher automaticamente o caso com informações verificadas da empresa |
sweden_download_document | sif_upload_file | Anexar 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 empresa | Membros do conselho e funções |
| Relatórios anuais (årsredovisningar) | Signatários autorizados (firmatecknare) |
| Situação da empresa | Hipotecas 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 empresa | Membros do conselho e diretores executivos |
| Demonstrações financeiras digitais (IXBRL) | Signatários autorizados |
| Notificações de registro | Titulares 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:
| Servidor | Descrição | Estrelas |
|---|---|---|
| gleif-mcp-server | Acesse o banco de dados GLEIF LEI. Consulte identidades de empresas, verifique entidades legais. | |
| mediawiki-mcp-server | Conecte IA a qualquer wiki MediaWiki. Pesquise, leia, edite conteúdo de wiki. | |
| miro-mcp-server | Controle quadros brancos Miro com IA. Quadros, diagramas, mapas mentais e mais. | |
| productplan-mcp-server | Fale com seus roadmaps do ProductPlan. Consulte OKRs, ideias, lançamentos. | |
| tilbudstrolden-mcp | Caça a ofertas de supermercado nórdicas. Encontre ofertas, planeje refeições, acompanhe gastos. |
Licença
Apache License 2.0
Créditos
- Construído com Go MCP SDK
- Dados de Brønnøysundregistrene, CVR, PRH, Bolagsverket