Cenogram - Polish Real Estate Transactions (RCN)
Precios de transacciones inmobiliarias polacas provenientes de escrituras notariales, no de anuncios: más de 8 millones de registros del registro nacional RCN, de 2003 a la fecha, con OAuth 2.1.
Documentación
Servidor MCP de Cenogram
Datos de transacciones inmobiliarias y parcelas polacas para IA
Servidor MCP para datos inmobiliarios polacos. Accede a más de 8 millones de transacciones inmobiliarias del registro nacional de Precios y Valores (Rejestr Cen Nieruchomosci, RCN): precios de escrituras notariales, no listados—directamente desde Claude, Cursor, ChatGPT, Grok o cualquier asistente de IA compatible con MCP. Más allá de los precios de transacción, el servidor resuelve parcelas catastrales y añade contexto por parcela: zonificación, riesgo de inundación y deslizamiento, registro de patrimonio, permisos de construcción y actividad constructiva, acceso al transporte público, clasificación de tierras agrícolas, uso del suelo circundante, naturaleza—bosques cercanos y áreas protegidas superpuestas—qué hay bajo tierra (terrenos mineros y principales reservas de agua subterránea), la clasificación de uso del suelo y calidad del suelo, y acceso por carretera.
Fuente de datos: registro nacional polaco RCN (Rejestr Cen Nieruchomosci) | Plataforma: cenogram.pl
Obtén tu clave API
- Ve a cenogram.pl/api
- Introduce tu correo electrónico
- Recibirás tu clave API
cngrm_...por correo electrónico
Gestiona tus claves en cenogram.pl/ustawienia.
Plan gratuito
Las cuentas nuevas comienzan con 1,000 tokens y una prueba de 14 días del plan Estándar. Después, la clave sigue funcionando con 50 tokens por semana—el saldo se restablece a 50 cada 7 días en lugar de acumularse— sin fecha de caducidad y sin tarjeta.
Una llamada cuesta 1 token para estadísticas, datos de referencia, identidad de parcela y contexto municipal; 2 para una
búsqueda de transacciones, un histograma de precios o una lista de parcelas en un área; 4 para una capa de contexto de
una parcela o transacción; 5 para búsqueda espacial, contornos de parcela, valoración y una comparación
multidistrito; 45 para get_parcel_report, que devuelve todas las capas a la vez. Los catálogos de ubicaciones son
gratuitos. Los planes de pago aumentan el límite—consulta cenogram.pl/api.
Instalación
Elige tu cliente. Todas las opciones a continuación usan el servidor alojado—no se necesita instalación local (excepto npx/stdio).
Claude Code
Un solo comando—cero archivos de configuración:
claude mcp add cenogram https://mcp.cenogram.pl/mcp \
-t http -H "Authorization: Bearer YOUR_API_KEY"
Cursor
Añade a .cursor/mcp.json en tu proyecto:
{
"mcpServers": {
"cenogram": {
"type": "http",
"url": "https://mcp.cenogram.pl/mcp",
"headers": {
"Authorization": "Bearer YOUR_API_KEY"
}
}
}
}
Claude Desktop
Añade a tu archivo de configuración:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
npx (stdio):
{
"mcpServers": {
"cenogram": {
"command": "npx",
"args": ["-y", "@cenogram/mcp-server@latest"],
"env": {
"CENOGRAM_API_KEY": "YOUR_API_KEY"
}
}
}
}
VS Code / GitHub Copilot
Añade a .vscode/mcp.json en tu espacio de trabajo:
{
"servers": {
"cenogram": {
"type": "http",
"url": "https://mcp.cenogram.pl/mcp",
"headers": {
"Authorization": "Bearer YOUR_API_KEY"
}
}
}
}
Windsurf
Añade a ~/.codeium/windsurf/mcp_config.json:
HTTP remoto:
{
"mcpServers": {
"cenogram": {
"type": "http",
"url": "https://mcp.cenogram.pl/mcp",
"headers": {
"Authorization": "Bearer YOUR_API_KEY"
}
}
}
}
Si HTTP no funciona, usa la opción npx (stdio) a continuación.
Cline
En VS Code: Configuración > Cline > Servidores MCP. Añade:
{
"cenogram": {
"type": "http",
"url": "https://mcp.cenogram.pl/mcp",
"headers": {
"Authorization": "Bearer YOUR_API_KEY"
}
}
}
npx (stdio) - local/sin conexión
Requiere Node.js >= 18. Usa esto si quieres ejecutar el servidor localmente en lugar de conectarte al alojado.
{
"mcpServers": {
"cenogram": {
"command": "npx",
"args": ["-y", "@cenogram/mcp-server@latest"],
"env": {
"CENOGRAM_API_KEY": "YOUR_API_KEY"
}
}
}
}
| Cliente | Archivo de configuración |
|---|---|
| Cursor | .cursor/mcp.json |
| Claude Code | .mcp.json en tu proyecto |
| Claude Desktop | ~/Library/Application Support/Claude/claude_desktop_config.json |
| Windsurf | ~/.codeium/windsurf/mcp_config.json |
| Cline | Configuración de VS Code > Cline > Servidores MCP |
Configuración
| Variable de entorno | Requerida | Predeterminado | Descripción |
|---|---|---|---|
CENOGRAM_API_KEY | Sí (stdio) | - | Clave API de cenogram.pl/api |
CENOGRAM_API_URL | No | https://cenogram.pl | URL base de la API |
MCP_TRANSPORT | No | stdio | Establecer en http para modo HTTP Streamable |
MCP_PORT | No | 3002 | Puerto del servidor HTTP (solo modo HTTP) |
CENOGRAM_CLIENT_ID | No | generado automáticamente | Identificador de cliente persistente |
También puedes usar el indicador de CLI --http en lugar de MCP_TRANSPORT=http.
Consejos
- Selección de modelo: Para mejores resultados, usa Claude Opus 4.7. Realiza más llamadas de herramientas secuenciales y produce análisis más ricos. Puedes cambiar el modelo en el menú desplegable en la parte inferior de la ventana de chat.
Ejemplos de indicaciones
Polaco:
- "Jaka jest mediana cen mieszkan w Krakowie w 2025?"
- "Pokaz transakcje z ulicy Pulawskiej 15 na Mokotowie"
- "Znajdz transakcje na dzialce 126104_9.0015.201"
- "Sprawdz plan miejscowy i ryzyko powodziowe dla dzialki 126104_9.0015.201"
- "Znajdz transakcje gruntow w promieniu 5km od centrum Wroclawia powyzej 500 000 PLN"
- "Porownaj ceny mieszkan na Mokotowie i Woli"
- "Pokaz rozklad cen nieruchomosci w Polsce"
Inglés:
- "What's the median apartment price in Krakow in 2025?"
- "Show transactions at Pulawska 15 in Mokotow"
- "Find all transactions on parcel 126104_9.0015.201 and then search nearby"
- "Check the zoning and flood risk for parcel 126104_9.0015.201"
- "Find land transactions within 5km of Wroclaw center above 500,000 PLN"
- "Compare apartment prices in Mokotow and Wola districts"
- "Show the price distribution of real estate in Poland"
Herramientas
| Herramienta | Descripción | Parámetros clave |
|---|---|---|
search_transactions | Buscar transacciones con filtros | ubicación, calle, númeroDeEdificio, idDeParcela, tipoDePropiedad, tipoDeMercado, rango de precio/fecha/área |
get_price_statistics | Estadísticas de precio/m2 por ubicación (solo residencial) | ubicación (opcional) |
get_price_distribution | Histograma de precios | contenedores, precioMáximo |
search_by_area | Buscar transacciones por radio geográfico | latitud, longitud, radioKm |
get_market_overview | Resumen y estadísticas de la base de datos | (ninguno) |
list_locations | Listar ubicaciones disponibles | búsqueda (opcional) |
search_parcels | Buscar parcelas por prefijo de ID catastral | q (prefijo de ID de parcela, mínimo 3 caracteres) |
list_parcels_in_area | Listar las parcelas catastrales en un área—lista ligera o contornos completos | teryt, ubicación, bbox, lat + lng + radioKm, o polígono; incluirGeometría, áreaMín/áreaMáx, calle/númeroDeEdificio, cursor |
search_by_polygon | Buscar transacciones dentro de un polígono GeoJSON | polígono, tipoDePropiedad, fechaDesde/fechaHasta |
compare_locations | Comparar estadísticas entre 2-5 distritos | distritos (separados por comas), tipoDePropiedad |
get_building_breakdown | Desglose por edificio para una transacción (huella, plantas, área de piso estimada) | idDeTransacción (UUID de un resultado de búsqueda) |
get_parcel_report | Expediente compuesto para una parcela: núcleo, 13 capas de enriquecimiento, historial de transacciones, contexto de precios local y contexto municipal | idDeParcela (ID catastral o UUID) |
resolve_parcel | Resolver una parcela a su identidad catastral | idDeParcela, q (ID catastral completo o 'localidad + número de parcela'—no una dirección de calle), o lat + lng |
get_demographics | Contexto poblacional y demográfico para una ubicación | ubicación o teryt, año (o añoDesde/añoHasta), categoría |
get_infrastructure_signals | Señales de infraestructura municipal (licitaciones, servicios públicos, gasto de capital) | ubicación o teryt |
estimate_value | Estimación de valor por ventas comparables para una propiedad | área, más lat + lng o idDeParcela; habitaciones, mercado |
get_transaction_flood | Riesgo de inundación para la propiedad en una transacción | idDeTransacción (UUID de un resultado de búsqueda) |
get_transaction_heritage | Estado del registro de patrimonio para la propiedad | idDeTransacción |
get_transaction_landslide | Riesgo de deslizamiento para la propiedad | idDeTransacción |
get_transaction_surroundings | Contexto de molestias y uso del suelo alrededor de la propiedad | idDeTransacción |
get_transaction_transit | Accesibilidad al transporte público para la propiedad | idDeTransacción |
get_transaction_permits | Permisos de construcción registrados para la propiedad | idDeTransacción |
get_transaction_planning | Estado de zonificación y planificación local para la propiedad | idDeTransacción |
get_transaction_farmland | Clasificación de uso de tierras agrícolas para la propiedad | idDeTransacción |
get_transaction_nature | Bosques cercanos y áreas naturales protegidas superpuestas para la propiedad | idDeTransacción |
get_transaction_subsurface | Terrenos mineros y principales reservas de agua subterránea bajo la propiedad | idDeTransacción |
get_transaction_roads | Evidencia geométrica de acceso por carretera para la propiedad (distancias, clase de carretera, indicador de acceso) | idDeTransacción |
Nombres de ubicaciones
- La mayoría de las ciudades: usa el nombre de la ciudad directamente (p. ej., "Gdansk", "Lublin")
- Varsovia: "Warszawa" cubre los 18 distritos a la vez; nombra uno ("Mokotow", "Srodmiescie", "Wola") para acotar
- Cracovia y Lodz funcionan igual: el nombre de la ciudad cubre todos los subdistritos, o nombra uno ("Krakow-Podgorze")
- Los nombres de barrios no son unidades administrativas—busca por radio o polígono en su lugar
- Usa
list_locationspara encontrar nombres válidos
Tipos de propiedad
| Valor | Polaco | Inglés |
|---|---|---|
land | Grunt | Terreno |
building | Budynek | Edificio |
developed_land | Grunt zabudowany | Terreno urbanizado |
unit | Lokal | Apartamento/unidad |
Flujos de trabajo
Los resultados incluyen IDs de parcela y coordenadas GPS, lo que permite investigación en varios pasos:
1. Search by address -> search_transactions(location="Mokotow", street="Pulawska", buildingNumber="15")
2. Note parcel_id and coordinates from results
3. Search nearby -> search_by_area(lat=52.19, lng=21.01, radiusKm=2, propertyType="unit")
4. Compare prices -> get_price_statistics(location="Mokotow")
Esto imita cómo un tasador de propiedades encuentra transacciones comparables para informes de valoración.
Comenzar desde el terreno en lugar de desde una escritura es una ruta diferente:
1. List the parcels -> list_parcels_in_area(location="Wawer", minArea=800)
2. Draw the ones you want -> list_parcels_in_area(bbox="21.10,52.20,21.14,52.23", includeGeometry=true)
3. Open one in full -> get_parcel_report(parcelId="146518_8.0108.27")
El paso 1 pagina con cursor; el paso 2 está limitado y generalmente truncado, así que acota el cuadro en lugar de leer una respuesta truncada como la lista de parcelas del área.
Datos
- Más de 8 millones de transacciones de toda Polonia (380 condados)
- Rango de fechas: 2003 - presente
- Fuente: registro nacional polaco RCN (Rejestr Cen Nieruchomosci)
- Actualización: actualizaciones periódicas de RCN
- Contexto por parcela: zonificación, riesgo de inundación y deslizamiento, registro de patrimonio, permisos de construcción y actividad constructiva, acceso al transporte, uso de tierras agrícolas, alrededores, naturaleza (bosques cercanos y áreas protegidas), subsuelo (terrenos mineros y principales reservas de agua subterránea), clasificación de uso del suelo y calidad del suelo, y acceso por carretera—direccionable por ID catastral
Solución de problemas
"Error: CENOGRAM_API_KEY is required" - Esto solo aplica al modo stdio. Asegúrate de que CENOGRAM_API_KEY esté configurado en el bloque env de tu configuración MCP. Para HTTP remoto, la clave va en el encabezado Authorization en su lugar.
npx se cuelga o falla - Verifica tu versión de Node.js con node -v. El modo stdio requiere Node.js >= 18. Si estás en una versión anterior, usa la opción HTTP remota en su lugar (no se necesita Node.js).
Una ubicación devuelve 0 resultados - El nombre puede no ser una unidad administrativa. Distritos y barrios son dos cosas diferentes: "Mokotow" es un distrito y funciona, "Sluzew" es un barrio dentro de él y no funciona. Usa list_locations(search="...") para encontrar nombres válidos, o busca por radio (search_by_area) para cualquier cosa más pequeña que un distrito.
401 No autorizado (modo HTTP) - El encabezado Authorization debe ser Bearer cngrm_... (con el prefijo Bearer). Verifica que la clave API completa esté incluida, no solo el prefijo.
402 Pago requerido - La cuenta no tiene tokens. En una cuenta gratuita, la respuesta indica la fecha a partir de la cual el saldo vuelve a estar en sus 50 semanales; la clave y la conexión siguen siendo válidas hasta entonces. Un plan de pago elimina el límite—consulta cenogram.pl/api.
Desarrollo
git clone https://github.com/cenogram/mcp-server.git
cd mcp-server
npm install
npm test
npm run build
Licencia
MIT