Gratka MCP
Provides access to Polish property listings on Gratka.pl and Morizon.pl, which share a single database. Agents can search for flats, houses, plots, and commercial premises for sale or rent, filtering by location, price, area, and type. It also retrieves detailed offer information including photos and descriptions, leveraging the platform's native GraphQL API for low-latency responses.
Endpoint and access
No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.
https://mcp.wondel.ai/gratka/mcpWhat its tools do
4 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.
Not annotated (4)
Checks and signals
Each line is separate evidence, not a trust score.
- Passed Endpoint answered the live check ·
- Passed Official MCP Registry namespace is tied to wondel.ai ·
- Passed Endpoint is on the registry namespace domain ·
- Availability 1 of 1 checks passed in 30 days
What you can do with it
- Search for flats for sale in Kraków under 1 million PLN
- Find houses for rent in Warsaw with at least 3 rooms
- Retrieve full details and photos for a specific property listing
- Compare prices per square meter for plots in Mazowieckie
Source and maintenance
Protocol and capabilities
- Server
- Gratka 1.0.0
- MCP protocol negotiated in check
- 2025-06-18
- Tools
- 4 advertised
- Resources
- Not advertised
- Resource templates
- Not advertised
- Prompts
- Not advertised
{
"tools": {
"listChanged": true
}
}Tools
4 advertised
gratka_search — Search Polish real-estate listings (Gratka.pl)
Search property listings on Gratka.pl, a major Polish real-estate portal: flats, houses, plots, commercial premises, offices, garages and rooms, for sale or for rent, filtered by location (any Polish city, district, town, village, county or voivodeship), price, area, rooms, private sellers only and primary/secondary market, sorted like the site. Returns one results page (up to 35 listings) with each listing's price, price per m², area, rooms, floor, location, seller and link; pass a listing `id` to gratka_offer for the full details. Gratka.pl shows the same listings as Morizon.pl (one platform, different ids and links): search one portal, not both, and use gratka_offer only with Gratka.pl ids. Fetched live from Gratka.pl's own API (typically under 1 s). Result shape: { source, fetchedAt, query, search_url, heading, resolved_location, total_count, page, total_pages, count, listings: [...], note? } — the list key is `listings`; `total_count` counts matches across all pages (use `page` for more); `resolved_location` is the place `location` was matched to. Each listing: { source, id, url, title, category, kind, development, price, price_per_m2, currency, area_m2, rooms, floor, location, street, district, city, region, seller_type, seller_name, date_posted, refreshed_at, image, photo_count, description }. Prices are numbers in PLN (for rent, `price` is the monthly rent) and area is in m²; fields are null when the listing omits them. `kind` is 'new_development' for a developer's unit in a new project (named in `development`), else 'listing'; `seller_type` is agency | private | developer. An empty match answers count: 0 with a `note` saying why and what to change — that is a successful result, not an error.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"type",
"transaction"
],
"properties": {
"page": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "Results page, 1-based (35 listings per page). Default 1."
},
"sort": {
"enum": [
"newest",
"price_asc",
"price_desc",
"price_per_m2_asc",
"price_per_m2_desc",
"area_asc",
"area_desc"
],
"type": "string",
"description": "Order: 'newest' (recently added), 'price_asc' / 'price_desc', 'price_per_m2_asc' / 'price_per_m2_desc', 'area_asc' / 'area_desc'. Default: the site's own order (recently refreshed)."
},
"type": {
"enum": [
"flat",
"house",
"plot",
"commercial",
"office",
"garage",
"room"
],
"type": "string",
"description": "Property type: 'flat' = mieszkanie, 'house' = dom, 'plot' = działka/grunt (land), 'commercial' = lokal użytkowy (any commercial premises), 'office' = biuro, 'garage' = garaż, 'room' = pokój (a room to rent — rent only)."
},
"market": {
"enum": [
"primary",
"secondary"
],
"type": "string",
"description": "'primary' = new build from a developer (rynek pierwotny), 'secondary' = resale (rynek wtórny)."
},
"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, as a Polish place name, matched by the site's own location search: a city ('Kraków'), a district ('Warszawa Mokotów', 'Gdańsk Wrzeszcz'), a town or village, a county ('krakowski') or a whole voivodeship ('mazowieckie'). Diacritics are optional; English names other than Warsaw/Cracow are not recognised. 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 total price in PLN (monthly rent when transaction is 'rent')."
},
"price_min": {
"type": "number",
"minimum": 0,
"description": "Minimum total price in PLN (monthly rent when transaction is 'rent')."
},
"rooms_max": {
"type": "integer",
"maximum": 20,
"minimum": 1,
"description": "Maximum number of rooms — not for types 'plot' and 'garage' (use min = max for exactly N)."
},
"rooms_min": {
"type": "integer",
"maximum": 20,
"minimum": 1,
"description": "Minimum number of rooms — not for types 'plot' and 'garage'."
},
"transaction": {
"enum": [
"sale",
"rent"
],
"type": "string",
"description": "'sale' = na sprzedaż (buying), 'rent' = na wynajem (renting; prices are monthly)."
},
"private_only": {
"type": "boolean",
"description": "Only listings posted by private owners — no agencies or developers. Default false."
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"source",
"fetchedAt",
"query",
"search_url",
"page",
"count",
"listings"
],
"properties": {
"note": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"page": {
"type": "number"
},
"count": {
"type": "number"
},
"query": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"source": {
"type": "string"
},
"heading": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"listings": {
"type": "array",
"items": {
"type": "object",
"required": [
"source",
"id",
"url",
"title"
],
"properties": {
"id": {
"type": "string"
},
"url": {
"type": "string"
},
"city": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"kind": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"floor": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"price": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"rooms": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"title": {
"type": "string"
},
"region": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"source": {
"type": "string"
},
"street": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"area_m2": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"category": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"currency": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"district": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"location": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"date_posted": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"development": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"photo_count": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"seller_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"seller_type": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"price_per_m2": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"refreshed_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": {}
}
},
"fetchedAt": {
"type": "string"
},
"search_url": {
"type": "string"
},
"total_count": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"total_pages": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"resolved_location": {
"anyOf": [
{
"type": "object",
"required": [
"id",
"name"
],
"properties": {
"id": {
"type": "string"
},
"kind": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"name": {
"type": "string"
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": {}
},
{
"type": "null"
}
]
}
},
"additionalProperties": {}
}gratka_offer — Get one Gratka.pl listing
Full details of one Gratka.pl listing: price and price per m² (PLN), area, rooms, floor, year built, property type, transaction and market, the address with district and coordinates, seller type and name (agency or developer; private owners are not named), the listing's detail tables as shown on the page (Polish labels and values: condition, rent and charges, building type, heating, ownership, available from…), amenities, the full description and photo URLs. No phone numbers. Get the id from gratka_search. Fetched live from Gratka.pl's own API (typically under 1 s). Result: { source, fetchedAt, listing: { source, id, url, title, active, property_type, transaction, market, kind, development, price, price_per_m2, currency, area_m2, rooms, floor, year_built, address, geo, seller_type, seller_name, agent_name, date_posted, updated, details, amenities, description, photos }, note? } — `note` is set when the listing is no longer active.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"minLength": 1,
"description": "The listing's id (e.g. '48184615') or its full https://gratka.pl link, as returned by gratka_search."
},
"no_cache": {
"type": "boolean",
"description": "Force a fresh fetch and bypass this server's result cache (5 min). Default false."
}
}
}morizon_search — Search Polish real-estate listings (Morizon.pl)
Search property listings on Morizon.pl, a major Polish real-estate portal: flats, houses, plots, commercial premises, offices, garages and rooms, for sale or for rent, filtered by location (any Polish city, district, town, village, county or voivodeship), price, area, rooms, private sellers only and primary/secondary market, sorted like the site. Returns one results page (up to 35 listings) with each listing's price, price per m², area, rooms, floor, location, seller and link; pass a listing `id` to morizon_offer for the full details. Morizon.pl shows the same listings as Gratka.pl (one platform, different ids and links): search one portal, not both, and use morizon_offer only with Morizon.pl ids. Fetched live from Morizon.pl's own API (typically under 1 s). Result shape: { source, fetchedAt, query, search_url, heading, resolved_location, total_count, page, total_pages, count, listings: [...], note? } — the list key is `listings`; `total_count` counts matches across all pages (use `page` for more); `resolved_location` is the place `location` was matched to. Each listing: { source, id, url, title, category, kind, development, price, price_per_m2, currency, area_m2, rooms, floor, location, street, district, city, region, seller_type, seller_name, date_posted, refreshed_at, image, photo_count, description }. Prices are numbers in PLN (for rent, `price` is the monthly rent) and area is in m²; fields are null when the listing omits them. `kind` is 'new_development' for a developer's unit in a new project (named in `development`), else 'listing'; `seller_type` is agency | private | developer. An empty match answers count: 0 with a `note` saying why and what to change — that is a successful result, not an error.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"type",
"transaction"
],
"properties": {
"page": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "Results page, 1-based (35 listings per page). Default 1."
},
"sort": {
"enum": [
"newest",
"price_asc",
"price_desc",
"price_per_m2_asc",
"price_per_m2_desc",
"area_asc",
"area_desc"
],
"type": "string",
"description": "Order: 'newest' (recently added), 'price_asc' / 'price_desc', 'price_per_m2_asc' / 'price_per_m2_desc', 'area_asc' / 'area_desc'. Default: the site's own order (recently refreshed)."
},
"type": {
"enum": [
"flat",
"house",
"plot",
"commercial",
"office",
"garage",
"room"
],
"type": "string",
"description": "Property type: 'flat' = mieszkanie, 'house' = dom, 'plot' = działka/grunt (land), 'commercial' = lokal użytkowy (any commercial premises), 'office' = biuro, 'garage' = garaż, 'room' = pokój (a room to rent — rent only)."
},
"market": {
"enum": [
"primary",
"secondary"
],
"type": "string",
"description": "'primary' = new build from a developer (rynek pierwotny), 'secondary' = resale (rynek wtórny)."
},
"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, as a Polish place name, matched by the site's own location search: a city ('Kraków'), a district ('Warszawa Mokotów', 'Gdańsk Wrzeszcz'), a town or village, a county ('krakowski') or a whole voivodeship ('mazowieckie'). Diacritics are optional; English names other than Warsaw/Cracow are not recognised. 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 total price in PLN (monthly rent when transaction is 'rent')."
},
"price_min": {
"type": "number",
"minimum": 0,
"description": "Minimum total price in PLN (monthly rent when transaction is 'rent')."
},
"rooms_max": {
"type": "integer",
"maximum": 20,
"minimum": 1,
"description": "Maximum number of rooms — not for types 'plot' and 'garage' (use min = max for exactly N)."
},
"rooms_min": {
"type": "integer",
"maximum": 20,
"minimum": 1,
"description": "Minimum number of rooms — not for types 'plot' and 'garage'."
},
"transaction": {
"enum": [
"sale",
"rent"
],
"type": "string",
"description": "'sale' = na sprzedaż (buying), 'rent' = na wynajem (renting; prices are monthly)."
},
"private_only": {
"type": "boolean",
"description": "Only listings posted by private owners — no agencies or developers. Default false."
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"source",
"fetchedAt",
"query",
"search_url",
"page",
"count",
"listings"
],
"properties": {
"note": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"page": {
"type": "number"
},
"count": {
"type": "number"
},
"query": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"source": {
"type": "string"
},
"heading": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"listings": {
"type": "array",
"items": {
"type": "object",
"required": [
"source",
"id",
"url",
"title"
],
"properties": {
"id": {
"type": "string"
},
"url": {
"type": "string"
},
"city": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"kind": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"floor": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"price": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"rooms": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"title": {
"type": "string"
},
"region": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"source": {
"type": "string"
},
"street": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"area_m2": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"category": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"currency": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"district": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"location": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"date_posted": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"development": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"photo_count": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"seller_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"seller_type": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"price_per_m2": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"refreshed_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": {}
}
},
"fetchedAt": {
"type": "string"
},
"search_url": {
"type": "string"
},
"total_count": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"total_pages": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"resolved_location": {
"anyOf": [
{
"type": "object",
"required": [
"id",
"name"
],
"properties": {
"id": {
"type": "string"
},
"kind": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"name": {
"type": "string"
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": {}
},
{
"type": "null"
}
]
}
},
"additionalProperties": {}
}morizon_offer — Get one Morizon.pl listing
Full details of one Morizon.pl listing: price and price per m² (PLN), area, rooms, floor, year built, property type, transaction and market, the address with district and coordinates, seller type and name (agency or developer; private owners are not named), the listing's detail tables as shown on the page (Polish labels and values: condition, rent and charges, building type, heating, ownership, available from…), amenities, the full description and photo URLs. No phone numbers. Get the id from morizon_search. Fetched live from Morizon.pl's own API (typically under 1 s). Result: { source, fetchedAt, listing: { source, id, url, title, active, property_type, transaction, market, kind, development, price, price_per_m2, currency, area_m2, rooms, floor, year_built, address, geo, seller_type, seller_name, agent_name, date_posted, updated, details, amenities, description, photos }, note? } — `note` is set when the listing is no longer active.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"minLength": 1,
"description": "The listing's id (e.g. 'mzn2047996834') or its full https://www.morizon.pl link, as returned by morizon_search."
},
"no_cache": {
"type": "boolean",
"description": "Force a fresh fetch and bypass this server's result cache (5 min). Default false."
}
}
}Prompts
Not advertised
Resources
Not advertised
90-day uptime
A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.
- 2026-11-02: 1 of 1 checks answered
30-day availability
Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.
- Successful checks
- 1 of 1 (100%)
- Average latency
- 408 ms
- 95th percentile latency
- 408 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 408 ms · metadata changed · 4 tool(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http gratka-mcp https://mcp.wondel.ai/gratka/mcpCodex
codex mcp add gratka-mcp --url https://mcp.wondel.ai/gratka/mcpCursor
{
"mcpServers": {
"gratka-mcp": {
"url": "https://mcp.wondel.ai/gratka/mcp"
}
}
}Cline
{
"mcpServers": {
"gratka-mcp": {
"type": "streamableHttp",
"url": "https://mcp.wondel.ai/gratka/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"gratka-mcp": {
"type": "http",
"url": "https://mcp.wondel.ai/gratka/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http gratka-mcp https://mcp.wondel.ai/gratka/mcpClaude Desktop
{
"mcpServers": {
"gratka-mcp": {
"url": "https://mcp.wondel.ai/gratka/mcp"
}
}
}Windsurf
{
"mcpServers": {
"gratka-mcp": {
"serverUrl": "https://mcp.wondel.ai/gratka/mcp"
}
}
}Let your agent find its tools
Find servers like Gratka MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.
Other data and analytics servers
Do you run Gratka MCP?
Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.