registry-mcp — national company registries について
registry-mcpは、英国、ノルウェー、スウェーデンの企業登記を検索するMCPサーバー兼REST APIです。共通のJSON形式で情報を返し、申告期限の根拠やキャッシュの鮮度も示します。
主な機能
- 01各国識別番号による企業検索
- 02対応登記機関での企業名検索
- 03根拠付きの申告期限
- 04ネットワーク不要の識別番号検証
- 05キャッシュと取得時刻の表示
活用シーン
- 01企業の登記情報の確認
- 02法定申告期限の確認
- 03企業識別番号の検証と正規化
MCP 対応
MCPクライアントに、5つの登記ツール、ChatGPT用エイリアス2つ、登記規則リソース、explain_companyプロンプトを提供します。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://api.foretak.dev/mcpclaude mcp add --transport http foretak-registry https://api.foretak.dev/mcp{"mcpServers":{"foretak-registry":{"type":"http","url":"https://api.foretak.dev/mcp"}}}Cursor で開く{"servers":{"foretak-registry":{"type":"http","url":"https://api.foretak.dev/mcp"}}}VS Code で開く{"mcpServers":{"foretak-registry":{"type":"http","url":"https://api.foretak.dev/mcp"}}}{"mcpServers":{"foretak-registry":{"serverUrl":"https://api.foretak.dev/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
7| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| id | string | はい | 会社の国別識別子。自動的に正規化されます — ノルウェーの organisasjonsnummer(orgnr)、Companies House の会社番号(CRN)、またはスウェーデンの organisationsnummer/personnummer。スペース、ピリオド、ハイフン、NO...MVA サフィックス、短い CRN を受け付けます。各国の正確な形式は list_countries を参照してください。 |
| country | string | いいえ | ISO-3166-1 alpha-2 — NO ノルウェー、GB 英国、SE スウェーデン。ここで UK は国コードではなく、指定すると拒否されます。現在の対応国は list_countries を呼び出して確認してください。 |
| include | array | いいえ | 基本レポートと併せて取得する添付データ名。デフォルトは空で、その場合、上流へのリクエストは正確に 1 回です。各項目は独立した 2 回目の取得として指定名の下に添付され、独自の出典情報を持ちます。指定しない限り null です。この引数では 7 項目それぞれについて説明します。'filings'(全対象国):事業体が何をいつ申告したか — Companies House はすべての申告履歴、Bolagsverket は提出済み年次報告書、Regnskapsregisteret は提出済み年次決算を返します。ブロックの notes に内容が、total_count に登記簿にある残りの件数が記載されます。'charges'(GB):登記された抵当権およびその他の担保権を、登記簿独自の表現で返します。'insolvency'(GB):清算および管財手続き — メンバーによる任意清算は*支払能力のある*状態での清算であるため、is_liquidation: true だけでは経営困難の証拠になりません。'financials'(NO および SE):直近の提出済み会計期間について登記簿が記録する数値 — 売上高、営業成績、利益、貸借対照表、自己資本、負債。各値に通貨が付随し、比率や判定は含みません。ノルウェーのデータは 'filings' の取得結果に含まれ、スウェーデンのデータは事業体自身が提出した K2 年次報告書から取得されます。存在するブロック内の数値が null の場合、その項目を会社が報告していないことを意味します。ブロックがない場合は、未リクエスト、取得失敗、または — スウェーデンの場合 — デジタル年次報告書が未提出であることを意味し、notes に理由が記載されます。英国はこれを公開していないため、GB の 'financials' は空のブロックではなく bad_request になります。'lei'(識別子が自然人の可能性があるスウェーデンを除く全対象国):GLEIF(Global LEI Foundation)が公開する Legal Entity Identifier — CC0 でキー不要です。存在するブロック内の lei: null は、GLEIF に情報がないことを意味します。'parents'('lei' と同じ対象国):GLEIF の Level 2 データに基づく直接および最終親会社 — この事業体の会計をグループに連結する事業体であり、必ずしも過半数株主とは限りません。GLEIF が開示しない場合、該当する側には 'NATURAL_PERSONS' のようなカテゴリ語で事業体自身が示した理由が含まれます — 名称ではなく、未検証です。'peppol'(ノルウェー):Peppol ネットワーク経由で電子請求書を事業体に届けられるかどうかを、2027 年 1 月 1 日の EHF(Peppol BIS Billing 3.0)義務化に先立ち、ELMA と同様に SML/SMP の経路をリアルタイムにたどって確認します。registered: null は権威ある回答がないことを意味し、「いいえ」と解釈してはいけません。NXDOMAIN または SMP 404 の場合に限り false になります。まず list_countries で各国の supported_includes を確認してください。その国が公開していない値を指定すると、空の結果ではなく、対応項目を示す bad_request が返ります。 |
詳細
registry-mcp — 企業登記 MCP
あらゆる国の企業データをAIエージェントに。 1つのMCPサーバーとREST APIで、現在3か国の国別登記情報を提供します。英国のCompanies Houseは会社番号で検索、ノルウェーのEnhetsregisteret/Brønnøysundregistrene(brreg)は組織番号(orgnr)で検索、スウェーデンのBolagsverketは組織番号で検索できます。どの国を検索しても、同じJSON形式で返されます。
claude mcp add registry-mcp --transport http https://api.foretak.dev/mcp?src=readme
インストール不要で、stdio経由で利用できます。
claude mcp add registry-mcp -- uvx registry-mcp
このツールを導入する価値:
- 日付だけでなく、根拠となる規則も示す期限。
company_deadlinesは次回の提出期限と、その理由をapplies_becauseで示します。ノルウェーの法人形態に対する法定義務、または登記簿に記載された日付をこちらで計算せずに返す場合の「Companies Houseが当該会社の日付として公表しています」といった理由です。数字だけでなく、根拠も引用できます。 - 古くても24時間以内で、そのことも明示します。 すべての応答に
cachedとfetched_atが含まれます。OpenCorporates自身のナレッジベースは、訂正が同サイトに反映されるまで「30日待つ」ようユーザーに案内しています。現行サービス自身が明言する、鮮度の30倍の差です。 - ツールは50個ではなく7個 — 登記情報ツール5個と、ChatGPTコネクターのエイリアス2個です。エージェントのコンテキストに読み込むツールが30〜50個を超えると、ツール選択の精度は低下します。また、一部のクライアントでは上限が約40個です。ツール7個なら、その上限の約17%に収まり、同じ用途で23〜78個のツールを提供する競合サービスより少ない数です。
セキュリティ。 常に読み取り専用です。登記簿やその他の場所に書き込むことはありません。呼び出し元の認証情報は不要です。このデプロイメントが使用する上流認証情報(COMPANIES_HOUSE_API_KEY)は環境変数から読み込まれ、ログにも記録されず、返されることもありません。基本の検索で呼び出す上流サービスは、data.brreg.no、api.company-information.service.gov.uk、gw.api.bolagsverket.se の3つのみです。include=["lei"]/include=["parents"] を指定すると、さらに api.gleif.org(GLEIF、CC0、キー不要)を呼び出します。include=["peppol"] を指定すると、Peppol SMLでDNSレコードを解決し、その参加者について指定されたSMPホストを呼び出します。いずれからも応答がない場合に限り、Peppol Directory(directory.peppol.eu)にフォールバックします。詳細は上記の添付情報をご覧ください。個人データは、各国の登記簿が事業体自体についてすでに公開している情報を超えて扱いません。また、スウェーデンの個人事業主の場合、会社番号は本人のpersonnummerと同じです。そのため、自然人の識別情報となり得る国については、利用ログに識別子を一切保存しません(legal/privacy.md)。このサービスは、制裁対象者、PEP、ネガティブ報道のスクリーニングや、銀行口座情報の確認は行いません。詳細:SECURITY.md。
リモートのストリーミング可能なHTTPサーバーにワンクリックでインストールできます。
その他のクライアント(Claude Desktop、Cursor、VS Code、Cline、プレーンな JSON 設定)については、docs/clients.md をご覧ください。
ChatGPT に追加する
ChatGPT はカスタムコネクターを通じて MCP サーバーに接続し、詳細調査モードではこのサーバーが 5 つのレジストリツールとともに提供する 2 つのツール、search と fetch のみを呼び出します。ChatGPT で Settings → Connectors を開き、カスタムコネクターを追加して、次の URL を指定します。
https://api.foretak.dev/mcp?src=readme
認証も、キーも、アカウントも必要ありません。ChatGPT のプランで Settings → Connectors にカスタムコネクターが表示されない場合は、まず Settings → Security and login → Developer mode を有効にしてから、https://chatgpt.com/plugins で URL を追加してください。
search は企業名、国の識別番号、または名前と国を組み合わせたクエリ(「Tesco United Kingdom」など)を 1 つ受け取り、引用可能な行を返します。fetch は行の id("NO:923609016")を受け取り、その企業の登記記録と法定提出期限を返します。両方の完全な JSON は metadata に含まれます。
Claude Desktop に追加する
Claude Desktop では同じ URL をカスタムコネクターとして指定します。Settings → Connectors → Add custom connector を開き、https://api.foretak.dev/mcp?src=readme を指定してください。キーは不要です。代わりにローカルの stdio でインストールする場合は、設定をご覧ください。
ステータス:
0.4.2、稼働中 —GET /healthは{"version":"0.4.2","countries":["GB","NO","SE"]}を返します。5 つのレジストリツールとそのレスポンス形式は固定されています。2 つのコネクターエイリアス(search、fetch)は ChatGPT 向けにそれらをラップし、新しい形式は追加しません。ホスト型 API はapi.foretak.devで稼働中で、公式 MCP レジストリにio.github.foretak/registry-mcpとして登録されています。対象国:英国(Companies House)、ノルウェー(brreg)、スウェーデン(Bolagsverket) — 各国の識別番号の形式と呼び出し例については、下記をご覧ください。
Claude Code に追加する
前述と同じ 2 つの方法、Streamable HTTP またはローカル stdio を利用できます。CLI ではなく、プロジェクトレベルの .mcp.json ファイルとして追加する場合は、設定をご覧ください。
返される内容
$ curl https://api.foretak.dev/v1/NO/company/923609016
{
"country": "NO", "registry": "brreg",
"id": "923609016", "id_formatted": "923 609 016", "id_scheme": "organisasjonsnummer", "euid": null,
"name": "EQUINOR ASA",
"legal_form_code": "ASA", "legal_form": "Public limited company", "legal_form_local": "Allmennaksjeselskap",
"status": "active", "is_active": true, "registered_at": "1995-03-12",
"vat_registered": true, "vat_number": "NO923609016MVA", "vat_registered_at": "1989-07-01",
"employees": 21239, "share_capital": 5976872600.0, "share_capital_currency": "NOK",
"business_address": {"lines": ["Forusbeen 50"], "postal_code": "4035", "city": "STAVANGER"},
"advertising_protected": null,
"source": "Enhetsregisteret (Brønnøysundregistrene)", "license": "NLOD 2.0"
}
要約版です。完全な CompanyReport には、previous_names、industry_codes、registers、purpose、parent_id、confidence、cached、fetched_at、notes も含まれます。すべてのフィールドは llms-full.txt §5 に記載されています。
euid は、一部の加盟国の登記機関が公開している EU 全域で使われる識別子です(フィンランドは公開していますが、当方の対象国ではまだありません)。LEI ではなく、複数の要素から組み立てるものでもありません。advertising_protected は true/false/null のいずれかで、登記機関がこの法人をダイレクトマーケティング目的での利用から保護対象としているかを示します。null は、登記機関がそのようなフラグを一切公開していないことを意味します(現時点ではノルウェーと英国が該当します)。true の場合(たとえば、スウェーデンの reklamspärr)、その旨を notes の文で説明し、引き渡す連絡先情報にその指定を添える必要があります。
英国も同じ形式で、同じく要約版です。
$ curl https://api.foretak.dev/v1/GB/company/00445790
{
"country": "GB", "registry": "companies-house",
"id": "00445790", "id_formatted": null, "id_scheme": "company number", "euid": null,
"name": "TESCO PLC",
"legal_form_code": "plc", "legal_form": "Public limited company",
"status": "active", "is_active": true, "registered_at": "1947-11-27",
"vat_registered": null, "vat_number": null,
"employees": null, "employees_reported": false,
"registers": {"insolvency": false},
"industry_codes": [{"code": "47110", "description": null, "scheme": "SIC 2007", "rank": 1}],
"business_address": {"lines": ["Tesco House, Shire Park", "Kestrel Way"], "postal_code": "AL7 1GA", "city": "Welwyn Garden City"},
"advertising_protected": null,
"published_deadlines": [
{"kind": "annual_accounts", "due_date": "2027-08-26", "period_end": "2027-02-26", "overdue": false, "source": "accounts.next_accounts.due_on"},
{"kind": "confirmation_statement", "due_date": "2027-07-02", "period_end": "2027-06-18", "overdue": false, "source": "confirmation_statement.next_due"}
],
"source": "Companies House (UK)", "license": "Crown copyright — Companies House public register, free to re-use"
}
published_deadlines には、登記機関が自ら公開している期限と、その期限の根拠となる上流フィールドが含まれます。ノルウェーとスウェーデンではすべての期限を独自に計算するため、値は [] です。
0.3.0 で追加されたスウェーデンは、「一つの形式」という主張が真価を発揮し始める国です。
$ curl https://api.foretak.dev/v1/SE/company/5560160680
{
"country": "SE", "registry": "bolagsverket",
"id": "5560160680", "id_formatted": "556016-0680", "id_scheme": "organisationsnummer", "euid": null,
"name": "Telefonaktiebolaget LM Ericsson",
"legal_form_code": "AB", "legal_form": "Private or public limited company", "legal_form_local": "Aktiebolag",
"status": "active", "is_active": true, "registered_at": "1918-08-19",
"vat_registered": null, "vat_number": null,
"employees": null, "employees_reported": false,
"industry_codes": [{"code": "70100", "description": "Verksamheter som utövas av huvudkontor", "scheme": "SNI 2007", "rank": 1}],
"postal_address": {"postal_code": "16483", "city": "STOCKHOLM", "country_code": "SE"},
"advertising_protected": null,
"published_deadlines": [],
"source": "Bolagsverket (bolagsverket.se)",
"license": "Free re-use (Bolagsverket/SCB high-value datasets, EU Open Data Directive) — the publisher names no licence"
}
Bolagsverket はこのデータのライセンスを明示していないため、当方も明示していません。この文字列は許可の内容を説明し、引用できるライセンス名がないことを明確に示します。このフィールドに馴染みのあるライセンス名を記載すれば、事実の捏造になるためです。
スウェーデンではステータスフィールドが一切公開されていません。status は、抹消日、進行中の清算または再建手続き、Statistics Sweden の「経済活動中」フラグという、互いに独立した3つの情報から導出されます。そのため is_active は「登記されており、清算に向けた手続き中ではない」という意味であり、事業を行っていることと同じではありません。いずれかの情報が利用できない場合、回答は常に unknown となり、active にはなりません。
2つの日付を計算し、それぞれに根拠となる規定を付記します。
$ curl "https://api.foretak.dev/v1/SE/company/5560160680/deadlines?today=2026-09-07"
{"kind": "general_meeting", "due_date": "2027-06-30", "days_until": 296, "rolled_forward": false, "period_label": "2026"}
{"kind": "annual_accounts", "due_date": "2027-07-31", "days_until": 327, "rolled_forward": false, "period_label": "2026"}
定時株主総会まで6か月(aktiebolagslagen 7 kap. 10 §)、遅延手数料が発生する前の提出期限まで7か月(årsredovisningslagen 8 kap. 6 §)です。スウェーデンの情報源に繰り延べるとの記載がないため、いずれの日付も週末に当たっても繰り延べません。どちらも、特に指定がなければ会計年度末を12月31日と仮定します。その仮定と、会計年度末が異なる場合に両方の日付をどう変更するかを、notes の文で明記しています。ただし、Bolagsverket の書類一覧には、提出済み年次報告書自体の会計年度末が公開されています。include=["filings"] を指定すると(company_deadlines はどちらのインターフェイスでもこれを受け付けます)、その日付を確認して、仮定を登記機関が公開する値に置き換えられます。スウェーデンでは search_company は not_implemented を返します。無料 API が提供する操作は4つで、そのいずれも名称を受け付けないためです。
null に注目してください。Companies House は、どの会社についても VAT 登録状況、従業員数、資本金を公開していません。そのため、これらのフィールドは推測せず null としています。null は「この登記機関は情報を公開していない」という意味であり、「存在しない」という意味ではありません。国をまたいで一つの形式を使ううえで、この誠実さが重要です。
そして期限についてです。ここに英国モジュールの真価があります。
$ curl "https://api.foretak.dev/v1/GB/company/00445790/deadlines?today=2026-09-04"
{
"company_name": "TESCO PLC", "today": "2026-09-04",
"deadlines": [
{"kind": "confirmation_statement", "local_name": "Confirmation statement (CS01)",
"due_date": "2027-07-02", "period_end": "2027-06-18", "days_until": 301,
"applies_because": "Companies House publishes this date for the company itself; it is the register's own figure, not a calculation."},
{"kind": "annual_accounts", "local_name": "Annual accounts",
"due_date": "2027-08-26", "period_end": "2027-02-26", "days_until": 356,
"applies_because": "Companies House publishes this date for the company itself; it is the register's own figure, not a calculation."}
]
}
Companies House が日付を公開している場合はその日付を引用し、公開していない場合は、根拠となる法令を引用して日付を計算し、applies_because でその理由を示します。英国の期限は、週末や銀行休業日に当たっても繰り延べません。また、登記機関がまだ期限超過として表示している提出については、days_until がマイナスになります。
自分で実行しますか? api.foretak.dev のホスト型サービスには、必要な認証情報がすべて設定されています。セルフホストする場合、GB には無料の Companies House key が、SE には Bolagsverket の OAuth 2 クライアントペア(BOLAGSVERKET_CLIENT_ID、BOLAGSVERKET_CLIENT_SECRET)が必要です。これらがない場合、その2か国は変数名を示す upstream_error を返しますが、他のすべての国は引き続き回答します。ノルウェーでは何も必要ありません。
ツール
| ツール | 機能 |
|---|---|
lookup_company(id, country="NO") | 国内識別子で指定した1社の完全な CompanyReport |
search_company(name, country="NO", limit=10) | SearchResult — 登録簿での関連度順に並んだ候補。識別子とスコアを含みます |
company_deadlines(id, country="NO", today=None) | DeadlineReport — 法定提出義務ごとの次回期限 |
validate_company_id(id, country="NO") | ValidationResult — ネットワーク呼び出しなしで識別子を検証し、正規化します |
list_countries() | 現在サポートされている国内登録簿 |
コネクターのエイリアス — MCP サーバーに search と fetch のみを介してアクセスする ChatGPT 向けです(ChatGPT に追加)。新しいレスポンス形式を追加せず、REST 版もありません。
| ツール | 機能 |
|---|---|
search(query) | search_company の ChatGPT コネクター用エイリアス — 自由形式のクエリを1件受け取り、{"results": [{"id", "title", "url"}]} を返します |
fetch(id) | lookup_company + company_deadlines の ChatGPT コネクター用エイリアス — "{COUNTRY}:{identifier}" を1件受け取り、両方のレポートを metadata に含む Markdown ドキュメントを返します |
さらに、リソース registry://rules/{country}(識別子のルール、法的形態、期限のルール。ループでの検証の代わりに一度読み込みます)とプロンプト explain_company があります。
添付情報 — 基本レポートと並行して取得する独立した追加情報です。名前ごとにオプトインします。MCP では include=["filings"]、REST では ?include=filings を指定します。
filings— 事業体が提出した書類と提出時期(GB、NO、SE)charges— 事業体に対して登録された担保(GBのみ)insolvency— 清算および管財手続き(GBのみ)financials— 最新の提出済み会計期間について、登録簿独自の財務数値(売上高、利益、貸借対照表、資本、負債)を提供します。取引先に支払能力がありそうかを確認できます。ノルウェーでは独自の主要数値フィード、スウェーデンでは事業体自身が提出した年次報告書の数値を読み取ります(NO、SE)lei— GLEIF が公開する、事業体の法的主体識別子。CC0 ライセンスで、API キーは不要です(SE以外のすべての国)parents— GLEIF の Level 2 データが開示する直接および最終的な企業親会社、または親会社が開示されていない場合に事業体自身が示す理由(NATURAL_PERSONSのようなカテゴリ語であり、名称ではありません)を示します(leiと同じ国)peppol— 2027年1月1日の電子請求書義務に先立ち、SML/SMP をリアルタイムでたどって、事業体が Peppol ネットワーク経由で電子請求書を受信できるかどうかを調べます(NOのみ)
各国で宣言されている対応項目は、list_countries / GET /v1/countries の supported_includes にあります。filings の2段階の null 許容性と国ごとの対象範囲については、llms-full.txt を参照してください。
ノルウェーの CompanyReport にある parent_id と in_group は、その事業体について Enhetsregisteret が持つ親/下位事業体の関係を示すもので、それ以上の意味はありません。企業グループをたどるツールはありません。企業グループを上位にたどるには、parent_id を使って lookup_company を繰り返し呼び出します。この方法で分かるのは「登録簿上、この事業体の親として記載されているのは誰か」であり、「この会社を実質的に所有または支配しているのは誰か」ではありません。後者は別の問いであり、このサービスでは回答できません。上記の include=["parents"] は、これに関連する事実を得る別の方法です。GLEIF が示す、この事業体の会計を連結する主体に関する見解であり、Enhetsregisteret 独自の階層でも、実質的所有者に関する情報でもありません。詳しくは llms-full.txt §5 を参照してください。
エージェントが企業を確認する理由
これを単なる親切ではなく義務にする規則が3つあります。Finanstilsynet の Rundskriv 15/2019 § 4.4.1 では、Enhetsregisteret への oppslag は3か月以内のものが認められます。顧客から提供された企業情報に基づいて確認する場合は1か月以内とし、照会の notoritet、つまり何をいつ参照したかを記録するよう求めています。2027年1月1日から、ノルウェーの記帳義務を負う企業は相互に電子請求書を送る必要があり、受取人は ELMA で、これらのツールがすでに受け付けている識別子である0192:+組織番号を使って特定されます。2027年7月10日からは、AMLR第23条第4項により、法人との新たな取引関係ごとに「有効な登記証明書または最近発行された登記簿の抜粋」が必要になります。
source_url、fetched_at、cached、license、applies_because は、そのためにあります。どの記録を参照したか、いつ読み取ったか、24時間キャッシュを利用したかどうか、その記録に適用される利用条件、そして期限が登記簿から引用されたものか、明示された規則に基づいて算出されたものかを示します。
制限事項も明示します。制裁対象者や PEP のスクリーニングは行いません。銀行口座の確認も行いません。最もよくある請求書詐欺は支払先の変更であり、実在するサプライヤーの口座番号だけが誤っています。また、実質的支配者の情報も扱いません。brreg は申請に基づいてのみ情報を公開しており、申請できる区分に製品ベンダーは含まれません。詳しくはllms-full.txt §9 をご覧ください。
設定
Claude Code — プロジェクトルートの .mcp.json
{
"mcpServers": {
"registry-mcp": {
"command": "uvx",
"args": ["registry-mcp"],
"env": {
"REGISTRY_MCP_CONTACT_EMAIL": "[email protected]",
"COMPANIES_HOUSE_API_KEY": "your-companies-house-key"
}
}
}
}
ノルウェーだけを利用する場合は、COMPANIES_HOUSE_API_KEY を削除してください。それ以外の国では不要です。
Cursor — ~/.cursor/mcp.json(またはプロジェクト内の .cursor/mcp.json)
{
"mcpServers": {
"registry-mcp": {
"command": "uvx",
"args": ["registry-mcp"],
"env": { "REGISTRY_MCP_CONTACT_EMAIL": "[email protected]" }
}
}
}
Claude Desktop — claude_desktop_config.json
macOS:~/Library/Application Support/Claude/claude_desktop_config.json
Windows:%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"registry-mcp": {
"command": "uvx",
"args": ["registry-mcp"],
"env": { "REGISTRY_MCP_CONTACT_EMAIL": "[email protected]" }
}
}
}
uvx の代わりに npm — 同じサーバーを Node ランチャーで起動
{
"mcpServers": {
"registry-mcp": { "command": "npx", "args": ["-y", "registry-mcp"] }
}
}
npx registry-mcp は uvx registry-mcp を(利用できない場合は pipx run registry-mcp にフォールバックして)呼び出すため、Python 3.12 以降と uv または pipx のいずれかが必要です。
ホスト型、ローカルインストール不要 — Streamable HTTP
{
"mcpServers": {
"registry-mcp": { "type": "http", "url": "https://api.foretak.dev/mcp?src=readme" }
}
}
環境変数 — すべて任意です。
| 変数 | 意味 |
|---|---|
REGISTRY_MCP_CONTACT_EMAIL | 国の登記機関に送信する User-Agent に含める連絡先メールアドレスです。Brønnøysundregistrene が API クライアントに求めています。未設定の場合は匿名クライアントとなり、上流でリクエストが制限またはブロックされる可能性があります。 |
REGISTRY_MCP_CACHE_PATH | ローカルの SQLite レスポンスキャッシュのパス(TTL は 24 時間)です。既定値は ./data/cache.sqlite3 です。 |
COMPANIES_HOUSE_API_KEY | 英国(GB)で必要です。キーは無料で即時に取得できます。未設定の場合、GB の検索はこの変数名を示すヒントとともに upstream_error を返します。それ以外の国は引き続き利用できます。 |
BOLAGSVERKET_CLIENT_ID、BOLAGSVERKET_CLIENT_SECRET | スウェーデン(SE)で必要です。Bolagsverket に申請して取得する OAuth 2 クライアントのペアです。データ自体は EU の高価値データセット規則に基づき無料です。未設定の場合、SE の検索は両方の変数名を示す upstream_error を返します。それ以外の国は引き続き利用できます。 |
REST
すべてのツールには、同一の JSON ドキュメントを返す REST 版があります。
# One company by organisasjonsnummer
curl https://api.foretak.dev/v1/NO/company/923609016
# Search by name
curl "https://api.foretak.dev/v1/NO/search?q=equinor&limit=5"
# Statutory filing deadlines, from a date you choose
curl "https://api.foretak.dev/v1/NO/company/923609016/deadlines?today=2026-01-15"
# Checksum-validate an identifier — no upstream call, instant
curl https://api.foretak.dev/v1/NO/validate/923609016
# Which countries are live, and which need an API key
curl https://api.foretak.dev/v1/countries
# The same five routes for the United Kingdom — GB, never UK
curl https://api.foretak.dev/v1/GB/company/00445790
curl "https://api.foretak.dev/v1/GB/search?q=tesco&limit=5"
curl "https://api.foretak.dev/v1/GB/company/00445790/deadlines?today=2026-09-04"
curl https://api.foretak.dev/v1/GB/validate/445790
# Sweden — four of the five. /search returns 501 not_implemented: the free
# Bolagsverket API has no name index, and the error's hint says so.
curl https://api.foretak.dev/v1/SE/company/5560160680
curl "https://api.foretak.dev/v1/SE/company/5560160680/deadlines?today=2026-09-07"
curl https://api.foretak.dev/v1/SE/validate/556016-0680
機械可読なドキュメント: /llms.txt、/llms-full.txt、/openapi.json。
対応国の追加
ノルウェーは 1 つのフォルダーで構成されています。英国も同様です。 registries/gb/ は 4 つのファイルと 1 行の import で追加され、GB は list_countries、すべてのツール、/openapi.json、registry://rules/GB に、それぞれ単独で追加されました。スウェーデンも同様です。 registries/se/ は 0.3.0 でリリースされ、core/ に一切変更を加えていません。抽象化に最も適合しにくいスウェーデンの部分も含まれます。ステータスフィールドを公開しない登記簿、上流が提供していない操作(search_company は not_implemented を返します)、そして自然人の国民 ID になり得る識別子です。
src/registry_mcp/registries/xx/ を registries/<cc>/ にコピーし、4 つのメソッドを実装して、import を 1 行追加するだけです。core/ には変更を加えず、両方のインターフェースとマニフェストに新しい国が自動的に反映されます。
→ CONTRIBUTING.md の「Add your country」、まず担当する国を申請するには new country issue template をご利用ください。
開発
uv sync --all-extras
uv run pytest # `-m "not live"` to skip the tests that hit the real registry
uv run mypy .
uv run ruff check .
構成:
src/registry_mcp/core/ country-neutral models, Registry ABC, rules, date helpers
src/registry_mcp/registries/ one folder per country — no/ (Norway), gb/ (UK), se/ (Sweden), xx/ (template)
src/registry_mcp/api/ FastAPI REST surface
src/registry_mcp/mcp/ FastMCP server (stdio + Streamable HTTP at /mcp)
ドキュメント
NORBIZ_SPEC.md— ノルウェーモジュールの技術仕様UK_SPEC.md— 英国モジュールの技術仕様SWEDEN_SPEC.md— スウェーデンモジュールの技術仕様DECISIONS.md— インターフェースとスキーマに関する決定事項KEYWORDS.md— 正式なエイリアス一覧SUBMISSIONS.md— 登記機関への申請状況legal/terms.md— 利用規約とデータの帰属表示
データソースとライセンス
ノルウェーのデータは Enhetsregisteret(Brønnøysundregistrene) に由来し、NLOD 2.0 のもとで公開されています。出典の明記が必要です。英国のデータは Companies House の公開登録簿 に由来します。英国王室の著作権が適用され、出典を明記する条件なしで再利用できますが、ここでは明記しています。スウェーデンのデータは Bolagsverket に由来し、同じペイロード内で第 2 の提供元としてスウェーデン統計局(SCB)のデータも含まれています。EU の高付加価値データセット制度のもとで、värdefull datamängd として自由に再利用できます。Bolagsverket 自身の言葉では、「Det krävs inget avtal för att du ska få använda vårt API för värdefulla datamängder(高付加価値データセットの API を利用するのに契約は必要ありません)」、また 「Värdefulla datamängder är avgiftsfritt(高付加価値データセットは無料です)」 です。Bolagsverket はライセンスを明示していないため、当プロジェクトでも明示していません。license 文字列には、利用許諾の内容と、引用できるライセンス名が存在しないことを明記しています。すべてのレスポンスには source、source_url、license が含まれており、データとともに出典情報が伝わります。このプロジェクト独自のコードは MIT ライセンスです。Brønnøysundregistrene、Companies House、Bolagsverket とは提携関係になく、これらの組織からの推奨も受けていません。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。