关于 nordic-registry-mcp-server
nordic-registry-mcp-server 以只读方式访问挪威、丹麦、芬兰和瑞典的官方企业登记信息,适合需要核验企业状态、治理结构、签字权和申报文件的机构与分析人员。
主要功能
- 01搜索四个北欧国家的企业
- 02获取企业状态和业务详情
- 03查询董事会成员及企业职务
- 04核验法定签字权限
- 05访问瑞典年度报告
- 06批量核验挪威企业编号
适用场景
- 01核验许可或资助申请企业
- 02筛查供应商状态及破产情况
- 03审查董事会构成和签字权限
- 04根据登记信息核验企业编号清单
MCP 相关
提供 23 种工具,让 MCP 客户端查询四国公共登记 API。登记信息为只读;瑞典工具需要 OAuth2 凭据。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
docker run -i --rm -e BOLAGSVERKET_CLIENT_ID -e BOLAGSVERKET_CLIENT_SECRET ghcr.io/olgasafonova/nordic-registry-mcp-server:1.0.2BOLAGSVERKET_CLIENT_ID密钥Bolagsverket OAuth2 client ID (only needed for Sweden tools)BOLAGSVERKET_CLIENT_SECRET密钥Bolagsverket OAuth2 client secret (only needed for Sweden tools)本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
ghcr.io/olgasafonova/nordic-registry-mcp-server:1.0.2stdio工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
Nordic Registry MCP 服务
这是什么?
只需几秒钟,即可核验挪威、丹麦、芬兰和瑞典公司的合法性。查询破产状态、董事会成员、签字授权和财务数据,无需在四个政府网站之间切换。
23 个工具,封装了 Brønnøysundregistrene、CVR、PRH 和 Bolagsverket 的公共 API。可与 Claude Desktop、Claude Code、Cursor 及任何 MCP 客户端配合使用。
功能:
- 按名称搜索四个北欧国家的公司
- 获取公司详情:状态、员工、行业、地址
- 查询董事会成员、CEO、审计师和职位
- 核实哪些人有权代表公司合法签字
- 获取瑞典年度报告(årsredovisningar)
- 批量查询,验证公司 ID 列表
不提供的功能:
- 修改注册数据(只读)
- 在会话之外存储或缓存个人数据
- 收费(所有底层 API 均免费)
支持的国家
| 国家 | 注册机构 | 工具数 | ID 格式 |
|---|---|---|---|
| 挪威 | Brønnøysundregistrene | 12 | 9 位数字(例如,923609016 或 923 609 016) |
| 丹麦 | CVR | 5 | 8 位数字(例如,10150817 或 DK-10150817) |
| 芬兰 | PRH | 2 | 7+1 位数字(例如,0112038-9) |
| 瑞典 | Bolagsverket | 4 | 10 位数字(例如,5560125790 或 556012-5790) |
所有 API 均免费。挪威、丹麦和芬兰无需身份验证。瑞典使用 värdefulla datamängder API,需要 OAuth2 凭据(免费注册)。
可以做什么?
连接后,只需向 AI 提问:
| 你说…… | 执行结果 |
|---|---|
| “查找名为 Equinor 的挪威公司” | 搜索 Brønnøysundregistrene |
| “查询组织编号 923609016 的详情” | 返回完整公司信息 |
| “923609016 的董事会成员有哪些?” | 列出董事会成员、CEO 和职位 |
| “查找丹麦公司 Novo Nordisk” | 搜索 CVR 注册机构 |
| “查询芬兰公司 Nokia” | 搜索 PRH 注册机构 |
| “查询芬兰公司 0112038-9” | 返回 Nokia 的完整详情 |
| “查询瑞典公司 5560125790” | 返回 Bolagsverket 中的公司信息 |
| “列出瑞典公司 X 的年度报告” | 列出可用的 årsredovisningar |
使用场景
案件处理:核验申请公司
在处理许可证申请、执照续期或补助申请时,核实申请公司是否存在且信誉良好。
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.
采购:签订合同前核验供应商
在授予市政合同之前,核实投标公司是否合法且未破产。
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.
补助管理:核验非营利组织状态
在处理志愿组织的补助申请时,核实其是否已在 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.
监管监督:监测行业变化
跟踪受监管行业的新公司注册或状态变更。
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]
跨境协调:追踪跨国业务布局
与其他北欧机构协调时,识别公司在不同司法管辖区的业务布局。
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.
数据质量:验证登记提交信息
收到引用公司标识符的批量数据提交时,根据官方登记机构的数据进行验证。
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.
统计:按市镇分析公司构成
通过考察特定地区的企业构成,为政策分析提供支持。
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.
尽职调查:核实董事会构成
在批准国家援助或超过门槛的合同之前,核实公司的治理情况。
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]
文档检索:获取瑞典年度报告
在处理跨境事务、审查瑞典公司时,查看可用的财务文件。
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.
快速开始
选项 1:下载二进制文件
前往 Releases,下载适用于你平台的版本。
选项 2:从源代码构建
git clone https://github.com/olgasafonova/nordic-registry-mcp-server.git
cd nordic-registry-mcp-server
go build .
需要 Go 1.24+
设置
Cursor Marketplace
/add-plugin nordic-registry
Claude Code CLI
claude mcp add nordic-registry ./nordic-registry-mcp-server
Claude Desktop
添加到 ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"nordic-registry": {
"command": "/path/to/nordic-registry-mcp-server"
}
}
}
更改后重启 Claude Desktop。
无法使用? 告诉我们哪些地方不够方便——哪怕只写一句话也有帮助。
所有工具
挪威(Brønnøysundregistrene)
| 工具 | 描述 |
|---|---|
norway_search_companies | 按名称搜索公司 |
norway_get_company | 按组织编号获取公司详情 |
norway_get_roles | 获取董事会成员、CEO 和审计师信息 |
norway_get_signature_rights | 获取签字权和代理权信息 |
norway_batch_get_companies | 一次查询多家公司 |
norway_get_subunits | 列出公司的分支机构 |
norway_get_subunit | 获取特定分支机构的详情 |
norway_search_subunits | 按名称搜索分支机构 |
norway_get_updates | 获取登记信息的最新变更 |
norway_get_subunit_updates | 获取分支机构的最新变更 |
norway_list_municipalities | 列出市镇代码 |
norway_list_org_forms | 列出组织形式代码(AS、ENK 等) |
丹麦(CVR)
| 工具 | 描述 |
|---|---|
denmark_search_companies | 按名称搜索公司(返回最匹配的单个结果) |
denmark_get_company | 按 CVR 编号获取公司详情 |
denmark_get_production_units | 列出生产单位(P 编号),支持分页 |
denmark_search_by_phone | 按电话号码查找公司 |
denmark_get_by_pnumber | 按 P 编号获取公司 |
注意: 丹麦搜索只返回一个结果。大型公司通常有多个实体。如果第一个结果似乎不正确,可以尝试不同的名称,例如“[Company] Denmark”、“[Company] A/S”,或合并前的名称。
芬兰(PRH)
| 工具 | 描述 |
|---|---|
finland_search_companies | 按名称搜索公司(支持分页,宽泛查询时使用筛选条件) |
finland_get_company | 按企业 ID 获取公司详情 |
注意: “Nokia”这类常见名称会返回 900 多个结果。使用准确的法定名称(“Nokia Oyj”)、按
company_form(OY/OYJ)筛选,或按location筛选以缩小结果范围。
瑞典(Bolagsverket)
需要 OAuth2 凭据。设置 BOLAGSVERKET_CLIENT_ID 和 BOLAGSVERKET_CLIENT_SECRET 环境变量。
| 工具 | 描述 |
|---|---|
sweden_get_company | 按组织编号获取公司详情 |
sweden_get_document_list | 列出年度报告(årsredovisningar) |
sweden_download_document | 按文档 ID 下载年度报告 |
sweden_check_status | 检查 API 可用性和 OAuth2 状态 |
注意: 此 API 不支持按名称搜索瑞典公司,必须提供组织编号。
示例提示词
公司搜索
- “查找名称为 Telenor 的挪威公司”
- “搜索奥斯陆的 AS 公司”
- “查找名称为 Carlsberg 的丹麦公司”
- “查询芬兰公司 Kone”
- “查找名称为 Røde Kors 的志愿组织”
公司详情
- “获取挪威组织 923609016 的详情”
- “查询 CVR 10150817”
- “获取芬兰公司 0112038-9 的详情”
董事会与职务(仅限挪威)
- “923609016 的董事会成员有哪些?”
- “查找 Equinor 的 CEO”
- “列出组织 914778271 的所有董事”
签字权(仅限挪威)
- “谁有权代表公司 923609016 签字?”
- “获取 Equinor 的签字权信息”
- “谁拥有 914778271 的 prokura?”
分支机构
- “923609016 有哪些分支机构?”
- “搜索名称为 Equinor 的分支机构”
- “列出 CVR 10150817 的生产单位”
注册信息更新(仅限挪威)
- “自昨天以来有哪些公司发生了变更?”
- “获取近期注册信息更新”
- “近期有哪些分支机构发生了变更?”
批量操作(仅限挪威)
- “查询这些公司:923609016、914778271、985399077”
- “验证我电子表格中的这些组织编号”
- “一次性获取多家挪威公司的详情”
参考数据(仅限挪威)
- “列出所有挪威市镇”
- “奥斯陆的市镇代码是什么?”
- “AS 是什么意思?”
- “列出组织形式代码”
电话与 P 编号查询(丹麦)
- “查找电话号码为 33121212 的公司”
- “查询生产单位 P 编号 1234567890”
瑞典查询
- “获取瑞典公司 5560125790 的详情”
- “查询 Volvo 在瑞典的组织编号”
- “5560125790 有哪些年度报告可用?”
- “列出瑞典公司 X 的 årsredovisningar”
- “瑞典 API 是否正常运行?”
瑞典设置
瑞典 Bolagsverket API 需要 OAuth2 身份验证(免费)。
- 注册 värdefulla datamängder API(提交客户注册表)
- 访问开发者门户获取 OAuth2 凭据
- 设置环境变量:
export BOLAGSVERKET_CLIENT_ID="your-client-id" export BOLAGSVERKET_CLIENT_SECRET="your-client-secret"
服务器启动时会记录瑞典凭据是否已配置。如果未配置,则不会注册瑞典工具。
HTTP 模式
如需远程访问或与其他工具集成:
# 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"
安全功能
- Bearer 令牌身份验证:可通过
-token标志或MCP_AUTH_TOKEN环境变量启用身份验证。如果绑定到非回环地址但未设置令牌,服务器将在启动时拒绝运行;绑定到回环地址(127.0.0.1、localhost)时,仍可在本地开发中免令牌运行。 - CORS 保护:通过
-origins标志限制来源(以逗号分隔) - 速率限制:通过
-rate-limit按 IP 限制请求速率(每分钟请求数) - 受信任的代理:通过
-trusted-proxies,接受来自受信任网络的X-Forwarded-For - 请求大小限制:默认 2 MB,请求正文最大 10 MB
端点
除 /health 和 /ready 探针外,所有端点均使用相同的身份验证路径:设置令牌后,访问 /、/metrics、/status 和 /tools 均需提供令牌。探针无需身份验证,方便编排器访问。
| 端点 | 说明 | 身份验证 |
|---|---|---|
/ | MCP 协议(Streamable HTTP) | 设置令牌后需要 |
/health | 存活检查 | 公开 |
/ready | 就绪检查(验证 API 连通性) | 公开 |
/tools | 按国家列出所有工具 | 设置令牌后需要 |
/status | 断路器统计信息 | 设置令牌后需要 |
/metrics | Prometheus 指标 | 设置令牌后需要 |
架构
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
弹性功能
- LRU 缓存:TTL 因端点类型而异(搜索:2 分钟,详情:5–15 分钟,文档:30 分钟,参考数据:24 小时)
- 熔断器:连续失败 5 次后开启,恢复超时为 30 秒
- 请求去重:相同的并发请求共用一次 API 调用
- 速率限制:基于信号量的并发控制(15 个并发请求)
- 带退避的重试:瞬时故障时采用带抖动的指数退避
- 响应大小限制:API 响应为 10MB,文档下载为 100MB
- 令牌效率:使用分页响应(默认 20 条结果),最大限度减少大模型上下文占用
文档
| 文档 | 说明 |
|---|---|
| 设置指南 | 安装、配置和故障排除 |
| API 参考 | 全部 23 个工具的完整参考,包含参数、返回值和示例 |
| 架构 | 系统设计、请求流程、弹性模式 |
| 生产就绪性 | Linux 容器、Docker、Kubernetes、监控 |
开发
# Build
go build .
# Test
go test ./...
# Lint (requires golangci-lint)
golangci-lint run
未来愿景:与 Public 360° 集成
此服务旨在与 public360-mcp-server 协同工作。该服务为北欧公共部门组织使用的 Public 360° 文档和案件管理系统提供 AI 访问能力。
集成场景:
一名案件处理人员收到一家公司的许可申请。当前工作流程如下:
- 在 Public 360° 中打开案件
- 手动在 Brønnøysundregistrene 中查询该公司
- 确认该公司仍在运营且未破产
- 检查签署人是否拥有授权
- 将相关详情复制回案件
连接两个 MCP 服务后:
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.
计划中的集成点:
| 北欧注册机构 | Public 360° | 使用场景 |
|---|---|---|
norway_get_company | sif_get_enterprises | 将公司数据同步到联系人 |
norway_get_roles | sif_get_contacts | 将董事会成员导入为联系人 |
*_search_companies | sif_create_case | 使用经过验证的公司信息自动填充案件 |
sweden_download_document | sif_upload_file | 将年度报告附加到案件 |
这会将两个独立的数据源整合为一个互联的工作流,使 AI 能够在一次对话中验证外部数据并更新内部系统。
增强的注册数据(未来)
当前实现使用免费、开放的 API。通过付费服务可以获取更全面的数据:
瑞典(Bolagsverket)
| 当前(免费) | 付费服务潜力 |
|---|---|
| 基本公司信息 | 董事会成员及其职务 |
| 年报(årsredovisningar) | 授权签字人(firmatecknare) |
| 公司状态 | 公司抵押(företagsinteckningar) |
| 实时更新(而非每日批量更新) | |
| 历史董事会变更 |
我们目前使用的免费 värdefulla datamängder API 提供公司基本信息和年报。Bolagsverket 还提供授权签字人和公司抵押相关的其他电子服务。像 Roaring.io 这样的第三方聚合商会整合多个来源,提供丰富的数据集。
芬兰(PRH)
| 当前(免费) | Virre 服务 |
|---|---|
| 基本公司详情 | 董事会成员和董事总经理 |
| 数字财务报表(IXBRL) | 授权签字人 |
| 注册通知 | 授权代理人 |
| 非数字财务报表 | |
| 翻译后的商业登记簿摘录 | |
| 公司章程 |
免费的 PRH Open Data API 提供每日更新的基本公司信息。Virre Information Service 提供董事会成员详情、签字人信息以及文件购买服务。签约客户批量访问时可享受折扣费用。
这为何重要:
挪威已通过免费的 Brønnøysundregistrene API 提供董事会成员、职务和签字权限。增加瑞典和芬兰的付费数据后,四个国家将实现一致的数据覆盖,可用于:
- 核实谁有权签署合同
- 尽职调查时检查董事会组成
- 获取完整的财务文件
更多 MCP 服务
欢迎查看我的其他 MCP 服务:
| 服务 | 描述 | Stars |
|---|---|---|
| gleif-mcp-server | 访问 GLEIF LEI 数据库。查询公司身份,验证法律实体。 | |
| mediawiki-mcp-server | 将 AI 连接到任意 MediaWiki wiki。搜索、阅读和编辑 wiki 内容。 | |
| miro-mcp-server | 使用 AI 控制 Miro 白板。创建看板、图表、思维导图等。 | |
| productplan-mcp-server | 与 ProductPlan 路线图交互。查询 OKR、创意和发布计划。 | |
| tilbudstrolden-mcp | 搜寻北欧杂货优惠。查找特价、规划餐食、跟踪开支。 |
许可证
Apache License 2.0
致谢
- 使用 Go MCP SDK 构建
- 数据来自 Brønnøysundregistrene、CVR、PRH、Bolagsverket
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。