mcpField
P
Polish Open Data (unofficial)

Polish Open Data (unofficial)

本地服务
github.com法律与政务06 天前更新

关于 Polish Open Data (unofficial)

PolishOpenData 是一组面向波兰公共登记信息的 .NET 库和 MCP 服务,供开发者查询企业、VAT、地块、地址和房产价格。它还提供标识号码及 VAT 的离线检查。

主要功能

  1. 01查询 KRS 企业记录
  2. 02检查 VAT 状态和银行账户
  3. 03离线验证波兰标识号码
  4. 04搜索地块并对地址进行地理编码
  5. 05查询房产交易价格
  6. 06可选的 REGON 登记客户端

适用场景

  1. 01付款前核查交易对象
  2. 02无网络时验证标识号码
  3. 03按编号、坐标或地区查找地块
  4. 04查看某地区的房产交易

MCP 相关

PolishOpenData.Mcp 包提供 MCP 服务,暴露企业和 VAT 查询、KRS 摘录、地块搜索、地址地理编码、房产价格及标识号码验证功能。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

暂未收录安装方式

我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。

代码仓库
安装包
nugetPolishOpenData.Mcp1.6.0

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

PolishOpenData

用于波兰公共登记系统的 .NET 库和 MCP 服务——查询 KRS 中的公司、查询 VAT 白名单(Biała Lista)并检查银行账户(在线查询,或使用财政部的平面文件离线查询)、用于 GUS REGON 登记系统的客户端(仅库)、来自 GUGiK 的地籍地块查询(ULDK)、地址地理编码(UUG)和房地产交易价格(RCN),以及离线验证 NIP、REGON、KRS、NRB 和土地登记册(KW)编号。

CI NuGet License: MIT

🇵🇱 波兰语版本

非官方项目。与司法部、财政部或任何其他公共机构均无关联。结果仅供参考,不构成法律或税务建议;各登记系统才是权威信息来源。

软件包

软件包功能目标框架
PolishOpenData.Core离线值类型:Nip、Regon、KrsNumber、Nrb、KwNumber(以及官方法院代码表)net10.0、netstandard2.0
PolishOpenData.KrsKRS Open API:当前/完整摘录、已注销实体、每日变更源、英文摘要net10.0、netstandard2.0
PolishOpenData.BialaListaVAT 白名单:状态、带请求 ID 的银行账户检查、批量查询、每日限额保护net10.0、netstandard2.0
PolishOpenData.BialaLista.Offline使用财政部每日平面文件离线查询 VAT 白名单:无请求限制、可一次查询多组信息、无请求 IDnet10.0、netstandard2.0
PolishOpenData.RegonGUS 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.UldkGUGiK ULDK:按 ID、坐标或区域名称和编号查询地籍地块,并以 WKT 格式返回边界net10.0、netstandard2.0
PolishOpenData.UugGUGiK UUG:将波兰地址地理编码为带匹配精度的 WGS-84 坐标,或查找距某个坐标最近的地址net10.0、netstandard2.0
PolishOpenData.RcnGUGiK RCN(Rejestr Cen Nieruchomości):查询区域和时段内的房地产交易(住宅单元、地块、建筑物),并提供每平方米价格统计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 不启用重试:弹性处理程序每次重试都会产生一次上游请求,而上面的配额限制器无法统计这些请求;达到每日限额后,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(例如用于缓存摘录),无需注册任何转换器。如果你选择自行解析原始 KRS API 响应,而不是调用 IKrsClient,请注意两点:摘录包装在 odpis 对象中,因此应反序列化该内部对象;注册机构的字段名(例如 dataRejestracjiWKRS)与属性仅在不区分大小写时匹配,因此应使用 JsonSerializerDefaults.Web——在上下文中使用 [JsonSourceGenerationOptions(JsonSerializerDefaults.Web)],或者在 .NET Framework 上使用基于反射的序列化器,并传入 new JsonSerializerOptions(JsonSerializerDefaults.Web)。否则这些属性会保持 null,且不会报错。

快速开始:在 GUS REGON 登记册中查询实体

