rcs-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@rcs-mcp Pokaż statystyki cen w Zakopanem dla lokali mieszkalnych."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
rcs-mcp
Serwer MCP dla Rejestru Cen Nieruchomości z geoportal.gov.pl. Udostępnia Claude Desktop narzędzia do wyszukiwania obszarów w Polsce i sprawdzania rzeczywistych transakcji nieruchomościowych z aktów notarialnych.
Co udostępnia
znajdz_obszar(nazwa, poziom)- znajduje bbox dla województwa, powiatu, gminy, miasta albo wsi.wyszukaj_transakcje(...)- zwraca listę transakcji dla bboxa.statystyki_cen(...)- liczy medianę, średnią, kwartyle i zakres ceny za m2 na próbie transakcji, plus medianę w rozbiciu na lata.
Typowy przepływ:
znajdz_obszar("Zakopane", "miasto")Weź
bboxz wyniku.statystyki_cen(bbox=...)albowyszukaj_transakcje(bbox=...)
Related MCP server: cenogram-mcp-server
Jakość danych
Surowe rekordy RCN dają bardzo mylące ceny za m2 - te same dane potrafią pokazać i 65 zl/m2, i 71 tys. zl/m2 w jednym mieście. Dlatego domyślnie:
Cena bierze się z nieruchomości, nie z aktu notarialnego.
tran_cena_bruttoto cena całego aktu, który często obejmuje kilka lokali (16% rekordów w próbce z Sopotu) - dzielona przez powierzchnię jednego lokalu zawyżała cenę nawet dwukrotnie.Powierzchnia gruntu nie zastępuje powierzchni lokalu. Fallback na
nier_pow_gruntu(grunt pod całym budynkiem) działa już tylko dla działek.tylko_rynkowe=Trueodsiewa sprzedaż udziałów ułamkowych (cena za ułamek, powierzchnia całości - np. 9 zl/m2 za udział w hali garażowej) i transakcje spoza wolnego rynku (komunalne z bonifikatą, bezprzetargowe).tylko_mieszkalne=Trueodsiewa garaże, komórki lokatorskie i lokale usługowe.Wartości skrajne odrzuca reguła Tukeya (3 x IQR na logarytmie ceny), więc zwracane
min/maxto krańce oczyszczonej próbki. Liczbę odrzuconych widać wodrzucone_odstajace.
Każdy z tych filtrów można wyłączyć parametrem, żeby zobaczyć surowe dane.
Osobna sprawa to czas: RCN nie filtruje po dacie po stronie serwera, więc próbka potrafi objąć 20+ lat i wtedy jedna mediana miesza epoki cenowe (dla Łodzi bez filtra: 3,7 tys. zl/m2, a dla samego 2025-2026: 8,3 tys.). Dlatego wynik zawsze zawiera zakres_dat i mediana_wg_roku, a przy szerokiej próbce - ostrzeżenie. Do wyceny podawaj data_od.
Obsługiwane typy nieruchomości:
lokalebudynkidzialki
Uruchomienie
Projekt działa przez Docker Compose. Lokalny venv nie jest potrzebny.
docker compose up -dPrzy zmianach w kodzie przebuduj obraz:
docker compose up -d --buildZatrzymanie:
docker compose downCache granic administracyjnych jest trzymany w wolumenie Dockera rcs-mcp-cache, więc kolejne uruchomienia korzystają z zapisanych danych.
Zbudowanie cache'u od zera trwa dłużej niż limit czasu pojedynczego wywołania narzędzia MCP (ok. 30 s dla powiat, ok. 60 s dla gmina), dlatego kontener po starcie rozgrzewa w tle brakujące poziomy. Postęp widać w logach:
docker compose logs -f rcs-mcpJeśli mimo to trafisz na jeszcze niezbudowany poziom, znajdz_obszar nie zawiesi się do timeoutu — zwróci informację, że cache buduje się w tle. Pobieranie leci dalej, więc wystarczy powtórzyć to samo wywołanie za kilkadziesiąt sekund.
Claude Desktop
Wpis w claude_desktop_config.json:
{
"mcpServers": {
"rcs-mcp": {
"command": "/usr/local/bin/docker",
"args": [
"compose",
"-f",
"/Volumes/wew/Git/rcs-mcp/docker-compose.yml",
"exec",
"-T",
"rcs-mcp",
"rcs-mcp"
]
}
}
}Po zmianie konfiguracji zrestartuj Claude Desktop.
Źródła danych
RCN:
https://mapy.geoportal.gov.pl/wss/service/rcn?language=polPRG, granice administracyjne:
https://mapy.geoportal.gov.pl/wss/service/PZGIK/PRG/WFS/AdministrativeBoundariesPRNG, nazwy miejscowości:
https://mapy.geoportal.gov.pl/wss/service/PZGiK/PRNG/WFS/GeographicalNames
Geoportal zwraca dane jako WFS/GML. Serwer pobiera je przez httpx i parsuje lokalnie.
Ograniczenia
Filtrowanie serwerowe
CQL_FILTERw usługach Geoportalu jest ignorowane, więc projekt filtruje dane po stronie klienta.Realnie użyteczny filtr przestrzenny to
BBOX.Pierwsze wyszukanie obszaru może pobrać większą warstwę PRG/PRNG i zbudować cache.
Dane RCN bywają zaszumione, np. udziałami, garażami, komórkami lub błędnymi powierzchniami. Dla statystyk zwykle bardziej sensowna jest mediana niż średnia.
Parametr
tylko_mieszkalne=Truedomyślnie odrzuca część rekordów niemieszkalnych dla lokali i budynków.
Struktura
rcs_mcp/server.py- definicje narzędzi MCP.rcs_mcp/wfs_client.py- pobieranie i parsowanie transakcji RCN.rcs_mcp/granice.py- wyszukiwanie obszarów i cache PRG/PRNG.Dockerfile- obraz aplikacji.docker-compose.yml- uruchomienie kontenera dla Claude Desktop.
Available Tools
3 toolsstatystyki_cenA
Liczy statystyki ceny za m² na podstawie próby rzeczywistych transakcji w danym obszarze.
Wartości odstające są odrzucane (reguła Tukeya na logarytmie ceny), więc
zwracane min/max to krańce oczyszczonej próbki, a nie artefakty danych
RCN. Pole odrzucone_odstajace mówi, ilu rekordów to dotyczyło — jeśli jest
ich dużo w stosunku do liczba_w_probce, potraktuj wynik ostrożnie.
Args:
bbox: Ramka (south, west, north, east) w EPSG:4326, np. z znajdz_obszar.
typ: Rodzaj nieruchomości: "lokale" (mieszkania), "budynki" lub "dzialki".
rodzaj_rynku: Opcjonalny filtr rynku: "pierwotny" lub "wtorny".
data_od: Tylko transakcje od tej daty aktu notarialnego, "RRRR-MM-DD" (włącznie).
data_do: Tylko transakcje do tej daty aktu notarialnego, "RRRR-MM-DD" (włącznie).
tylko_mieszkalne: Dla "lokale"/"budynki" (domyślnie True) odsiewa garaże,
komórki lokatorskie i lokale usługowe/biurowe — bez tego silnie
zaniżają/zawyżają cenę za m². Ustaw na False, żeby liczyć z surowych danych.
tylko_rynkowe: (domyślnie True) odsiewa sprzedaż udziałów ułamkowych
i transakcje spoza wolnego rynku (bonifikaty komunalne itd.).
liczba_prob: Maksymalna liczba transakcji branych do próby (domyślnie 300).
Inputs: bbox (required), typ, data_do, data_od, +4 more.
wyszukaj_transakcjeA
Zwraca rzeczywiste transakcje nieruchomościami (z aktów notarialnych) w danym obszarze.
Obszar (bbox: south, west, north, east w WGS84/EPSG:4326) najłatwiej uzyskać
przez wcześniejsze wywołanie znajdz_obszar.
Args:
bbox: Ramka (south, west, north, east) w EPSG:4326, np. z znajdz_obszar.
typ: Rodzaj nieruchomości: "lokale" (mieszkania), "budynki" lub "dzialki".
rodzaj_rynku: Opcjonalny filtr rynku: "pierwotny" lub "wtorny".
data_od: Tylko transakcje od tej daty aktu notarialnego, "RRRR-MM-DD" (włącznie).
data_do: Tylko transakcje do tej daty aktu notarialnego, "RRRR-MM-DD" (włącznie).
tylko_mieszkalne: Dla "lokale"/"budynki" (domyślnie True) odsiewa garaże,
komórki lokatorskie i lokale usługowe/biurowe sprzedawane jako odrębne
pozycje — bez tego silnie zaniżają/zawyżają cenę za m². Ustaw na False,
żeby zobaczyć wszystkie rekordy bez tego filtra.
tylko_rynkowe: (domyślnie True) odsiewa transakcje nieporównywalne cenowo:
sprzedaż udziału ułamkowego (cena za ułamek, powierzchnia całości)
i sprzedaż poza wolnym rynkiem (komunalna z bonifikatą, bezprzetargowa).
limit: Maksymalna liczba transakcji do zwrócenia (domyślnie 50).
Inputs: bbox (required), typ, limit, data_do, +4 more. Returns: result
znajdz_obszarA
Wyszukuje województwo/powiat/gminę/miasto/wieś po nazwie i zwraca jej bbox.
Użyj wyniku (bbox) jako argumentu bbox w wyszukaj_transakcje/statystyki_cen.
Może zwrócić więcej niż jedno dopasowanie (różne miejsca o tej samej nazwie w
różnych regionach) — rozróżnij je po polach powiat/wojewodztwo.
Args: nazwa: Szukana nazwa, np. "Warszawa", "Zakopane", "Zalipie". poziom: "wojewodztwo", "powiat", "gmina", "miasto" (domyślnie) lub "wies". Pierwsze wyszukanie na danym poziomie buduje lokalny cache z danych GUGIK (PRG/PRNG). Zwykle cache jest już rozgrzany po starcie serwera, ale jeśli nie — narzędzie zwróci komunikat, że budowa trwa w tle; wtedy po prostu powtórz to samo wywołanie za kilkadziesiąt sekund.
Inputs: nazwa (required), poziom. Returns: result
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 3 tools
Each tool has a clearly distinct purpose: znajdz_obszar resolves a name to a bounding box, wyszukaj_transakcje returns raw transaction records, and statystyki_cen computes aggregated price statistics. There is no overlap in functionality, so an agent can easily select the right tool for the intended step.
All names use lowercase snake_case and are concise Polish terms, but the pattern is not perfectly uniform: znajdz_obszar and wyszukaj_transakcje are verb_noun, while statystyki_cen is noun_noun. This is a minor deviation from a consistent verb-first convention and still readable.
With only 3 tools, the server is tightly focused on querying real estate transactions. Each tool is essential and fills a distinct role in the workflow (geocoding, raw data, statistics), so the count is well-scoped and not too thin.
The toolset forms a complete pipeline for the domain: find an area by name, then use the returned bbox to either fetch raw transactions or compute price statistics. Since this is a read-only data service, there are no obvious missing lifecycle operations, and agents can accomplish the intended tasks without dead ends.
Maintenance
Related MCP Connectors
Polish real-estate deed prices and parcel checks: zoning plan, utilities, flood risk
Polish EGiB cadastral parcels by id_działki or coordinates, with RCN sale prices.
Polish real estate for AI: 8M+ deed transaction prices (RCN) + per-parcel context by cadastral ID
Experimental MCP exploring Polish administrative units and BDL statistics.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables users to search UK property prices by postcode, street, or city using the HM Land Registry's SPARQL endpoint. It also provides tools for resolving postcodes and finding nearby locations through Ordnance Survey data.22MIT

cenogram-mcp-serverofficial
AlicenseAqualityBmaintenance7M+ real estate transactions from Poland's RCN registry. Search, compare, and analyze prices30108 npm1MIT- FlicenseNot gradedqualityFmaintenanceEnables to query South Korean cadastral and land information (parcel boundaries, land use zones, official land prices) via VWorld Open API, supporting geocoding, reverse geocoding, and location search for real estate feasibility reviews.-
- AlicenseNot gradedqualityBmaintenanceProvides access to Poland's national open data portal (Otwarte Dane) through natural language queries, enabling users to search and retrieve datasets from dane.gov.pl.88 npmMIT