Polish property on Otodom.pl: flats, houses, rooms, plots, commercial to buy or rent; offer details.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Full details of one otodom.pl listing (or a developer's project page): price, czynsz (rent_extra) and deposit (PLN), price per m², area and plot area, rooms, floor and the building's floor count, year built, building type and material, heating, ownership, condition, windows, energy certificate, availability date, market, address with district and coordinates, seller type and agency name, amenities/equipment as `features`, every other stated attribute in `details`, the full description and photo URLs. Contact phone numbers are not returned. For a development project, `development` gives its unit count, area range and completion date. Get the slug from otodom_search. Fetched live from otodom.pl (typically 0.3–1 s via direct fetch; ~5–10 s when it falls back to an unblocker). Result: { source, fetchedAt, offer: { id, slug, url, title, status, type, transaction, kind, market, price, rent_extra, deposit, price_per_m2, currency, price_on_request, area_m2, plot_area_m2, rooms, floor, floors_in_building, year_built, building_type, building_material, heating, ownership, condition, windows, energy_certificate, available_from, address, location_id, geo, seller_type, agency_name, agency_url, date_created, date_modified, features, details, description, photos, development? } }. Codes such as heating 'urban' (district heating) or condition 'ready_to_use' are Otodom's own. A removed listing is an error that says so.
The listing's slug from otodom_search (ends in -ID<code>, e.g. 'mieszkanie-4-pokojowe-w-mokotowie-z-balkonem-ID4sFig') or its otodom.pl URL (/pl/oferta/… or /pl/inwestycja/…).
Force a fresh fetch and bypass this server's result cache (5 min). Default false.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
claude mcp add --transport http otodom https://mcp.wondel.ai/otodom/mcp
Full details of one otodom.pl listing (or a developer's project page): price, czynsz (rent_extra) and deposit (PLN), price per m², area and plot area, rooms, floor and the building's floor count, year built, building type and material, heating, ownership, condition, windows, energy certificate, availability date, market, address with district and coordinates, seller type and agency name, amenities/equipment as `features`, every other stated attribute in `details`, the full description and photo URLs. Contact phone numbers are not returned. For a development project, `development` gives its unit count, area range and completion date. Get the slug from otodom_search. Fetched live from otodom.pl (typically 0.3–1 s via direct fetch; ~5–10 s when it falls back to an unblocker). Result: { source, fetchedAt, offer: { id, slug, url, title, status, type, transaction, kind, market, price, rent_extra, deposit, price_per_m2, currency, price_on_request, area_m2, plot_area_m2, rooms, floor, floors_in_building, year_built, building_type, building_material, heating, ownership, condition, windows, energy_certificate, available_from, address, location_id, geo, seller_type, agency_name, agency_url, date_created, date_modified, features, details, description, photos, development? } }. Codes such as heating 'urban' (district heating) or condition 'ready_to_use' are Otodom's own. A removed listing is an error that says so.
| Argument | Type | Description |
|---|---|---|
| offer* | string | The listing's slug from otodom_search (ends in -ID<code>, e.g. 'mieszkanie-4-pokojowe-w-mokotowie-z-balkonem-ID4sFig') or its otodom.pl URL (/pl/oferta/… or /pl/inwestycja/…). |
| no_cache | boolean | Force a fresh fetch and bypass this server's result cache (5 min). Default false. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"offer"
],
"properties": {
"offer": {
"type": "string",
"minLength": 1,
"description": "The listing's slug from otodom_search (ends in -ID<code>, e.g. 'mieszkanie-4-pokojowe-w-mokotowie-z-balkonem-ID4sFig') or its otodom.pl URL (/pl/oferta/… or /pl/inwestycja/…)."
},
"no_cache": {
"type": "boolean",
"description": "Force a fresh fetch and bypass this server's result cache (5 min). Default false."
}
}
}Search property listings on otodom.pl, Poland's largest real-estate portal: flats, studios, houses, rooms, plots, commercial premises, warehouses, garages and developers' new projects, for sale or for rent. Filter by place (a city, 'city district', town, village or voivodeship, resolved by Otodom's own location search), price, area, rooms, private-owner vs agency listings and primary/secondary market; sort by newest, price or area. Returns one results page (24 by default) with each listing's price, czynsz, price per m², area, rooms, floor, place, seller type and link; pass a listing's `slug` to otodom_offer for full details. Fetched live from otodom.pl (typically 0.3–1 s via direct fetch; ~5–10 s when it falls back to an unblocker). Result shape: { source, fetchedAt, query, search_url, heading, resolved_location, other_locations?, total_count, page, page_size, total_pages, count, listings: [...], note?, warning? } — the list key is `listings`; `total_count` counts matches across all pages (use `page` for more). Each listing: { id, slug, url, title, kind, price, rent_extra, price_per_m2, currency, price_on_request, area_m2, plot_area_m2, rooms, floor, location, street, district, city, region, location_id, seller_type, agency_name, features, is_promoted, date_created, image, photos_count, description, development? }. Prices are numbers in PLN: for rentals `price` is the monthly rent, and `rent_extra` is the monthly administrative fee (czynsz) paid on top (stated on sales too); `price` is null with price_on_request true when the advertiser hides it. `floor` is 'ground', '1'…'10', '10+', 'basement' or 'attic'. `kind` is 'new_development' for a developer's project (its units' ranges in `development`), else 'listing'; `seller_type` is private | agency | developer. `resolved_location` says which place was searched — check it; `other_locations` lists other matches for the name (pass one's `id` as `location`). An empty match answers count: 0 with a `note` saying why and what to change — that is a successful result, not an error.
| Argument | Type | Description |
|---|---|---|
| page | integer | Results page, 1-based. Default 1. |
| sort |
We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 2, 2026.
No readOnlyHint / destructiveHint annotations, so clients can't tell a read from a write without asking.
Fix: Add annotations to each tool, e.g. { readOnlyHint: true } for tools that only read.
| string |
| Order: 'relevance' (Otodom's default, promoted listings first), 'newest', 'oldest', 'price_asc', 'price_desc', 'area_asc', 'area_desc'. |
| type* | string | Property type: 'flat' = mieszkanie, 'studio' = kawalerka (one-room flat), 'house' = dom, 'room' = pokój (rent only), 'plot' = działka (land), 'commercial' = lokal użytkowy (office, shop, premises), 'warehouse' = hala/magazyn, 'garage' = garaż/miejsce parkingowe, 'new_development' = a developer's project (inwestycja; sale only). |
| limit | integer | Listings per page; rounded up to a size Otodom serves (24, 36, 48 or 72). Default 24. |
| market | string | Sales only: 'primary' = new-build from a developer (rynek pierwotny), 'secondary' = resale (rynek wtórny). Omit for both. |
| area_max | number | Maximum area in m² (the plot's area for type 'plot'). |
| area_min | number | Minimum area in m² (the plot's area for type 'plot'). |
| location | string | Where, in Polish spelling as the site uses it: a city ('Warszawa', 'Kraków'), 'city district' ('Warszawa Mokotów', 'Gdańsk Wrzeszcz'), a town or village ('Zakopane'), or a voivodeship ('mazowieckie'). English names ('Warsaw') are not recognised. Also accepts an Otodom location id (slug path) from a previous result's `location_id`/`resolved_location.id`, e.g. 'mazowieckie/warszawa/warszawa/warszawa/mokotow'. Omit to search all of Poland. |
| no_cache | boolean | Force a fresh fetch and bypass this server's result cache (5 min). Default false. |
| price_max | number | Maximum price in PLN (the monthly rent when transaction is 'rent'). |
| price_min | number | Minimum price in PLN (the monthly rent when transaction is 'rent'). |
| rooms_max | integer | Maximum number of rooms — types 'flat' and 'house' only (min = max for exactly N). Otodom's filter stops at '6 or more', so any bound of 6+ means 6 or more. |
| rooms_min | integer | Minimum number of rooms — types 'flat' and 'house' only. |
| owner_type | string | 'private' = only listings posted by private owners (bez pośredników), 'agency' = only agencies and developers (sales only — Otodom has no agency-only filter for rentals), 'all' (default). |
| transaction* | string | 'sale' = na sprzedaż (buying), 'rent' = na wynajem (renting; prices are monthly). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"transaction",
"type"
],
"properties": {
"page": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "Results page, 1-based. Default 1."
},
"sort": {
"enum": [
"relevance",
"newest",
"oldest",
"price_asc",
"price_desc",
"area_asc",
"area_desc"
],
"type": "string",
"description": "Order: 'relevance' (Otodom's default, promoted listings first), 'newest', 'oldest', 'price_asc', 'price_desc', 'area_asc', 'area_desc'."
},
"type": {
"enum": [
"flat",
"studio",
"house",
"room",
"plot",
"commercial",
"warehouse",
"garage",
"new_development"
],
"type": "string",
"description": "Property type: 'flat' = mieszkanie, 'studio' = kawalerka (one-room flat), 'house' = dom, 'room' = pokój (rent only), 'plot' = działka (land), 'commercial' = lokal użytkowy (office, shop, premises), 'warehouse' = hala/magazyn, 'garage' = garaż/miejsce parkingowe, 'new_development' = a developer's project (inwestycja; sale only)."
},
"limit": {
"type": "integer",
"maximum": 72,
"minimum": 1,
"description": "Listings per page; rounded up to a size Otodom serves (24, 36, 48 or 72). Default 24."
},
"market": {
"enum": [
"primary",
"secondary"
],
"type": "string",
"description": "Sales only: 'primary' = new-build from a developer (rynek pierwotny), 'secondary' = resale (rynek wtórny). Omit for both."
},
"area_max": {
"type": "number",
"minimum": 0,
"description": "Maximum area in m² (the plot's area for type 'plot')."
},
"area_min": {
"type": "number",
"minimum": 0,
"description": "Minimum area in m² (the plot's area for type 'plot')."
},
"location": {
"type": "string",
"minLength": 1,
"description": "Where, in Polish spelling as the site uses it: a city ('Warszawa', 'Kraków'), 'city district' ('Warszawa Mokotów', 'Gdańsk Wrzeszcz'), a town or village ('Zakopane'), or a voivodeship ('mazowieckie'). English names ('Warsaw') are not recognised. Also accepts an Otodom location id (slug path) from a previous result's `location_id`/`resolved_location.id`, e.g. 'mazowieckie/warszawa/warszawa/warszawa/mokotow'. Omit to search all of Poland."
},
"no_cache": {
"type": "boolean",
"description": "Force a fresh fetch and bypass this server's result cache (5 min). Default false."
},
"price_max": {
"type": "number",
"minimum": 0,
"description": "Maximum price in PLN (the monthly rent when transaction is 'rent')."
},
"price_min": {
"type": "number",
"minimum": 0,
"description": "Minimum price in PLN (the monthly rent when transaction is 'rent')."
},
"rooms_max": {
"type": "integer",
"maximum": 20,
"minimum": 1,
"description": "Maximum number of rooms — types 'flat' and 'house' only (min = max for exactly N). Otodom's filter stops at '6 or more', so any bound of 6+ means 6 or more."
},
"rooms_min": {
"type": "integer",
"maximum": 20,
"minimum": 1,
"description": "Minimum number of rooms — types 'flat' and 'house' only."
},
"owner_type": {
"enum": [
"all",
"private",
"agency"
],
"type": "string",
"description": "'private' = only listings posted by private owners (bez pośredników), 'agency' = only agencies and developers (sales only — Otodom has no agency-only filter for rentals), 'all' (default)."
},
"transaction": {
"enum": [
"sale",
"rent"
],
"type": "string",
"description": "'sale' = na sprzedaż (buying), 'rent' = na wynajem (renting; prices are monthly)."
}
}
}