Polish Open Data (unofficial) について
PolishOpenDataは、ポーランドの公的登録情報を扱う.NETライブラリ群とMCPサーバーです。企業、VAT、地籍区画、住所、不動産価格の検索に加え、識別番号やVATのオフライン確認も提供します。
主な機能
- 01KRS企業情報の検索
- 02VATステータスと銀行口座の確認
- 03ポーランド識別番号のオフライン検証
- 04地籍区画の検索と住所ジオコーディング
- 05不動産取引価格の検索
- 06REGON登録情報クライアント(任意)
活用シーン
- 01支払い前の取引先確認
- 02ネットワーク接続なしでの識別番号検証
- 03ID、座標、地域名による区画検索
- 04地域内の不動産取引の確認
MCP 対応
PolishOpenData.Mcpパッケージは、企業・VAT検索、KRS抄本、区画検索、住所ジオコーディング、不動産価格、識別番号検証を公開するMCPサーバーを提供します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
PolishOpenData
ポーランドの公的登録簿向け .NET ライブラリと MCP サーバー — KRS での企業検索、銀行口座の照合に対応した VAT ホワイトリスト(Biała Lista)(オンライン、または財務省のフラットファイルを使ったオフライン照合)、GUS REGON 登録簿のクライアント(ライブラリのみ)、GUGiK の地籍筆検索(ULDK)、住所ジオコーディング(UUG)、不動産取引価格(RCN)、および NIP、REGON、KRS、NRB、土地登記簿(KW)番号のオフライン検証に対応しています。
🇵🇱 ポーランド語版
非公式プロジェクトです。法務省、財務省、その他の公的機関とは無関係です。結果は情報提供のみを目的としており、法的助言や税務助言ではありません。各登録簿が正式な情報源です。
パッケージ
| パッケージ | 機能 | 対象 |
|---|---|---|
PolishOpenData.Core | オフライン値型:Nip、Regon、KrsNumber、Nrb、KwNumber(公式裁判所コード表を含む) | net10.0, netstandard2.0 |
PolishOpenData.Krs | KRS Open API:現行/全項目の抄本、抹消済み事業体、日次変更フィード、英語の概要 | net10.0, netstandard2.0 |
PolishOpenData.BialaLista | VAT ホワイトリスト:ステータス、リクエスト ID 付き銀行口座照合、一括処理、日次上限ガード | net10.0, netstandard2.0 |
PolishOpenData.BialaLista.Offline | 財務省の日次フラットファイルを使った VAT ホワイトリストのオフライン照合:リクエスト上限なし、複数ペアを一度に処理、リクエスト ID なし | net10.0, netstandard2.0 |
PolishOpenData.Regon | GUS REGON(BIR1.2):NIP/REGON/KRS による検索、20 件の一括処理、全項目のレポート、セッションとリクエスト制限機能を提供します。無料の GUS キーを別途取得する必要があります | net10.0, netstandard2.0 |
PolishOpenData.Geo.Core | 型付きポーランド座標:組み込みの変換機能を備えた Pl1992Point(EPSG:2180)と Wgs84Point、Pl1992Bbox、ParcelId(TERYT 地籍筆識別子) | net10.0, netstandard2.0 |
PolishOpenData.Uldk | GUGiK ULDK:ID、地点、または地域名と番号で地籍筆を検索し、その境界を WKT で取得 | net10.0, netstandard2.0 |
PolishOpenData.Uug | GUGiK UUG:ポーランドの住所を一致精度付きの WGS-84 地点にジオコーディング、または地点に最も近い住所を検索 | net10.0, netstandard2.0 |
PolishOpenData.Rcn | GUGiK RCN(Rejestr Cen Nieruchomości):地域と期間を指定した不動産取引(住戸、地籍筆、建物)の取得と、m² あたりの価格統計 | net10.0, netstandard2.0 |
PolishOpenData.Mcp | AI アシスタント向け MCP サーバー:企業検索、VAT ホワイトリストと銀行口座の照合(オンラインおよびオフライン)、KRS 抄本、地籍筆、住所ジオコーディング、不動産価格、識別番号の検証 | .NET 10 ツール |
オフライン検証
ネットワーク不要、DI 不要:
dotnet add package PolishOpenData.Core
using PolishOpenData;
Console.WriteLine(Nip.TryParse("774-000-14-54", out var nip) ? $"Valid NIP {nip}" : "Invalid NIP"); // Valid NIP 7740001454
Console.WriteLine(KwNumber.TryParse("WA1M/00012345/1", out var kw) ? kw.Court?.Name : "Invalid KW number"); // Sąd Rejonowy dla Warszawy-Mokotowa …
Console.WriteLine(string.Join(", ", KwNumber.SuggestCorrections("WAIM/00012345/1"))); // WA1M/00012345/1
クイックスタート:取引先を確認する
dotnet add package PolishOpenData.BialaLista
dotnet add package PolishOpenData.Krs
dotnet add package Microsoft.Extensions.Http.Resilience
using Microsoft.Extensions.DependencyInjection;
using PolishOpenData;
using PolishOpenData.BialaLista;
using PolishOpenData.Krs;
using System.Threading.Tasks;
var services = new ServiceCollection();
services.AddBialaListaClient(o => o.TrackQuota = true)
.AddStandardResilienceHandler(o => o.Retry.ShouldHandle = _ => new ValueTask<bool>(false));
services.AddKrsClient().AddStandardResilienceHandler();
using var provider = services.BuildServiceProvider();
var vat = provider.GetRequiredService<IBialaListaClient>();
var nip = Nip.Parse("774-000-14-54");
var result = await vat.FindByNipAsync(nip);
Console.WriteLine($"{result.Value?.Name}: {result.Value?.VatStatus} (request {result.RequestId})");
var check = await vat.CheckBankAccountAsync(nip, Nrb.Parse("06 1600 1127 1843 9838 2000 0034"));
Console.WriteLine(check.Value ? "Account is on the whitelist" : "Account is NOT on the whitelist");
var krs = provider.GetRequiredService<IKrsClient>();
var extract = await krs.GetCurrentExtractAsync(result.Value!.Krs!.Value);
Console.WriteLine(extract.Extract?.ToSummary().ShareCapital);
Biała Lista では再試行は無効です。レジリエンスハンドラーが再試行するたびに、上記のクォータガードではカウントできない上流リクエストが追加で発生し、1日の上限に達すると、Biała Lista はこのプロセスだけでなく、IPアドレス全体を深夜までブロックするためです。プロセスごとに AddBialaListaClient を一度だけ登録し、生成されたクライアントを再利用してください(または、共有の BialaListaQuotaTracker を明示的に渡してください)。DI を使わず、共有トラッカーも指定せずに作成したクライアントは、他のインスタンスが行ったリクエストを認識しない、独自のプライベートトラッカーを持ちます。
実行可能なバージョンは samples/CheckCounterparty にあります。
RequestId を保持してください。 すべての BialaListaResult には、Biała Lista が返したリクエスト識別子と時刻(RequestId、RequestDateTime)が含まれます。ホワイトリストをいつ確認し、どのような応答があったかを記録できるよう、支払い記録とともに保持してください。
ソース生成 JSON。 KRS モデルは PolishOpenData.Krs.Serialization のパブリックコンバーター(KrsDateJsonConverter、KrsTimestampJsonConverter)を使用するため、.NET 8 以降では、コンバーターを登録せずに KrsCurrentExtract または KrsFullExtract を独自の JsonSerializerContext に追加できます(たとえば、抽出データをキャッシュする場合)。IKrsClient を呼び出す代わりに、KRS API の生レスポンスを自分で解析する場合は、次の2点に注意してください。抽出データは odpis オブジェクトでラップされているため、その内側のオブジェクトをデシリアライズしてください。また、レジストリのフィールド名(dataRejestracjiWKRS など)は、大文字と小文字を区別しない場合にのみプロパティ名と一致するため、JsonSerializerDefaults.Web を使用してください。コンテキストに [JsonSourceGenerationOptions(JsonSerializerDefaults.Web)] を指定するか、.NET Framework でリフレクションベースのシリアライザーを使う場合は new JsonSerializerOptions(JsonSerializerDefaults.Web) を使用します。そうしないと、エラーが発生しないままプロパティが null のままになります。
クイックスタート:GUS REGON 登録簿で事業体を検索する
PolishOpenData.Regon は、GUS の BIR1.2 ウェブサービス用クライアントです。NIP、REGON、KRS 番号で検索でき、最大 20 件の識別番号をまとめて検索できるほか、法人、個人事業主、地域単位の全レポートを取得できます。独自のキーが必要です(無料です。[email protected] へメールしてください)。GUS の公開テスト環境はキーなしで利用できますが、古く匿名化された登録簿のコピーを提供しています。
dotnet add package PolishOpenData.Regon
using Microsoft.Extensions.DependencyInjection;
using PolishOpenData;
using PolishOpenData.Bir;
using System.Linq;
var services = new ServiceCollection();
services.AddRegonClient(o => o.UserKey = Environment.GetEnvironmentVariable("MY_APP_REGON_KEY")); // your key, from your own configuration
// GUS's public test environment needs no key: services.AddRegonClient(o => o.Environment = RegonEnvironment.Test);
using var provider = services.BuildServiceProvider();
var regon = provider.GetRequiredService<IRegonClient>();
var found = await regon.FindByNipAsync(Nip.Parse("526-104-08-28"));
var entity = found.Value[0];
Console.WriteLine($"{entity.Name}, {entity.Address.City} (REGON {entity.Regon})");
var details = (await regon.GetDetailsAsync(entity, RegonInclude.Pkd)).Value[0];
Console.WriteLine($"{details.LegalFormName}; main PKD {details.Pkd!.First(p => p.IsPrimary).Code}");
Console.WriteLine($"Source: GUS REGON ({found.Environment}), retrieved {found.RetrievedAt:u}");
await regon.LogoutAsync();
クライアントは、デフォルトで GUS の最も厳しい制限(1 秒あたり 3 回、1 分あたり 120 回、1 時間あたり 6,000 回)に従います。最大 20 件の識別番号をまとめた検索は、1 秒あたりの制限では 1 回の呼び出しとして扱われますが、1 分および 1 時間あたりの制限ではリクエストと識別番号がカウントされます。つまり、検索では識別番号ごとに 1 回、その他のリクエスト(ログイン、レポート、GetDataDateAsync、ログアウト)もそれぞれ 1 回として数えられます。また、ログインセッションを 1 つ維持します。バッチメソッドは最初のリクエストを送信する前にバッチ全体を確認し、残りの 1 分または 1 時間の枠に収まらない場合は、何も送信せずに QuotaExceededException をスローします。デフォルトの制限では、1 回の呼び出しで最大 119 個の異なる識別番号を処理できます(セッションがすでにログイン済みの場合は 120 個、直近 1 分間にほかの呼び出しがあった場合はそれより少なくなります)。GUS がバッチ内の識別番号を 1 秒あたりの制限にも個別に数えるかどうかは確認されていません。多数のバッチを送信する場合は、バッチを小さくするか、間隔を空けて送信してください。プロセスごとに AddRegonClient を 1 回登録し、クライアントを再利用してください。GUS はアプリケーションインスタンスごとにリクエストを数え、セッションはそれを作成した IP アドレスからのみ利用できます。プロセスの終了時に LogoutAsync を呼び出してください。クライアントが自動的にログアウトすることはありません。DI を使わずに作成したクライアントは、専用のセッションとリクエスト制限機能を持ちます。
Biała Lista と同様、REGON ではリトライは無効のままにしてください。回復性ハンドラーによるリトライは、リクエスト制限機能ではカウントできない GUS への追加リクエストになります。また、リクエストの誤りを示す SOAP フォールトは HTTP 500 として返されるため、リトライされてしまいます。AddStandardResilienceHandler を追加する場合は、上記の Biała Lista の例と同様にリトライを無効にしてください。
キーとテスト環境。 このライブラリは、利用者が独自のキーを用意する方式です。本番用キーは同梱せず、環境変数を読み取ることも、キーをログに記録または表示することもありません。GUS の技術マニュアル(3.6.3 節)では、ソフトウェアの全エンドユーザーに各自のキーを申請させることは許容できないとされていますが、GUS は 2026-10-15 に、このプロジェクトでは各エンドユーザーが各自のキーを申請して使用してよいとメンテナーに伝えました。この回答はこのプロジェクトに適用されるものです。このライブラリを使って独自のアプリケーションを配布する前に、GUS の規則を確認してください。RegonEnvironment.Test は、GUS の公開テストサービスと公開されているテストキーを選択します(設定した UserKey はそこで無視され、テストサービスに送信されません。そのため、独自のキーを設定したまま環境を切り替えられます)。各結果には取得元の環境が示されるため(RegonResult.Environment)、匿名化されたテストデータ(ほとんどは 2014 年のデータ)を最新データと取り違えることはありません。
コスト。 詳細情報の取得にはリクエストが必要です。法人の場合、ログイン、検索、レポートで 3 回のリクエストが必要です。各オプションリスト(RegonInclude.Pkd、LocalUnits、Partners)にはさらに 1 回必要です。個人事業主の場合、一般レポートに加え、業種ごとに 1 回ずつレポートが必要です。RegonResult.DataAsOf は、GetDataDateAsync が呼び出されると値が設定されます(リクエスト 1 回)。
VAT ホワイトリストのオフライン照合
財務省は、ハッシュ化された NIP と口座のペアを含むフラットファイル(plik płaski)として、VAT ホワイトリストを毎日公開しています。PolishOpenData.BialaLista.Offline は指定日のファイルをダウンロードしてローカルインデックスを一度構築し、その後はディスクから何度でも照合に応答します。リクエスト数の制限はなく、照合対象の NIP や口座の情報がマシンの外に送信されることもありません。大規模な一括処理(支払い処理や ERP のインポート)にはこちらを使用してください。証明としてリクエスト ID が必要な場合は、PolishOpenData.BialaLista を使用してください。
dotnet add package PolishOpenData.BialaLista.Offline
using Microsoft.Extensions.DependencyInjection;
using PolishOpenData;
using PolishOpenData.BialaLista.Offline;
var services = new ServiceCollection();
services.AddVatWhitelistOffline(o => o.DatesToKeep = 3);
using var provider = services.BuildServiceProvider();
var offline = provider.GetRequiredService<IVatWhitelistOffline>();
await offline.PrepareAsync(); // optional: downloads and indexes today's file now instead of in the first check
var checks = await offline.CheckManyAsync(new[]
{
(Nip.Parse("774-000-14-54"), Nrb.Parse("06 1600 1127 1843 9838 2000 0034")),
});
foreach (var c in checks)
Console.WriteLine($"{c.Nip}: {c.Status} (file of {c.FileDate:yyyy-MM-dd}, generated {c.GeneratedOn:yyyy-MM-dd})");
- 結果は 3 種類です。
Active、Exempt、NotFoundのいずれかです。NotFoundはファイル内で見つからなかったことを意味します(通常のハッシュと、その口座の銀行のすべての仮想口座マスクを照合しています)が、口座がホワイトリストにないことの証明ではありません。マスクを使ってペアが見つかった場合は、MatchedVirtualAccountMaskで確認できます。 - 日付を初めて使用するときは時間がかかります。 約 250 MB をダウンロードしてインデックスを構築します。高速な接続では約 4 分かかりました(2026 年 10 月)。ただし、財務省のサーバーが遅い場合(営業時間中によく発生します)は、さらに時間がかかります。インデックスの構築後、ダウンロードしたファイルは削除されます。待ち時間を避けるには、事前に
PrepareAsyncを呼び出してください。財務省は日付 D のファイルを D−1 の約 23:00 に公開するため、その前日の夜が適しています。PrepareAsyncはIProgress<VatWhitelistPreparationProgress>とCancellationTokenを受け取ります。AddVatWhitelistOfflineによって登録された HTTP クライアントにはタイムアウトが設定されていません。キャンセルするにはトークンを使用してください。 - データディレクトリとディスク使用量。 準備済みのインデックスは、ユーザーのローカルアプリケーションデータフォルダー内の
PolishOpenData/BialaListaOfflineに保存されます。別のフォルダーを使用するには、VatWhitelistOfflineOptions.DataDirectoryを設定してください。インデックスは日付ごとに約 60 MB を使用します(2026 年 10 月時点で 370 万件)。DatesToKeep(デフォルトは 5)は、ディスクに保持する直近の使用日数です。 - 使用できるのは 1 台のマシンのみです。 ローカルディスク上のフォルダーを使用してください。ネットワーク共有はサポートされていません。同じフォルダーを共有する同一マシン上のプロセス間では、準備済みのインデックスも共有されます。あるプロセスが日付の準備中に、同じ日付を必要とする別のプロセスは
LockTimeout(デフォルトは 15 分)まで待機し、その後TimeoutExceptionがスローされます。 - 日付。 対象期間は 30 日前から翌日まで(ワルシャワ時間)で、デフォルトは今日です。照合には必ず指定日のファイルが使用されます。対象期間外の場合、またはファイルがまだ公開されていない、ダウンロードできない、検証に失敗した場合は、別の日のデータで照合する代わりに
VatWhitelistDataUnavailableExceptionがスローされます(Reasonを参照)。 - リクエスト ID も証拠もありません。 フラットファイルにはリクエスト ID がありません。税務署への証明が必要な場合は、REST クライアント(
PolishOpenData.BialaLista)で照合し、そのRequestIdを保存してください。 - 照合の時刻とデータの時点。
FileDateとGeneratedOnはデータについて記述する値です。照合を実行した時刻は、別途記録してください。
地番とジオコーディング
PolishOpenData.Uldk は GUGiK の ULDK サービスを使って地籍筆(działki ewidencyjne)を検索し、PolishOpenData.Uug は GUGiK のジオコーダーを使って住所を座標に変換します。クライアントは PolishOpenData.Geo.Core の座標型を共有します。どちらのサービスも公開されており、キーは不要です。
dotnet add package PolishOpenData.Uldk
dotnet add package PolishOpenData.Uug
using Microsoft.Extensions.DependencyInjection;
using PolishOpenData.Geo;
using PolishOpenData.Uldk;
using PolishOpenData.Uug;
var services = new ServiceCollection();
services.AddUldkClient();
services.AddUugClient();
using var provider = services.BuildServiceProvider();
var uug = provider.GetRequiredService<IUugClient>();
var uldk = provider.GetRequiredService<IUldkClient>();
// Address -> coordinates -> parcel. Only an Address match is a point; a partial address gives a Street or City match.
var matches = await uug.GeocodeAsync("Warszawa, Krucza 50");
if (matches is [{ Kind: UugMatchKind.Address } match])
{
var parcel = await uldk.GetParcelAtAsync(match.Location, ParcelGeometryKind.Wgs84);
Console.WriteLine($"{parcel?.Id}, {parcel?.CommuneName}"); // null: no parcel at that point
Console.WriteLine(parcel?.Geometry?.Wkt); // POLYGON((longitude latitude, ...)), EPSG:4326
}
// By identifier or by region name and number ("Krzewina 134" can match several parcels, so there is no geometry).
var byId = await uldk.GetParcelByIdAsync(ParcelId.Parse("146510_8.0507.41/1"));
var byName = await uldk.FindParcelsAsync("Krzewina 134");
- 軸の順序。 位置が単なる double のペアで表されることはありません。
Wgs84Point(Latitude, Longitude)とPl1992Point(Easting, Northing)は軸を明示しており、X/Yメンバーはありません。Wgs84Pointでは緯度が先です(ワルシャワはおよそ 52.2、21.0)。一方、ライブラリが返すジオメトリを含め、WKT では経度が先になります。ポーランドの緯度の範囲(48.9~55.0)と経度の範囲(14.0~24.2)は重ならないため、WGS-84 の値を逆順にすると、リクエストを送る前にArgumentOutOfRangeExceptionが発生します。 - 見つからない場合もエラーではありません。 存在しない地番は
nullになり、一致するものがない検索結果は空のリストになります。応答が HTML ページ(GUGiK のファイアウォール)の場合は、ErrorCode = "blocked"を伴うPolishOpenDataApiExceptionがスローされます。 - 地番が持つ情報。 ID、番号、地域、自治体、郡、県、PL-1992 でのバウンディングボックス(
Extent)、およびリクエストに応じて PL-1992 または WGS-84 での境界線(WKT、ParcelGeometryKind)が含まれます。WGS-84 の取得には追加で 1 回リクエストが必要です。ULDK は面積を返しません。 - 住所地点は不動産そのものではありません。 建物の入り口を示すため、その地点で見つかる地番は入口の下にある地番であり、不動産全体とは限りません。
- 再試行と並列処理。 ライブラリは再試行を行いません。
AddUldkClientまたはAddUugClientで登録した場合、クライアントがサービスごとに開く接続は最大 4 つです。再試行が必要な場合は、返されたビルダーに.AddStandardResilienceHandler()(Microsoft.Extensions.Http.Resilienceパッケージ)を追加し、再試行の回数は少なくしてください。
不動産価格
PolishOpenData.Rcn は、GUGiK の RCN 登記簿(Rejestr Cen Nieruchomości)から、公開 WFS サービスを通じて不動産取引を取得します。対象は住戸(アパート、ガレージ、店舗)、土地および建物で、価格、日付、場所が含まれます。PolishOpenData.Geo.Core の座標型を使用し、キーは不要です。
dotnet add package PolishOpenData.Rcn
using Microsoft.Extensions.DependencyInjection;
using PolishOpenData.Geo;
using PolishOpenData.Rcn;
var services = new ServiceCollection();
services.AddRcnClient();
using var provider = services.BuildServiceProvider();
var rcn = provider.GetRequiredService<IRcnClient>();
// Flats sold in 2025 in a 300 m square in central Warsaw (PL-1992: easting, northing).
var transactions = await rcn.GetTransactionsAsync(new RcnQuery
{
Area = new Pl1992Bbox(new Pl1992Point(637800, 486300), new Pl1992Point(638100, 486600)),
From = new DateOnly(2025, 1, 1),
To = new DateOnly(2025, 12, 31),
PremisesFunction = RcnPremisesFunction.Residential,
});
var summary = transactions.Summarize(); // throws InvalidOperationException when transactions.Truncated
Console.WriteLine($"{summary.Count} sales, median {summary.Median:N0} PLN/m², newest {summary.Newest}");
- 範囲を指定したクエリのみです。
RcnQueryには、エリア(Area、最大 25 km²)または 4 桁の powiat コード(PowiatCode。1465はワルシャワ)が必要です。このサービスには gmina のフィルターがないため、powiat より小さい範囲にはエリアを使用してください。MaxRecordsの既定値は 1,000(1~5,000)です。行数が上限を超えるとTruncatedはtrueになり、行が黙って破棄されることはありません。また、Summarize()は例外をスローします。その場合は、エリア、期間、またはフィルターを絞り込んでください。クライアントは、500 行ごとにcountで上限を指定したリクエストを 1 回送信します。 - 1 m² あたりの価格は住戸の行から取得します。
RcnTransaction.PricePerSquareMetreは、住戸の価格をその使用可能面積で割った値です。複数の住戸、土地、建物を含む証書の全体価格であるTotalPriceから算出することはありません。TotalPriceは証書の各行に繰り返し記載されるためです。価格または面積が欠落している場合、数値でない場合、あるいは正の値でない場合はnullになります。ガレージと店舗もアパートと同じ住戸レイヤーに含まれるため、PremisesFunctionで絞り込んでください(MCP ツールの既定値は住宅用です)。 Summarize()は市場価格のサンプルを使用します。 1 m² あたりの価格があり、共有持分がなく(1/1または未記載)、自由市場での売却または売却種別が未記載で、住戸と関連する権利の所有権がある(または権利の記載がない)住戸の売却を対象とします。中央値、四分位数(線形補間)、各除外条件によって除外された行数を報告します。売却件数が 5 件未満の場合はSmallSampleが付与されます。- データには数か月の遅れがあります。 2026 年 10 月 15 日時点で、powiat 1465 の最新取引の日付は 2026 年 5 月 28 日でした。数値を最新のものとして引用する前に、
Newestを確認してください。 - 位置情報とフィールド。
LocationはPl1992Pointで、フィーチャーのエンベロープの中心です(このライブラリはポリゴンジオメトリを読み取りません)。型付きプロパティには、レイヤーに意味のある項目(日付、市場、部屋数、階、使用可能面積、土地および建物の識別子、住所)が含まれます。Fieldsには、公証人の名前や証書番号も含め、公開されているすべてのフィールドがテキストとして格納されます。価格、面積、階、部屋数が空欄または数値でない場合(TotalPriceを含む)はnullとなり、公開されたテキストはFieldsに保持されます。日付、識別子、またはエンベロープがない行はエラーになります。クライアントは再試行を行いません。AddRcnClientで登録すると、最大 4 つの接続を開きます。このサービスは、OGC 例外レポートを含む HTTP 400 でエラーを返し、クライアントはそれをPolishOpenDataApiExceptionとしてスローします。
AI アシスタント向け MCP サーバー
.NET 10 SDK が必要です。API キーは不要です。オプションの REGON ツールには、無料の GUS キーをご自身で用意する必要があります(下記を参照)。地籍、ジオコーディング、不動産価格の各ツールは、すべてのリクエストを GUGiK に送信し、一時的な障害が発生した場合は 1 回再試行します。
Claude Code
claude mcp add --transport stdio --scope user polish-open-data -- dotnet dnx PolishOpenData.Mcp --yes
Claude Desktop / Cursor(claude_desktop_config.json または .cursor/mcp.json)
{
"mcpServers": {
"polish-open-data": { "command": "dotnet", "args": ["dnx", "PolishOpenData.Mcp", "--yes"] }
}
}
VS Code(.vscode/mcp.json)
{
"servers": {
"polish-open-data": { "type": "stdio", "command": "dotnet", "args": ["dnx", "PolishOpenData.Mcp", "--yes"] }
}
}
任意:REGON ツール。 lookup_regon は、サーバーが環境変数 POLISHOPENDATA_REGON_KEY 内にご自身の GUS 無料キーを見つけた場合にのみ表示されます。キーがない場合、サーバーには REGON ツールがなく、GUS に情報を送信することもありません。GUS([email protected])にキーを申請してください。キーはお使いのマシンに保存され、GUS にのみ送信されます。たとえば claude_desktop_config.json または .cursor/mcp.json のサーバーの env ブロックに追加してください。
{
"mcpServers": {
"polish-open-data": {
"command": "dotnet",
"args": ["dnx", "PolishOpenData.Mcp", "--yes"],
"env": { "POLISHOPENDATA_REGON_KEY": "your-own-gus-key" }
}
}
}
Claude Code(claude mcp add --env)と VS Code(.vscode/mcp.json の env)でも同じ変数を使用します。
| ツール | 確認できる内容 |
|---|---|
lookup_company | 「NIP 774-000-14-54はどの企業ですか?」— 名称、VAT登録状況、所在地、銀行口座、KRS上の法的形態、資本金、抹消情報 |
check_vat_bank_account | 「この請求書をこの口座に支払ってもよいですか?」— リクエストID付きのホワイトリスト照合 |
check_vat_bank_account_offline | 同じ照合を財務省の日次フラットファイルに対して実行します。リクエスト数の上限はなく、一度に最大50組を処理できます。照合する情報が端末の外に送信されることはなく、リクエストIDもありません(リクエストIDが必要な場合は check_vat_bank_account を使用してください)。特定の日付に対する初回の呼び出しでは、約250 MBをダウンロードし(インデックスの作成後にファイルは削除されます)、数分かかります。財務省のサーバーが遅い場合は、さらに時間がかかることがあります。ツールは進行状況を報告します。not_found はファイル内で見つからなかったという意味であり、存在しないことの証明ではありません。作成済みのインデックスはユーザーのローカルアプリケーションデータフォルダーに保存されます。別のローカルフォルダーを使う場合は POLISHOPENDATA_OFFLINE_DIR を設定してください(ネットワーク共有は使用しないでください)。 |
get_krs_extract | 取締役会および監査役会のメンバー(省庁によってマスキング済み)、資本金、株主、PKDの事業活動 |
find_parcel | 「この土地はどの区画ですか?」— 区画ID、WGS-84座標(緯度が先)、住所、または地域名と番号(「Krzewina 134」など。該当するものすべて)で検索します。区画ID、番号、地域、自治体、郡、県、およびバウンディングボックスの中心を返します。includeGeometry を指定すると、EPSG:4326のWKT形式で境界全体を追加します(地域名による検索では使用できません)。住所から区画が返されるのは、住所地点(建物の入口であり、必ずしも不動産全体を示すものではありません)が1つに特定できる場合のみです。それ以外の場合は、ジオコーダーの候補を返します。区画面積は返されません(ULDKにデータがありません)。情報源:ULDK、住所の場合はUUG(sources) |
geocode_address | 「この住所はどこですか?」— WGS-84座標と一致精度を返します。各候補には、住所、通り、市のいずれであるかが示されます(住所が一部のみの場合は、通りまたは市の代表地点を返します)。情報源:UUG(source) |
property_prices | 「この地域では不動産はいくらで売れましたか?」— GUGiK経由でRCN登録簿から取得した、アパートの1 m²あたり価格の中央値と四分位価格(住戸全体の市場取引価格を、専有面積で割ったもの)、および住戸、区画、建物の最新の単一取引を返します。住所(住所地点が1つに特定できる必要があります。それ以外の場合はジオコーダーの候補を返します)、WGS-84座標(緯度が先)、または4桁の郡コードのいずれか1つだけで検索します。住所または座標で検索する場合、半径は50~2,500 mです(デフォルトは500 m)。期間のデフォルトは過去24か月です。住戸の用途のデフォルトは住宅です(premisesFunction ではガレージ、商業用、その他、およびすべてを指定できます)。データには数か月の遅れがあるため、最新の取引がいつのものかをすべての回答に示します。該当する取引が1,000件を超える場合は、部分的な回答ではなく、エリア、期間、またはフィルターを絞り込むよう求めるエラーを返します。取引には、日付、価格、住所、階、面積、市場、証書番号、および買い手と売り手の種別のみ(自然人、企業など)が表示されます。公証人は表示されず、人物による検索もできません。参考情報であり、鑑定評価ではありません。情報源:RCN、住所の場合はUUG(sources) |
lookup_regon | 「GUSのREGON登録簿には、このNIPについてどのように記載されていますか?」(任意。GUSの独自キーが必要です)— 一致する各エントリーについて、種別、名称、REGON、NIP、住所を返します。また、最初の5件については、GUSの日付から導出したステータス、主要な日付、主なPKD事業活動を返し、法人の場合は法的形態と登録簿も返します。連絡先データ、所有者の個人情報、現地ユニットの一覧は返しません。名称は信頼できないテキストとして扱われます。本番データのみ。情報源:GUS BIR1.2(sources) |
validate_identifier | NIP、REGON、KRS、NRB、KW番号をオフラインでチェックサム検証し、入力ミスの候補を提案します |
土地登記簿(KW)番号
KwNumber は、公式の裁判所コード表(Dz.U. 2026 poz. 740、現行コード342件と旧コード7件)を使用して、WA1M/00012345/1 のような番号をオフラインで検証し、よくある誤入力の修正案(0S1U → OS1U)を提示します。これは、mhajder による pyekw の検証ロジックを .NET に移植したものです(MIT)。eKW ポータルには問い合わせず、番号ジェネレーターも意図的に提供していません。KW 番号は個人データであり(NSA、III OSK 6508/21)、番号の列挙は対象外です。
責任ある利用
- データは公式の公開登録簿から取得しています。出典と取得時刻を明記してください。登録簿に基づくすべての MCP ツールの結果(
lookup_company、check_vat_bank_account、check_vat_bank_account_offline、get_krs_extract)とBialaListaResultには、出典と取得時刻の両方が含まれます(オフラインツールの場合、Source.RetrievedAtは確認時刻、fileDateとgeneratedOnはデータの時刻です)。KrsResult自体はこれらを追加しないため、存在する場合はToSummary().ExtractedAtを使用してください。 - Biała Lista では、IP アドレスごとに 1 日あたり約 100 回の検索と 5,000 回の確認が可能です。上限を超えると、同省のウェブ検索も含め、IP アドレスが午前 0 時までブロックされます。
TrackQuotaを使用し、検索より確認を優先してください。 - KRS は、構造化フィールド内の自然人をマスキングします。MCP サーバーは、自由記述の代理人区分フィールド(
rodzajProkury)や KRS の生セクションを AI アシスタントに転送せず、返却する自由記述フィールド(代表方法、株主の持分)から PESEL に類似する番号(11 桁、または長い数字列の一部ではない、半角スペースまたはハイフンで区切られた 6 桁+5 桁の数字)を削除します。ライブラリは公開されている登録簿データをそのまま返します。KrsCurrentExtractにはrodzajProkuryが含まれ、ToSummary()は代表方法と持分を変更せずに渡すため、表示または保存する前にご自身で削除してください。 - Biała Lista は、個人事業主、代表者、商業代理人、パートナーの氏名を、一部については PESEL 番号とともに、法律に基づいて公開しています。ライブラリは公開されているとおりに返します。MCP サーバーが返すのは納税者の氏名と住所 1 件のみです(個人事業主の場合は所有者の氏名と、事業所住所が登録されていない場合は居住地の住所です)。
- GUS は、すべての REGON リクエストについて、IP アドレス、時刻、内容を記録します。連続する識別子を列挙しないでください(GUS はこれを禁止しており、アクセスを遮断します)。1 つの事業体に複数のキーを保持せず、上限を守ってください。クライアントのリクエストリミッターは、既定で最も厳しい時間枠を適用します(秒あたりの上限は呼び出し回数を数えるため、最大 20 件の識別子をまとめたバッチは 1 回の呼び出しです。分あたりと時間あたりの上限は、リクエスト数と識別子数を数えます)。GUS がバッチ内のすべての識別子を秒あたりの上限に数えるかどうかは確認されていません。バッチを多数送信する場合は、小さくするか、間隔を空けてください。GUS は上限超過時にエラーを返しません。キーの保有者に連絡するか、サービスに支障が生じた場合は IP アドレスをブロックします。
lookup_regonは呼び出し 1 回につき 1 つの質問に回答するもので、1 回につき 1 つの事業体を対象とします。列挙、個人事業主のデータ収集、データベースへの保存は行わないでください。ご自身のキーを使用し(事業体ごとにキーは 1 つ、共有不可)、GUS は IP アドレスとともにすべてのリクエストを記録します。このツールは連絡先情報、所有者の個人情報、または地域事業所の一覧を返しません。法律上、個人事業主の事業名は所有者の氏名です。その事業を識別する目的にのみ使用してください。名称は GUS に登録されたとおりに取得され、HTML や SQL に似たテキストが含まれる場合があります。ツールは制御文字を除去し、長さを制限しますが、それ以外はすべてデータとして扱い、指示として扱わないでください。- REGON ライブラリは、公開されているデータをそのまま返します。法律上、個人事業主の事業名は所有者の氏名であり、住所は自宅住所の場合があります。GUS は PESEL 番号を公開していません。マニュアルには、個人事業主の電話番号とファックス番号は第三者に提供されないと記載されていますが、現在すべてのフィールドでそうなっているかは確認されていません。また、法律は 2026 年 12 月に改正されるため、保存する内容を確認してください(
RegonDetails.Fieldsには GUS が送信したすべてのフィールドが含まれます)。名称には HTML や SQL に似たテキストが含まれる場合があります(GUS が警告しています)。信頼できない入力として扱ってください。 - REGON データの出典と時刻を明記してください。
RegonResultには環境(ProductionまたはTest)と取得時刻が含まれます。また、GetDataDateAsyncの実行後はデータの日付も含まれます。GUS は、データを再利用する場合、出典と時刻を明記し、データが処理されたことを示すよう求めています。 - GUGiK は ULDK と UUG について、利用規約、レート制限、出典表示の要件を公開していませんが、大量のリクエストを送信する IP アドレスをブロックします(しきい値は公開されていません)。単発の検索に使用してください。筆の情報や住所の収集、大量の並列リクエスト、識別子や座標を順に処理するループは行わないでください。ライブラリは再試行を行わず、
AddUldkClientまたはAddUugClientで登録した場合、サービスごとに開く接続は最大 4 つです。MCP サーバーは一時的な障害が発生した場合に 1 回再試行します。大量処理が必要な場合は、まず GUGiK([email protected])に連絡してください。出典(GUGiK、ULDK/UUG)の明記は望ましい慣行ですが、必須ではありません。すべてのfind_parcelとgeocode_addressの結果には、出典と取得時刻が含まれます。筆データは EGiB 地籍台帳の記録であり、参考情報に限られます。 - RCN の取引情報は公開登録簿の記録ですが、人々が自宅に支払った金額を示すものです。ライブラリは、公証人の氏名と証書番号(
RcnTransaction.Fields)を含め、公開されているすべてのフィールドを返します。property_pricesツールは、証書番号と、購入者と販売者の種別のみを表示し、公証人の氏名は表示しません。いずれも個人のプロファイリングや、不動産を購入または売却した人物の特定に使用しないでください。RCN には土地登記簿(KW)のフィールドはありません。自由記述の備考(NIER_OPISと*_INFOフィールド)はFields内で公開どおりに返されますが、MCP ツールはFieldsを公開しません。また、ここには取引や筆と土地登記簿番号を結び付ける情報はありません。GUGiK は RCN の上限を公開していません。上限を設けた単発のクエリを送信してください(クライアントは 500 行の各ページについて、countで上限を指定したリクエストを 1 回送信します)。登録簿の収集や、区域または期間を順に処理するループは行わないでください。データには数か月の遅れがあり、1 m² あたりの価格は建物区画の行から算出されます。参考情報であり、価格査定ではありません。すべてのproperty_pricesの結果には、出典と取得時刻が含まれます。 - スクレイピングや大量収集を行わず、土地登記簿(KW)番号を決して扱わないでください。筆および不動産のツールは、土地登記簿番号や所有者情報を受け取らず、返しません。また、このプロジェクトには筆と土地登記簿番号を結び付ける情報はありません。筆データからそのような関連付けを作成しようとしないでください。
今後の対応案
アイデアであり、確約ではありません。たとえば、ゾーニング計画などの不動産データを追加することが考えられます。ご希望の場合は、関心を示すためにissueを作成してください。
コントリビューションとライセンス
CONTRIBUTING.mdをご覧ください。MITライセンスです。サードパーティのコンポーネントとそのライセンスは、THIRD-PARTY-NOTICES.mdに記載されています。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。