# Polish Open Data (unofficial) (nuget · PolishOpenData.Mcp)

Polish registers: KRS, VAT, bank checks, parcels, geocoding, property prices (RCN), optional REGON.

- Trust score: 83/100 (high trust)
- Change this week: +3
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-10-25

## Components

- nuget · `PolishOpenData.Mcp`: 83/100 (this document), [markdown](https://verifymcp.io/servers/jaceksmi-polishopendata/polishopendata-mcp.md), [page](https://verifymcp.io/servers/jaceksmi-polishopendata/polishopendata-mcp)

## Channel facts

- Registry: `nuget`
- Package: `PolishOpenData.Mcp`
- Version: `1.6.0`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-10-25.

- **Supply Chain Security**: 100/100
  - No malware found by supply-chain analysis.
  - No known CVEs affecting this package version or its production dependencies.
  - No install/post-install scripts declared.
  - No production dependencies, so there is no dependency health to assess.
- **Provenance & Transparency**: 48/100
  - Source repository is publicly reachable at the declared URL.
  - Build provenance not yet verified.
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 1 days ago).
  - Publishes a security disclosure policy (SECURITY.md).
- **Schema Quality & AI Usability**: 65/100
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 2429 tokens (~303/item across 8 items; 8 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 100/100
  - No destabilizing schema changes in the last 30 days.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
  - Structured output schemas are declared (100% of tools); any adoption earns full credit.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - We read all 8 captured tool definition(s), and no name or description among them implies an irreversible operation.
  - An AI judge read all 9 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a current MCP spec version (2026-07-28).

## Install

### How do I install the Polish Open Data (unofficial) MCP server?

Polish Open Data (unofficial) runs locally as a NuGet package, launched with dnx PolishOpenData.Mcp@1.6.0 --yes. Ready-made configuration for Claude, Cursor, VS Code, Codex and 3 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add jaceksmi-polishopendata -- dnx PolishOpenData.Mcp@1.6.0 --yes
```

### Cursor

```json
{
  "mcpServers": {
    "jaceksmi-polishopendata": {
      "command": "dnx",
      "args": [
        "PolishOpenData.Mcp@1.6.0",
        "--yes"
      ]
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "jaceksmi-polishopendata": {
      "command": "dnx",
      "args": [
        "PolishOpenData.Mcp@1.6.0",
        "--yes"
      ]
    }
  }
}
```

### Codex

```bash
codex mcp add jaceksmi-polishopendata -- dnx PolishOpenData.Mcp@1.6.0 --yes
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "jaceksmi-polishopendata": {
      "type": "local",
      "command": [
        "dnx",
        "PolishOpenData.Mcp@1.6.0",
        "--yes"
      ],
      "enabled": true
    }
  }
}
```

### Hermes

```yaml
mcp_servers:
  jaceksmi-polishopendata:
    command: "dnx"
    args: ["PolishOpenData.Mcp@1.6.0", "--yes"]
