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 Cenogram

npm version Node.js License: MIT

Datos de transacciones inmobiliarias y parcelas de Polonia 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 de anuncios, directamente desde Claude, Cursor, ChatGPT, Grok o cualquier asistente de IA compatible con MCP. Además 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 de obra, acceso a transporte público, clasificación agrícola del suelo y uso del suelo circundante.

Fuente de datos: registro nacional polaco RCN (Rejestr Cen Nieruchomosci) | Plataforma: cenogram.pl

Obtén tu clave de API

  1. Ve a cenogram.pl/api
  2. Introduce tu correo electrónico
  3. Recibirás tu clave de API cngrm_... por correo electrónico

Gestiona tus claves en cenogram.pl/ustawienia.

Instalación

Elige tu cliente. Todas las opciones a continuación utilizan 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 > MCP Servers. Añade:

{
  "cenogram": {
    "type": "http",
    "url": "https://mcp.cenogram.pl/mcp",
    "headers": {
      "Authorization": "Bearer YOUR_API_KEY"
    }
  }
}
npx (stdio) - local/offline

Requiere Node.js >= 18. Úsalo si quieres ejecutar el servidor localmente en lugar de conectarte al servidor alojado.

{
  "mcpServers": {
    "cenogram": {
      "command": "npx",
      "args": ["-y", "@cenogram/mcp-server@latest"],
      "env": {
        "CENOGRAM_API_KEY": "YOUR_API_KEY"
      }
    }
  }
}
ClienteArchivo 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
ClineConfiguración de VS Code > Cline > MCP Servers

Configuración

Variable de EntornoRequeridaPredeterminadoDescripción
CENOGRAM_API_KEY (stdio)-Clave de API de cenogram.pl/api
CENOGRAM_API_URLNohttps://cenogram.plURL base de la API
MCP_TRANSPORTNostdioConfigúralo en http para el modo HTTP Streamable
MCP_PORTNo3002Puerto del servidor HTTP (solo modo HTTP)
CENOGRAM_CLIENT_IDNoauto-generadoIdentificador persistente del cliente

También puedes usar el indicador de línea de comandos --http en lugar de MCP_TRANSPORT=http.

Consejos

  • Selección de modelo: Para obtener los mejores resultados, usa Claude Opus 4.7. Realiza más llamadas a 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 Prompts

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

HerramientaDescripciónParámetros clave
search_transactionsBusca transacciones con filtrosubicación, calle, númeroDeEdificio, idDeParcela, tipoDePropiedad, tipoDeMercado, rango de precio/fecha/área
get_price_statisticsEstadísticas de precio/m2 por ubicación (solo residencial)ubicación (opcional)
get_price_distributionHistograma de preciosbins, precioMáximo
search_by_areaBusca por radio geográficolatitud, longitud, radioKm
get_market_overviewResumen de la base de datos y estadísticas(ninguno)
list_locationsLista ubicaciones disponiblesbúsqueda (opcional)
search_parcelsBusca parcelas por prefijo de ID catastralq (prefijo de ID de parcela, mínimo 3 caracteres)
search_by_polygonBusca dentro de un polígono GeoJSONpolígono, tipoDePropiedad, fechaDesde/fechaHasta
compare_locationsCompara estadísticas entre 2 y 5 distritosdistritos (separados por comas), tipoDePropiedad
get_building_breakdownDesglose por edificio para una transacción (huella, plantas, área de piso estimada)idDeTransacción (UUID de un resultado de búsqueda)
get_parcel_reportExpediente compuesto para una parcela: núcleo, 9 capas de enriquecimiento, historial de transacciones, contexto de precios local y contexto municipalidDeParcela (ID catastral o UUID)
resolve_parcelResuelve un identificador de parcela catastral a su registro canónicoidDeParcela o q (prefijo de ID), o lat + lng
get_demographicsContexto de población y demografía para una ubicaciónubicación o teryt, año (o añoDesde/añoHasta), categoría
get_infrastructure_signalsSeñales de infraestructura municipal (licitaciones, servicios públicos, gasto de capital)ubicación o teryt
estimate_valueEstimación de valor por ventas comparables para una propiedadárea, más lat + lng o idDeParcela; habitaciones, mercado
get_transaction_floodRiesgo de inundación para la propiedad en una transacciónidDeTransacción (UUID de un resultado de búsqueda)
get_transaction_heritageEstado del registro de patrimonio para la propiedadidDeTransacción
get_transaction_landslideRiesgo de deslizamiento para la propiedadidDeTransacción
get_transaction_surroundingsContexto de molestias y uso del suelo alrededor de la propiedadidDeTransacción
get_transaction_transitAccesibilidad de transporte público para la propiedadidDeTransacción
get_transaction_permitsPermisos de construcción registrados para la propiedadidDeTransacción
get_transaction_planningEstado de zonificación y planificación local para la propiedadidDeTransacción
get_transaction_farmlandClasificación de uso agrícola del suelo para la propiedadidDeTransacción

Nomenclatura de ubicaciones

  • La mayoría de las ciudades: usa directamente el nombre de la ciudad (por ejemplo, "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_locations para encontrar nombres válidos

Tipos de propiedad

ValorPolacoInglés
landGruntParcela de tierra
buildingBudynekEdificio
developed_landGrunt zabudowanyTerreno desarrollado
unitLokalApartamento/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.

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 de obra, acceso a transporte, uso agrícola del suelo y alrededores, 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é configurada 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 tienes una versión anterior, usa la opción HTTP remoto en su lugar (no necesita Node.js).

Una ubicación devuelve 0 resultados - El nombre puede no ser una unidad administrativa. Distritos y barrios son 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 se incluya la clave API completa, no solo el prefijo.

Desarrollo

git clone https://github.com/cenogram/mcp-server.git
cd mcp-server
npm install
npm test
npm run build

Licencia

MIT