PolishOpenData.Regon 是 GUS BIR1.2 Web 服务的客户端:可按 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 最严格的调用限制(每秒 3 次、每分钟 120 次、每小时 6,000 次;最多包含 20 个标识符的批量查询,在每秒限制中算作一次调用,而每分钟和每小时的限制按请求数和标识符数计算:搜索中的每个标识符各算一次,其他每个请求也各算一次——登录、报告、GetDataDateAsync、注销),并保持一个登录会话。批量方法会在发送第一个请求前检查整个批次;如果剩余的每分钟或每小时配额不足以容纳该批次,就会抛出 QuotaExceededException,且不会发送任何内容:在默认限制下,一次调用最多可携带 119 个不同的标识符(如果会话已经登录,则最多为 120 个;如果其他调用占用了本分钟的配额,则数量更少)。GUS 是否也会将批次中的每个标识符计入自身的每秒限制,目前尚未确认;如果要发送多个批次,请使用较小的批次或拉开发送间隔。每个进程只注册一次 AddRegonClient,并重复使用该客户端: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)会额外占用一次请求;个体经营者需要一般报告,以及每种经营活动类型各一份报告。调用过 GetDataDateAsync 后,RegonResult.DataAsOf 才会填入数据(占用一次请求)。

离线 VAT 白名单检查

财政部每天以扁平文件(plik płaski)的形式发布 VAT 白名单,其中包含经过哈希处理的 NIP 与银行账户配对信息。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})");
  • 三种结果。 Active、Exempt 或 NotFound。NotFound 表示未在文件中找到(已尝试普通哈希,以及该账户所属银行的所有虚拟账户掩码),并不能证明该账户不在白名单中;如果通过掩码找到配对信息,MatchedVirtualAccountMask 会告知你。
  • 首次使用某个日期时速度较慢。 它会下载约 250 MB 的数据并构建索引。在网络连接良好的情况下,这耗时约 4 分钟(2026 年 10 月);但财政部服务器较慢时会耗时更久,这种情况在工作日会发生。索引构建完成后,下载的文件会被删除。提前调用 PrepareAsync 可避免等待:财政部通常会在 D−1 日约 23:00 发布 D 日的文件,因此前一天晚上是准备文件的好时机。PrepareAsync 接受 IProgress<VatWhitelistPreparationProgress> 和 CancellationToken。由 AddVatWhitelistOffline 注册的 HTTP 客户端没有超时设置;请通过令牌取消操作。
  • 数据目录和磁盘占用。 已准备的索引存放在用户本地应用程序数据文件夹下的 PolishOpenData/BialaListaOffline 中;设置 VatWhitelistOfflineOptions.DataDirectory 可使用其他文件夹。每个日期的索引约占 60 MB(2026 年 10 月有 370 万条记录)。DatesToKeep(默认值为 5)表示在磁盘上保留最近使用的日期数量。
  • 仅限一台设备。 请使用本地磁盘上的文件夹;不支持网络共享。同一台设备上共用该文件夹的进程会共享已准备的索引;当一个进程正在准备某个日期时,另一个需要相同日期的进程最多等待 LockTimeout(默认 15 分钟),之后会抛出 TimeoutException。
  • 日期。 日期范围为过去 30 天至明天(华沙时间),默认值为今天。某个日期只会使用该日期的文件进行检查。如果日期超出范围,或文件尚未发布、无法下载或验证失败,调用会抛出 VatWhitelistDataUnavailableException(参见 Reason),而不会使用其他日期的数据作答。
  • 没有请求 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");
  • 坐标轴顺序。 位置不会只是没有说明的两个双精度数: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 防火墙),则会抛出 PolishOpenDataApiException,其 ErrorCode = "blocked"。
  • 地块包含的信息。 ID、编号、区域、乡镇、县、省、PL-1992 坐标系下的边界框(Extent),以及按需返回的 PL-1992 或 WGS-84 坐标系下的边界 WKT(ParcelGeometryKind;WGS-84 需要额外发出一个请求)。ULDK 不提供面积。
  • 地址点不代表房产。 它标示的是建筑入口,因此在该位置找到的地块是入口所在的地块,不一定是整处房产。
  • 重试与并行处理。 这些库不会自动重试。通过 AddUldkClient 或 AddUugClient 注册的客户端,每项服务最多会打开 4 个连接。如果需要重试,请在返回的构建器上添加 .AddStandardResilienceHandler()(来自 Microsoft.Extensions.Http.Resilience 包),并尽量减少重试次数。

