nordic-registry-mcp-server について
nordic-registry-mcp-serverは、ノルウェー、デンマーク、フィンランド、スウェーデンの公式企業登記に読み取り専用でアクセスします。企業の状態、ガバナンス、署名権限、提出書類を確認する組織や分析担当者向けです。
主な機能
- 01北欧4か国の企業検索
- 02企業の状態と事業情報の取得
- 03取締役会メンバーと役職の照会
- 04法的な署名権限の確認
- 05スウェーデンの年次報告書へのアクセス
- 06ノルウェー企業IDの一括確認
活用シーン
- 01許認可や助成金の申請企業の確認
- 02取引先の状態や破産状況の審査
- 03取締役会構成と署名権限の確認
- 04登記情報による企業IDリストの検証
MCP 対応
MCPクライアントから4か国の公開登記APIを照会する23種類のツールを提供します。登記情報は読み取り専用で、スウェーデンのツールには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 Server
これは何ですか?
ノルウェー、デンマーク、フィンランド、スウェーデンの企業が正規の企業かどうかを数秒で確認できます。4か国の政府ウェブサイトを切り替えることなく、公式の登記情報から破産状況、取締役、署名権限、財務データを確認できます。
Brønnøysundregistrene、CVR、PRH、Bolagsverket の公開 API を利用する 23 個のツールを提供します。Claude Desktop、Claude Code、Cursor、その他あらゆる MCP クライアントで動作します。
できること:
- 4か国の企業を名称で検索
- 企業の詳細を取得:状況、従業員数、業種、住所
- 取締役、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 はすべて無料です。ノルウェー、デンマーク、フィンランドでは認証は不要です。スウェーデンでは、OAuth2 の認証情報が必要な värdefulla datamängder API を使用します(無料登録)。
何ができますか?
接続したら、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:バイナリをダウンロードする
リリースにアクセスし、お使いのプラットフォーム用のファイルをダウンロードします。
方法 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 番号で企業を取得します |
注: デンマークの検索では結果が 1 件だけ返されます。大企業には複数の法人があることがよくあります。最初の結果が正しくないようであれば、「[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 のプロクラ(包括的代理権)を持つ人を教えて」
支店
- 「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"
セキュリティ機能
- ベアラートークン認証:
-tokenフラグまたはMCP_AUTH_TOKEN環境変数による任意の認証。トークンなしでループバック以外のアドレスにバインドしようとすると、起動時に拒否されます。ループバックアドレス(127.0.0.1、localhost)へのバインドでは、ローカル開発向けにトークンなしで引き続き実行できます。 - CORS 保護:
-originsフラグでオリジンを制限(カンマ区切り) - レート制限:
-rate-limitで IP ごとのレート制限を設定(1 分あたりのリクエスト数) - 信頼できるプロキシ:信頼できるネットワークからの
X-Forwarded-Forを利用(-trusted-proxies) - リクエストサイズ制限:デフォルトは 2MB、リクエスト本文の最大サイズは 10MB
エンドポイント
/health と /ready のプローブを除くすべてのエンドポイントで、同じ認証方式が適用されます。トークンが設定されている場合、/、/metrics、/status、/tools のすべてで認証が必要です。オーケストレーターがアクセスできるよう、プローブは認証なしで利用できます。
| エンドポイント | 説明 | 認証 |
|---|---|---|
/ | MCP プロトコル(ストリーミング可能な 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秒の復旧タイムアウトが発生します
- リクエストの重複排除:同一の並行リクエストでは、1回の API 呼び出しを共有します
- レート制限:セマフォベースの同時実行制御(同時リクエスト数:15)
- バックオフ付き再試行:一時的な障害が発生した場合、ジッターを加えた指数バックオフを行います
- レスポンスサイズの上限:API レスポンスは10MB、文書ダウンロードは100MB
- トークン効率:ページ分割されたレスポンス(デフォルトで20件)により、LLM のコンテキスト使用量を最小限に抑えます
ドキュメント
| ドキュメント | 説明 |
|---|---|
| セットアップガイド | インストール、設定、トラブルシューティング |
| API リファレンス | パラメーター、戻り値、例を含む23個すべてのツールの完全なリファレンス |
| アーキテクチャ | システム設計、リクエストの流れ、レジリエンスパターン |
| 本番環境への対応 | Linux コンテナー、Docker、Kubernetes、モニタリング |
開発
# Build
go build .
# Test
go test ./...
# Lint (requires golangci-lint)
golangci-lint run
将来の展望:Public 360°との連携
このサーバーは、北欧の公共機関で使用されている Public 360°の文書管理および案件管理システムへの AI アクセスを提供する public360-mcp-server と連携して動作するように設計されています。
連携のシナリオ:
担当者が企業から許可申請を受け取ります。現在のワークフローは次のとおりです。
- 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 | 年次報告書を案件に添付する |
これにより、別々の2つのデータソースが連携したワークフローになり、AI が1回の会話で外部データを確認し、内部システムを更新できるようになります。
強化された登記データ(将来)
現在の実装では、無料のオープン 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 を通じて、取締役、役職、署名権限を取得できます。スウェーデンとフィンランドのプレミアムデータを追加すれば、以下について 4 か国すべてで一貫した情報を利用できます。
- 契約に署名できる人物の確認
- デューデリジェンスに向けた取締役会の構成確認
- 財務書類一式へのアクセス
その他の MCP サーバー
私が開発したその他の MCP サーバーもご覧ください。
| サーバー | 説明 | スター数 |
|---|---|---|
| gleif-mcp-server | GLEIF LEI データベースにアクセスします。会社の識別情報を検索し、法人を検証できます。 | |
| mediawiki-mcp-server | AI を任意の MediaWiki ウィキに接続します。ウィキのコンテンツを検索、閲覧、編集できます。 | |
| 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 サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。