Gratka MCP
Server Details
Polish property on Gratka.pl/Morizon.pl (one database): flats, houses, plots, premises, buy or rent.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 4 tools
Each tool pairs a portal with an action (search vs. full detail), and descriptions explicitly warn that Gratka and Morizon mirror the same listings and that ids are not interchangeable. The two portal pairs are near-identical in purpose, so an agent could still reflexively query both or mix ids, but the descriptions give clear guardrails.
All four tools follow a strict portal_action pattern in snake_case: gratka_search, gratka_offer, morizon_search, morizon_offer. Highly predictable and symmetric.
Four tools is a lean surface, but each one earns its place: search plus detail for each of two portals. It is at the low end of the typical 3-15 range with no obvious filler or redundancy.
The read-only domain is covered end-to-end: search with filters and pagination, then full detail by id, for both supported portals. Minor gaps like batch lookup by multiple ids or any seller/agency-level tooling are workarounds an agent can live without.
Available Tools
4 toolsgratka_offerGet one Gratka.pl listingAInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The listing's id (e.g. '48184615') or its full https://gratka.pl link, as returned by gratka_search. | |
| no_cache | No | Force a fresh fetch and bypass this server's result cache (5 min). Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so: it discloses the live upstream fetch and typical latency (<1s), the presence of a 5-minute cache, data-suppression behaviors ("No phone numbers", private owners unnamed), and the `note` field signaling an inactive listing. That is exactly the mutation/return behavior an agent cannot infer from schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first clause and the long field enumeration is doing real work because there is no output schema. It is dense and readable, though the field list borders on exhaustive where a shorter summary of the return shape would suffice.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Two-parameter read tool with no annotations and no output schema; the description compensates by spelling out the full result envelope including the optional `note` and its meaning. Nothing an agent needs to invoke or interpret the response is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100% with both parameters documented, so baseline 3 applies; the description adds a bit by reinforcing that `id` comes from gratka_search. It does not explain `no_cache` beyond what the schema says, so it earns only a modest bump.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource ("Full details of one Gratka.pl listing") and enumerates exactly which fields come back, which cleanly separates it from the sibling gratka_search. An agent can tell this is the detail-fetch step, not the search step, without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Get the id from gratka_search" explicitly sequences this tool after the search sibling, which is the key routing decision. It does not state exclusions (e.g. when morizon_offer would be preferred instead), so it stops short of full when/when-not coverage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gratka_searchSearch Polish real-estate listings (Gratka.pl)AInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Results page, 1-based (35 listings per page). Default 1. | |
| sort | No | 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 | Yes | 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 | No | 'primary' = new build from a developer (rynek pierwotny), 'secondary' = resale (rynek wtórny). | |
| area_max | No | Maximum area in m² (the plot's area for type 'plot'). | |
| area_min | No | Minimum area in m² (the plot's area for type 'plot'). | |
| location | No | 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 | No | Force a fresh fetch and bypass this server's result cache (5 min). Default false. | |
| price_max | No | Maximum total price in PLN (monthly rent when transaction is 'rent'). | |
| price_min | No | Minimum total price in PLN (monthly rent when transaction is 'rent'). | |
| rooms_max | No | Maximum number of rooms — not for types 'plot' and 'garage' (use min = max for exactly N). | |
| rooms_min | No | Minimum number of rooms — not for types 'plot' and 'garage'. | |
| transaction | Yes | 'sale' = na sprzedaż (buying), 'rent' = na wynajem (renting; prices are monthly). | |
| private_only | No | Only listings posted by private owners — no agencies or developers. Default false. |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| page | Yes | |
| count | Yes | |
| query | Yes | |
| source | Yes | |
| heading | No | |
| listings | Yes | |
| fetchedAt | Yes | |
| search_url | Yes | |
| total_count | No | |
| total_pages | No | |
| resolved_location | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With zero annotations the description carries the full burden and does so: live fetch from Gratka.pl's own API with typical sub-second latency, a 5-minute server cache, one results page of up to 35 listings, null-valued fields when omitted, price in PLN (monthly for rent), and area in m². It also discloses the meaning of `kind`, `seller_type`, `total_count` versus `page`, and what `resolved_location` represents.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and routing before the long result-shape block, and every clause is informational. It is on the long side, with the listing field list appearing both in the shape summary and again in a per-field enumeration that partly duplicates the existing output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 14-parameter, annotation-free search tool this covers everything an agent needs: what is searched, how to route elsewhere, page size and pagination, units, caching, empty-result handling, and field semantics. The return-value detail is technically redundant with the output schema but adds interpretive value rather than noise.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description goes beyond it by tying units and interpretation to transaction type ('prices are numbers in PLN, for rent `price` is the monthly rent'), clarifying that prices/areas are numeric, and explaining that `location` is resolved by the site's own matcher and surfaces as `resolved_location`. It does not, however, restate the enum semantics for `type`, `sort` or `market`, which the schema already handles.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Search property listings on Gratka.pl'), enumerates the property types and transaction modes covered, and names the sibling it hands off to (gratka_offer) as well as the portal it deliberately duplicates (Morizon.pl). An agent can distinguish it from morizon_search and gratka_offer without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit routing: pass a listing `id` to gratka_offer for full details, use gratka_offer only with Gratka.pl ids, and 'search one portal, not both' because Gratka.pl and Morizon.pl expose identical inventory. It also states that an empty match is a successful result rather than an error, which prevents a common misreaction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
morizon_offerGet one Morizon.pl listingAInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The listing's id (e.g. 'mzn2047996834') or its full https://www.morizon.pl link, as returned by morizon_search. | |
| no_cache | No | Force a fresh fetch and bypass this server's result cache (5 min). Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden well: it discloses that private owner names and phone numbers are omitted, that data is fetched live from Morizon's API in under a second, and that a `note` is set when a listing is inactive. Auth and rate-limit behavior are not mentioned, keeping it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the resource and field inventory, then prerequisites and return shape. The field enumeration is dense but each item is informative rather than filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, and the description fully spells out the result envelope including the optional `note` field, so an agent knows exactly what it will receive and what edge cases to expect.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description adds the id's provenance (from morizon_search, or a full link per the schema) and explains the practical meaning of staleness for the inactive-listing case.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Full details of one Morizon.pl listing') and enumerates the actual fields returned, so it is immediately distinguishable from morizon_search and the gratka siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent to morizon_search to obtain the id, which is the key prerequisite. It gives clear positive context but does not state exclusions or contrast against gratka_offer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
morizon_searchSearch Polish real-estate listings (Morizon.pl)AInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Results page, 1-based (35 listings per page). Default 1. | |
| sort | No | 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 | Yes | 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 | No | 'primary' = new build from a developer (rynek pierwotny), 'secondary' = resale (rynek wtórny). | |
| area_max | No | Maximum area in m² (the plot's area for type 'plot'). | |
| area_min | No | Minimum area in m² (the plot's area for type 'plot'). | |
| location | No | 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 | No | Force a fresh fetch and bypass this server's result cache (5 min). Default false. | |
| price_max | No | Maximum total price in PLN (monthly rent when transaction is 'rent'). | |
| price_min | No | Minimum total price in PLN (monthly rent when transaction is 'rent'). | |
| rooms_max | No | Maximum number of rooms — not for types 'plot' and 'garage' (use min = max for exactly N). | |
| rooms_min | No | Minimum number of rooms — not for types 'plot' and 'garage'. | |
| transaction | Yes | 'sale' = na sprzedaż (buying), 'rent' = na wynajem (renting; prices are monthly). | |
| private_only | No | Only listings posted by private owners — no agencies or developers. Default false. |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| page | Yes | |
| count | Yes | |
| query | Yes | |
| source | Yes | |
| heading | No | |
| listings | Yes | |
| fetchedAt | Yes | |
| search_url | Yes | |
| total_count | No | |
| total_pages | No | |
| resolved_location | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so: live API fetch with typical latency, a 5-minute server-side cache (echoed in no_cache), null-field semantics, seller_type/kind enumerations, and empty-result behavior. It also explains pagination limits (35/page, total_count across pages).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded and information-dense, but the long block enumerating every field of the result object and each listing is largely redundant with the output schema and adds bulk without adding decision-relevant guidance. The core routing advice is buried mid-paragraph rather than split out.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Excellent coverage for a 14-parameter search tool: the agent knows what it will get back, how pagination works, how empty results appear, and how this tool relates to both siblings. No material gap remains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents every parameter. The description adds modest extra meaning (rent prices are monthly, prices in PLN, area in m², sorts 'like the site') but largely restates the filter list already in the schema, so it stays close to the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource ('Search property listings on Morizon.pl') plus an enumerated set of property types, transactions and filters. It also explicitly distinguishes itself from siblings by telling the agent to search one portal only and to pair it with morizon_offer rather than gratka_search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit routing: 'Morizon.pl shows the same listings as Gratka.pl ... search one portal, not both, and use morizon_offer only with Morizon.pl ids.' It also clarifies that count: 0 with a note is a success, not an error, so the agent knows not to retry or treat it as a failure.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
4 tool updates
- First observed
gratka_offer - First observed
gratka_search - First observed
morizon_offer - First observed
morizon_search
Related MCP Connectors
Polish property on Otodom.pl: flats, houses, rooms, plots, commercial to buy or rent; offer details.
21Polish property listings on nieruchomosci-online.pl: flats, houses, plots, premises to buy or rent.
21Polish real-estate prices from notarial deeds: area stats, plot and building reports, valuations.
Polish real-estate deed prices and parcel checks: zoning plan, utilities, flood risk
Related MCP Servers
AlicenseAqualityAmaintenance7M+ real estate transactions from Poland's RCN registry. Search, compare, and analyze prices30105 npm1MIT- AlicenseAqualityBmaintenanceEnables AI assistants to query real Polish real-estate transaction prices for flats, houses, and building plots from the official notarial registry. It returns median price per square meter, price ranges, room breakdowns, market type, yearly trends, and recent sales within a radius of any Polish address, street, town, or coordinates.4569 npmMIT
- AlicenseAqualityDmaintenanceEnables searching Polish administrative areas and retrieving real estate transaction data from the official registry via geoportal.gov.pl.31GPL 3.0
- AlicenseNot gradedqualityAmaintenanceYour AI agent's practical guide to life and administration in Poland.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.