```

### Netclaw

```json
{
  "McpServers": {
    "jaceksmi-polishopendata": {
      "Transport": "stdio",
      "Command": "dnx",
      "Arguments": [
        "PolishOpenData.Mcp@1.6.0",
        "--yes"
      ]
    }
  }
}
```

### Other

```json
{
  "mcpServers": {
    "jaceksmi-polishopendata": {
      "command": "dnx",
      "args": [
        "PolishOpenData.Mcp@1.6.0",
        "--yes"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-10-25 (score 83, 0)

- [security] Stability: 0.97 → pass

### 2026-10-24 (score 83, +16)

- [security improvement] Malware scan: unverified → pass

### 2026-10-23 (score 67, −15)

- [security regression] Malware scan: pass → unverified
- [functional regression] Schema quality: 256 → 303
- [functional] Package version: 1.5.0 → 1.6.0

### 2026-10-22 (score 82, +1)

- [functional improvement] Security disclosure: unverified → pass

### 2026-10-21 (score 81, 0)

- [functional regression] Security disclosure: pass → unverified

### 2026-10-19 (score 81, +1)

No change was recorded against any check on this day. Stability & Change Management went from 77 to 80. That category is still filling its 30-day observation window: 23 days of observed history at the previous scan, 24 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-17 (score 80, +1)

No change was recorded against any check on this day. Stability & Change Management went from 70 to 73. That category is still filling its 30-day observation window: 21 days of observed history at the previous scan, 22 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-15 (score 79, +39)

- [security regression] Malware scan: pass → unverified
- [security improvement] Injection markers: unverified → pass
- [functional regression] Schema quality: 197 → 256
- [functional regression] Schema quality: 197 → 219
- [functional improvement] Tool coverage: unverified → 100
- [functional improvement] MCP protocol: unverified → pass
- [functional improvement] Stability: unverified → 0.67
- [functional] Package version: 1.1.0 → 1.5.0
- [functional] Package version: 1.3.0 → 1.5.0
- [functional] Package version: 1.1.0 → 1.4.1
- [functional] Package version: 1.3.0 → 1.4.1

## MCP tools (8)

### `geocode_address` (~163 tokens)

Find coordinates of a Polish address

Finds the coordinates of a Polish address (for example "Warszawa, Krucza 50") with GUGiK's address geocoder (UUG). Each match says whether it is an address, a street or a city: a partial address gives a street or city match whose point is only a representative point. Coordinates are WGS-84 (latitude, longitude). Public data from the national address register via GUGiK, based on EGiB and the address registers. Never returns or accepts land-registry (KW) numbers or owner data.

Input parameters:

- `address` (string, required): Free-text address with the town and, for an exact point, the street and house number, e.g. "Warszawa, Krucza 50".

Output parameters:

- `matches` (array)
- `note` (string|null)
- `source` (object)

### `get_krs_extract` (~107 tokens)

Get a KRS company summary

Returns a summary of the current National Court Register (KRS) extract: name, legal form, NIP/REGON, address, share capital, management and supervisory boards (names masked by the ministry), proxies, shareholders (companies and natural persons with masked names), and PKD activities. Reports removed entities with their removal date.

Input parameters:

- `krs` (string, required): KRS number (up to 10 digits), e.g. 28860 or 0000028860.

Output parameters:

- `note` (string|null)
- `removedOn` (string|null)
- `sources` (array)
- `status` (string)
- `summary` (object|null)

### `validate_identifier` (~171 tokens)

Validate a Polish identifier

Validates Polish identifiers offline (no network): NIP tax number, REGON, KRS number, NRB bank account, or land-registry (księga wieczysta, KW) number such as WA1M/00012345/1. Explains checksum failures and suggests likely typo fixes for KW numbers.

Input parameters:

- `kind` (string|null): Optional kind: nip, regon, krs, nrb or kw. Leave empty to detect it from the format.
- `value` (string, required): The identifier to check, e.g. 774-000-14-54, 610188201, 0000028860, PL06 1600 1127 1843 9838 2000 0034 or WL1A/00272852/9.

Output parameters:

- `input` (string)
- `results` (array)

### `find_parcel` (~456 tokens)

Find a cadastral parcel

Finds Polish cadastral parcels (działki ewidencyjne) with GUGiK's ULDK service, by exactly one of: a parcel ID (TERYT format, e.g. 146510_8.0507.41/1), WGS-84 coordinates (latitude + longitude; latitude comes first), an address, or a region name with a parcel number (e.g. "Krzewina 134", which can match several parcels). Returns the parcel ID, number, region, commune, county, voivodeship and the center of its bounding box in WGS-84; includeGeometry adds the full boundary as WKT in EPSG:4326 (longitude latitude order, as WKT writes it; can be long for a large parcel; not available for regionAndNumber searches). An address must resolve to a single address point to pick a parcel, otherwise the geocoder's candidates are returned. Data comes from EGiB via GUGiK. Never returns or accepts land-registry (KW) numbers or owner data.

Input parameters:

- `address` (string|null): Address with a house number, e.g. "Warszawa, Krucza 50". It is geocoded first, so a street or town alone gives candidates, not a parcel.
- `includeGeometry` (boolean): Also return the parcel boundary as WKT in EPSG:4326 (longitude latitude order, as WKT writes it; not for regionAndNumber).
- `latitude` (number|null): WGS-84 latitude in degrees north, 48.9 to 55.0 (give together with longitude).
- `longitude` (number|null): WGS-84 longitude in degrees east, 14.0 to 24.2 (give together with latitude).
- `parcelId` (string|null): Parcel ID in TERYT format: commune code, region, optional sheet and number, e.g. 146510_8.0507.41/1.
- `regionAndNumber` (string|null): Region name and parcel number, e.g. "Krzewina 134"; can match several parcels. No geometry is returned for this search.

Output parameters:

- `candidates` (array|null)
- `matchedAddress` (object|null)
- `note` (string|null)
- `parcels` (array)
- `sources` (array)

### `lookup_company` (~185 tokens)

Look up a Polish company

Looks up a Polish company or organisation by exactly one of NIP, REGON or KRS number. Combines the VAT whitelist (Biała Lista: VAT status, seat address, bank accounts) with the National Court Register (KRS: legal form, share capital, registration, removal). If the lookup is by NIP or REGON and KRS fails, the whitelist part is still returned, with the KRS error in warnings. Public registry data.

Input parameters:

- `date` (string|null): Date to check in YYYY-MM-DD (Biała Lista only; default today in Poland).
- `krs` (string|null): KRS number (up to 10 digits).
- `nip` (string|null): NIP tax number (10 digits; dashes and a PL prefix are allowed).
- `regon` (string|null): REGON (9 or 14 digits).

Output parameters:

- `found` (boolean)
- `krs` (string|null)
- `krsRegistry` (object|null)
- `name` (string|null)
- `nip` (string|null)
- `query` (string)
- `regon` (string|null)
- `sources` (array)
- `vat` (object|null)
- `warnings` (array)

### `property_prices` (~548 tokens)

Property transaction prices

Answers what real estate sold for in a Polish area: the median and quartile price per square metre of flats (premises) and the single transactions, newest first, for premises, parcels or buildings. Data come from the RCN register (Rejestr Cen Nieruchomości) via GUGiK and are published with a delay of several months; the result says how old the newest transaction is. Single transactions are public register entries (address, price, deed number); buyers and sellers are shown only by kind. Informational, not a valuation. Search by exactly one of: an address (geocoded first; it must resolve to a single address point, otherwise the geocoder's candidates are returned), WGS-84 coordinates (latitude + longitude; latitude comes first) with a radius, or a powiat code. Never returns or accepts land-registry (KW) numbers or owner data.

Input parameters:

- `address` (string|null): Address with a house number, e.g. "Warszawa, Krucza 50"; searches within radiusMeters of it. A street or town alone gives candidates, not prices.
- `dateFrom` (string|null): First day of the period, YYYY-MM-DD. Default: 24 months before dateTo.
- `dateTo` (string|null): Last day of the period, YYYY-MM-DD. Default: today (Warsaw time).
- `kind` (string|null): premises (flats, garages, shops: default), parcels or buildings. Statistics are given for premises only.
- `latitude` (number|null): WGS-84 latitude in degrees north, 48.9 to 55.0 (give together with longitude).
- `longitude` (number|null): WGS-84 longitude in degrees east, 14.0 to 24.2 (give together with latitude).
- `market` (string|null): any (default), primary (from a developer) or secondary (resale).
- `maxTransactions` (integer): How many single transactions to list, 0 to 50 (default 20); the statistics always cover all found.
- `powiat` (string|null): Four-digit TERYT powiat code, e.g. 1465 for Warsaw; searches the whole powiat (it may match too many transactions: narrow the period).
- `premisesFunction` (string|null): For kind premises: residential, garage, commercial, other or any. Default: residential. Not valid for parcels or buildings.
- `radiusMeters` (integer|null): Search radius in metres around the address or coordinates, 50 to 2500 (default 500). Not for a powiat search.

Output parameters:

- `area` (object)
- `candidates` (array|null)
- `kind` (string)
- `market` (string)
- `matchedAddress` (object|null)
- `newestTransaction` (string|null)
- `notes` (array)
- `period` (object)
- `premisesFunction` (string|null)
- `sources` (array)
- `statistics` (object|null)
- `transactionCount` (integer)
- `transactions` (array)
- `transactionsOmitted` (integer)

### `check_vat_bank_account` (~152 tokens)

Check a bank account on the VAT whitelist

Checks whether a bank account is on the Polish VAT whitelist (Biała Lista) for a taxpayer identified by NIP or REGON. Use before paying an invoice over 15,000 PLN; keep the returned request ID and time to document when the whitelist was checked and what it answered.

Input parameters:

- `bankAccount` (string, required): Bank account number: 26-digit NRB or PL IBAN; spaces allowed.
- `date` (string|null): Date to check in YYYY-MM-DD (default today in Poland).
- `nip` (string|null): NIP of the taxpayer (give nip or regon).
- `regon` (string|null): REGON of the taxpayer (give nip or regon).

Output parameters:

- `assignedToActiveVatPayer` (boolean)
- `bankAccount` (string)
- `meaning` (string)
- `nip` (string|null)
- `regon` (string|null)
- `requestDateTime` (string)
- `requestId` (string)
- `source` (object)

### `check_vat_bank_account_offline` (~220 tokens)

Check bank accounts against the VAT whitelist flat file

Checks pairs of NIP and bank account against the Ministry of Finance daily flat file of the VAT whitelist (plik płaski): offline, no request limit, many pairs at once (up to 50), and nothing about the pairs leaves this machine. Answers active, exempt or not_found; not_found means not found in the file, not proof that the account is absent from the whitelist. The first call for a date downloads about 250 MB and takes several minutes, much longer when the Ministry's server is slow. It does not return a request ID; for a check with a request ID use check_vat_bank_account.

Input parameters:

- `date` (string|null): Date to check in YYYY-MM-DD (default today in Poland). Only the last 30 days and tomorrow are available.
- `pairs` (array, required): 1 to 50 pairs, each { "nip": NIP of the taxpayer (dashes and a PL prefix allowed), "bankAccount": 26-digit NRB or PL IBAN, spaces allowed }.

Output parameters:

- `fileDate` (string)
- `generatedOn` (string)
- `results` (array)
- `source` (object)

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/jaceksmi-polishopendata/polishopendata-mcp#diagnostics

## Score history

- 2026-10-25: 83
- 2026-10-24: 83
- 2026-10-23: 67
- 2026-10-22: 82
- 2026-10-21: 81
- 2026-10-20: 81
- 2026-10-19: 81
- 2026-10-18: 80
- 2026-10-17: 80
- 2026-10-16: 79
- 2026-10-15: 79
- 2026-10-14: 40
- 2026-10-13: 40
- 2026-10-12: 40
- 2026-10-06: 76
- 2026-10-04: 75
- 2026-10-03: 74
- 2026-10-02: 71
- 2026-10-01: 71
- 2026-09-30: 71
- 2026-09-29: 71
- 2026-09-28: 71
- 2026-09-27: 71
- 2026-09-26: 71
- 2026-09-25: 71

## Common questions

### What is the Polish Open Data (unofficial) MCP server?

Polish Open Data (unofficial) is an MCP server listed in the public MCP registry as io.github.JacekSmi/PolishOpenData. Polish registers: KRS, VAT, bank checks, parcels, geocoding, property prices (RCN), optional REGON. This page covers its NuGet package (PolishOpenData.Mcp).

### Is the Polish Open Data (unofficial) MCP server safe to use?

Polish Open Data (unofficial) scores 83 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 25 October 2026. It declares no install or post-install scripts. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the Polish Open Data (unofficial) MCP server expose?

Polish Open Data (unofficial) exposes 8 tools: geocode_address, get_krs_extract, validate_identifier, find_parcel, lookup_company, and 3 more. Their descriptions and schemas cost roughly 2,002 tokens of context every time the server is loaded.

### Is the Polish Open Data (unofficial) MCP server still maintained?

Polish Open Data (unofficial) is still listed as active in the MCP registry. We last reached this channel on 25 October 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

### What licence is the Polish Open Data (unofficial) MCP server under?

Polish Open Data (unofficial) declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.

## Links

- NuGet package: https://www.nuget.org/packages/PolishOpenData.Mcp
- Socket report: https://socket.dev/nuget/package/PolishOpenData.Mcp
- Repository: https://github.com/JacekSmi/PolishOpenData
- Changelog RSS feed: https://verifymcp.io/servers/jaceksmi-polishopendata/polishopendata-mcp.xml
- Changelog JSON feed: https://verifymcp.io/servers/jaceksmi-polishopendata/polishopendata-mcp.json
- HTML version of this page: https://verifymcp.io/servers/jaceksmi-polishopendata/polishopendata-mcp
