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
Servidor MCP Cenogram
Dados de Transações Imobiliárias e Parcelas na Polônia 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 das transações, o servidor resolve parcelas cadastrais e adiciona contexto por parcela: zoneamento, risco de inundação e deslizamento, registro de patrimônio histórico, licenças de construção e atividade de construção, acesso a transporte público, classificação de terras agrícolas, uso do solo ao redor, natureza — florestas próximas e áreas protegidas sobrepostas — o que está no subsolo (terrenos de mineração e principais reservatórios de água subterrânea), a classificação de uso do solo e qualidade do solo, e acesso viário.
Fonte de dados: registro nacional polonês RCN (Rejestr Cen Nieruchomosci) | Plataforma: cenogram.pl
Obtenha sua chave de API
- Acesse cenogram.pl/api
- Digite seu e-mail
- Você receberá sua chave de API
cngrm_...por e-mail
Gerencie suas chaves em cenogram.pl/ustawienia.
Plano gratuito
Novas contas começam com 1.000 tokens e um teste de 14 dias do plano Standard. Depois disso, a chave continua funcionando com 50 tokens por semana — o saldo é restaurado para 50 a cada 7 dias, em vez de acumular — sem data de expiração e sem cartão de crédito.
Uma chamada custa 1 token para estatísticas, dados de referência, identidade de parcela e contexto municipal; 2 para uma
busca de transações, um histograma de preços ou uma lista de parcelas em uma área; 4 para uma camada de contexto de
uma parcela ou transação; 5 para busca espacial, contornos de parcelas, avaliação e uma comparação
multi-distrital; 45 para get_parcel_report, que retorna todas as camadas de uma vez. Catálogos de locais são
gratuitos. Planos pagos aumentam o limite — veja cenogram.pl/api.
Instalação
Escolha seu cliente. Todas as opções abaixo usam o servidor hospedado — sem necessidade de instalação local (exceto npx/stdio).
Claude Code
Um único 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 > Servidores MCP. 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 esta opção se quiser executar o servidor localmente em vez de se conectar ao servidor 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 > Servidores MCP |
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 o modo HTTP Streamable |
MCP_PORT | Não | 3002 | Porta do servidor HTTP (somente modo HTTP) |
CENOGRAM_CLIENT_ID | Não | gerado automaticamente | Identificador persistente do cliente |
Você também pode usar o sinalizador 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 sequenciais de ferramentas 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:
- "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"
Ferramentas
| Ferramenta | Descrição | Parâmetros Principais |
|---|---|---|
search_transactions | Buscar transações com filtros | localização, rua, númeroDoEdifício, idDaParcela, tipoDePropriedade, tipoDeMercado, faixa de preço/data/área |
get_price_statistics | Estatísticas de preço/m² por localização (somente residencial) | localização (opcional) |
get_price_distribution | Histograma de preços | bins, preçoMáximo |
search_by_area | Buscar transações por raio geográfico | latitude, longitude, raioKm |
get_market_overview | Visão geral do banco de dados e estatísticas | (nenhum) |
list_locations | Listar locais disponíveis | busca (opcional) |
search_parcels | Buscar parcelas por prefixo de ID cadastral | q (prefixo do ID da parcela, mínimo 3 caracteres) |
list_parcels_in_area | Listar as parcelas cadastrais em uma área — lista leve ou contornos completos | teryt, localização, bbox, lat + lng + raioKm, ou polígono; incluirGeometria, áreaMín/áreaMáx, rua/númeroDoEdifício, cursor |
search_by_polygon | Buscar transações dentro de um polígono GeoJSON | polígono, tipoDePropriedade, dataDe/dataAté |
compare_locations | Comparar estatísticas entre 2-5 distritos | distritos (separados por vírgula), tipoDePropriedade |
get_building_breakdown | Detalhamento por edifício para uma transação (pegada, andares, área útil estimada) | idDaTransação (UUID de um resultado de busca) |
get_parcel_report | Dossiê composto para uma parcela: núcleo, 13 camadas de enriquecimento, histórico de transações, contexto de preços local e contexto municipal | idDaParcela (ID cadastral ou UUID) |
resolve_parcel | Resolver uma parcela para sua identidade cadastral | idDaParcela, q (ID cadastral completo ou 'localidade + número da parcela' — não um endereço de rua), ou lat + lng |
get_demographics | Contexto populacional e demográfico para uma localização | localização ou teryt, ano (ou anoDe/anoAté), categoria |
get_infrastructure_signals | Sinais de infraestrutura municipal (licitações, serviços públicos, gastos de capital) | localização ou teryt |
estimate_value | Estimativa de valor por vendas comparáveis para uma propriedade | área, mais lat + lng ou idDaParcela; quartos, mercado |
get_transaction_flood | Risco de inundação para a propriedade em uma transação | idDaTransação (UUID de um resultado de busca) |
get_transaction_heritage | Status no registro de patrimônio histórico para a propriedade | idDaTransação |
get_transaction_landslide | Risco de deslizamento para a propriedade | idDaTransação |
get_transaction_surroundings | Contexto de incômodos e uso do solo ao redor da propriedade | idDaTransação |
get_transaction_transit | Acessibilidade a transporte público para a propriedade | idDaTransação |
get_transaction_permits | Licenças de construção registradas para a propriedade | idDaTransação |
get_transaction_planning | Zoneamento local e status de planejamento para a propriedade | idDaTransação |
get_transaction_farmland | Classificação de uso agrícola do solo para a propriedade | idDaTransação |
get_transaction_nature | Florestas próximas e áreas naturais protegidas sobrepostas para a propriedade | idDaTransação |
get_transaction_subsurface | Terrenos de mineração e principais reservatórios de água subterrânea sob a propriedade | idDaTransação |
get_transaction_roads | Evidência geométrica de acesso viário para a propriedade (distâncias, classe da via, indicador de acesso) | idDaTransação |
Nomenclatura de locais
- 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 Łódź 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 parcelas e coordenadas GPS, permitindo 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.
Começar pelo terreno em vez de pela escritura é um caminho 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")
A etapa 1 pagina por cursor; a etapa 2 é limitada e geralmente truncada, então restrinja a caixa em vez de ler uma resposta truncada como a lista de parcelas da área.
Dados
- Mais de 8 milhões de transações de toda a Polônia (380 condados)
- Intervalo de datas: 2003 - presente
- Fonte: registro nacional polonês RCN (Rejestr Cen Nieruchomosci)
- Atualização: atualizações periódicas do RCN
- Contexto por parcela: zoneamento, risco de inundação e deslizamento, registro de patrimônio histórico, licenças de construção e atividade de construção, acesso a transporte público, uso agrícola do solo, arredores, natureza (florestas próximas e áreas protegidas), subsolo (terrenos de mineração e principais reservatórios de água subterrânea), classificação de uso do solo e qualidade do solo, e acesso viário — 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 remota (sem necessidade de Node.js).
Um local retorna 0 resultados — O nome pode não ser uma unidade administrativa. Distritos e bairros são duas 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.
402 Pagamento Necessário — A conta está sem tokens. Em uma conta gratuita, a resposta informa a data a partir da qual o saldo volta ao limite semanal de 50; a chave e a conexão permanecem válidas até lá. Um plano pago remove o limite — veja cenogram.pl/api.
Desenvolvimento
git clone https://github.com/cenogram/mcp-server.git
cd mcp-server
npm install
npm test
npm run build
Licença
MIT