Cenogram - Polish Real Estate Transactions (RCN)
Preços de transações imobiliárias polonesas provenientes de escrituras notariais, não de anúncios — mais de 8 milhões de registros do registro nacional RCN, de 2003 até o presente, com OAuth 2.1.
Documentação
Cenogram MCP Server
Dados de Transações Imobiliárias e Parcelas Polonesas para IA
Servidor MCP para dados imobiliários poloneses. Acesse mais de 8 milhões de transações imobiliárias do Registro Nacional de Preços e Valores (Rejestr Cen Nieruchomosci, RCN) - preços de escrituras notariais, não de anúncios - diretamente do Claude, Cursor, ChatGPT, Grok ou qualquer assistente de IA compatível com MCP. Além dos preços de transação, o servidor resolve parcelas cadastrais e adiciona contexto por parcela: zoneamento, risco de inundação e deslizamento, registro de patrimônio, licenças de construção e atividade de construção, acesso ao transporte público, classificação de terras agrícolas e uso do solo ao redor.
Fonte de dados: Registro nacional polonês RCN (Rejestr Cen Nieruchomosci) | Plataforma: cenogram.pl
Obtenha sua chave de API
- Acesse cenogram.pl/api
- Informe seu e-mail
- Você receberá sua chave de API
cngrm_...por e-mail
Gerencie suas chaves em cenogram.pl/ustawienia.
Instalação
Escolha seu cliente. Todas as opções abaixo usam o servidor hospedado - nenhuma instalação local é necessária (exceto npx/stdio).
Claude Code
Um comando - zero arquivos de configuração:
claude mcp add cenogram https://mcp.cenogram.pl/mcp \
-t http -H "Authorization: Bearer YOUR_API_KEY"
Cursor
Adicione ao .cursor/mcp.json no seu projeto:
{
"mcpServers": {
"cenogram": {
"type": "http",
"url": "https://mcp.cenogram.pl/mcp",
"headers": {
"Authorization": "Bearer YOUR_API_KEY"
}
}
}
}
Claude Desktop
Adicione ao seu arquivo de configuração:
- 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
Adicione ao .vscode/mcp.json no seu espaço de trabalho:
{
"servers": {
"cenogram": {
"type": "http",
"url": "https://mcp.cenogram.pl/mcp",
"headers": {
"Authorization": "Bearer YOUR_API_KEY"
}
}
}
}
Windsurf
Adicione ao ~/.codeium/windsurf/mcp_config.json:
HTTP remoto:
{
"mcpServers": {
"cenogram": {
"type": "http",
"url": "https://mcp.cenogram.pl/mcp",
"headers": {
"Authorization": "Bearer YOUR_API_KEY"
}
}
}
}
Se HTTP não funcionar, use a opção npx (stdio) abaixo.
Cline
No VS Code: Configurações > Cline > MCP Servers. Adicione:
{
"cenogram": {
"type": "http",
"url": "https://mcp.cenogram.pl/mcp",
"headers": {
"Authorization": "Bearer YOUR_API_KEY"
}
}
}
npx (stdio) - local/offline
Requer Node.js >= 18. Use isto se quiser executar o servidor localmente em vez de conectar ao hospedado.
{
"mcpServers": {
"cenogram": {
"command": "npx",
"args": ["-y", "@cenogram/mcp-server@latest"],
"env": {
"CENOGRAM_API_KEY": "YOUR_API_KEY"
}
}
}
}
| Cliente | Arquivo de configuração |
|---|---|
| Cursor | .cursor/mcp.json |
| Claude Code | .mcp.json no seu projeto |
| Claude Desktop | ~/Library/Application Support/Claude/claude_desktop_config.json |
| Windsurf | ~/.codeium/windsurf/mcp_config.json |
| Cline | Configurações do VS Code > Cline > MCP Servers |
Configuração
| Variável de Ambiente | Obrigatória | Padrão | Descrição |
|---|---|---|---|
CENOGRAM_API_KEY | Sim (stdio) | - | Chave de API de cenogram.pl/api |
CENOGRAM_API_URL | Não | https://cenogram.pl | URL base da API |
MCP_TRANSPORT | Não | stdio | Defina como http para modo HTTP Streamable |
MCP_PORT | Não | 3002 | Porta do servidor HTTP (apenas modo HTTP) |
CENOGRAM_CLIENT_ID | Não | auto-gerado | Identificador persistente do cliente |
Você também pode usar o flag de CLI --http em vez de MCP_TRANSPORT=http.
Dicas
- Seleção de modelo: Para melhores resultados, use Claude Opus 4.7. Ele faz mais chamadas de ferramentas sequenciais e produz análises mais ricas. Você pode trocar o modelo no menu suspenso na parte inferior da janela de chat.
Exemplos de Prompts
Polonês:
- "Qual é o preço mediano de apartamentos em Cracóvia em 2025?"
- "Mostre transações na Rua Pulawska 15 no Mokotów"
- "Encontre transações no lote 126104_9.0015.201"
- "Verifique o plano local e o risco de inundação para o lote 126104_9.0015.201"
- "Encontre transações de terrenos num raio de 5 km do centro de Wrocław acima de 500.000 PLN"
- "Compare os preços de apartamentos em Mokotów e Wola"
- "Mostre a distribuição de preços de imóveis na Polônia"
Inglês:
- "Qual é o preço mediano de apartamentos em Cracóvia em 2025?"
- "Mostre transações na Pulawska 15 no Mokotów"
- "Encontre todas as transações no lote 126104_9.0015.201 e depois busque nas proximidades"
- "Verifique o zoneamento e o risco de inundação para o lote 126104_9.0015.201"
- "Encontre transações de terrenos num raio de 5 km do centro de Wrocław acima de 500.000 PLN"
- "Compare os preços de apartamentos nos distritos de Mokotów e Wola"
- "Mostre a distribuição de preços de imóveis na Polônia"
Ferramentas
| Ferramenta | Descrição | Parâmetros-chave |
|---|---|---|
search_transactions | Buscar transações com filtros | localização, rua, número do edifício, ID do lote, tipo de propriedade, tipo de mercado, faixa de preço/data/área |
get_price_statistics | Estatísticas de preço/m2 por localização (somente residencial) | localização (opcional) |
get_price_distribution | Histograma de preços | bins, maxPrice |
search_by_area | Busca por raio geográfico | latitude, longitude, radiusKm |
get_market_overview | Visão geral do banco de dados e estatísticas | (nenhum) |
list_locations | Listar localizações disponíveis | busca (opcional) |
search_parcels | Buscar lotes por prefixo do ID cadastral | q (prefixo do ID do lote, mínimo 3 caracteres) |
search_by_polygon | Buscar dentro de um polígono GeoJSON | polígono, tipo de propriedade, dataInício/dataFim |
compare_locations | Comparar estatísticas entre 2-5 distritos | distritos (separados por vírgula), tipo de propriedade |
get_building_breakdown | Detalhamento por edifício para uma transação (pegada, andares, área útil estimada) | transaction_id (UUID de um resultado de busca) |
get_parcel_report | Dossiê composto para um lote: núcleo, 9 camadas de enriquecimento, histórico de transações, contexto de preços locais e contexto municipal | parcelId (ID cadastral ou UUID) |
resolve_parcel | Resolver um identificador de lote cadastral para seu registro canônico | parcelId ou q (prefixo do ID), ou lat + lng |
get_demographics | Contexto populacional e demográfico para uma localização | localização ou teryt, ano (ou anoInício/anoFim), categoria |
get_infrastructure_signals | Sinais de infraestrutura municipal (licitações, utilidades, gastos de capital) | localização ou teryt |
estimate_value | Estimativa de valor de vendas comparáveis para uma propriedade | área, mais lat + lng ou parcelId; quartos, mercado |
get_transaction_flood | Risco de inundação para a propriedade em uma transação | transaction_id (UUID de um resultado de busca) |
get_transaction_heritage | Status do registro de patrimônio para a propriedade | transaction_id |
get_transaction_landslide | Risco de deslizamento para a propriedade | transaction_id |
get_transaction_surroundings | Contexto de incômodos e uso do solo ao redor da propriedade | transaction_id |
get_transaction_transit | Acessibilidade ao transporte público para a propriedade | transaction_id |
get_transaction_permits | Licenças de construção registradas para a propriedade | transaction_id |
get_transaction_planning | Zoneamento local e status de planejamento para a propriedade | transaction_id |
get_transaction_farmland | Classificação de uso agrícola do solo para a propriedade | transaction_id |
Nomenclatura de localizações
- A maioria das cidades: use o nome da cidade diretamente (ex.: "Gdansk", "Lublin")
- Varsóvia: "Warszawa" cobre todos os 18 distritos de uma vez; nomeie um ("Mokotow", "Srodmiescie", "Wola") para restringir
- Cracóvia e Lodz funcionam da mesma forma: o nome da cidade cobre todos os subdistritos, ou nomeie um ("Krakow-Podgorze")
- Nomes de bairros não são unidades administrativas - busque por raio ou polígono
- Use
list_locationspara encontrar nomes válidos
Tipos de propriedade
| Valor | Polonês | Inglês |
|---|---|---|
land | Grunt | Terreno |
building | Budynek | Edifício |
developed_land | Grunt zabudowany | Terreno desenvolvido |
unit | Lokal | Apartamento/unidade |
Fluxos de trabalho
Os resultados incluem IDs de lotes e coordenadas GPS, possibilitando pesquisa em várias etapas:
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")
Isso imita como um avaliador de propriedades encontra transações comparáveis para relatórios de avaliação.
Dados
- Mais de 8 milhões de transações de toda a Polônia (380 condados)
- Período: 2003 - presente
- Fonte: Registro nacional polonês RCN (Rejestr Cen Nieruchomosci)
- Atualização: atualizações periódicas do RCN
- Contexto por lote: zoneamento, risco de inundação e deslizamento, registro de patrimônio, licenças de construção e atividade de construção, acesso a transporte, uso agrícola do solo e arredores, endereçável por ID cadastral
Solução de problemas
"Erro: CENOGRAM_API_KEY é obrigatório" - Isso se aplica apenas ao modo stdio. Certifique-se de que CENOGRAM_API_KEY esteja definido no bloco env da sua configuração MCP. Para HTTP remoto, a chave vai no cabeçalho Authorization.
npx trava ou falha - Verifique sua versão do Node.js com node -v. O modo stdio requer Node.js >= 18. Se você estiver em uma versão mais antiga, use a opção HTTP remoto (sem necessidade de Node.js).
Uma localização retorna 0 resultados - O nome pode não ser uma unidade administrativa. Distritos e bairros são coisas diferentes: "Mokotow" é um distrito e funciona, "Sluzew" é um bairro dentro dele e não funciona. Use list_locations(search="...") para encontrar nomes válidos, ou busque por raio (search_by_area) para qualquer coisa menor que um distrito.
401 Não autorizado (modo HTTP) - O cabeçalho Authorization deve ser Bearer cngrm_... (com o prefixo Bearer). Verifique se a chave de API completa está incluída, não apenas o prefixo.
Desenvolvimento
git clone https://github.com/cenogram/mcp-server.git
cd mcp-server
npm install
npm test
npm run build
Licença
MIT