房产价格

PolishOpenData.Rcn 通过 GUGiK 的公共 WFS 服务,从 RCN(Rejestr Cen Nieruchomości,不动产价格登记簿)读取房产交易:住宅单元(公寓、车库、商铺)、地块和建筑物,以及价格、日期和地点。它使用 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²)或四位数的 powiat 代码(PowiatCode;1465 代表华沙)。该服务没有 gmina 筛选条件:要查询小于一个 powiat 的范围,请使用区域。MaxRecords 默认为 1,000(范围为 1 到 5,000)。如果结果行数更多,Truncated 将为 true,不会静默丢弃任何数据,且 Summarize() 会抛出异常:请缩小区域、时间范围或筛选条件。客户端每页 500 行发送一个受 count 限制的请求。
  • 每平方米价格取自住宅单元行。 RcnTransaction.PricePerSquareMetre 是住宅单元价格除以其使用面积所得的价格。它绝不会根据整份契约的价格 TotalPrice 推算;同一份契约涉及多个住宅单元、地块或建筑物时,该价格会在每一行重复出现。价格或面积缺失、不是数字或不是正数时,该值为 null。车库和商铺与公寓共用住宅单元图层,因此请使用 PremisesFunction 进行筛选(MCP 工具默认筛选住宅)。
  • Summarize() 使用市场价格样本。 它会纳入每平方米价格有效、无部分份额(1/1 或未注明)、销售类型为自由市场或未注明,且拥有住宅单元及其相关权利(或未注明权利)的住宅单元销售记录。它会报告中位数、四分位数(线性插值),以及每项排除条件排除了多少行;销售记录少于 5 条时,会标记为 SmallSample。
  • 数据会滞后数月。 截至 2026 年 10 月 15 日,powiat 1465 中最新的交易日期为 2026 年 5 月 28 日。引用数据作为当前价格前,请检查 Newest。
  • 位置和字段。 Location 是一个 Pl1992Point,表示要素外包范围的中心点(该库不会读取多边形几何)。类型化属性涵盖各图层有意义的信息(日期、市场、房间数、楼层、使用面积、地块和建筑物标识符、地址);Fields 则以文本形式保存所有已发布字段,包括公证人姓名和契约编号。价格、面积、楼层或房间数为空或不是数字时,对应值为 null(包括 TotalPrice),已发布的文本仍保留在 Fields 中;缺少日期、标识符或外包范围的行会导致错误。客户端不会重试,注册 AddRcnClient 后最多打开 4 个连接。该服务以 HTTP 400 和 OGC 异常报告返回错误,客户端会将其作为 PolishOpenDataApiException 抛出。

面向 AI 助手的 MCP 服务

需要 .NET 10 SDK。无需 API 密钥;可选的 REGON 工具需要你自己的 GUS 免费密钥(见下文)。地块、地理编码和房产价格工具会将每个请求发送到 GUGiK,并在临时故障时重试一次。

在 VS Code 中安装 在 VS Code Insiders 中安装

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 工具。 只有当服务在环境变量 POLISHOPENDATA_REGON_KEY 中找到你自己的免费 GUS 密钥时,才会显示 lookup_regon;没有该密钥时,服务不会提供 REGON 工具,也不会向 GUS 发送任何内容。请向 GUS([email protected])申请密钥;密钥会保留在你的设备上,且只会发送给 GUS。将其添加到服务的 env 块中,例如 claude_desktop_config.json 或 .cursor/mcp.json:

