MCP Hub
Back to servers

Cenogram - Polish Real Estate Data

7M+ real estate transactions from Poland's RCN registry. Search, compare, and analyze prices.

Registryglama
Updated
Apr 7, 2026

Quick Install

npx -y @cenogram/mcp-server

Cenogram MCP Server

npm version Node.js License: MIT

Polish Real Estate Transaction Data for AI

MCP server for Polish real estate data. Access 7M+ real estate transactions from the national Registry of Prices and Values (Rejestr Cen Nieruchomosci, RCN) directly from Claude, Cursor, or any MCP-compatible AI assistant.

Data source: Polish national RCN registry (Rejestr Cen Nieruchomosci) | Platform: cenogram.pl

Get your API key

  1. Go to cenogram.pl/api
  2. Enter your email
  3. You'll receive your cngrm_... API key by email

Manage your keys at cenogram.pl/ustawienia.

Installation

Pick your client. All options below use the hosted server - no local install needed (except npx/stdio).

Claude Code

One command - zero config files:

claude mcp add cenogram https://mcp.cenogram.pl/mcp \
  -t http -H "Authorization: Bearer YOUR_API_KEY"
Cursor

Add to .cursor/mcp.json in your project:

{
  "mcpServers": {
    "cenogram": {
      "type": "http",
      "url": "https://mcp.cenogram.pl/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_API_KEY"
      }
    }
  }
}
Claude Desktop

Add to your config file:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json

HTTP remote (Claude Desktop 0.9+):

{
  "mcpServers": {
    "cenogram": {
      "type": "http",
      "url": "https://mcp.cenogram.pl/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_API_KEY"
      }
    }
  }
}

Stdio fallback (older versions - requires Node.js >= 18):

{
  "mcpServers": {
    "cenogram": {
      "command": "npx",
      "args": ["-y", "@cenogram/mcp-server@latest"],
      "env": {
        "CENOGRAM_API_KEY": "YOUR_API_KEY"
      }
    }
  }
}
VS Code / GitHub Copilot

Add to .vscode/mcp.json in your workspace:

{
  "servers": {
    "cenogram": {
      "type": "http",
      "url": "https://mcp.cenogram.pl/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_API_KEY"
      }
    }
  }
}
Windsurf

Add to ~/.codeium/windsurf/mcp_config.json:

HTTP remote:

{
  "mcpServers": {
    "cenogram": {
      "type": "http",
      "url": "https://mcp.cenogram.pl/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_API_KEY"
      }
    }
  }
}

If HTTP doesn't work, use the npx (stdio) option below instead.

Cline

In VS Code: Settings > Cline > MCP Servers. Add:

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

Requires Node.js >= 18. Use this if you want to run the server locally instead of connecting to the hosted one.

{
  "mcpServers": {
    "cenogram": {
      "command": "npx",
      "args": ["-y", "@cenogram/mcp-server@latest"],
      "env": {
        "CENOGRAM_API_KEY": "YOUR_API_KEY"
      }
    }
  }
}
ClientConfig file
Cursor.cursor/mcp.json
Claude Code.mcp.json in your project
Claude Desktop~/Library/Application Support/Claude/claude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json
ClineVS Code settings > Cline > MCP Servers

Configuration

Env VariableRequiredDefaultDescription
CENOGRAM_API_KEYYes (stdio)-API key from cenogram.pl/api
CENOGRAM_API_URLNohttps://cenogram.plAPI base URL
MCP_TRANSPORTNostdioSet to http for Streamable HTTP mode
MCP_PORTNo3002HTTP server port (HTTP mode only)
CENOGRAM_CLIENT_IDNoauto-generatedPersistent client identifier

You can also use the --http CLI flag instead of MCP_TRANSPORT=http.

Example Prompts

Polish:

  • "Jaka jest mediana cen mieszkan w Krakowie w 2025?"
  • "Pokaz transakcje z ulicy Pulawskiej 15 na Mokotowie"
  • "Znajdz transakcje na dzialce 146518_8.0108.27"
  • "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"

English:

  • "What's the median apartment price in Krakow in 2025?"
  • "Show transactions at Pulawska 15 in Mokotow"
  • "Find all transactions on parcel 146502_8.0901.12 and then search nearby"
  • "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"

Tools

ToolDescriptionKey Parameters
search_transactionsSearch transactions with filterslocation, street, buildingNumber, parcelId, propertyType, marketType, price/date/area range
get_price_statisticsPrice/m2 stats by location (residential only)location (optional)
get_price_distributionPrice histogrambins, maxPrice
search_by_areaSearch by geographic radiuslatitude, longitude, radiusKm
get_market_overviewDatabase overview and stats(none)
list_locationsList available locationssearch (optional)
search_parcelsSearch parcels by cadastral ID prefixq (parcel ID prefix, min 3 chars)
search_by_polygonSearch within a GeoJSON polygonpolygon, propertyType, dateFrom/dateTo
compare_locationsCompare stats across 2-5 districtsdistricts (comma-separated), propertyType

Location naming

  • Most cities: use the city name directly (e.g., "Gdansk", "Lublin")
  • Warsaw: use district names ("Mokotow", "Srodmiescie", "Wola") -- "Warszawa" won't match
  • Krakow: use sub-districts ("Krakow-Podgorze", "Krakow-Srodmiescie") - plain "Krakow" won't match
  • Use list_locations to find valid names

Property types

ValuePolishEnglish
landGruntLand plot
buildingBudynekBuilding
developed_landGrunt zabudowanyDeveloped land
unitLokalApartment/unit

Workflows

Results include parcel IDs and GPS coordinates, enabling multi-step research:

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")

This mimics how a property appraiser finds comparable transactions for valuation reports.

Data

  • 7M+ transactions from all of Poland (380+ counties)
  • Date range: 2003 - present
  • Source: Polish national RCN registry (Rejestr Cen Nieruchomosci)
  • Refresh: periodic updates from RCN

Troubleshooting

"Error: CENOGRAM_API_KEY is required" - This only applies to stdio mode. Make sure CENOGRAM_API_KEY is set in the env block of your MCP config. For HTTP remote, the key goes in the Authorization header instead.

npx hangs or fails - Check your Node.js version with node -v. The stdio mode requires Node.js >= 18. If you're on an older version, use the HTTP remote option instead (no Node.js needed).

"Warszawa" returns 0 results - Warsaw uses district names (Mokotow, Wola, Srodmiescie, Bemowo, etc.). Use list_locations(search="warsz") to find valid names. Same applies to Krakow (use "Krakow-Podgorze", "Krakow-Srodmiescie", etc.).

401 Unauthorized (HTTP mode) - The Authorization header must be Bearer cngrm_... (with the Bearer prefix). Double-check that the full API key is included, not just the prefix.

Development

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

License

MIT

Reviews

No reviews yet

Sign in to write a review