{
  "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 对应哪家公司?”——名称、增值税状态、注册地址、银行账户、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 格式添加完整边界(地区搜索除外)。只有地址能解析为恰好一个地址点(即建筑入口,不一定是整处房产)时,才会返回地块;否则返回地理编码器的候选结果。不提供地块面积(ULDK 不包含此信息)。数据来源:ULDK;地址数据来自 UUG(sources)
geocode_address“这个地址在哪里?”——WGS-84 坐标和匹配精度;每个匹配结果都会注明它是地址、街道还是城市(不完整的地址会返回街道或城市的代表点)。数据来源:UUG(source)
property_prices“这里的房产卖了多少钱?”——通过 GUGiK 查询 RCN 登记簿,获取公寓的每平方米价格中位数和四分位数(整套房屋的市场销售价格除以其使用面积),以及房屋、地块或建筑物最近的单笔交易。只能按以下一项搜索:地址(必须解析为一个地址点,否则返回地理编码器的候选结果)、WGS-84 坐标(纬度在前)或四位县代码;地址或坐标搜索的半径为 50 至 2,500 米(默认 500 米)。默认时间范围:过去 24 个月;默认房屋功能:住宅(premisesFunction 还可设为车库、商业、其他和任意)。数据会滞后数月,因此每个答案都会说明最新交易距今多久。匹配交易超过 1,000 笔时,工具会返回错误,要求缩小区域、时间范围或筛选条件,而不是返回不完整的答案。交易信息包括日期、价格、地址、楼层、面积、市场、契据编号,以及买方和卖方的类型(自然人、公司等);不会显示公证人,也不能按人员搜索。仅供参考,不构成估价。数据来源:RCN;地址数据来自 UUG(sources)
lookup_regon“GUS 的 REGON 登记簿中关于此 NIP 有什么信息?”(可选,需提供你自己的 GUS 密钥)——针对每条匹配记录:类型、名称、REGON、NIP、地址;前五条记录还包括状态(根据 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 地址每天允许约 100 次搜索和 5,000 次检查;超出后,该 IP 会被封锁至午夜,且无法使用该部的网页搜索。请使用 TrackQuota,并优先进行检查,而非搜索。
  • KRS 会在结构化字段中隐去自然人信息。MCP 服务绝不会将自由文本代理字段(rodzajProkury)或 KRS 原始章节转发给 AI 助手,并会从其返回的自由文本字段(代表方式、股东份额)中移除类似 PESEL 的号码(11 位数字,或由一个空格或连字符分隔的 6 位加 5 位数字,且不属于更长数字串)。这些库会按发布内容返回登记册数据:KrsCurrentExtract 包含 rodzajProkury,而 ToSummary() 会原样传递代表方式和份额——在展示或存储前,请自行清理。
  • Biała Lista 依法公开个体经营者、代表、商业代理人和合伙人的姓名,其中部分人的信息还包括 PESEL 号码。该库会按发布内容返回这些信息;MCP 服务仅返回纳税人姓名和一个地址(对于个体经营者,返回业主姓名;如果未列出营业地址,则返回居住地址)。
  • GUS 会记录每次 REGON 请求的 IP 地址、时间和内容。绝不要枚举连续标识符(GUS 禁止此行为并会切断访问),不要为同一实体持有多个密钥,并遵守限额;客户端请求限流器默认采用最严格的时间窗口(每秒限额按调用次数计算,因此最多包含 20 个标识符的批次算一次调用;每分钟和每小时限额按请求数和标识符数计算)。尚未确认 GUS 是否会将批次中的每个标识符都计入每秒限额:批次较多时,请使用较小的批次或拉开请求间隔。超出限额时,GUS 不会发送错误信息:它会联系密钥持有人,或者在服务受影响时封锁 IP 地址。
  • lookup_regon 每次调用只回答一个问题,且一次仅适用于一个实体:不得枚举,不得收集个体经营者数据,也不得将其数据存入数据库。该工具使用你自己的密钥(每个实体一个密钥,绝不共享),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 服务会对暂时性故障重试一次。若有批量需求,请先联系 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 的限额:请发送单次且范围有限的查询(客户端每页发送一个受 count 限制、最多 500 行的请求),不得批量抓取登记册,也不得循环查询区域或时段。数据会滞后数月;每平方米价格根据房屋单元记录计算,仅供参考,并非估价。每个 property_prices 结果都包含来源和检索时间。
  • 禁止抓取、禁止批量收集,且绝不使用土地登记簿(KW)编号:地块和房产工具既不接受也不返回这类编号或所有者数据,本项目中的任何内容都不会将地块关联到土地登记簿编号。不得尝试根据地块数据建立此类关联。

后续可能的步骤

这些只是想法,并非承诺:提供更多房产数据(例如分区规划)。如果这对你有帮助,请提交 issue 表达兴趣。

贡献与许可证

请参阅 CONTRIBUTING.md。本项目采用 MIT 许可证。第三方组件及其许可证列于 THIRD-PARTY-NOTICES.md。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。