Evlek — Northern Cyprus Property MCP Server
Server Details
Live Northern Cyprus (KKTC/TRNC) property listings and asking-price data. Read-only, 8 tools.
- Status
- Healthy
- Uptime
- 100.0% over 69 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- Evlek/evlek-mcp
- GitHub Stars
- 0
- Server Listing
- Evlek — Northern Cyprus Property MCP Server
TDQS
Scored across 8 tools
The set contains two near-duplicate pairs: fetch vs get_listing return the same listing data, and search vs search_listings return the same search data, differing only in output format and intended client. The descriptions do explicitly explain when to use each variant, which rescues the set from being truly confusing, but an agent must read carefully to avoid misselection.
Most tools follow verb_noun snake_case (compare_listings, convert_currency, get_listing, list_locations), but the bare-verb names fetch and search break that pattern and sit confusingly close to their suffixed twins (get_listing, search_listings). Readable, but the near-identical names for near-identical tools amplify ambiguity rather than resolve it.
Eight tools is well within a sensible scope for a property search server, and each domain area (search, detail, compare, locations, stats, FX) is represented. The count is slightly inflated by the two duplicate-purpose pairs, which effectively make it 6 distinct capabilities split across 8 tools.
Core consumer workflows are covered end to end: discover (search_listings), inspect (get_listing/fetch), compare, market context (market_stats), geography (list_locations) and pricing (convert_currency). Minor gaps exist, such as no reference tool for valid amenity names or property types and no similar-listings/related-property operation, but these are workable around.
Available Tools
8 toolscompare_listingsCompare Evlek listingsARead-onlyIdempotentInspect
Compare 2 to 4 public Evlek listings side by side in the user's language: price, price per m² (only when the built area is believable), rooms, bathrooms, built area and plot area (always separate), location, furnishing, key features and data-quality notes, plus a few descriptive highlights (lowest price, largest indoor area, most recently listed). ids takes listing ids (UUID), listing numbers (EVL-100464) or evlek.app listing links, in any mix; the order you give is kept. Sale and rent listings are never ranked against each other: a mixed request is shown in two groups with a warning. A reference that is unknown or no longer public is listed in missingIds with code NOT_FOUND (this is not an error). Descriptive facts only: no valuation and no recommendation. Pass the user's language as locale (tr, en, ru, de or ar).
| Name | Required | Description | Default |
|---|---|---|---|
| ids | Yes | 2 to 4 listings, in any mix of ids, numbers and links. The order is kept. | |
| locale | No | Language of the answer and of the links. Pass the language the user writes in. Default en. |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | Absent on a comparison. NOT_ENOUGH_LISTINGS when fewer than two of the requested listings are available; SEARCH_BACKEND_UNAVAILABLE, INVALID_PARAMS or INTERNAL_ERROR otherwise. |
| count | No | |
| groups | No | The compared listings by transaction (sale and rent are never ranked against each other). |
| issues | No | |
| locale | Yes | |
| missing | No | |
| compared | Yes | The listings that were compared, in the order of the request. |
| insights | Yes | |
| warnings | Yes | |
| retryable | No | True when the search backend could not answer (code SEARCH_BACKEND_UNAVAILABLE). |
| dataSource | No | |
| isEstimate | No | |
| metricType | No | |
| missingIds | Yes | One NOT_FOUND entry per requested reference that names no public listing. |
| contentLocale | No | The language every link resolved to; null when the listings differ (see compared[].contentLocale). |
| localeFallback | No | True when at least one link opens a page in another language than requested. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only/idempotent/closed-world safety, and the description goes well beyond them: unknown or unpublished references surface in missingIds with NOT_FOUND and are explicitly 'not an error,' mixed sale/rent requests are split into two groups with a warning, and price-per-m² is suppressed when the built area is implausible. These are exactly the edge-case behaviors an agent must anticipate.
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?
A single dense paragraph that front-loads the purpose and the compared fields before moving to edge cases. It is information-rich rather than padded, though the enumeration of compared attributes is long enough that skimming costs the reader a little.
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?
With an output schema present, return values need not be described, yet the description still explains the meaningful output nuance (missingIds/NOT_FOUND). Combined with locale guidance and the sale/rent grouping rule, an agent has everything needed to call this correctly.
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 restates the accepted id forms (UUID, EVL-100464, link, any mix) and order preservation, which the schema already documents, and only lightly extends `locale` by framing it as 'the user's language.' Marginal added value over the schema.
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+scope: 'Compare 2 to 4 public Evlek listings side by side,' then enumerates exactly which attributes are compared. It is clearly distinguishable from get_listing (single listing) and search_listings (discovery), so an agent can route correctly without opening schemas.
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 concrete operating context: 2-4 items, mixed reference types allowed, order preserved, sale vs rent never ranked together, and 'no valuation and no recommendation.' It stops short of naming sibling tools as alternatives, so it is strong on when/when-not but lacks explicit alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
convert_currencyCurrency conversion (GBP/EUR/USD/TRY)ARead-onlyIdempotentInspect
Converts an amount between GBP, EUR, USD and TRY with the exchange rates Evlek stores (refreshed daily) and returns all four equivalents. Currency conversion only: no payment plan, deposit or instalment schedule, tax, fee or acquisition-cost estimate, no advice. Rates older than 24 hours are flagged as stale; beyond 72 hours (or when none are stored) no conversion is produced (FX_UNAVAILABLE).
| Name | Required | Description | Default |
|---|---|---|---|
| amount | Yes | Amount to convert: a property price, a monthly rent, any amount from 1 up. Not a deposit or an instalment plan. | |
| locale | No | Language of the answer and the number format. Pass the language the user writes in. Default en. | |
| currency | No | Currency of the amount. Default GBP. Lower case, symbols (£ € $ ₺) and names (pound, euro, dollar, lira) are read. |
Output Schema
| Name | Required | Description |
|---|---|---|
| fx | No | |
| code | No | Present on a soft refusal (FX_UNAVAILABLE) and on invalid arguments (INVALID_PARAMS). |
| stale | No | True when the stored rates are older than 24 hours. |
| issues | No | |
| reason | No | |
| amounts | No | |
| priceGBP | No | The amount in GBP (the same number as amounts.GBP). |
| warnings | No | |
| retryable | No | |
| dataSource | No | |
| rateAgeHours | No | FX_UNAVAILABLE with reason too_old: how old the stored rates are, in hours. |
| contentLocale | No | |
| inputCurrency | No | |
| usesStoredRate | No | |
| assumedCurrency | No | True when no currency was given and GBP was assumed. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations (readOnly/idempotent/non-destructive) by disclosing rate provenance, daily refresh cadence, a 24-hour staleness flag, and a hard failure mode (FX_UNAVAILABLE) beyond 72 hours or with no stored rates. This tells the agent exactly what degraded output looks like.
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-loads the core capability in the first clause and puts exclusions and rate-freshness rules after. Dense but every clause carries operational meaning; slightly long sentences keep it from a 5.
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?
An output schema exists, so return values need no prose. The description still covers scope boundaries, data freshness, and the failure condition, leaving nothing an agent needs to call it correctly undocumented.
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 description coverage is 100% and two of three parameters are enums, so the schema already carries the semantics. The description adds the four-currency output set but no extra per-parameter guidance, making 3 the correct 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?
States a specific verb (converts) and resource (amount between GBP, EUR, USD, TRY), plus the return shape (all four equivalents) and the rate source. The explicit scope exclusions (no payment plan, deposit, tax, fee, advice) make it unambiguously distinct from the listing/search 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?
Gives clear when-not guidance via an explicit exclusion list (no payment plans, deposits, instalments, tax, fees, acquisition costs, advice). It does not name an alternative tool for those adjacent needs, so routing is implied rather than spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fetchFetch full Evlek listing detailARead-onlyIdempotentInspect
Fetch the full detail of one Evlek listing: title, price, location, rooms, areas, amenities, data-quality notes and the canonical link. The id is the listing id (UUID) from a search result, a listing number such as EVL-100464, or an evlek.app listing link; the answer language follows the link (English otherwise). A listing that is not available (it does not exist, is not public, or was removed) always gets the same answer. Same data as get_listing, in the standard search/fetch form used by research and citation clients. Use when: an id from search is known. Don't use for: discovery (use search first) or another answer language (use get_listing).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Evlek listing id (UUID) from search, a listing number such as EVL-100464, or an evlek.app listing link |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| url | No | |
| code | No | NOT_FOUND (found is false) or SEARCH_BACKEND_UNAVAILABLE (retryable). |
| text | No | |
| found | No | |
| title | No | |
| locale | No | |
| listing | No | The listing card (same shape as search_listings). |
| metadata | No | Listing facts (price, rooms, area, features, data quality); no contact data. |
| photoUrls | No | |
| requested | No | The id as the caller sent it (cleaned, at most 200 characters). |
| retryable | No | |
| photoCount | No | |
| contentLocale | No | |
| coverImageUrl | No | |
| localeFallback | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description still adds real behavioral context beyond them: unavailable listings (missing, non-public, removed) always return the same answer, and the response language follows the link. It doesn't cover auth, rate limits or pagination, which keeps 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?
It front-loads what is returned and then handles id formats, language, unavailability and routing in compact clauses; every sentence carries information. It is dense and slightly run-on in the first two sentences, which costs a point but not usability.
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?
With a single required parameter, full schema coverage and an output schema, the description needn't explain returns, yet it still covers the edge cases an agent would otherwise get wrong: id variants, answer language, and uniform behavior for unavailable listings. An agent has everything needed to invoke it correctly.
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% and the schema already documents the id formats (UUID, EVL-100464, evlek.app link) almost verbatim. The description's only marginal addition is that the language of the answer follows the link, which is useful but thin; the baseline of 3 applies when the schema does the heavy lifting.
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?
The description states a specific verb and resource ('Fetch the full detail of one Evlek listing') and enumerates the returned fields, so the tool's function is unambiguous. It also explicitly differentiates itself from two siblings ('Same data as get_listing', 'use search first'), which lets an agent choose without opening any 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?
It gives an explicit 'Use when: an id from search is known' and an explicit 'Don't use for: discovery (use search first) or another answer language (use get_listing)', naming the exact alternatives. Nothing about tool selection is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_listingGet an Evlek listingARead-onlyIdempotentInspect
Get the full details of ONE public Evlek listing (sale or long-term rent) in the user's language. ref is the listing id (UUID), the listing number (EVL-100464 or just 100464) or an evlek.app listing link in any language. Returns the price, rooms, bathrooms, built area and plot area (always separate), the approximate location, features, the office name, dates, data-quality notes, photos with captions where they exist, AI virtual-staging before/after images when the office approved them (always labelled as AI-generated) and the canonical link. Contact details are never included: send the user to the link. A listing that is unknown or no longer public answers found:false with code NOT_FOUND (this is not an error). Pass the user's language as locale (tr, en, ru, de or ar).
| Name | Required | Description | Default |
|---|---|---|---|
| ref | Yes | The listing: its id (UUID), its listing number (EVL-100464 or 100464) or an evlek.app listing link in any language. | |
| locale | No | Language of the answer and of the links. Pass the language the user writes in. Default en. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| ref | No | Short summary: listing number. |
| url | No | The canonical link of the listing page in contentLocale. |
| area | No | |
| city | No | |
| code | No | When found is false: NOT_FOUND (the listing does not exist or is not public), SEARCH_BACKEND_UNAVAILABLE, INVALID_PARAMS or INTERNAL_ERROR. |
| dates | No | |
| floor | No | |
| found | Yes | |
| media | No | |
| price | No | |
| rooms | No | |
| title | No | |
| issues | No | |
| locale | No | |
| office | No | |
| photos | No | |
| plotM2 | No | |
| rental | No | |
| areaSqm | No | The BUILT area in m², as the listing page shows it: null on land (see plotM2) and when the page withholds the figure (a plot-looking number on a small home, a closed area too small for its rooms); otherwise shown even when areaSuspect is true. A gross figure says so in areaBasis. |
| areaText | No | |
| bedrooms | No | |
| currency | No | |
| district | No | |
| factType | No | |
| features | No | |
| listedAt | No | |
| location | No | |
| priceGbp | No | |
| warnings | No | |
| areaBasis | No | 'gross' when areaSqm is a gross figure (not the indoor area; no price per m² is derived from it); 'net' only when the publisher stated the area is net (Evlek does not measure it); null when the basis is not stated, or there is no built area. |
| areaLabel | No | |
| bathrooms | No | |
| furnished | No | |
| requested | No | The identifier the caller sent, when found is false. |
| retryable | No | True when found is false because the search backend could not answer (code SEARCH_BACKEND_UNAVAILABLE). |
| roomLabel | No | |
| updatedAt | No | |
| agencyName | No | Short summary: office name. |
| dataSource | No | |
| isEstimate | No | |
| listingRef | No | |
| officeName | No | |
| photoCount | No | |
| priceLabel | No | Short summary: printed price. |
| areaSuspect | No | |
| buildingAge | No | |
| dataQuality | No | |
| description | No | |
| photosShown | No | |
| titleSource | No | |
| totalFloors | No | |
| transaction | No | |
| propertyType | No | |
| contentLocale | No | The language the listing page and url really resolved to. |
| coverImageUrl | No | |
| listingNumber | No | |
| localeFallback | No | |
| monthlyRentGbp | No | |
| pricePerSqmGbp | No | GBP per m², by the listing page's own rule: null whenever the built area is flagged suspect, withheld, or gross (areaBasis 'gross'), and on land below 150 m². |
| virtualStaging | No | Present only when approved AI virtual-staging images exist. Every image is AI-generated and must be shown with the disclosure. |
| photosTruncated | No | |
| descriptionLocale | No | |
| locationPrecision | No | |
| propertyTypeLabel | No | |
| titleGeneratedReason | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the readOnly/idempotent annotations: it specifies the NOT_FOUND contract (found:false, not an error), the exclusion of contact details, that plot and built area are always separate, and that virtual-staging images are office-approved and labelled AI-generated. That is exactly the kind of behavior an agent cannot infer from structured fields.
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 core purpose and scope, and the ID-format guidance comes early. The enumeration of returned fields is dense and somewhat redundant against the output schema, which costs it a point, but no sentence is 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?
Covers everything needed to call it correctly and interpret results: accepted ref formats, locale, not-found semantics, content exclusions, and image labelling — even though an output schema exists and would have carried some of this burden.
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 restates ref's three accepted forms and tells the agent to pass the user's language as `locale`, but both points are already in the schema descriptions and it adds no new format or edge-case detail.
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 plus resource and cardinality: "Get the full details of ONE public Evlek listing (sale or long-term rent)". The emphasis on ONE plus the public/live scope separates it cleanly from search_listings, search and compare_listings without needing their schemas.
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?
Clear about the use case (single listing lookup) and adds a practical rule — contact details are never returned, so route the user to the canonical link. It never names a sibling tool as the alternative for browsing or comparing, so the when-not is only implied by "ONE".
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_locationsList Evlek locationsARead-onlyIdempotentInspect
List the places Evlek knows in Northern Cyprus (6 cities, districts, villages, sub-areas, landmarks, the Karpaz region) with their public sale and long-term rent listing counts. Call it first when unsure how a place is spelled: every name and id returned is accepted by the other tools. Pass city (any spelling or language) for one place in detail. Names are Turkish or Latin; Russian, German and Arabic spellings are accepted as input but not listed.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | One place in detail: any spelling or language of a city, district or village ("Kyrenia", "Alsancak"). Omit to list every city. | |
| locale | No | Language of the answer. Pass the language the user writes in. Default en. | |
| includeEmpty | No | Also list places that have no public listing right now. Default false. | |
| includeAliases | No | Also list accepted alternative spellings of each place (at most 6, Latin script). Default false. |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | Present on a soft answer: INVALID_LOCATION, OUT_OF_SCOPE or SEARCH_BACKEND_UNAVAILABLE. |
| notes | No | |
| place | No | |
| scope | No | |
| cities | No | |
| issues | No | |
| totals | No | |
| registry | No | |
| warnings | No | |
| ambiguous | No | |
| retryable | No | |
| outOfScope | No | |
| unassigned | No | |
| suggestions | No | |
| validCities | No | |
| includeEmpty | No | |
| contentLocale | No | |
| textTruncated | No | |
| includeAliases | No | |
| hiddenEmptyCount | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive and closed-world, so safety is covered. The description adds genuinely new behavioral context: names are Turkish or Latin, while Russian, German and Arabic spellings are accepted as input but never listed — a non-obvious quirk that prevents confusion when output omits the user's language.
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?
Three sentences, front-loaded with what the tool returns, then the imperative guidance, then the language caveat. No filler, and the highest-value routing instruction is placed early.
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?
An output schema exists, so return structure need not be re-explained; the description covers the remaining gaps an agent needs — zero-arg listing behavior, single-place drill-down via city, spelling tolerance, and output language limits. Nothing material is missing for correct invocation.
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% and each parameter already documents itself (city detail mode, locale default en, includeEmpty/includeAliases defaults and the 6-alias Latin-script cap). The description largely restates the city parameter's spelling tolerance rather than adding syntax, format, or interaction rules beyond the schema, so baseline 3 applies.
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 (list) and resource (places Evlek knows in Northern Cyprus) with explicit scope — 6 cities, districts, villages, sub-areas, landmarks, the Karpaz region — plus what each entry carries (sale and long-term rent listing counts). It is immediately distinguishable from the listing-oriented siblings (search, get_listing, market_stats).
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?
"Call it first when unsure how a place is spelled" gives a concrete trigger, and the note that "every name and id returned is accepted by the other tools" explains its role as a prerequisite/reference tool for the rest of the set. It stops short of stating when not to use it (e.g. when you already have a canonical id, go straight to get_listing).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
market_statsNorthern Cyprus market statisticsARead-onlyIdempotentInspect
Market statistics for Northern Cyprus from asking prices of active public listings (not sales, valuations or forecasts). No city = the island by city; one city = its districts; several = side by side; city + district = a district profile. Sale and rent are reported separately. Each figure has activeCount (public listings in scope) and sampleCount (the cleaned sample behind the statistic); below 10 sampled listings it is withheld. Pass locale.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | City names in any language, e.g. ["Girne"]. One gives its districts, two or more are compared (max 6). Omit for the whole island. | |
| locale | No | Language of the answer text, number formats and links (default en). Pass the language the user is writing in. | |
| district | No | A district, village or region (Alsancak, Long Beach, Karpaz) for a profile. The city is inferred when the name is unambiguous. | |
| transaction | No | 'sale' or 'rent' (long-term). Omit for both: they are reported separately and never mixed. | |
| propertyType | No | Limit to property types or groups, e.g. ["apartment"] or ["house"]. Price statistics cover residential types only. |
Output Schema
| Name | Required | Description |
|---|---|---|
| asOf | No | |
| code | No | On a soft answer: INVALID_LOCATION, OUT_OF_SCOPE or SEARCH_BACKEND_UNAVAILABLE. |
| mode | No | |
| type | No | The deal of `cities` (sale when both were asked for). |
| cities | No | |
| issues | No | |
| locale | No | |
| totals | No | Per deal: activeCount and sampleCount summed over the scope. |
| dataAsOf | No | |
| district | No | District profile: sale and rent statistics, personas, asking-rent ratio and listing details. |
| warnings | No | |
| dataSource | No | |
| isEstimate | No | |
| metricType | No | |
| methodology | No | |
| suggestions | No | |
| transaction | No | |
| contentLocale | No | |
| localeFallback | No | |
| additionalDeals | No | The other deal when both were asked for: the same rows as `cities`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), so the bar is lower; the description still adds real behavioral context: the data comes from active public asking prices, each figure carries activeCount and sampleCount, and statistics are withheld below 10 sampled listings. That withholding rule and the sample/active distinction are exactly the kind of operational detail an agent cannot infer from annotations.
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?
Dense and front-loaded: provenance first, then the parameter-to-output-shape mapping, then the sample-count caveat, ending with the locale instruction. Every sentence carries distinct operational information with no 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?
Given an output schema exists, return formatting need not be explained, yet the description still clarifies the two counters on each figure and the below-10 withholding threshold. With five optional parameters and two enum constraints, all scoping and language concerns an agent needs are covered.
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 description coverage is 100%, so the baseline is 3. The description restates the combinatorial city behavior ('one city = its districts; several = side by side') and the sale/rent separation, but these are largely already documented in the parameter descriptions, and it adds no syntax or format detail beyond them.
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 resource (market statistics) and dataset provenance (asking prices of active public listings), and explicitly excludes adjacent interpretations: 'not sales, valuations or forecasts'. This clearly separates it from sibling tools such as search_listings or compare_listings, which deal in individual listings rather than aggregates.
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 unusually explicit routing rules for the scoping parameters: no city means island-by-city, one city means districts, several means side-by-side, city plus district means a district profile. It also states that sale and rent are reported separately and never mixed, plus 'Pass locale.' It stops short of naming sibling alternatives (e.g. when to prefer compare_listings over this tool), so it lands at a strong 4 rather than 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searchSearch Evlek property listingsARead-onlyIdempotentInspect
Use only for research and citation lookups (deep research). To show listings to the user, use search_listings instead. Search live Northern Cyprus (KKTC/TRNC) property listings on Evlek with a free-text query in Turkish, English, Russian, German or Arabic. Returns matching listings as id/title/url for the fetch tool, newest first (sale and rent as two groups when the query names neither). The answer language follows the language of the query. Same data as search_listings, in the standard search/fetch form used by research and citation clients. Use when: the caller only has a free-text query ("2+1 apartment in Kyrenia under 150000 pounds", "EVL-100464"). Don't use for: structured filters, paging or another answer language: use search_listings.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Free-text property search query |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | Present on a soft result (INVALID_LOCATION, OUT_OF_SCOPE, FX_UNAVAILABLE, ...). |
| query | No | The query as read (cleaned, bounded). |
| shown | No | Listings in this response. |
| split | No | |
| total | No | Public listings matching the filters, summed over the groups. |
| groups | No | One group per transaction: two (sale, rent) when no transaction was given. |
| issues | No | |
| locale | No | |
| lookup | No | Present for an explicit listing number ("EVL-100464"). |
| assumed | No | What had to be assumed to make a constraint a filter (a currency, a band, a period). |
| fxRates | No | |
| message | No | The reason, in the answer language, when there is nothing to list (content[0].text stays the connector JSON). |
| results | Yes | |
| criteria | No | Everything the sentence was understood as, with the words each came from. |
| listings | No | |
| warnings | No | |
| dataSource | No | |
| priceRange | No | |
| unresolved | No | Words that did NOT become a filter, with the reason. |
| placesReadAs | No | |
| totalMatched | No | The same number as `total` (the v2 name). |
| contentLocale | No | The language the listing pages (links, descriptions) resolved to: `locale` when every shown listing has a page in it, the fallback (Turkish) when none does, null when they differ (each card has its own). |
| appliedFilters | No | What the database was really asked, in the query parameter names (place names as resolved). Only the filters that were applied are present. |
| clarifications | No | Questions to ask the user instead of guessing. |
| localeFallback | No | True when a listing link or description is in another language because it has no translation in `locale`. |
| unappliedFilters | No | Constraints that were NOT applied (an amenity that cannot be filtered on, text the parser could not read). The listings shown may not honour them. |
| impliedTransaction | No | Present when no transaction was sent and the search was limited to one because of the filters. |
| nearbyAlternatives | No | Only when nothing matched: ONE relaxation (district dropped, else budget + 15 %), at most 5 listings. |
| transactionAssumption | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive), so the description's added value is its disclosure of supported languages, answer-language behavior, ordering (newest first), sale/rent grouping, and return shape (id/title/url for the fetch tool). That is substantive beyond the annotations, though permission or rate-limit behavior and empty-result handling are not mentioned.
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?
The critical routing instruction is front-loaded and every sentence carries information, but the alternative tool (search_listings) is named three times and the free-text point is restated, so the description is denser and more repetitive than it needs to be.
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 single-parameter search tool with full schema coverage, annotations, and an output schema, the description covers routing, languages, ordering, grouping and return shape. Nothing an agent needs in order to call it correctly 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 100%, so the baseline is 3; the description earns an extra point by clarifying that the query is free-text, valid in five languages, and can be either natural language or an ID like 'EVL-100464', which meaningfully widens the agent's understanding of the parameter.
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 live KKTC/TRNC property listings on Evlek) and explicitly distinguishes itself from the sibling search_listings by framing itself as the research/citation form. An agent can tell the two apart without opening either 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 'Use when' conditions with concrete query examples and an explicit 'Don't use for' clause naming structured filters, paging and answer-language control as reasons to pick search_listings. Both the positive and negative routing are spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_listingsSearch Northern Cyprus property listingsARead-onlyIdempotentInspect
Use this when the user wants to find or see property listings; results are shown with real photos in the Evlek widget. Search live Evlek property listings for sale and long-term rent in Northern Cyprus (KKTC/TRNC; prices in GBP unless a currency is given; 2+1 means bedrooms 2) with structured filters: transaction, city, district, property type, bedrooms, price, areas, amenities, nearby university. Pass the user's language as locale (tr|en|ru|de|ar): the text, amenity names, number formats and links follow it. Returns at most 10 listings per call, each as one readable line (type, place, price, rooms, area, a deterministic sentence, data notes, canonical link) plus a structured card; continue with the nextCursor of a group. Without transaction, listings for sale and for rent come as two separate groups, each with its own cursor that is only valid together with that group's transaction. Place names in any language are resolved; an unknown place returns suggestions instead of results. An amenity that cannot be filtered on is reported as not applied. For one listing use get_listing. Returns advertised asking-price and listing facts only: not a valuation, verification of property-specific claims, forecast, ranking or recommendation.
| Name | Required | Description | Default |
|---|---|---|---|
| bbox | No | Map rectangle in Northern Cyprus, WGS84 degrees: {west, south, east, north}. For "this map area" only; otherwise use city and district. | |
| city | No | City names in any language, e.g. ["Girne"] or ["Kyrenia", "Famagusta"]; ANY match counts. Towns and villages go in `district`. | |
| sort | No | Order, default 'newest'. price-low = cheapest first, price-high = dearest first (both need transaction); others: see schema description. | newest |
| limit | No | Number of listings to return, 1-10 (default 8, maximum 10). Ask for more with `cursor`, never with a larger limit. | |
| cursor | No | Pass the previous `nextCursor` with the SAME filters, sort and transaction. Opaque: never build or edit it. Requires `transaction`. | |
| locale | No | Language of the response text, feature names, number formats and links: tr, en, ru, de, ar (default en). Pass the language the user is writing in. | en |
| areaMax | No | Maximum closed (built, indoor) area in m², inclusive. | |
| areaMin | No | Minimum CLOSED (built, indoor) area in m², inclusive. For plots and gardens use landAreaMin instead. | |
| bedrooms | No | Bedrooms as an object: {"exact": 3}, {"min": 2} or {"min": 2, "max": 4}; integers 0-20. Use exact for "a 3-bedroom". | |
| currency | No | Currency of priceMin and priceMax: GBP (default), EUR, USD or TRY. Converted to GBP on the server at the current Evlek rate. | GBP |
| district | No | Districts, towns or villages in any language, e.g. ["Alsancak"]; ANY match counts. With city ["Girne"], ["Merkez"] means Girne Merkez. | |
| features | No | Amenities the listing must have (ALL must match), any language, e.g. ["pool", "sea view", "elevator"]. Others are reported as not filterable. | |
| priceMax | No | Maximum price, inclusive, in `currency` ("under 300000" → 300000): the asking price for sale, the monthly rent for rent. Requires `transaction`. | |
| priceMin | No | Minimum price, inclusive, in `currency`: the asking price for sale, the monthly rent for rent. Requires `transaction`. | |
| furnished | No | true = furnished listings only, false = unfurnished only. Omit for both. | |
| noDeposit | No | Rentals only: true = no security deposit is required. | |
| landAreaMax | No | Maximum plot (land) area in m², inclusive. | |
| landAreaMin | No | Minimum plot (land) area in m², inclusive: villas, houses, bungalows and land. | |
| transaction | No | 'sale' or 'rent' (long-term). REQUIRED with priceMin, priceMax, a price sort or cursor. Omit only to browse both together. | |
| availableNow | No | Rentals only: true = can be moved into immediately. Without `transaction` the search is limited to rent. | |
| bathroomsMin | No | Minimum number of bathrooms, inclusive (1-20). | |
| contractType | No | Contract type. Rentals: 'monthly', 'semester' or 'yearly'. Sales: 'cash' or 'installment'. Must fit `transaction`. | |
| propertyType | No | Property types, ANY match: single types or groups (house, land, commercial), e.g. ["apartment", "penthouse"] or ["house"]. | |
| billsIncluded | No | Rentals only: true = the rent includes utility bills. Without `transaction` the search is limited to rent. | |
| nearUniversity | No | Listings close to one university, e.g. {"code": "NEU", "maxMeters": 1000}. Useful for student housing. |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | Present on a soft result (INVALID_LOCATION, OUT_OF_SCOPE, FX_UNAVAILABLE, ...). |
| refs | No | |
| shown | No | Listings in this response. |
| split | No | |
| total | Yes | Public listings matching the filters, summed over the groups. |
| groups | No | One group per transaction: two (sale, rent) when no transaction was given. |
| issues | No | |
| locale | No | |
| fxRates | No | |
| listings | No | |
| topMatch | No | |
| warnings | No | |
| dataSource | No | |
| priceRange | No | |
| totalMatched | No | The same number as `total` (the v2 name). |
| contentLocale | No | The language the listing pages (links, descriptions) resolved to: `locale` when every shown listing has a page in it, the fallback (Turkish) when none does, null when they differ (each card has its own). |
| appliedFilters | No | What the database was really asked, in the query parameter names (place names as resolved). Only the filters that were applied are present. |
| localeFallback | No | True when a listing link or description is in another language because it has no translation in `locale`. |
| unappliedFilters | No | Constraints that were NOT applied (an amenity that cannot be filtered on, text the parser could not read). The listings shown may not honour them. |
| impliedTransaction | No | Present when no transaction was sent and the search was limited to one because of the filters. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnly, idempotent, non-destructive), so the description goes further and adds pagination semantics (max 10 per call, continue via nextCursor), the two-group sale/rent split without a transaction, cursor validity tied to its group, unknown places returning suggestions, non-filterable amenities being reported, and locale-driven formatting.
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?
The 'use when' trigger and core scope are front-loaded, then detail is sequenced logically (locale, pagination, groups, limitations). It is dense and long, with some restatement of structured schema content (locale, cursor, amenities), but for a 25-parameter tool most sentences earn their place.
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?
An output schema exists so return values need no explanation, yet the description still sketches the response shape (one readable line plus a structured card). Combined with pagination, grouping, locale, and limitation coverage, nothing an agent needs to call this correctly 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 description coverage is 100% and the nested enums/constraints are exhaustively documented per property, so the schema already carries the parameter burden. The description adds minor domain gloss like '2+1 means bedrooms 2' and 'prices in GBP unless a currency is given', but most parameter detail is a restatement of the schema, making the baseline 3 appropriate.
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+resource+scope: 'Search live Evlek property listings for sale and long-term rent in Northern Cyprus (KKTC/TRNC)'. It explicitly distinguishes itself from a sibling, 'For one listing use `get_listing`', so an agent can separate the two without opening either 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?
Opens with an explicit trigger ('Use this when the user wants to find or see property listings') and names the alternative for the single-listing case. It also draws a clear when-not boundary: results are 'not a valuation, verification of property-specific claims, forecast, ranking or recommendation.'
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.
1 tool update
- Changed
get_listing3 fields changed- changed
Output schema / properties / agencyName / descriptionPrevious value: -"ChatGPT summary: office name."New value: +"Short summary: office name." - changed
Output schema / properties / priceLabel / descriptionPrevious value: -"ChatGPT summary: printed price."New value: +"Short summary: printed price." - changed
Output schema / properties / ref / descriptionPrevious value: -"ChatGPT summary: listing number."New value: +"Short summary: listing number."
5 tool updates
- Changed
compare_listings4 fields changed- changed
Output schema / properties / compared / items / properties / areaBasis / descriptionPrevious value: -"'gross' when areaSqm is a gross figure (not the indoor area; no price per m² is derived from it), 'net' otherwise, null when unknown."New value: +"'gross' when areaSqm is a gross figure (not the indoor area; no price per m² is derived from it); 'net' only when the publisher stated the area is net (Evlek does not measure it); null when the basis is not stated, or there is no built area." - added
Output schema / properties / compared / items / properties / areaLabelAdded value: +{ + "type": [ + "string", + "null" + ] +} - changed
Output schema / properties / compared / items / properties / areaSqm / descriptionPrevious value: -"The BUILT area in m², as the listing page shows it: null on land (see plotM2) and when the page withholds the figure (a plot-looking number on a small home); otherwise shown even when areaSuspect is true. A gross figure says so in areaBasis."New value: +"The BUILT area in m², as the listing page shows it: null on land (see plotM2) and when the page withholds the figure (a plot-looking number on a small home, a closed area too small for its rooms); otherwise shown even when areaSuspect is true. A gross figure says so in areaBasis." - added
Output schema / properties / compared / items / properties / areaTextAdded value: +{ + "type": [ + "string", + "null" + ] +}
- Changed
fetch5 fields changed- added
Output schema / properties / listing / properties / areaLabelAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / listing / properties / areaTextAdded value: +{ + "type": [ + "string", + "null" + ] +} - changed
Output schema / properties / metadata / properties / area / properties / basis / descriptionPrevious value: -"'gross' when closedM2 is a gross figure (not the indoor area; no price per m² is derived from it), 'net' otherwise, null when unknown."New value: +"'gross' when closedM2 is a gross figure (not the indoor area; no price per m² is derived from it); 'net' only when the publisher stated the area is net (Evlek does not measure it); null when the basis is not stated, or there is no built area." - added
Output schema / properties / metadata / properties / area / properties / labelAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / metadata / properties / area / properties / textAdded value: +{ + "type": [ + "string", + "null" + ] +}
- Changed
get_listing8 fields changed- changed
Output schema / properties / area / properties / basis / descriptionPrevious value: -"'gross' when closedM2 is a gross figure (not the indoor area; no price per m² is derived from it), 'net' otherwise, null when unknown."New value: +"'gross' when closedM2 is a gross figure (not the indoor area; no price per m² is derived from it); 'net' only when the publisher stated the area is net (Evlek does not measure it); null when the basis is not stated, or there is no built area." - changed
Output schema / properties / area / properties / closedM2 / descriptionPrevious value: -"The BUILT area in m², as the listing page shows it: null on land (see area.plotM2) and when the page withholds the figure (a plot-looking number on a small home); otherwise shown even when area.suspect is true. A gross figure says so in area.basis."New value: +"The BUILT area in m², as the listing page shows it: null on land (see area.plotM2) and when the page withholds the figure (a plot-looking number on a small home, a closed area too small for its rooms); otherwise shown even when area.suspect is true. A gross figure says so in area.basis." - added
Output schema / properties / area / properties / labelAdded value: +{ + "description": "Its name: 'Gross area', 'Net area', 'Area' (basis not stated), 'Plot area' (land). Never call a gross area indoor, net or living area.", + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / area / properties / textAdded value: +{ + "description": "The area as printed: \"85 m² (gross)\", \"85 m² (net)\", \"85 m²\" when the basis is not stated; on land the plot.", + "type": [ + "string", + "null" + ] +} - changed
Output schema / properties / areaBasis / descriptionPrevious value: -"'gross' when areaSqm is a gross figure (not the indoor area; no price per m² is derived from it), 'net' otherwise, null when unknown."New value: +"'gross' when areaSqm is a gross figure (not the indoor area; no price per m² is derived from it); 'net' only when the publisher stated the area is net (Evlek does not measure it); null when the basis is not stated, or there is no built area." - added
Output schema / properties / areaLabelAdded value: +{ + "type": [ + "string", + "null" + ] +} - changed
Output schema / properties / areaSqm / descriptionPrevious value: -"The BUILT area in m², as the listing page shows it: null on land (see plotM2) and when the page withholds the figure (a plot-looking number on a small home); otherwise shown even when areaSuspect is true. A gross figure says so in areaBasis."New value: +"The BUILT area in m², as the listing page shows it: null on land (see plotM2) and when the page withholds the figure (a plot-looking number on a small home, a closed area too small for its rooms); otherwise shown even when areaSuspect is true. A gross figure says so in areaBasis." - added
Output schema / properties / areaTextAdded value: +{ + "type": [ + "string", + "null" + ] +}
- Changed
search4 fields changed- added
Output schema / properties / listings / items / properties / areaLabelAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / listings / items / properties / areaTextAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / nearbyAlternatives / properties / listings / items / properties / areaLabelAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / nearbyAlternatives / properties / listings / items / properties / areaTextAdded value: +{ + "type": [ + "string", + "null" + ] +}
- Changed
search_listings2 fields changed- added
Output schema / properties / listings / items / properties / areaLabelAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / listings / items / properties / areaTextAdded value: +{ + "type": [ + "string", + "null" + ] +}
5 tool updates
- Changed
compare_listings3 fields changed- added
Output schema / properties / compared / items / properties / areaBasisAdded value: +{ + "description": "'gross' when areaSqm is a gross figure (not the indoor area; no price per m² is derived from it), 'net' otherwise, null when unknown.", + "enum": [ + "net", + "gross", + null + ], + "type": [ + "string", + "null" + ] +} - changed
Output schema / properties / compared / items / properties / areaSqm / descriptionPrevious value: -"The BUILT area in m²; null on land (see plotM2). Shown even when areaSuspect is true."New value: +"The BUILT area in m², as the listing page shows it: null on land (see plotM2) and when the page withholds the figure (a plot-looking number on a small home); otherwise shown even when areaSuspect is true. A gross figure says so in areaBasis." - changed
Output schema / properties / compared / items / properties / pricePerSqmGbp / descriptionPrevious value: -"GBP per m²; null whenever the built area is flagged suspect."New value: +"GBP per m², by the listing page's own rule: null whenever the built area is flagged suspect, withheld, or gross (areaBasis 'gross'), and on land below 150 m²."
- Changed
fetch3 fields changed- added
Output schema / properties / listing / properties / areaBasisAdded value: +{ + "enum": [ + "net", + "gross", + null + ] +} - added
Output schema / properties / metadata / properties / area / properties / basisAdded value: +{ + "description": "'gross' when closedM2 is a gross figure (not the indoor area; no price per m² is derived from it), 'net' otherwise, null when unknown.", + "enum": [ + "net", + "gross", + null + ], + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / metadata / properties / price / properties / perSqmGbp / descriptionAdded value: +"GBP per m², by the listing page's own rule: null whenever the built area is flagged suspect, withheld, or gross (areaBasis 'gross'), and on land below 150 m²."
- Changed
get_listing6 fields changed- added
Output schema / properties / area / properties / basisAdded value: +{ + "description": "'gross' when closedM2 is a gross figure (not the indoor area; no price per m² is derived from it), 'net' otherwise, null when unknown.", + "enum": [ + "net", + "gross", + null + ], + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / area / properties / closedM2 / descriptionAdded value: +"The BUILT area in m², as the listing page shows it: null on land (see area.plotM2) and when the page withholds the figure (a plot-looking number on a small home); otherwise shown even when area.suspect is true. A gross figure says so in area.basis." - added
Output schema / properties / areaBasisAdded value: +{ + "description": "'gross' when areaSqm is a gross figure (not the indoor area; no price per m² is derived from it), 'net' otherwise, null when unknown.", + "enum": [ + "net", + "gross", + null + ], + "type": [ + "string", + "null" + ] +} - changed
Output schema / properties / areaSqm / descriptionPrevious value: -"The BUILT area in m²; null on land (see plotM2). The number is shown even when areaSuspect is true."New value: +"The BUILT area in m², as the listing page shows it: null on land (see plotM2) and when the page withholds the figure (a plot-looking number on a small home); otherwise shown even when areaSuspect is true. A gross figure says so in areaBasis." - changed
Output schema / properties / price / properties / perSqmGbp / descriptionPrevious value: -"Null whenever the built area is flagged suspect."New value: +"GBP per m², by the listing page's own rule: null whenever the built area is flagged suspect, withheld, or gross (areaBasis 'gross'), and on land below 150 m²." - changed
Output schema / properties / pricePerSqmGbp / descriptionPrevious value: -"Null whenever the built area is flagged suspect."New value: +"GBP per m², by the listing page's own rule: null whenever the built area is flagged suspect, withheld, or gross (areaBasis 'gross'), and on land below 150 m²."
- Changed
search2 fields changed- added
Output schema / properties / listings / items / properties / areaBasisAdded value: +{ + "enum": [ + "net", + "gross", + null + ] +} - added
Output schema / properties / nearbyAlternatives / properties / listings / items / properties / areaBasisAdded value: +{ + "enum": [ + "net", + "gross", + null + ] +}
- Changed
search_listings1 field changed- added
Output schema / properties / listings / items / properties / areaBasisAdded value: +{ + "enum": [ + "net", + "gross", + null + ] +}
1 tool update
- Changed
search1 field changed- added
Output schema / properties / priceRangeAdded value: +{ + "properties": { + "currency": { + "type": "string" + }, + "max": { + "type": "number" + }, + "min": { + "type": "number" + }, + "period": { + "type": "string" + }, + "scope": { + "type": "string" + } + }, + "type": [ + "object", + "null" + ] +}
4 tool updates
- Changed
fetch1 field changed- added
Output schema / properties / listing / properties / matchedFeaturesAdded value: +{ + "description": "The requested amenities this listing has, in request order (canonical keys); empty when none were requested.", + "items": { + "type": "string" + }, + "type": "array" +}
- Changed
get_listing3 fields changed- added
Output schema / properties / agencyNameAdded value: +{ + "description": "ChatGPT summary: office name.", + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / priceLabelAdded value: +{ + "description": "ChatGPT summary: printed price.", + "type": "string" +} - added
Output schema / properties / refAdded value: +{ + "description": "ChatGPT summary: listing number.", + "type": [ + "string", + "null" + ] +}
- Changed
search2 fields changed- added
Output schema / properties / listings / items / properties / matchedFeaturesAdded value: +{ + "description": "The requested amenities this listing has, in request order (canonical keys); empty when none were requested.", + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / nearbyAlternatives / properties / listings / items / properties / matchedFeaturesAdded value: +{ + "description": "The requested amenities this listing has, in request order (canonical keys); empty when none were requested.", + "items": { + "type": "string" + }, + "type": "array" +}
- Changed
search_listings7 fields changed- changed
Input schema / properties / limit / defaultPrevious value: -10New value: +8 - changed
Input schema / properties / limit / descriptionPrevious value: -"Number of listings to return, 1-10 (default 10, maximum 10). Ask for more with `cursor`, never with a larger limit."New value: +"Number of listings to return, 1-10 (default 8, maximum 10). Ask for more with `cursor`, never with a larger limit." - added
Output schema / properties / listings / items / properties / matchedFeaturesAdded value: +{ + "description": "The requested amenities this listing has, in request order (canonical keys); empty when none were requested.", + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / priceRangeAdded value: +{ + "properties": { + "currency": { + "type": "string" + }, + "max": { + "type": "number" + }, + "min": { + "type": "number" + }, + "period": { + "type": "string" + }, + "scope": { + "type": "string" + } + }, + "type": [ + "object", + "null" + ] +} - added
Output schema / properties / refsAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / topMatchAdded value: +{ + "properties": { + "district": { + "type": [ + "string", + "null" + ] + }, + "priceLabel": { + "type": "string" + }, + "ref": { + "type": [ + "string", + "null" + ] + } + }, + "type": "object" +} - changed
Output schema / requiredPrevious value: -[ - "listings", - "total" -]New value: +[ + "total" +]
15 tool updates
- Removed
compare_cities - Added
compare_listings - Removed
compare_properties - Changed
convert_currency22 fields changed- added
Input schema / properties / amountAdded value: +{ + "description": "Amount to convert: a property price, a monthly rent, any amount from 1 up. Not a deposit or an instalment plan.", + "maximum": 10000000000, + "minimum": 1, + "type": "number" +} - changed
Input schema / properties / currency / descriptionPrevious value: -"Currency of the price (default GBP)."New value: +"Currency of the amount. Default GBP. Lower case, symbols (£ € $ ₺) and names (pound, euro, dollar, lira) are read." - added
Input schema / properties / localeAdded value: +{ + "description": "Language of the answer and the number format. Pass the language the user writes in. Default en.", + "enum": [ + "tr", + "en", + "ru", + "de", + "ar" + ], + "type": "string" +} - removed
Input schema / properties / priceRemoved value: -{ - "description": "Entered property asking-price amount; not a deposit or installment.", - "maximum": 100000000, - "minimum": 1000, - "type": "number" -} - changed
Input schema / requiredPrevious value: -[ - "price" -]New value: +[ + "amount" +] - added
Output schema / properties / assumedCurrencyAdded value: +{ + "description": "True when no currency was given and GBP was assumed.", + "type": "boolean" +} - added
Output schema / properties / codeAdded value: +{ + "description": "Present on a soft refusal (FX_UNAVAILABLE) and on invalid arguments (INVALID_PARAMS).", + "type": "string" +} - added
Output schema / properties / contentLocaleAdded value: +{ + "enum": [ + "tr", + "en", + "ru", + "de", + "ar" + ], + "type": "string" +} - added
Output schema / properties / fx / properties / ageHoursAdded value: +{ + "description": "Whole hours since the rates were stored.", + "type": "number" +} - added
Output schema / properties / fx / properties / asOf / descriptionAdded value: +"When the rates were stored (ISO 8601, UTC)." - added
Output schema / properties / fx / properties / rates / descriptionAdded value: +"Units of each currency per 1 GBP, as stored." - added
Output schema / properties / fx / properties / staleAdded value: +{ + "description": "True when the rates are older than 24 hours (at most 72 hours: older ones are refused).", + "type": "boolean" +} - changed
Output schema / properties / fx / requiredPrevious value: -[ - "base", - "source", - "asOf", - "rates" -]New value: +[ + "base", + "source", + "asOf", + "rates", + "stale", + "ageHours" +] - added
Output schema / properties / inputCurrency / enumAdded value: +[ + "GBP", + "EUR", + "USD", + "TRY" +] - added
Output schema / properties / issuesAdded value: +{ + "items": { + "properties": { + "allowedValues": { + "items": { + "type": "string" + }, + "type": "array" + }, + "code": { + "type": "string" + }, + "field": { + "type": "string" + }, + "message": { + "type": "string" + }, + "suggestion": { + "type": "string" + } + }, + "required": [ + "code", + "field", + "message" + ], + "type": "object" + }, + "type": "array" +} - added
Output schema / properties / priceGBP / descriptionAdded value: +"The amount in GBP (the same number as amounts.GBP)." - added
Output schema / properties / rateAgeHoursAdded value: +{ + "description": "FX_UNAVAILABLE with reason too_old: how old the stored rates are, in hours.", + "type": "number" +} - added
Output schema / properties / reasonAdded value: +{ + "enum": [ + "unavailable", + "too_old" + ], + "type": "string" +} - added
Output schema / properties / retryableAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / staleAdded value: +{ + "description": "True when the stored rates are older than 24 hours.", + "type": "boolean" +} - added
Output schema / properties / warningsAdded value: +{ + "items": { + "properties": { + "code": { + "type": "string" + }, + "field": { + "type": "string" + }, + "message": { + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + "type": "array" +} - changed
Output schema / requiredPrevious value: -[ - "inputCurrency", - "priceGBP", - "amounts" -]New value: +[]
- Changed
fetch33 fields changed- changed
Input schema / properties / id / descriptionPrevious value: -"Evlek listing id (UUID) from search"New value: +"Evlek listing id (UUID) from search, a listing number such as EVL-100464, or an evlek.app listing link" - added
Output schema / properties / codeAdded value: +{ + "description": "NOT_FOUND (found is false) or SEARCH_BACKEND_UNAVAILABLE (retryable).", + "type": "string" +} - added
Output schema / properties / contentLocaleAdded value: +{ + "enum": [ + "tr", + "en", + "ru", + "de", + "ar" + ], + "type": "string" +} - added
Output schema / properties / foundAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / listingAdded value: +{ + "description": "The listing card (same shape as search_listings).", + "properties": { + "areaSqm": { + "type": [ + "number", + "null" + ] + }, + "areaSuspect": { + "type": "boolean" + }, + "bathrooms": { + "type": [ + "number", + "null" + ] + }, + "bedrooms": { + "type": [ + "number", + "null" + ] + }, + "city": { + "type": [ + "string", + "null" + ] + }, + "cityLabel": { + "type": [ + "string", + "null" + ] + }, + "contentLocale": { + "enum": [ + "tr", + "en", + "ru", + "de", + "ar" + ], + "type": "string" + }, + "coverImageUrl": { + "type": [ + "string", + "null" + ] + }, + "currency": { + "type": [ + "string", + "null" + ] + }, + "dataQuality": { + "properties": { + "areaSuspect": { + "type": "boolean" + }, + "flags": { + "items": { + "type": "string" + }, + "type": "array" + }, + "priceOutlier": { + "type": "boolean" + }, + "titleRoomMismatch": { + "type": "boolean" + } + }, + "required": [ + "flags", + "priceOutlier", + "areaSuspect", + "titleRoomMismatch" + ], + "type": "object" + }, + "district": { + "type": [ + "string", + "null" + ] + }, + "featureCount": { + "type": "number" + }, + "features": { + "items": { + "properties": { + "key": { + "type": "string" + }, + "label": { + "type": "string" + }, + "source": { + "enum": [ + "column", + "label" + ], + "type": "string" + } + }, + "required": [ + "key", + "label", + "source" + ], + "type": "object" + }, + "type": "array" + }, + "furnished": { + "enum": [ + "yes", + "no", + "unknown" + ], + "type": "string" + }, + "id": { + "type": "string" + }, + "isStudio": { + "type": "boolean" + }, + "listedAt": { + "type": [ + "string", + "null" + ] + }, + "listingNumber": { + "type": [ + "number", + "null" + ] + }, + "listingRef": { + "type": [ + "string", + "null" + ] + }, + "localeFallback": { + "type": "boolean" + }, + "locationPrecision": { + "enum": [ + "approximate_grid", + "district", + "city", + "unmapped", + null + ], + "type": [ + "string", + "null" + ] + }, + "monthlyRentGbp": { + "type": [ + "number", + "null" + ] + }, + "notes": { + "items": { + "type": "string" + }, + "type": "array" + }, + "officeName": { + "type": [ + "string", + "null" + ] + }, + "photoCount": { + "type": "number" + }, + "plotM2": { + "type": [ + "number", + "null" + ] + }, + "price": { + "type": "number" + }, + "priceGbp": { + "type": [ + "number", + "null" + ] + }, + "pricePerSqmGbp": { + "type": [ + "number", + "null" + ] + }, + "propertyType": { + "type": [ + "string", + "null" + ] + }, + "propertyTypeLabel": { + "type": [ + "string", + "null" + ] + }, + "rentPeriod": { + "enum": [ + "month", + null + ], + "type": [ + "string", + "null" + ] + }, + "roomLabel": { + "type": [ + "string", + "null" + ] + }, + "title": { + "type": "string" + }, + "titleSource": { + "enum": [ + "listing", + "generated" + ], + "type": "string" + }, + "transaction": { + "enum": [ + "sale", + "rent" + ], + "type": "string" + }, + "updatedAt": { + "type": [ + "string", + "null" + ] + }, + "url": { + "type": "string" + } + }, + "required": [ + "id", + "listingNumber", + "listingRef", + "transaction", + "title", + "url", + "contentLocale", + "localeFallback", + "price", + "currency", + "priceGbp", + "city", + "district", + "propertyType", + "bedrooms", + "areaSqm", + "features", + "dataQuality" + ], + "type": "object" +} - added
Output schema / properties / localeAdded value: +{ + "enum": [ + "tr", + "en", + "ru", + "de", + "ar" + ], + "type": "string" +} - added
Output schema / properties / localeFallbackAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / metadata / descriptionAdded value: +"Listing facts (price, rooms, area, features, data quality); no contact data." - added
Output schema / properties / metadata / properties / areaAdded value: +{ + "properties": { + "closedM2": { + "type": [ + "number", + "null" + ] + }, + "plotM2": { + "type": [ + "number", + "null" + ] + }, + "reasons": { + "items": { + "type": "string" + }, + "type": "array" + }, + "suspect": { + "type": "boolean" + } + }, + "type": "object" +} - removed
Output schema / properties / metadata / properties / areaSqmRemoved value: -{ - "type": [ - "number", - "null" - ] -} - removed
Output schema / properties / metadata / properties / bedroomsRemoved value: -{ - "type": [ - "number", - "null" - ] -} - added
Output schema / properties / metadata / properties / codeAdded value: +{ + "description": "NOT_FOUND or SEARCH_BACKEND_UNAVAILABLE, when there is no listing to describe.", + "type": "string" +} - added
Output schema / properties / metadata / properties / contentLocaleAdded value: +{ + "enum": [ + "tr", + "en", + "ru", + "de", + "ar" + ], + "type": "string" +} - removed
Output schema / properties / metadata / properties / currencyRemoved value: -{ - "type": [ - "string", - "null" - ] -} - added
Output schema / properties / metadata / properties / dataQualityAdded value: +{ + "properties": { + "areaSuspect": { + "type": "boolean" + }, + "flags": { + "items": { + "type": "string" + }, + "type": "array" + }, + "priceOutlier": { + "type": "boolean" + }, + "titleRoomMismatch": { + "type": "boolean" + } + }, + "type": "object" +} - added
Output schema / properties / metadata / properties / featuresAdded value: +{ + "items": { + "properties": { + "key": { + "type": "string" + }, + "label": { + "type": "string" + }, + "source": { + "enum": [ + "column", + "label" + ], + "type": "string" + } + }, + "type": "object" + }, + "type": "array" +} - added
Output schema / properties / metadata / properties / listingRefAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / metadata / properties / localeFallbackAdded value: +{ + "type": "boolean" +} - removed
Output schema / properties / metadata / properties / monthlyRentGbpRemoved value: -{ - "type": [ - "number", - "null" - ] -} - added
Output schema / properties / metadata / properties / priceAdded value: +{ + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "type": [ + "string", + "null" + ] + }, + "gbp": { + "type": [ + "number", + "null" + ] + }, + "perSqmGbp": { + "type": [ + "number", + "null" + ] + }, + "rentPeriod": { + "type": [ + "string", + "null" + ] + } + }, + "type": "object" +} - removed
Output schema / properties / metadata / properties / priceGBPRemoved value: -{ - "type": [ - "number", - "null" - ] -} - removed
Output schema / properties / metadata / properties / pricePerSqmGBPRemoved value: -{ - "type": [ - "number", - "null" - ] -} - added
Output schema / properties / metadata / properties / propertyTypeAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / metadata / properties / roomsAdded value: +{ + "properties": { + "bedrooms": { + "type": [ + "number", + "null" + ] + }, + "isStudio": { + "type": "boolean" + }, + "label": { + "type": [ + "string", + "null" + ] + }, + "livingRooms": { + "type": [ + "number", + "null" + ] + } + }, + "type": "object" +} - added
Output schema / properties / metadata / properties / transactionAdded value: +{ + "enum": [ + "sale", + "rent" + ], + "type": "string" +} - removed
Output schema / properties / metadata / properties / typeRemoved value: -{ - "type": [ - "string", - "null" - ] -} - removed
Output schema / properties / metadata / requiredRemoved value: -[ - "city", - "district", - "type", - "bedrooms", - "areaSqm", - "priceGBP", - "pricePerSqmGBP", - "monthlyRentGbp", - "currency", - "listedAt", - "locationPrecision" -] - added
Output schema / properties / photoCountAdded value: +{ + "type": "number" +} - added
Output schema / properties / photoUrlsAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - removed
Output schema / properties / photosRemoved value: -{ - "items": { - "properties": { - "caption": { - "type": [ - "string", - "null" - ] - }, - "tags": { - "items": { - "type": "string" - }, - "type": "array" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" -} - added
Output schema / properties / requestedAdded value: +{ + "description": "The id as the caller sent it (cleaned, at most 200 characters).", + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / retryableAdded value: +{ + "type": "boolean" +} - removed
Output schema / requiredRemoved value: -[ - "id", - "title", - "text", - "url" -]
- Removed
get_district_profile - Added
get_listing - Removed
get_listing_by_number - Removed
get_listing_detail - Removed
get_price_index - Changed
list_locations43 fields changed- changed
Input schema / properties / city / descriptionPrevious value: -"Optional — limit districts to a single city. Slug, Turkish name, or exonym (Kyrenia/Nicosia/Famagusta/Morphou)."New value: +"One place in detail: any spelling or language of a city, district or village (\"Kyrenia\", \"Alsancak\"). Omit to list every city." - added
Input schema / properties / includeAliasesAdded value: +{ + "description": "Also list accepted alternative spellings of each place (at most 6, Latin script). Default false.", + "type": "boolean" +} - added
Input schema / properties / includeEmptyAdded value: +{ + "description": "Also list places that have no public listing right now. Default false.", + "type": "boolean" +} - added
Input schema / properties / localeAdded value: +{ + "description": "Language of the answer. Pass the language the user writes in. Default en.", + "enum": [ + "tr", + "en", + "ru", + "de", + "ar" + ], + "type": "string" +} - added
Output schema / properties / ambiguousAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / cities / items / properties / activeCountAdded value: +{ + "description": "Public listings under the place, sub-places included.", + "properties": { + "rent": { + "type": "number" + }, + "sale": { + "type": "number" + }, + "total": { + "type": "number" + } + }, + "required": [ + "sale", + "rent", + "total" + ], + "type": "object" +} - added
Output schema / properties / cities / items / properties / aliasesAdded value: +{ + "description": "Accepted input spellings (Latin script, at most 6).", + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / cities / items / properties / childrenAdded value: +{ + "items": { + "properties": { + "activeCount": { + "description": "Public listings under the place, sub-places included.", + "properties": { + "rent": { + "type": "number" + }, + "sale": { + "type": "number" + }, + "total": { + "type": "number" + } + }, + "required": [ + "sale", + "rent", + "total" + ], + "type": "object" + }, + "aliases": { + "description": "Accepted input spellings (Latin script, at most 6).", + "items": { + "type": "string" + }, + "type": "array" + }, + "children": { + "items": { + "properties": { + "activeCount": { + "description": "Public listings under the place, sub-places included.", + "properties": { + "rent": { + "type": "number" + }, + "sale": { + "type": "number" + }, + "total": { + "type": "number" + } + }, + "required": [ + "sale", + "rent", + "total" + ], + "type": "object" + }, + "aliases": { + "description": "Accepted input spellings (Latin script, at most 6).", + "items": { + "type": "string" + }, + "type": "array" + }, + "id": { + "description": "Stable id of the place (a slug); every tool takes it back as a place.", + "type": "string" + }, + "kind": { + "enum": [ + "city", + "district", + "neighborhood", + "subplace", + "landmark", + "region" + ], + "type": "string" + }, + "members": { + "description": "Region only: ids of its member districts.", + "items": { + "type": "string" + }, + "type": "array" + }, + "name": { + "description": "Display name (Turkish / Latin; cities keep their English exonym outside Turkish).", + "type": "string" + }, + "officialName": { + "description": "Official Turkish name, as listings store it.", + "type": "string" + } + }, + "required": [ + "id", + "kind", + "name", + "officialName", + "activeCount" + ], + "type": "object" + }, + "type": "array" + }, + "id": { + "description": "Stable id of the place (a slug); every tool takes it back as a place.", + "type": "string" + }, + "kind": { + "enum": [ + "city", + "district", + "neighborhood", + "subplace", + "landmark", + "region" + ], + "type": "string" + }, + "members": { + "description": "Region only: ids of its member districts.", + "items": { + "type": "string" + }, + "type": "array" + }, + "name": { + "description": "Display name (Turkish / Latin; cities keep their English exonym outside Turkish).", + "type": "string" + }, + "officialName": { + "description": "Official Turkish name, as listings store it.", + "type": "string" + } + }, + "required": [ + "id", + "kind", + "name", + "officialName", + "activeCount" + ], + "type": "object" + }, + "type": "array" +} - removed
Output schema / properties / cities / items / properties / displayRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / cities / items / properties / districtCountRemoved value: -{ - "type": "number" -} - removed
Output schema / properties / cities / items / properties / districtsRemoved value: -{ - "items": { - "type": "string" - }, - "type": "array" -} - added
Output schema / properties / cities / items / properties / idAdded value: +{ + "description": "Stable id of the place (a slug); every tool takes it back as a place.", + "type": "string" +} - added
Output schema / properties / cities / items / properties / kindAdded value: +{ + "enum": [ + "city", + "district", + "neighborhood", + "subplace", + "landmark", + "region" + ], + "type": "string" +} - added
Output schema / properties / cities / items / properties / membersAdded value: +{ + "description": "Region only: ids of its member districts.", + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / cities / items / properties / nameAdded value: +{ + "description": "Display name (Turkish / Latin; cities keep their English exonym outside Turkish).", + "type": "string" +} - added
Output schema / properties / cities / items / properties / noDistrictRecordedAdded value: +{ + "properties": { + "rent": { + "type": "number" + }, + "sale": { + "type": "number" + }, + "total": { + "type": "number" + } + }, + "required": [ + "sale", + "rent", + "total" + ], + "type": "object" +} - added
Output schema / properties / cities / items / properties / officialNameAdded value: +{ + "description": "Official Turkish name, as listings store it.", + "type": "string" +} - added
Output schema / properties / cities / items / properties / otherSpellingsAdded value: +{ + "properties": { + "rent": { + "type": "number" + }, + "sale": { + "type": "number" + }, + "total": { + "type": "number" + } + }, + "required": [ + "sale", + "rent", + "total" + ], + "type": "object" +} - added
Output schema / properties / cities / items / properties / regionsAdded value: +{ + "items": { + "properties": { + "activeCount": { + "description": "Public listings under the place, sub-places included.", + "properties": { + "rent": { + "type": "number" + }, + "sale": { + "type": "number" + }, + "total": { + "type": "number" + } + }, + "required": [ + "sale", + "rent", + "total" + ], + "type": "object" + }, + "aliases": { + "description": "Accepted input spellings (Latin script, at most 6).", + "items": { + "type": "string" + }, + "type": "array" + }, + "id": { + "description": "Stable id of the place (a slug); every tool takes it back as a place.", + "type": "string" + }, + "kind": { + "enum": [ + "city", + "district", + "neighborhood", + "subplace", + "landmark", + "region" + ], + "type": "string" + }, + "members": { + "description": "Region only: ids of its member districts.", + "items": { + "type": "string" + }, + "type": "array" + }, + "name": { + "description": "Display name (Turkish / Latin; cities keep their English exonym outside Turkish).", + "type": "string" + }, + "officialName": { + "description": "Official Turkish name, as listings store it.", + "type": "string" + } + }, + "required": [ + "id", + "kind", + "name", + "officialName", + "activeCount" + ], + "type": "object" + }, + "type": "array" +} - removed
Output schema / properties / cities / items / properties / slugRemoved value: -{ - "type": "string" -} - added
Output schema / properties / cities / items / requiredAdded value: +[ + "id", + "kind", + "name", + "officialName", + "activeCount", + "children", + "noDistrictRecorded", + "otherSpellings" +] - added
Output schema / properties / codeAdded value: +{ + "description": "Present on a soft answer: INVALID_LOCATION, OUT_OF_SCOPE or SEARCH_BACKEND_UNAVAILABLE.", + "type": "string" +} - added
Output schema / properties / contentLocaleAdded value: +{ + "enum": [ + "tr", + "en", + "ru", + "de", + "ar" + ], + "type": "string" +} - removed
Output schema / properties / dataSourceRemoved value: -{ - "type": "string" -} - added
Output schema / properties / hiddenEmptyCountAdded value: +{ + "type": "number" +} - added
Output schema / properties / includeAliasesAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / includeEmptyAdded value: +{ + "type": "boolean" +} - removed
Output schema / properties / isEstimateRemoved value: -{ - "type": "boolean" -} - added
Output schema / properties / issuesAdded value: +{ + "items": { + "properties": { + "allowedValues": { + "items": { + "type": "string" + }, + "type": "array" + }, + "code": { + "type": "string" + }, + "field": { + "type": "string" + }, + "message": { + "type": "string" + }, + "suggestion": { + "type": "string" + } + }, + "required": [ + "code", + "field", + "message" + ], + "type": "object" + }, + "type": "array" +} - added
Output schema / properties / notesAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / outOfScopeAdded value: +{ + "properties": { + "reason": { + "type": "string" + } + }, + "required": [ + "reason" + ], + "type": "object" +} - added
Output schema / properties / placeAdded value: +{ + "properties": { + "activeCount": { + "description": "Public listings under the place, sub-places included.", + "properties": { + "rent": { + "type": "number" + }, + "sale": { + "type": "number" + }, + "total": { + "type": "number" + } + }, + "required": [ + "sale", + "rent", + "total" + ], + "type": "object" + }, + "aliases": { + "description": "Accepted input spellings (Latin script, at most 6).", + "items": { + "type": "string" + }, + "type": "array" + }, + "children": { + "items": { + "properties": { + "activeCount": { + "description": "Public listings under the place, sub-places included.", + "properties": { + "rent": { + "type": "number" + }, + "sale": { + "type": "number" + }, + "total": { + "type": "number" + } + }, + "required": [ + "sale", + "rent", + "total" + ], + "type": "object" + }, + "aliases": { + "description": "Accepted input spellings (Latin script, at most 6).", + "items": { + "type": "string" + }, + "type": "array" + }, + "children": { + "items": { + "properties": { + "activeCount": { + "description": "Public listings under the place, sub-places included.", + "properties": { + "rent": { + "type": "number" + }, + "sale": { + "type": "number" + }, + "total": { + "type": "number" + } + }, + "required": [ + "sale", + "rent", + "total" + ], + "type": "object" + }, + "aliases": { + "description": "Accepted input spellings (Latin script, at most 6).", + "items": { + "type": "string" + }, + "type": "array" + }, + "id": { + "description": "Stable id of the place (a slug); every tool takes it back as a place.", + "type": "string" + }, + "kind": { + "enum": [ + "city", + "district", + "neighborhood", + "subplace", + "landmark", + "region" + ], + "type": "string" + }, + "members": { + "description": "Region only: ids of its member districts.", + "items": { + "type": "string" + }, + "type": "array" + }, + "name": { + "description": "Display name (Turkish / Latin; cities keep their English exonym outside Turkish).", + "type": "string" + }, + "officialName": { + "description": "Official Turkish name, as listings store it.", + "type": "string" + } + }, + "required": [ + "id", + "kind", + "name", + "officialName", + "activeCount" + ], + "type": "object" + }, + "type": "array" + }, + "id": { + "description": "Stable id of the place (a slug); every tool takes it back as a place.", + "type": "string" + }, + "kind": { + "enum": [ + "city", + "district", + "neighborhood", + "subplace", + "landmark", + "region" + ], + "type": "string" + }, + "members": { + "description": "Region only: ids of its member districts.", + "items": { + "type": "string" + }, + "type": "array" + }, + "name": { + "description": "Display name (Turkish / Latin; cities keep their English exonym outside Turkish).", + "type": "string" + }, + "officialName": { + "description": "Official Turkish name, as listings store it.", + "type": "string" + } + }, + "required": [ + "id", + "kind", + "name", + "officialName", + "activeCount" + ], + "type": "object" + }, + "type": "array" + }, + "id": { + "description": "Stable id of the place (a slug); every tool takes it back as a place.", + "type": "string" + }, + "kind": { + "enum": [ + "city", + "district", + "neighborhood", + "subplace", + "landmark", + "region" + ], + "type": "string" + }, + "members": { + "description": "Region only: ids of its member districts.", + "items": { + "type": "string" + }, + "type": "array" + }, + "name": { + "description": "Display name (Turkish / Latin; cities keep their English exonym outside Turkish).", + "type": "string" + }, + "officialName": { + "description": "Official Turkish name, as listings store it.", + "type": "string" + } + }, + "required": [ + "id", + "kind", + "name", + "officialName", + "activeCount" + ], + "type": "object" +} - added
Output schema / properties / registryAdded value: +{ + "properties": { + "version": { + "type": "string" + } + }, + "required": [ + "version" + ], + "type": "object" +} - added
Output schema / properties / retryableAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / scopeAdded value: +{ + "properties": { + "matchedId": { + "type": "string" + }, + "matchedName": { + "type": "string" + }, + "path": { + "items": { + "type": "string" + }, + "type": "array" + }, + "readAs": { + "enum": [ + "exact", + "alias", + "fuzzy" + ], + "type": "string" + }, + "requested": { + "type": "string" + }, + "type": { + "enum": [ + "all", + "city", + "place" + ], + "type": "string" + } + }, + "required": [ + "type" + ], + "type": "object" +} - added
Output schema / properties / suggestionsAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / textTruncatedAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / totalsAdded value: +{ + "properties": { + "rent": { + "type": "number" + }, + "sale": { + "type": "number" + }, + "total": { + "type": "number" + } + }, + "required": [ + "sale", + "rent", + "total" + ], + "type": "object" +} - removed
Output schema / properties / truncatedRemoved value: -{ - "type": "boolean" -} - added
Output schema / properties / unassignedAdded value: +{ + "properties": { + "rent": { + "type": "number" + }, + "sale": { + "type": "number" + }, + "total": { + "type": "number" + } + }, + "required": [ + "sale", + "rent", + "total" + ], + "type": "object" +} - added
Output schema / properties / validCitiesAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / warningsAdded value: +{ + "items": { + "properties": { + "code": { + "type": "string" + }, + "field": { + "type": "string" + }, + "message": { + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + "type": "array" +} - changed
Output schema / requiredPrevious value: -[ - "cities" -]New value: +[]
- Added
market_stats - Removed
payment_plan - Changed
search136 fields changed- added
Output schema / properties / appliedFilters / descriptionAdded value: +"What the database was really asked, in the query parameter names (place names as resolved). Only the filters that were applied are present." - added
Output schema / properties / appliedFilters / properties / areaMaxAdded value: +{ + "type": "number" +} - added
Output schema / properties / appliedFilters / properties / areaMinAdded value: +{ + "type": "number" +} - added
Output schema / properties / appliedFilters / properties / availableNowAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / appliedFilters / properties / bathroomsMinAdded value: +{ + "type": "number" +} - added
Output schema / properties / appliedFilters / properties / bboxAdded value: +{ + "properties": { + "east": { + "type": "number" + }, + "north": { + "type": "number" + }, + "south": { + "type": "number" + }, + "west": { + "type": "number" + } + }, + "type": "object" +} - added
Output schema / properties / appliedFilters / properties / bedrooms / propertiesAdded value: +{ + "exact": { + "type": "number" + }, + "max": { + "type": "number" + }, + "min": { + "type": "number" + } +} - changed
Output schema / properties / appliedFilters / properties / bedrooms / typePrevious value: -"number"New value: +"object" - added
Output schema / properties / appliedFilters / properties / billsIncludedAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / appliedFilters / properties / city / itemsAdded value: +{ + "type": "string" +} - changed
Output schema / properties / appliedFilters / properties / city / typePrevious value: -"string"New value: +"array" - added
Output schema / properties / appliedFilters / properties / contractTypeAdded value: +{ + "type": "string" +} - added
Output schema / properties / appliedFilters / properties / currencyAdded value: +{ + "enum": [ + "GBP", + "EUR", + "USD", + "TRY" + ], + "type": "string" +} - added
Output schema / properties / appliedFilters / properties / district / itemsAdded value: +{ + "type": "string" +} - changed
Output schema / properties / appliedFilters / properties / district / typePrevious value: -"string"New value: +"array" - removed
Output schema / properties / appliedFilters / properties / elevatorRemoved value: -{ - "type": "boolean" -} - added
Output schema / properties / appliedFilters / properties / featuresAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - removed
Output schema / properties / appliedFilters / properties / gardenRemoved value: -{ - "type": "boolean" -} - added
Output schema / properties / appliedFilters / properties / landAreaMaxAdded value: +{ + "type": "number" +} - added
Output schema / properties / appliedFilters / properties / landAreaMinAdded value: +{ + "type": "number" +} - removed
Output schema / properties / appliedFilters / properties / maxPriceRemoved value: -{ - "type": "number" -} - removed
Output schema / properties / appliedFilters / properties / minPriceRemoved value: -{ - "type": "number" -} - added
Output schema / properties / appliedFilters / properties / nearUniversityAdded value: +{ + "properties": { + "code": { + "type": "string" + }, + "maxMeters": { + "type": "number" + } + }, + "type": "object" +} - added
Output schema / properties / appliedFilters / properties / noDepositAdded value: +{ + "type": "boolean" +} - removed
Output schema / properties / appliedFilters / properties / parkingRemoved value: -{ - "type": "boolean" -} - removed
Output schema / properties / appliedFilters / properties / poolRemoved value: -{ - "type": "boolean" -} - added
Output schema / properties / appliedFilters / properties / priceMaxAdded value: +{ + "type": "number" +} - added
Output schema / properties / appliedFilters / properties / priceMinAdded value: +{ + "type": "number" +} - added
Output schema / properties / appliedFilters / properties / propertyType / itemsAdded value: +{ + "type": "string" +} - changed
Output schema / properties / appliedFilters / properties / propertyType / typePrevious value: -"string"New value: +"array" - removed
Output schema / properties / appliedFilters / properties / seaViewRemoved value: -{ - "type": "boolean" -} - added
Output schema / properties / appliedFilters / properties / sortAdded value: +{ + "type": "string" +} - added
Output schema / properties / appliedFilters / properties / transactionAdded value: +{ + "enum": [ + "sale", + "rent" + ], + "type": "string" +} - removed
Output schema / properties / appliedFilters / properties / typeRemoved value: -{ - "type": "string" -} - added
Output schema / properties / assumedAdded value: +{ + "description": "What had to be assumed to make a constraint a filter (a currency, a band, a period).", + "items": { + "properties": { + "assumed": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + "kind": { + "type": "string" + } + }, + "required": [ + "kind", + "assumed" + ], + "type": "object" + }, + "type": "array" +} - added
Output schema / properties / clarificationsAdded value: +{ + "description": "Questions to ask the user instead of guessing.", + "items": { + "properties": { + "code": { + "type": "string" + }, + "options": { + "items": { + "type": "string" + }, + "type": "array" + }, + "question": { + "type": "string" + } + }, + "required": [ + "code", + "question" + ], + "type": "object" + }, + "type": "array" +} - added
Output schema / properties / codeAdded value: +{ + "description": "Present on a soft result (INVALID_LOCATION, OUT_OF_SCOPE, FX_UNAVAILABLE, ...).", + "type": "string" +} - added
Output schema / properties / contentLocaleAdded value: +{ + "description": "The language the listing pages (links, descriptions) resolved to: `locale` when every shown listing has a page in it, the fallback (Turkish) when none does, null when they differ (each card has its own).", + "enum": [ + "tr", + "en", + "ru", + "de", + "ar", + null + ], + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / criteria / descriptionAdded value: +"Everything the sentence was understood as, with the words each came from." - added
Output schema / properties / criteria / items / properties / assumedAdded value: +{ + "additionalProperties": { + "type": "string" + }, + "type": "object" +} - removed
Output schema / properties / criteria / items / properties / keyRemoved value: -{ - "type": "string" -} - added
Output schema / properties / criteria / items / properties / kindAdded value: +{ + "type": "string" +} - removed
Output schema / properties / criteria / items / properties / noteRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / criteria / items / properties / stateRemoved value: -{ - "enum": [ - "applied", - "unresolved", - "not_supported" - ], - "type": "string" -} - added
Output schema / properties / criteria / items / properties / textAdded value: +{ + "type": "string" +} - removed
Output schema / properties / criteria / items / properties / value / typeRemoved value: -"string" - changed
Output schema / properties / criteria / items / requiredPrevious value: -[ - "key", - "value", - "state" -]New value: +[ + "kind", + "text" +] - added
Output schema / properties / dataSourceAdded value: +{ + "type": "string" +} - added
Output schema / properties / fxRates / properties / isFallback / enumAdded value: +[ + false +] - changed
Output schema / properties / fxRates / properties / source / enumPrevious value: -[ - "database", - "fallback" -]New value: +[ + "database" +] - added
Output schema / properties / groupsAdded value: +{ + "description": "One group per transaction: two (sale, rent) when no transaction was given.", + "items": { + "properties": { + "nextCursor": { + "type": [ + "string", + "null" + ] + }, + "pageable": { + "type": "boolean" + }, + "shown": { + "type": "number" + }, + "total": { + "type": "number" + }, + "transaction": { + "enum": [ + "sale", + "rent" + ], + "type": "string" + }, + "transactionImplied": { + "description": "True when the transaction was implied by the filters (a rental-only fact), not sent: the cursor then carries it.", + "type": "boolean" + } + }, + "required": [ + "transaction", + "total", + "shown", + "nextCursor", + "pageable" + ], + "type": "object" + }, + "type": "array" +} - added
Output schema / properties / impliedTransactionAdded value: +{ + "description": "Present when no transaction was sent and the search was limited to one because of the filters.", + "properties": { + "because": { + "type": "string" + }, + "value": { + "enum": [ + "sale", + "rent" + ], + "type": "string" + } + }, + "required": [ + "value", + "because" + ], + "type": "object" +} - added
Output schema / properties / issuesAdded value: +{ + "items": { + "properties": { + "allowedValues": { + "items": { + "type": [ + "string", + "number" + ] + }, + "type": "array" + }, + "code": { + "type": "string" + }, + "field": { + "type": "string" + }, + "message": { + "type": "string" + }, + "suggestion": { + "type": "string" + } + }, + "required": [ + "code", + "field", + "message" + ], + "type": "object" + }, + "type": "array" +} - added
Output schema / properties / listings / items / properties / areaSuspectAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / listings / items / properties / bathroomsAdded value: +{ + "type": [ + "number", + "null" + ] +} - changed
Output schema / properties / listings / items / properties / city / typePrevious value: -"string"New value: +[ + "string", + "null" +] - added
Output schema / properties / listings / items / properties / cityLabelAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / listings / items / properties / contentLocaleAdded value: +{ + "enum": [ + "tr", + "en", + "ru", + "de", + "ar" + ], + "type": "string" +} - changed
Output schema / properties / listings / items / properties / currency / typePrevious value: -"string"New value: +[ + "string", + "null" +] - added
Output schema / properties / listings / items / properties / dataQualityAdded value: +{ + "properties": { + "areaSuspect": { + "type": "boolean" + }, + "flags": { + "items": { + "type": "string" + }, + "type": "array" + }, + "priceOutlier": { + "type": "boolean" + }, + "titleRoomMismatch": { + "type": "boolean" + } + }, + "required": [ + "flags", + "priceOutlier", + "areaSuspect", + "titleRoomMismatch" + ], + "type": "object" +} - changed
Output schema / properties / listings / items / properties / district / typePrevious value: -"string"New value: +[ + "string", + "null" +] - added
Output schema / properties / listings / items / properties / featureCountAdded value: +{ + "type": "number" +} - added
Output schema / properties / listings / items / properties / featuresAdded value: +{ + "items": { + "properties": { + "key": { + "type": "string" + }, + "label": { + "type": "string" + }, + "source": { + "enum": [ + "column", + "label" + ], + "type": "string" + } + }, + "required": [ + "key", + "label", + "source" + ], + "type": "object" + }, + "type": "array" +} - added
Output schema / properties / listings / items / properties / furnishedAdded value: +{ + "enum": [ + "yes", + "no", + "unknown" + ], + "type": "string" +} - added
Output schema / properties / listings / items / properties / isStudioAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / listings / items / properties / listedAtAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / listings / items / properties / listingRefAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / listings / items / properties / localeFallbackAdded value: +{ + "type": "boolean" +} - changed
Output schema / properties / listings / items / properties / locationPrecision / enumPrevious value: -[ - "exact", - "district", - "city" -]New value: +[ + "approximate_grid", + "district", + "city", + "unmapped", + null +] - changed
Output schema / properties / listings / items / properties / locationPrecision / typePrevious value: -"string"New value: +[ + "string", + "null" +] - added
Output schema / properties / listings / items / properties / notesAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / listings / items / properties / officeNameAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / listings / items / properties / photoCountAdded value: +{ + "type": "number" +} - added
Output schema / properties / listings / items / properties / plotM2Added value: +{ + "type": [ + "number", + "null" + ] +} - changed
Output schema / properties / listings / items / properties / priceGbp / typePrevious value: -"number"New value: +[ + "number", + "null" +] - added
Output schema / properties / listings / items / properties / pricePerSqmGbpAdded value: +{ + "type": [ + "number", + "null" + ] +} - added
Output schema / properties / listings / items / properties / propertyTypeLabelAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / listings / items / properties / rentPeriodAdded value: +{ + "enum": [ + "month", + null + ], + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / listings / items / properties / roomLabelAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / listings / items / properties / titleSourceAdded value: +{ + "enum": [ + "listing", + "generated" + ], + "type": "string" +} - added
Output schema / properties / listings / items / properties / transactionAdded value: +{ + "enum": [ + "sale", + "rent" + ], + "type": "string" +} - removed
Output schema / properties / listings / items / properties / typeRemoved value: -{ - "type": "string" -} - added
Output schema / properties / listings / items / properties / updatedAtAdded value: +{ + "type": [ + "string", + "null" + ] +} - changed
Output schema / properties / listings / items / requiredPrevious value: -[ - "id", - "title", - "city", - "district", - "price", - "priceGbp", - "currency", - "type", - "url" -]New value: +[ + "id", + "listingNumber", + "listingRef", + "transaction", + "title", + "url", + "contentLocale", + "localeFallback", + "price", + "currency", + "priceGbp", + "city", + "district", + "propertyType", + "bedrooms", + "areaSqm", + "features", + "dataQuality" +] - added
Output schema / properties / localeAdded value: +{ + "enum": [ + "tr", + "en", + "ru", + "de", + "ar" + ], + "type": "string" +} - added
Output schema / properties / localeFallbackAdded value: +{ + "description": "True when a listing link or description is in another language because it has no translation in `locale`.", + "type": "boolean" +} - added
Output schema / properties / lookupAdded value: +{ + "description": "Present for an explicit listing number (\"EVL-100464\").", + "properties": { + "found": { + "type": "boolean" + }, + "listingNumber": { + "type": "string" + } + }, + "type": "object" +} - added
Output schema / properties / messageAdded value: +{ + "description": "The reason, in the answer language, when there is nothing to list (content[0].text stays the connector JSON).", + "type": "string" +} - added
Output schema / properties / nearbyAlternatives / descriptionAdded value: +"Only when nothing matched: ONE relaxation (district dropped, else budget + 15 %), at most 5 listings." - added
Output schema / properties / nearbyAlternatives / properties / listings / items / properties / areaSuspectAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / nearbyAlternatives / properties / listings / items / properties / bathroomsAdded value: +{ + "type": [ + "number", + "null" + ] +} - changed
Output schema / properties / nearbyAlternatives / properties / listings / items / properties / city / typePrevious value: -"string"New value: +[ + "string", + "null" +] - added
Output schema / properties / nearbyAlternatives / properties / listings / items / properties / cityLabelAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / nearbyAlternatives / properties / listings / items / properties / contentLocaleAdded value: +{ + "enum": [ + "tr", + "en", + "ru", + "de", + "ar" + ], + "type": "string" +} - changed
Output schema / properties / nearbyAlternatives / properties / listings / items / properties / currency / typePrevious value: -"string"New value: +[ + "string", + "null" +] - added
Output schema / properties / nearbyAlternatives / properties / listings / items / properties / dataQualityAdded value: +{ + "properties": { + "areaSuspect": { + "type": "boolean" + }, + "flags": { + "items": { + "type": "string" + }, + "type": "array" + }, + "priceOutlier": { + "type": "boolean" + }, + "titleRoomMismatch": { + "type": "boolean" + } + }, + "required": [ + "flags", + "priceOutlier", + "areaSuspect", + "titleRoomMismatch" + ], + "type": "object" +} - changed
Output schema / properties / nearbyAlternatives / properties / listings / items / properties / district / typePrevious value: -"string"New value: +[ + "string", + "null" +] - added
Output schema / properties / nearbyAlternatives / properties / listings / items / properties / featureCountAdded value: +{ + "type": "number" +} - added
Output schema / properties / nearbyAlternatives / properties / listings / items / properties / featuresAdded value: +{ + "items": { + "properties": { + "key": { + "type": "string" + }, + "label": { + "type": "string" + }, + "source": { + "enum": [ + "column", + "label" + ], + "type": "string" + } + }, + "required": [ + "key", + "label", + "source" + ], + "type": "object" + }, + "type": "array" +} - added
Output schema / properties / nearbyAlternatives / properties / listings / items / properties / furnishedAdded value: +{ + "enum": [ + "yes", + "no", + "unknown" + ], + "type": "string" +} - added
Output schema / properties / nearbyAlternatives / properties / listings / items / properties / isStudioAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / nearbyAlternatives / properties / listings / items / properties / listedAtAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / nearbyAlternatives / properties / listings / items / properties / listingRefAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / nearbyAlternatives / properties / listings / items / properties / localeFallbackAdded value: +{ + "type": "boolean" +} - changed
Output schema / properties / nearbyAlternatives / properties / listings / items / properties / locationPrecision / enumPrevious value: -[ - "exact", - "district", - "city" -]New value: +[ + "approximate_grid", + "district", + "city", + "unmapped", + null +] - changed
Output schema / properties / nearbyAlternatives / properties / listings / items / properties / locationPrecision / typePrevious value: -"string"New value: +[ + "string", + "null" +] - added
Output schema / properties / nearbyAlternatives / properties / listings / items / properties / notesAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / nearbyAlternatives / properties / listings / items / properties / officeNameAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / nearbyAlternatives / properties / listings / items / properties / photoCountAdded value: +{ + "type": "number" +} - added
Output schema / properties / nearbyAlternatives / properties / listings / items / properties / plotM2Added value: +{ + "type": [ + "number", + "null" + ] +} - changed
Output schema / properties / nearbyAlternatives / properties / listings / items / properties / priceGbp / typePrevious value: -"number"New value: +[ + "number", + "null" +] - added
Output schema / properties / nearbyAlternatives / properties / listings / items / properties / pricePerSqmGbpAdded value: +{ + "type": [ + "number", + "null" + ] +} - added
Output schema / properties / nearbyAlternatives / properties / listings / items / properties / propertyTypeLabelAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / nearbyAlternatives / properties / listings / items / properties / rentPeriodAdded value: +{ + "enum": [ + "month", + null + ], + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / nearbyAlternatives / properties / listings / items / properties / roomLabelAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / nearbyAlternatives / properties / listings / items / properties / titleSourceAdded value: +{ + "enum": [ + "listing", + "generated" + ], + "type": "string" +} - added
Output schema / properties / nearbyAlternatives / properties / listings / items / properties / transactionAdded value: +{ + "enum": [ + "sale", + "rent" + ], + "type": "string" +} - removed
Output schema / properties / nearbyAlternatives / properties / listings / items / properties / typeRemoved value: -{ - "type": "string" -} - added
Output schema / properties / nearbyAlternatives / properties / listings / items / properties / updatedAtAdded value: +{ + "type": [ + "string", + "null" + ] +} - changed
Output schema / properties / nearbyAlternatives / properties / listings / items / requiredPrevious value: -[ - "id", - "title", - "city", - "district", - "price", - "priceGbp", - "currency", - "type", - "url" -]New value: +[ + "id", + "listingNumber", + "listingRef", + "transaction", + "title", + "url", + "contentLocale", + "localeFallback", + "price", + "currency", + "priceGbp", + "city", + "district", + "propertyType", + "bedrooms", + "areaSqm", + "features", + "dataQuality" +] - added
Output schema / properties / nearbyAlternatives / properties / priceMaxAdded value: +{ + "type": "number" +} - removed
Output schema / properties / outOfScopeRemoved value: -{ - "type": "boolean" -} - added
Output schema / properties / placesReadAsAdded value: +{ + "items": { + "properties": { + "as": { + "type": "string" + }, + "input": { + "type": "string" + }, + "match": { + "enum": [ + "alias", + "fuzzy" + ], + "type": "string" + } + }, + "type": "object" + }, + "type": "array" +} - added
Output schema / properties / queryAdded value: +{ + "description": "The query as read (cleaned, bounded).", + "type": "string" +} - added
Output schema / properties / results / items / requiredAdded value: +[ + "id", + "title", + "url" +] - added
Output schema / properties / shownAdded value: +{ + "description": "Listings in this response.", + "type": "number" +} - added
Output schema / properties / splitAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / totalAdded value: +{ + "description": "Public listings matching the filters, summed over the groups.", + "type": "number" +} - added
Output schema / properties / totalMatchedAdded value: +{ + "description": "The same number as `total` (the v2 name).", + "type": "number" +} - added
Output schema / properties / transactionAssumptionAdded value: +{ + "properties": { + "reason": { + "type": "string" + }, + "value": { + "type": [ + "string", + "null" + ] + } + }, + "type": "object" +} - added
Output schema / properties / unappliedFiltersAdded value: +{ + "description": "Constraints that were NOT applied (an amenity that cannot be filtered on, text the parser could not read). The listings shown may not honour them.", + "items": { + "properties": { + "field": { + "type": "string" + }, + "input": { + "type": "string" + }, + "reason": { + "type": "string" + } + }, + "required": [ + "field", + "input", + "reason" + ], + "type": "object" + }, + "type": "array" +} - added
Output schema / properties / unresolved / descriptionAdded value: +"Words that did NOT become a filter, with the reason." - added
Output schema / properties / unresolved / items / propertiesAdded value: +{ + "reason": { + "type": "string" + }, + "text": { + "type": "string" + } +} - added
Output schema / properties / unresolved / items / requiredAdded value: +[ + "text", + "reason" +] - changed
Output schema / properties / unresolved / items / typePrevious value: -"string"New value: +"object" - added
Output schema / properties / warningsAdded value: +{ + "items": { + "properties": { + "code": { + "type": "string" + }, + "field": { + "type": "string" + }, + "message": { + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + "type": "array" +}
- Changed
search_listings143 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / descriptionAdded value: +"Structured search over active Evlek property listings in Northern Cyprus (sale and long-term rent; holiday lets are not offered). Every field is optional; a listing must match ALL the fields you set. `transaction` is required when you filter or sort by price or page with `cursor`. At most 10 listings are returned per call; continue with `cursor`. Sort orders: newest = latest first (default), price-low = cheapest first, price-high = most expensive first, price-per-sqm-asc = lowest price per m², area-large / area-small = largest / smallest closed area, nearest-uni = closest to a university. Pass `locale` in the language the user writes in." - added
Input schema / properties / areaMaxAdded value: +{ + "description": "Maximum closed (built, indoor) area in m², inclusive.", + "maximum": 10000000, + "minimum": 0, + "type": "number" +} - added
Input schema / properties / areaMinAdded value: +{ + "description": "Minimum CLOSED (built, indoor) area in m², inclusive. For plots and gardens use landAreaMin instead.", + "maximum": 10000000, + "minimum": 0, + "type": "number" +} - added
Input schema / properties / availableNowAdded value: +{ + "description": "Rentals only: true = can be moved into immediately. Without `transaction` the search is limited to rent.", + "type": "boolean" +} - added
Input schema / properties / bathroomsMinAdded value: +{ + "description": "Minimum number of bathrooms, inclusive (1-20).", + "maximum": 20, + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / bboxAdded value: +{ + "additionalProperties": false, + "description": "Map rectangle in Northern Cyprus, WGS84 degrees: {west, south, east, north}. For \"this map area\" only; otherwise use city and district.", + "properties": { + "east": { + "description": "Right edge, longitude in decimal degrees. Must be larger than west.", + "maximum": 34.65, + "minimum": 32.7, + "type": "number" + }, + "north": { + "description": "Top edge, latitude in decimal degrees. Must be larger than south.", + "maximum": 35.78, + "minimum": 34.95, + "type": "number" + }, + "south": { + "description": "Bottom edge, latitude in decimal degrees (34.95 to 35.78). Must be smaller than north.", + "maximum": 35.78, + "minimum": 34.95, + "type": "number" + }, + "west": { + "description": "Left edge, longitude in decimal degrees (32.7 to 34.65). Must be smaller than east.", + "maximum": 34.65, + "minimum": 32.7, + "type": "number" + } + }, + "required": [ + "west", + "south", + "east", + "north" + ], + "type": "object" +} - added
Input schema / properties / bedrooms / additionalPropertiesAdded value: +false - changed
Input schema / properties / bedrooms / descriptionPrevious value: -"Bedroom count (integer 0-10)"New value: +"Bedrooms as an object: {\"exact\": 3}, {\"min\": 2} or {\"min\": 2, \"max\": 4}; integers 0-20. Use exact for \"a 3-bedroom\"." - removed
Input schema / properties / bedrooms / maximumRemoved value: -10 - removed
Input schema / properties / bedrooms / minimumRemoved value: -0 - added
Input schema / properties / bedrooms / propertiesAdded value: +{ + "exact": { + "description": "Exact number of bedrooms; 0 means a studio. Cannot be combined with min or max.", + "maximum": 20, + "minimum": 0, + "type": "integer" + }, + "max": { + "description": "Maximum number of bedrooms, inclusive.", + "maximum": 20, + "minimum": 0, + "type": "integer" + }, + "min": { + "description": "Minimum number of bedrooms, inclusive.", + "maximum": 20, + "minimum": 0, + "type": "integer" + } +} - changed
Input schema / properties / bedrooms / typePrevious value: -"number"New value: +"object" - added
Input schema / properties / billsIncludedAdded value: +{ + "description": "Rentals only: true = the rent includes utility bills. Without `transaction` the search is limited to rent.", + "type": "boolean" +} - changed
Input schema / properties / city / descriptionPrevious value: -"Slug, Turkish name, or exonym (Kyrenia/Nicosia/Famagusta/Morphou)."New value: +"City names in any language, e.g. [\"Girne\"] or [\"Kyrenia\", \"Famagusta\"]; ANY match counts. Towns and villages go in `district`." - added
Input schema / properties / city / itemsAdded value: +{ + "maxLength": 60, + "minLength": 1, + "type": "string" +} - added
Input schema / properties / city / maxItemsAdded value: +10 - changed
Input schema / properties / city / typePrevious value: -"string"New value: +"array" - added
Input schema / properties / contractTypeAdded value: +{ + "description": "Contract type. Rentals: 'monthly', 'semester' or 'yearly'. Sales: 'cash' or 'installment'. Must fit `transaction`.", + "enum": [ + "monthly", + "semester", + "yearly", + "cash", + "installment" + ], + "type": "string" +} - added
Input schema / properties / currencyAdded value: +{ + "default": "GBP", + "description": "Currency of priceMin and priceMax: GBP (default), EUR, USD or TRY. Converted to GBP on the server at the current Evlek rate.", + "enum": [ + "GBP", + "EUR", + "USD", + "TRY" + ], + "type": "string" +} - added
Input schema / properties / cursorAdded value: +{ + "description": "Pass the previous `nextCursor` with the SAME filters, sort and transaction. Opaque: never build or edit it. Requires `transaction`.", + "maxLength": 1024, + "minLength": 16, + "pattern": "^[A-Za-z0-9_-]+$", + "type": "string" +} - changed
Input schema / properties / district / descriptionPrevious value: -"District name (e.g. Alsancak), matched accent/case-insensitively against the active-listing district list"New value: +"Districts, towns or villages in any language, e.g. [\"Alsancak\"]; ANY match counts. With city [\"Girne\"], [\"Merkez\"] means Girne Merkez." - added
Input schema / properties / district / itemsAdded value: +{ + "maxLength": 60, + "minLength": 1, + "type": "string" +} - added
Input schema / properties / district / maxItemsAdded value: +20 - changed
Input schema / properties / district / typePrevious value: -"string"New value: +"array" - removed
Input schema / properties / elevatorRemoved value: -{ - "description": "Only listings with an elevator", - "type": "boolean" -} - added
Input schema / properties / featuresAdded value: +{ + "description": "Amenities the listing must have (ALL must match), any language, e.g. [\"pool\", \"sea view\", \"elevator\"]. Others are reported as not filterable.", + "items": { + "description": "An amenity name in any language. Only these can be filtered: Furnished, Fridge, Washing Machine, Dishwasher, Air Conditioning, Television, Bed, Desk, Wi-Fi, Smart Home, Central Heating, Garden, Terrace, Parking, Pool, Elevator, Security/CCTV, Generator, Sea View, Bills Included, Available Now. Any other amenity is reported as not filterable.", + "maxLength": 60, + "minLength": 1, + "type": "string" + }, + "maxItems": 20, + "type": "array" +} - changed
Input schema / properties / furnished / descriptionPrevious value: -"Only furnished listings"New value: +"true = furnished listings only, false = unfurnished only. Omit for both." - removed
Input schema / properties / gardenRemoved value: -{ - "description": "Only listings with a garden", - "type": "boolean" -} - added
Input schema / properties / landAreaMaxAdded value: +{ + "description": "Maximum plot (land) area in m², inclusive.", + "maximum": 10000000, + "minimum": 0, + "type": "number" +} - added
Input schema / properties / landAreaMinAdded value: +{ + "description": "Minimum plot (land) area in m², inclusive: villas, houses, bungalows and land.", + "maximum": 10000000, + "minimum": 0, + "type": "number" +} - added
Input schema / properties / limit / defaultAdded value: +10 - changed
Input schema / properties / limit / descriptionPrevious value: -"Result count (integer 1-10, default 5)"New value: +"Number of listings to return, 1-10 (default 10, maximum 10). Ask for more with `cursor`, never with a larger limit." - changed
Input schema / properties / limit / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / localeAdded value: +{ + "default": "en", + "description": "Language of the response text, feature names, number formats and links: tr, en, ru, de, ar (default en). Pass the language the user is writing in.", + "enum": [ + "tr", + "en", + "ru", + "de", + "ar" + ], + "type": "string" +} - removed
Input schema / properties / maxPriceRemoved value: -{ - "description": "Max price in GBP", - "type": "number" -} - removed
Input schema / properties / minPriceRemoved value: -{ - "description": "Min price in GBP", - "type": "number" -} - added
Input schema / properties / nearUniversityAdded value: +{ + "additionalProperties": false, + "description": "Listings close to one university, e.g. {\"code\": \"NEU\", \"maxMeters\": 1000}. Useful for student housing.", + "properties": { + "code": { + "description": "University code: NEU = Near East University, DAU = Eastern Mediterranean University, GAU = Girne American University, CIU = Cyprus International University, EUL = European University of Lefke, BAU = BAU Cyprus University, AKU = University of Mediterranean Karpasia.", + "enum": [ + "NEU", + "DAU", + "GAU", + "CIU", + "EUL", + "BAU", + "AKU" + ], + "type": "string" + }, + "maxMeters": { + "default": 2000, + "description": "Maximum distance to that university in metres, at least 250 (default 2000; the site offers 500, 1000 and 2000). Listing distances are rounded up to 250 m steps.", + "maximum": 50000, + "minimum": 250, + "type": "integer" + } + }, + "required": [ + "code" + ], + "type": "object" +} - added
Input schema / properties / noDepositAdded value: +{ + "description": "Rentals only: true = no security deposit is required.", + "type": "boolean" +} - removed
Input schema / properties / offsetRemoved value: -{ - "description": "Rows to skip (pagination, default 0)", - "minimum": 0, - "type": "number" -} - removed
Input schema / properties / parkingRemoved value: -{ - "description": "Only listings with parking", - "type": "boolean" -} - removed
Input schema / properties / poolRemoved value: -{ - "description": "Only listings with a pool", - "type": "boolean" -} - added
Input schema / properties / priceMaxAdded value: +{ + "description": "Maximum price, inclusive, in `currency` (\"under 300000\" → 300000): the asking price for sale, the monthly rent for rent. Requires `transaction`.", + "maximum": 1000000000000, + "minimum": 0, + "type": "number" +} - added
Input schema / properties / priceMinAdded value: +{ + "description": "Minimum price, inclusive, in `currency`: the asking price for sale, the monthly rent for rent. Requires `transaction`.", + "maximum": 1000000000000, + "minimum": 0, + "type": "number" +} - changed
Input schema / properties / propertyType / descriptionPrevious value: -"Raw property type (apartment, villa, …) or K75 group slug: house (villa+detached+bungalow), land, commercial"New value: +"Property types, ANY match: single types or groups (house, land, commercial), e.g. [\"apartment\", \"penthouse\"] or [\"house\"]." - removed
Input schema / properties / propertyType / enumRemoved value: -[ - "apartment", - "residence", - "villa", - "twin", - "detached", - "bungalow", - "penthouse", - "studio", - "duplex", - "shop", - "office", - "warehouse", - "whole_building", - "hotel", - "residential_land", - "commercial_land", - "farmland", - "house", - "land", - "commercial" -] - added
Input schema / properties / propertyType / itemsAdded value: +{ + "description": "A property type, or a group: house = villa, detached, bungalow; land = residential_land, commercial_land, farmland; commercial = shop, office, warehouse, whole_building, hotel.", + "enum": [ + "apartment", + "residence", + "villa", + "twin", + "detached", + "bungalow", + "penthouse", + "studio", + "duplex", + "shop", + "office", + "warehouse", + "whole_building", + "hotel", + "residential_land", + "commercial_land", + "farmland", + "house", + "land", + "commercial" + ], + "type": "string" +} - added
Input schema / properties / propertyType / maxItemsAdded value: +12 - changed
Input schema / properties / propertyType / typePrevious value: -"string"New value: +"array" - removed
Input schema / properties / queryRemoved value: -{ - "description": "Optional free-text query (parsed like the `search` tool); merges with explicit filters below — an explicit filter wins on conflict", - "type": "string" -} - removed
Input schema / properties / seaViewRemoved value: -{ - "description": "Only listings flagged sea_view", - "type": "boolean" -} - added
Input schema / properties / sortAdded value: +{ + "default": "newest", + "description": "Order, default 'newest'. price-low = cheapest first, price-high = dearest first (both need transaction); others: see schema description.", + "enum": [ + "newest", + "price-low", + "price-high", + "price-per-sqm-asc", + "area-large", + "area-small", + "nearest-uni" + ], + "type": "string" +} - removed
Input schema / properties / sortByRemoved value: -{ - "description": "Sort order (default: newest)", - "enum": [ - "newest", - "price_asc", - "price_desc", - "area_desc", - "price_per_sqm_asc" - ], - "type": "string" -} - added
Input schema / properties / transactionAdded value: +{ + "description": "'sale' or 'rent' (long-term). REQUIRED with priceMin, priceMax, a price sort or cursor. Omit only to browse both together.", + "enum": [ + "sale", + "rent" + ], + "type": "string" +} - removed
Input schema / properties / typeRemoved value: -{ - "description": "Listing type", - "enum": [ - "sale", - "rent" - ], - "type": "string" -} - added
Output schema / properties / appliedFilters / descriptionAdded value: +"What the database was really asked, in the query parameter names (place names as resolved). Only the filters that were applied are present." - added
Output schema / properties / appliedFilters / properties / areaMaxAdded value: +{ + "type": "number" +} - added
Output schema / properties / appliedFilters / properties / areaMinAdded value: +{ + "type": "number" +} - added
Output schema / properties / appliedFilters / properties / availableNowAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / appliedFilters / properties / bathroomsMinAdded value: +{ + "type": "number" +} - added
Output schema / properties / appliedFilters / properties / bboxAdded value: +{ + "properties": { + "east": { + "type": "number" + }, + "north": { + "type": "number" + }, + "south": { + "type": "number" + }, + "west": { + "type": "number" + } + }, + "type": "object" +} - added
Output schema / properties / appliedFilters / properties / bedrooms / propertiesAdded value: +{ + "exact": { + "type": "number" + }, + "max": { + "type": "number" + }, + "min": { + "type": "number" + } +} - changed
Output schema / properties / appliedFilters / properties / bedrooms / typePrevious value: -"number"New value: +"object" - added
Output schema / properties / appliedFilters / properties / billsIncludedAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / appliedFilters / properties / city / itemsAdded value: +{ + "type": "string" +} - changed
Output schema / properties / appliedFilters / properties / city / typePrevious value: -"string"New value: +"array" - added
Output schema / properties / appliedFilters / properties / contractTypeAdded value: +{ + "type": "string" +} - added
Output schema / properties / appliedFilters / properties / currencyAdded value: +{ + "enum": [ + "GBP", + "EUR", + "USD", + "TRY" + ], + "type": "string" +} - added
Output schema / properties / appliedFilters / properties / district / itemsAdded value: +{ + "type": "string" +} - changed
Output schema / properties / appliedFilters / properties / district / typePrevious value: -"string"New value: +"array" - removed
Output schema / properties / appliedFilters / properties / elevatorRemoved value: -{ - "type": "boolean" -} - added
Output schema / properties / appliedFilters / properties / featuresAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - removed
Output schema / properties / appliedFilters / properties / gardenRemoved value: -{ - "type": "boolean" -} - added
Output schema / properties / appliedFilters / properties / landAreaMaxAdded value: +{ + "type": "number" +} - added
Output schema / properties / appliedFilters / properties / landAreaMinAdded value: +{ + "type": "number" +} - removed
Output schema / properties / appliedFilters / properties / maxPriceRemoved value: -{ - "type": "number" -} - removed
Output schema / properties / appliedFilters / properties / minPriceRemoved value: -{ - "type": "number" -} - added
Output schema / properties / appliedFilters / properties / nearUniversityAdded value: +{ + "properties": { + "code": { + "type": "string" + }, + "maxMeters": { + "type": "number" + } + }, + "type": "object" +} - added
Output schema / properties / appliedFilters / properties / noDepositAdded value: +{ + "type": "boolean" +} - removed
Output schema / properties / appliedFilters / properties / parkingRemoved value: -{ - "type": "boolean" -} - removed
Output schema / properties / appliedFilters / properties / poolRemoved value: -{ - "type": "boolean" -} - added
Output schema / properties / appliedFilters / properties / priceMaxAdded value: +{ + "type": "number" +} - added
Output schema / properties / appliedFilters / properties / priceMinAdded value: +{ + "type": "number" +} - added
Output schema / properties / appliedFilters / properties / propertyType / itemsAdded value: +{ + "type": "string" +} - changed
Output schema / properties / appliedFilters / properties / propertyType / typePrevious value: -"string"New value: +"array" - removed
Output schema / properties / appliedFilters / properties / seaViewRemoved value: -{ - "type": "boolean" -} - added
Output schema / properties / appliedFilters / properties / sortAdded value: +{ + "type": "string" +} - added
Output schema / properties / appliedFilters / properties / transactionAdded value: +{ + "enum": [ + "sale", + "rent" + ], + "type": "string" +} - removed
Output schema / properties / appliedFilters / properties / typeRemoved value: -{ - "type": "string" -} - added
Output schema / properties / codeAdded value: +{ + "description": "Present on a soft result (INVALID_LOCATION, OUT_OF_SCOPE, FX_UNAVAILABLE, ...).", + "type": "string" +} - added
Output schema / properties / contentLocaleAdded value: +{ + "description": "The language the listing pages (links, descriptions) resolved to: `locale` when every shown listing has a page in it, the fallback (Turkish) when none does, null when they differ (each card has its own).", + "enum": [ + "tr", + "en", + "ru", + "de", + "ar", + null + ], + "type": [ + "string", + "null" + ] +} - removed
Output schema / properties / countRemoved value: -{ - "type": "number" -} - removed
Output schema / properties / factTypeRemoved value: -{ - "type": "string" -} - added
Output schema / properties / fxRates / properties / isFallback / enumAdded value: +[ + false +] - changed
Output schema / properties / fxRates / properties / source / enumPrevious value: -[ - "database", - "fallback" -]New value: +[ + "database" +] - added
Output schema / properties / groupsAdded value: +{ + "description": "One group per transaction: two (sale, rent) when no transaction was given.", + "items": { + "properties": { + "nextCursor": { + "type": [ + "string", + "null" + ] + }, + "pageable": { + "type": "boolean" + }, + "shown": { + "type": "number" + }, + "total": { + "type": "number" + }, + "transaction": { + "enum": [ + "sale", + "rent" + ], + "type": "string" + }, + "transactionImplied": { + "description": "True when the transaction was implied by the filters (a rental-only fact), not sent: the cursor then carries it.", + "type": "boolean" + } + }, + "required": [ + "transaction", + "total", + "shown", + "nextCursor", + "pageable" + ], + "type": "object" + }, + "type": "array" +} - added
Output schema / properties / impliedTransactionAdded value: +{ + "description": "Present when no transaction was sent and the search was limited to one because of the filters.", + "properties": { + "because": { + "type": "string" + }, + "value": { + "enum": [ + "sale", + "rent" + ], + "type": "string" + } + }, + "required": [ + "value", + "because" + ], + "type": "object" +} - removed
Output schema / properties / isEstimateRemoved value: -{ - "type": "boolean" -} - added
Output schema / properties / issuesAdded value: +{ + "items": { + "properties": { + "allowedValues": { + "items": { + "type": [ + "string", + "number" + ] + }, + "type": "array" + }, + "code": { + "type": "string" + }, + "field": { + "type": "string" + }, + "message": { + "type": "string" + }, + "suggestion": { + "type": "string" + } + }, + "required": [ + "code", + "field", + "message" + ], + "type": "object" + }, + "type": "array" +} - added
Output schema / properties / listings / items / properties / areaSuspectAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / listings / items / properties / bathroomsAdded value: +{ + "type": [ + "number", + "null" + ] +} - changed
Output schema / properties / listings / items / properties / city / typePrevious value: -"string"New value: +[ + "string", + "null" +] - added
Output schema / properties / listings / items / properties / cityLabelAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / listings / items / properties / contentLocaleAdded value: +{ + "enum": [ + "tr", + "en", + "ru", + "de", + "ar" + ], + "type": "string" +} - changed
Output schema / properties / listings / items / properties / currency / typePrevious value: -"string"New value: +[ + "string", + "null" +] - added
Output schema / properties / listings / items / properties / dataQualityAdded value: +{ + "properties": { + "areaSuspect": { + "type": "boolean" + }, + "flags": { + "items": { + "type": "string" + }, + "type": "array" + }, + "priceOutlier": { + "type": "boolean" + }, + "titleRoomMismatch": { + "type": "boolean" + } + }, + "required": [ + "flags", + "priceOutlier", + "areaSuspect", + "titleRoomMismatch" + ], + "type": "object" +} - changed
Output schema / properties / listings / items / properties / district / typePrevious value: -"string"New value: +[ + "string", + "null" +] - added
Output schema / properties / listings / items / properties / featureCountAdded value: +{ + "type": "number" +} - added
Output schema / properties / listings / items / properties / featuresAdded value: +{ + "items": { + "properties": { + "key": { + "type": "string" + }, + "label": { + "type": "string" + }, + "source": { + "enum": [ + "column", + "label" + ], + "type": "string" + } + }, + "required": [ + "key", + "label", + "source" + ], + "type": "object" + }, + "type": "array" +} - added
Output schema / properties / listings / items / properties / furnishedAdded value: +{ + "enum": [ + "yes", + "no", + "unknown" + ], + "type": "string" +} - added
Output schema / properties / listings / items / properties / isStudioAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / listings / items / properties / listedAtAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / listings / items / properties / listingRefAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / listings / items / properties / localeFallbackAdded value: +{ + "type": "boolean" +} - changed
Output schema / properties / listings / items / properties / locationPrecision / enumPrevious value: -[ - "exact", - "district", - "city" -]New value: +[ + "approximate_grid", + "district", + "city", + "unmapped", + null +] - changed
Output schema / properties / listings / items / properties / locationPrecision / typePrevious value: -"string"New value: +[ + "string", + "null" +] - added
Output schema / properties / listings / items / properties / notesAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / listings / items / properties / officeNameAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / listings / items / properties / photoCountAdded value: +{ + "type": "number" +} - added
Output schema / properties / listings / items / properties / plotM2Added value: +{ + "type": [ + "number", + "null" + ] +} - changed
Output schema / properties / listings / items / properties / priceGbp / typePrevious value: -"number"New value: +[ + "number", + "null" +] - added
Output schema / properties / listings / items / properties / pricePerSqmGbpAdded value: +{ + "type": [ + "number", + "null" + ] +} - added
Output schema / properties / listings / items / properties / propertyTypeLabelAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / listings / items / properties / rentPeriodAdded value: +{ + "enum": [ + "month", + null + ], + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / listings / items / properties / roomLabelAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / listings / items / properties / titleSourceAdded value: +{ + "enum": [ + "listing", + "generated" + ], + "type": "string" +} - added
Output schema / properties / listings / items / properties / transactionAdded value: +{ + "enum": [ + "sale", + "rent" + ], + "type": "string" +} - removed
Output schema / properties / listings / items / properties / typeRemoved value: -{ - "type": "string" -} - added
Output schema / properties / listings / items / properties / updatedAtAdded value: +{ + "type": [ + "string", + "null" + ] +} - changed
Output schema / properties / listings / items / requiredPrevious value: -[ - "id", - "title", - "city", - "district", - "price", - "priceGbp", - "currency", - "type", - "url" -]New value: +[ + "id", + "listingNumber", + "listingRef", + "transaction", + "title", + "url", + "contentLocale", + "localeFallback", + "price", + "currency", + "priceGbp", + "city", + "district", + "propertyType", + "bedrooms", + "areaSqm", + "features", + "dataQuality" +] - added
Output schema / properties / localeAdded value: +{ + "enum": [ + "tr", + "en", + "ru", + "de", + "ar" + ], + "type": "string" +} - added
Output schema / properties / localeFallbackAdded value: +{ + "description": "True when a listing link or description is in another language because it has no translation in `locale`.", + "type": "boolean" +} - removed
Output schema / properties / notesRemoved value: -{ - "items": { - "type": "string" - }, - "type": "array" -} - removed
Output schema / properties / offsetRemoved value: -{ - "type": "number" -} - removed
Output schema / properties / rankingRemoved value: -{ - "properties": { - "of": { - "type": "number" - }, - "pooled": { - "type": "number" - }, - "scope": { - "enum": [ - "complete", - "partial" - ], - "type": "string" - } - }, - "required": [ - "scope", - "pooled", - "of" - ], - "type": [ - "object", - "null" - ] -} - added
Output schema / properties / shownAdded value: +{ + "description": "Listings in this response.", + "type": "number" +} - removed
Output schema / properties / sortAppliedRemoved value: -{ - "enum": [ - "newest", - "price_asc", - "price_desc", - "area_desc", - "price_per_sqm_asc" - ], - "type": "string" -} - added
Output schema / properties / splitAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / totalAdded value: +{ + "description": "Public listings matching the filters, summed over the groups.", + "type": "number" +} - added
Output schema / properties / totalMatched / descriptionAdded value: +"The same number as `total` (the v2 name)." - added
Output schema / properties / unappliedFiltersAdded value: +{ + "description": "Constraints that were NOT applied (an amenity that cannot be filtered on, text the parser could not read). The listings shown may not honour them.", + "items": { + "properties": { + "field": { + "type": "string" + }, + "input": { + "type": "string" + }, + "reason": { + "type": "string" + } + }, + "required": [ + "field", + "input", + "reason" + ], + "type": "object" + }, + "type": "array" +} - added
Output schema / properties / warningsAdded value: +{ + "items": { + "properties": { + "code": { + "type": "string" + }, + "field": { + "type": "string" + }, + "message": { + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + "type": "array" +} - changed
Output schema / requiredPrevious value: -[ - "count", - "totalMatched", - "offset", - "sortApplied", - "listings", - "appliedFilters" -]New value: +[ + "listings", + "total" +]
2 tool updates
- Changed
get_price_index1 field changed- added
Output schema / properties / dataSource / enumAdded value: +[ + "live_active_listings", + "daily_snapshot" +]
- Changed
search_listings2 fields changed- added
Input schema / properties / queryAdded value: +{ + "description": "Optional free-text query (parsed like the `search` tool); merges with explicit filters below — an explicit filter wins on conflict", + "type": "string" +} - added
Output schema / properties / notesAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +}
1 tool update
- Changed
get_price_index12 fields changed- added
Output schema / properties / cities / items / properties / districts / items / properties / nDuplicatesAdded value: +{ + "type": "number" +} - added
Output schema / properties / cities / items / properties / districts / items / properties / nIqrExcludedAdded value: +{ + "type": "number" +} - added
Output schema / properties / cities / items / properties / districts / items / properties / nRawAdded value: +{ + "type": "number" +} - added
Output schema / properties / cities / items / properties / districts / items / properties / nUniqueAdded value: +{ + "type": "number" +} - added
Output schema / properties / cities / items / properties / nDuplicatesAdded value: +{ + "type": "number" +} - added
Output schema / properties / cities / items / properties / nIqrExcludedAdded value: +{ + "type": "number" +} - added
Output schema / properties / cities / items / properties / nRawAdded value: +{ + "type": "number" +} - added
Output schema / properties / cities / items / properties / nUniqueAdded value: +{ + "type": "number" +} - added
Output schema / properties / excludedDuplicatesAdded value: +{ + "type": [ + "number", + "null" + ] +} - added
Output schema / properties / excludedNotEligibleAdded value: +{ + "type": [ + "number", + "null" + ] +} - added
Output schema / properties / excludedOutliersAdded value: +{ + "type": [ + "number", + "null" + ] +} - added
Output schema / properties / indexEligibleListingsAdded value: +{ + "type": [ + "number", + "null" + ] +}
12 tool updates
- Changed
compare_cities4 fields changed- added
Input schema / properties / cities / items / descriptionAdded value: +"Slug, Turkish name, or exonym (Kyrenia/Nicosia/Famagusta/Morphou)." - removed
Input schema / properties / cities / items / enumRemoved value: -[ - "girne", - "iskele", - "lefkosa", - "gazimagusa", - "guzelyurt", - "lefke" -] - added
Output schema / properties / cities / items / properties / provenance / propertiesAdded value: +{ + "agencies": { + "type": [ + "number", + "null" + ] + }, + "maxAgencyShare": { + "type": [ + "number", + "null" + ] + }, + "publishers": { + "type": [ + "number", + "null" + ] + }, + "singleSource": { + "type": "boolean" + } +} - added
Output schema / properties / cities / items / properties / provenance / requiredAdded value: +[ + "publishers", + "agencies", + "maxAgencyShare", + "singleSource" +]
- Changed
compare_properties3 fields changed- added
Input schema / properties / listingIdsAdded value: +{ + "description": "Evlek listing UUIDs or listing numbers (2-4)", + "items": { + "description": "Evlek listing UUID or listing number (e.g. \"EVL-123456\", \"123456\")", + "type": "string" + }, + "type": "array" +} - removed
Input schema / properties / listing_idsRemoved value: -{ - "description": "Evlek listing UUIDs (2-4)", - "items": { - "description": "Evlek listing UUID", - "type": "string" - }, - "type": "array" -} - changed
Input schema / requiredPrevious value: -[ - "listing_ids" -]New value: +[ + "listingIds" +]
- Changed
convert_currency4 fields changed- added
Output schema / properties / amounts / propertiesAdded value: +{ + "EUR": { + "type": "number" + }, + "GBP": { + "type": "number" + }, + "TRY": { + "type": "number" + }, + "USD": { + "type": "number" + } +} - added
Output schema / properties / amounts / requiredAdded value: +[ + "GBP", + "EUR", + "USD", + "TRY" +] - added
Output schema / properties / fx / propertiesAdded value: +{ + "asOf": { + "type": "string" + }, + "base": { + "enum": [ + "GBP" + ], + "type": "string" + }, + "rates": { + "properties": { + "EUR": { + "type": "number" + }, + "GBP": { + "type": "number" + }, + "TRY": { + "type": "number" + }, + "USD": { + "type": "number" + } + }, + "required": [ + "GBP", + "EUR", + "USD", + "TRY" + ], + "type": "object" + }, + "source": { + "enum": [ + "stored_current_rates" + ], + "type": "string" + } +} - added
Output schema / properties / fx / requiredAdded value: +[ + "base", + "source", + "asOf", + "rates" +]
- Changed
fetch2 fields changed- added
Output schema / properties / metadata / propertiesAdded value: +{ + "areaSqm": { + "type": [ + "number", + "null" + ] + }, + "bedrooms": { + "type": [ + "number", + "null" + ] + }, + "city": { + "type": [ + "string", + "null" + ] + }, + "currency": { + "type": [ + "string", + "null" + ] + }, + "district": { + "type": [ + "string", + "null" + ] + }, + "listedAt": { + "type": [ + "string", + "null" + ] + }, + "locationPrecision": { + "type": [ + "string", + "null" + ] + }, + "monthlyRentGbp": { + "type": [ + "number", + "null" + ] + }, + "priceGBP": { + "type": [ + "number", + "null" + ] + }, + "pricePerSqmGBP": { + "type": [ + "number", + "null" + ] + }, + "type": { + "type": [ + "string", + "null" + ] + } +} - added
Output schema / properties / metadata / requiredAdded value: +[ + "city", + "district", + "type", + "bedrooms", + "areaSqm", + "priceGBP", + "pricePerSqmGBP", + "monthlyRentGbp", + "currency", + "listedAt", + "locationPrecision" +]
- Changed
get_district_profile14 fields changed- added
Input schema / properties / city / descriptionAdded value: +"City containing the district. Slug, Turkish name, or exonym (Kyrenia/Nicosia/Famagusta/Morphou)." - removed
Input schema / properties / city / enumRemoved value: -[ - "girne", - "iskele", - "lefkosa", - "gazimagusa", - "guzelyurt", - "lefke" -] - changed
Input schema / properties / district / descriptionPrevious value: -"District name (2-60 chars)"New value: +"District name (2-60 chars), matched accent/case-insensitively against the active-listing district list" - added
Output schema / properties / askingRentToAskingPricePctAdded value: +{ + "type": [ + "number", + "null" + ] +} - removed
Output schema / properties / indicativeGrossRentToPricePctRemoved value: -{ - "type": [ - "number", - "null" - ] -} - added
Output schema / properties / isObservedIncomeAdded value: +{ + "type": "boolean" +} - removed
Output schema / properties / isObservedYieldRemoved value: -{ - "type": "boolean" -} - added
Output schema / properties / ratioMetricTypeAdded value: +{ + "type": "string" +} - added
Output schema / properties / rent / properties / provenance / propertiesAdded value: +{ + "agencies": { + "type": [ + "number", + "null" + ] + }, + "maxAgencyShare": { + "type": [ + "number", + "null" + ] + }, + "publishers": { + "type": [ + "number", + "null" + ] + }, + "singleSource": { + "type": "boolean" + } +} - added
Output schema / properties / rent / properties / provenance / requiredAdded value: +[ + "publishers", + "agencies", + "maxAgencyShare", + "singleSource" +] - added
Output schema / properties / sale / properties / provenance / propertiesAdded value: +{ + "agencies": { + "type": [ + "number", + "null" + ] + }, + "maxAgencyShare": { + "type": [ + "number", + "null" + ] + }, + "publishers": { + "type": [ + "number", + "null" + ] + }, + "singleSource": { + "type": "boolean" + } +} - added
Output schema / properties / sale / properties / provenance / requiredAdded value: +[ + "publishers", + "agencies", + "maxAgencyShare", + "singleSource" +] - added
Output schema / properties / truncatedAdded value: +{ + "type": "boolean" +} - removed
Output schema / properties / yieldMetricTypeRemoved value: -{ - "type": "string" -}
- Changed
get_listing_by_number5 fields changed- added
Input schema / properties / listingNumberAdded value: +{ + "description": "Evlek listing number, e.g. \"EVL-123456\", \"123456\", or the bare number 123456.", + "type": [ + "string", + "number" + ] +} - removed
Input schema / properties / listing_numberRemoved value: -{ - "description": "Evlek listing number, e.g. \"EVL-123456\", \"123456\", or the bare number 123456.", - "type": [ - "string", - "number" - ] -} - changed
Input schema / requiredPrevious value: -[ - "listing_number" -]New value: +[ + "listingNumber" +] - added
Output schema / properties / fxRates / propertiesAdded value: +{ + "base": { + "enum": [ + "GBP" + ], + "type": "string" + }, + "isFallback": { + "type": "boolean" + }, + "rates": { + "properties": { + "EUR": { + "type": "number" + }, + "TRY": { + "type": "number" + }, + "USD": { + "type": "number" + } + }, + "required": [ + "EUR", + "USD", + "TRY" + ], + "type": "object" + }, + "source": { + "enum": [ + "database", + "fallback" + ], + "type": "string" + }, + "updatedAt": { + "type": [ + "string", + "null" + ] + } +} - added
Output schema / properties / fxRates / requiredAdded value: +[ + "base", + "rates", + "source", + "updatedAt", + "isFallback" +]
- Changed
get_listing_detail5 fields changed- added
Input schema / properties / propertyIdAdded value: +{ + "description": "Evlek listing UUID or listing number (e.g. \"EVL-123456\", \"123456\")", + "type": "string" +} - removed
Input schema / properties / property_idRemoved value: -{ - "description": "Evlek listing UUID", - "type": "string" -} - changed
Input schema / requiredPrevious value: -[ - "property_id" -]New value: +[ + "propertyId" +] - added
Output schema / properties / fxRates / propertiesAdded value: +{ + "base": { + "enum": [ + "GBP" + ], + "type": "string" + }, + "isFallback": { + "type": "boolean" + }, + "rates": { + "properties": { + "EUR": { + "type": "number" + }, + "TRY": { + "type": "number" + }, + "USD": { + "type": "number" + } + }, + "required": [ + "EUR", + "USD", + "TRY" + ], + "type": "object" + }, + "source": { + "enum": [ + "database", + "fallback" + ], + "type": "string" + }, + "updatedAt": { + "type": [ + "string", + "null" + ] + } +} - added
Output schema / properties / fxRates / requiredAdded value: +[ + "base", + "rates", + "source", + "updatedAt", + "isFallback" +]
- Changed
get_price_index6 fields changed- added
Input schema / properties / city / descriptionAdded value: +"Filter to a single city (omit for all cities). Slug, Turkish name, or exonym (Kyrenia/Nicosia/Famagusta/Morphou)." - removed
Input schema / properties / city / enumRemoved value: -[ - "girne", - "iskele", - "lefkosa", - "gazimagusa", - "guzelyurt", - "lefke" -] - added
Output schema / properties / cities / items / properties / districts / items / properties / provenance / propertiesAdded value: +{ + "agencies": { + "type": [ + "number", + "null" + ] + }, + "maxAgencyShare": { + "type": [ + "number", + "null" + ] + }, + "publishers": { + "type": [ + "number", + "null" + ] + }, + "singleSource": { + "type": "boolean" + } +} - added
Output schema / properties / cities / items / properties / districts / items / properties / provenance / requiredAdded value: +[ + "publishers", + "agencies", + "maxAgencyShare", + "singleSource" +] - added
Output schema / properties / cities / items / properties / provenance / propertiesAdded value: +{ + "agencies": { + "type": [ + "number", + "null" + ] + }, + "maxAgencyShare": { + "type": [ + "number", + "null" + ] + }, + "publishers": { + "type": [ + "number", + "null" + ] + }, + "singleSource": { + "type": "boolean" + } +} - added
Output schema / properties / cities / items / properties / provenance / requiredAdded value: +[ + "publishers", + "agencies", + "maxAgencyShare", + "singleSource" +]
- Changed
list_locations3 fields changed- changed
Input schema / properties / city / descriptionPrevious value: -"Optional — limit districts to a single city slug."New value: +"Optional — limit districts to a single city. Slug, Turkish name, or exonym (Kyrenia/Nicosia/Famagusta/Morphou)." - removed
Input schema / properties / city / enumRemoved value: -[ - "girne", - "iskele", - "lefkosa", - "gazimagusa", - "guzelyurt", - "lefke" -] - added
Output schema / properties / truncatedAdded value: +{ + "type": "boolean" +}
- Changed
payment_plan4 fields changed- added
Output schema / properties / amounts / propertiesAdded value: +{ + "EUR": { + "type": "number" + }, + "GBP": { + "type": "number" + }, + "TRY": { + "type": "number" + }, + "USD": { + "type": "number" + } +} - added
Output schema / properties / amounts / requiredAdded value: +[ + "GBP", + "EUR", + "USD", + "TRY" +] - added
Output schema / properties / fx / propertiesAdded value: +{ + "asOf": { + "type": "string" + }, + "base": { + "enum": [ + "GBP" + ], + "type": "string" + }, + "rates": { + "properties": { + "EUR": { + "type": "number" + }, + "GBP": { + "type": "number" + }, + "TRY": { + "type": "number" + }, + "USD": { + "type": "number" + } + }, + "required": [ + "GBP", + "EUR", + "USD", + "TRY" + ], + "type": "object" + }, + "source": { + "enum": [ + "stored_current_rates" + ], + "type": "string" + } +} - added
Output schema / properties / fx / requiredAdded value: +[ + "base", + "source", + "asOf", + "rates" +]
- Changed
search7 fields changed- added
Output schema / properties / appliedFilters / additionalPropertiesAdded value: +false - added
Output schema / properties / appliedFilters / propertiesAdded value: +{ + "bedrooms": { + "type": "number" + }, + "city": { + "type": "string" + }, + "district": { + "type": "string" + }, + "elevator": { + "type": "boolean" + }, + "furnished": { + "type": "boolean" + }, + "garden": { + "type": "boolean" + }, + "maxPrice": { + "type": "number" + }, + "minPrice": { + "type": "number" + }, + "parking": { + "type": "boolean" + }, + "pool": { + "type": "boolean" + }, + "propertyType": { + "type": "string" + }, + "seaView": { + "type": "boolean" + }, + "type": { + "type": "string" + } +} - added
Output schema / properties / fxRates / propertiesAdded value: +{ + "base": { + "enum": [ + "GBP" + ], + "type": "string" + }, + "isFallback": { + "type": "boolean" + }, + "rates": { + "properties": { + "EUR": { + "type": "number" + }, + "TRY": { + "type": "number" + }, + "USD": { + "type": "number" + } + }, + "required": [ + "EUR", + "USD", + "TRY" + ], + "type": "object" + }, + "source": { + "enum": [ + "database", + "fallback" + ], + "type": "string" + }, + "updatedAt": { + "type": [ + "string", + "null" + ] + } +} - added
Output schema / properties / fxRates / requiredAdded value: +[ + "base", + "rates", + "source", + "updatedAt", + "isFallback" +] - added
Output schema / properties / listings / items / requiredAdded value: +[ + "id", + "title", + "city", + "district", + "price", + "priceGbp", + "currency", + "type", + "url" +] - added
Output schema / properties / nearbyAlternatives / properties / listings / items / propertiesAdded value: +{ + "areaSqm": { + "type": [ + "number", + "null" + ] + }, + "bedrooms": { + "type": [ + "number", + "null" + ] + }, + "city": { + "type": "string" + }, + "coverImageUrl": { + "type": [ + "string", + "null" + ] + }, + "currency": { + "type": "string" + }, + "district": { + "type": "string" + }, + "id": { + "type": "string" + }, + "listingNumber": { + "type": [ + "number", + "null" + ] + }, + "locationPrecision": { + "enum": [ + "exact", + "district", + "city" + ], + "type": "string" + }, + "monthlyRentGbp": { + "type": [ + "number", + "null" + ] + }, + "price": { + "type": "number" + }, + "priceGbp": { + "type": "number" + }, + "propertyType": { + "type": [ + "string", + "null" + ] + }, + "title": { + "type": "string" + }, + "type": { + "type": "string" + }, + "url": { + "type": "string" + } +} - added
Output schema / properties / nearbyAlternatives / properties / listings / items / requiredAdded value: +[ + "id", + "title", + "city", + "district", + "price", + "priceGbp", + "currency", + "type", + "url" +]
- Changed
search_listings7 fields changed- changed
Input schema / properties / city / descriptionPrevious value: -"City to filter"New value: +"Slug, Turkish name, or exonym (Kyrenia/Nicosia/Famagusta/Morphou)." - removed
Input schema / properties / city / enumRemoved value: -[ - "girne", - "iskele", - "lefkosa", - "gazimagusa", - "guzelyurt", - "lefke" -] - changed
Input schema / properties / district / descriptionPrevious value: -"District name (e.g. Alsancak), case-insensitive"New value: +"District name (e.g. Alsancak), matched accent/case-insensitively against the active-listing district list" - added
Output schema / properties / appliedFilters / additionalPropertiesAdded value: +false - added
Output schema / properties / appliedFilters / propertiesAdded value: +{ + "bedrooms": { + "type": "number" + }, + "city": { + "type": "string" + }, + "district": { + "type": "string" + }, + "elevator": { + "type": "boolean" + }, + "furnished": { + "type": "boolean" + }, + "garden": { + "type": "boolean" + }, + "maxPrice": { + "type": "number" + }, + "minPrice": { + "type": "number" + }, + "parking": { + "type": "boolean" + }, + "pool": { + "type": "boolean" + }, + "propertyType": { + "type": "string" + }, + "seaView": { + "type": "boolean" + }, + "type": { + "type": "string" + } +} - added
Output schema / properties / fxRates / propertiesAdded value: +{ + "base": { + "enum": [ + "GBP" + ], + "type": "string" + }, + "isFallback": { + "type": "boolean" + }, + "rates": { + "properties": { + "EUR": { + "type": "number" + }, + "TRY": { + "type": "number" + }, + "USD": { + "type": "number" + } + }, + "required": [ + "EUR", + "USD", + "TRY" + ], + "type": "object" + }, + "source": { + "enum": [ + "database", + "fallback" + ], + "type": "string" + }, + "updatedAt": { + "type": [ + "string", + "null" + ] + } +} - added
Output schema / properties / fxRates / requiredAdded value: +[ + "base", + "rates", + "source", + "updatedAt", + "isFallback" +]
12 tool updates
- Changed
compare_cities4 fields changed- added
Output schema / properties / cities / itemsAdded value: +{ + "properties": { + "activeCount": { + "type": "number" + }, + "city": { + "type": "string" + }, + "hasData": { + "type": "boolean" + }, + "lowSample": { + "type": "boolean" + }, + "medianPrice": { + "type": [ + "number", + "null" + ] + }, + "medianPricePerSqm": { + "type": [ + "number", + "null" + ] + }, + "p25Price": { + "type": [ + "number", + "null" + ] + }, + "p75Price": { + "type": [ + "number", + "null" + ] + }, + "provenance": { + "type": "object" + }, + "slug": { + "type": "string" + }, + "topDistrict": { + "type": [ + "string", + "null" + ] + }, + "topDistrictMedianPrice": { + "type": [ + "number", + "null" + ] + }, + "withheldReason": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "slug", + "city", + "activeCount", + "hasData" + ], + "type": "object" +} - added
Output schema / properties / dataAsOfAdded value: +{ + "type": [ + "string", + "null" + ] +} - removed
Output schema / properties / generatedAtRemoved value: -{ - "type": "string" -} - changed
Output schema / requiredPrevious value: -[ - "type", - "cities" -]New value: +[ + "type", + "dataAsOf", + "cities" +]
- Changed
compare_properties1 field changed- added
Output schema / properties / listings / itemsAdded value: +{ + "properties": { + "area": { + "type": [ + "number", + "null" + ] + }, + "bathrooms": { + "type": [ + "number", + "null" + ] + }, + "bedrooms": { + "type": [ + "number", + "null" + ] + }, + "city": { + "type": "string" + }, + "currency": { + "type": "string" + }, + "district": { + "type": "string" + }, + "id": { + "type": "string" + }, + "monthlyRentGbp": { + "type": [ + "number", + "null" + ] + }, + "number": { + "type": "string" + }, + "price": { + "type": "number" + }, + "priceGbp": { + "type": "number" + }, + "pricePerSqm": { + "type": [ + "number", + "null" + ] + }, + "title": { + "type": "string" + }, + "type": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "id", + "title", + "price", + "priceGbp", + "type", + "url" + ], + "type": "object" +}
- Added
convert_currency - Changed
get_district_profile6 fields changed- added
Output schema / properties / cleanSampleTotalAdded value: +{ + "description": "sale.count + rent.count — clean sample size (IQR outliers excluded), not raw active listings", + "type": "number" +} - added
Output schema / properties / dataAsOfAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / rent / propertiesAdded value: +{ + "count": { + "type": "number" + }, + "maturity": { + "enum": [ + "olgun", + "öncü", + "biriktiriyor" + ], + "type": "string" + }, + "median": { + "type": [ + "number", + "null" + ] + }, + "medianPerSqm": { + "type": [ + "number", + "null" + ] + }, + "p25": { + "type": [ + "number", + "null" + ] + }, + "p75": { + "type": [ + "number", + "null" + ] + }, + "provenance": { + "type": "object" + }, + "status": { + "enum": [ + "proven", + "preliminary", + "collecting" + ], + "type": "string" + }, + "withheldReason": { + "enum": [ + "insufficient_sample", + "no_value", + null + ], + "type": [ + "string", + "null" + ] + } +} - added
Output schema / properties / sale / propertiesAdded value: +{ + "count": { + "type": "number" + }, + "maturity": { + "enum": [ + "olgun", + "öncü", + "biriktiriyor" + ], + "type": "string" + }, + "median": { + "type": [ + "number", + "null" + ] + }, + "medianPerSqm": { + "type": [ + "number", + "null" + ] + }, + "p25": { + "type": [ + "number", + "null" + ] + }, + "p75": { + "type": [ + "number", + "null" + ] + }, + "provenance": { + "type": "object" + }, + "status": { + "enum": [ + "proven", + "preliminary", + "collecting" + ], + "type": "string" + }, + "withheldReason": { + "enum": [ + "insufficient_sample", + "no_value", + null + ], + "type": [ + "string", + "null" + ] + } +} - removed
Output schema / properties / totalActiveRemoved value: -{ - "type": "number" -} - changed
Output schema / requiredPrevious value: -[ - "city", - "district", - "totalActive" -]New value: +[ + "city", + "district", + "cleanSampleTotal" +]
- Changed
get_listing_by_number2 fields changed- added
Output schema / properties / fxRatesAdded value: +{ + "type": [ + "object", + "null" + ] +} - added
Output schema / properties / monthlyRentGbpAdded value: +{ + "type": [ + "number", + "null" + ] +}
- Changed
get_listing_detail2 fields changed- added
Output schema / properties / fxRatesAdded value: +{ + "type": [ + "object", + "null" + ] +} - added
Output schema / properties / monthlyRentGbpAdded value: +{ + "type": [ + "number", + "null" + ] +}
- Changed
get_price_index4 fields changed- added
Output schema / properties / cities / itemsAdded value: +{ + "properties": { + "city": { + "type": "string" + }, + "count": { + "type": "number" + }, + "districts": { + "items": { + "properties": { + "count": { + "type": "number" + }, + "district": { + "type": "string" + }, + "lowSample": { + "type": "boolean" + }, + "medianPrice": { + "type": [ + "number", + "null" + ] + }, + "medianPricePerSqm": { + "type": [ + "number", + "null" + ] + }, + "provenance": { + "type": "object" + }, + "status": { + "type": "string" + }, + "withheldReason": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "district", + "count", + "lowSample", + "medianPrice" + ], + "type": "object" + }, + "type": "array" + }, + "lowSample": { + "type": "boolean" + }, + "medianPrice": { + "type": [ + "number", + "null" + ] + }, + "medianPricePerSqm": { + "type": [ + "number", + "null" + ] + }, + "p25Price": { + "type": [ + "number", + "null" + ] + }, + "p75Price": { + "type": [ + "number", + "null" + ] + }, + "provenance": { + "type": "object" + }, + "status": { + "enum": [ + "proven", + "preliminary", + "collecting" + ], + "type": "string" + }, + "withheldReason": { + "enum": [ + "insufficient_sample", + "no_value", + null + ], + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "city", + "count", + "status", + "lowSample", + "withheldReason", + "medianPrice", + "districts" + ], + "type": "object" +} - added
Output schema / properties / dataAsOfAdded value: +{ + "type": [ + "string", + "null" + ] +} - removed
Output schema / properties / generatedAtRemoved value: -{ - "type": [ - "string", - "null" - ] -} - changed
Output schema / requiredPrevious value: -[ - "type", - "cities" -]New value: +[ + "type", + "dataAsOf", + "cities" +]
- Removed
get_yield_estimate - Changed
search5 fields changed- added
Output schema / properties / criteriaAdded value: +{ + "items": { + "properties": { + "key": { + "type": "string" + }, + "note": { + "type": "string" + }, + "state": { + "enum": [ + "applied", + "unresolved", + "not_supported" + ], + "type": "string" + }, + "value": { + "type": "string" + } + }, + "required": [ + "key", + "value", + "state" + ], + "type": "object" + }, + "type": "array" +} - added
Output schema / properties / listings / items / properties / locationPrecisionAdded value: +{ + "enum": [ + "exact", + "district", + "city" + ], + "type": "string" +} - added
Output schema / properties / listings / items / properties / monthlyRentGbpAdded value: +{ + "type": [ + "number", + "null" + ] +} - added
Output schema / properties / listings / items / properties / propertyTypeAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / nearbyAlternativesAdded value: +{ + "properties": { + "listings": { + "items": { + "type": "object" + }, + "type": "array" + }, + "relaxed": { + "enum": [ + "district", + "maxPrice" + ], + "type": "string" + } + }, + "required": [ + "relaxed", + "listings" + ], + "type": [ + "object", + "null" + ] +}
- Changed
search_listings15 fields changed- added
Input schema / properties / districtAdded value: +{ + "description": "District name (e.g. Alsancak), case-insensitive", + "type": "string" +} - added
Input schema / properties / elevatorAdded value: +{ + "description": "Only listings with an elevator", + "type": "boolean" +} - added
Input schema / properties / furnishedAdded value: +{ + "description": "Only furnished listings", + "type": "boolean" +} - added
Input schema / properties / gardenAdded value: +{ + "description": "Only listings with a garden", + "type": "boolean" +} - added
Input schema / properties / offsetAdded value: +{ + "description": "Rows to skip (pagination, default 0)", + "minimum": 0, + "type": "number" +} - added
Input schema / properties / parkingAdded value: +{ + "description": "Only listings with parking", + "type": "boolean" +} - added
Input schema / properties / poolAdded value: +{ + "description": "Only listings with a pool", + "type": "boolean" +} - changed
Input schema / properties / propertyType / descriptionPrevious value: -"Property type filter"New value: +"Raw property type (apartment, villa, …) or K75 group slug: house (villa+detached+bungalow), land, commercial" - changed
Input schema / properties / propertyType / enumPrevious value: -[ - "apartment", - "residence", - "villa", - "twin", - "detached", - "bungalow", - "penthouse", - "studio", - "duplex", - "shop", - "office", - "warehouse", - "whole_building", - "hotel", - "residential_land", - "commercial_land", - "farmland" -]New value: +[ + "apartment", + "residence", + "villa", + "twin", + "detached", + "bungalow", + "penthouse", + "studio", + "duplex", + "shop", + "office", + "warehouse", + "whole_building", + "hotel", + "residential_land", + "commercial_land", + "farmland", + "house", + "land", + "commercial" +] - added
Input schema / properties / seaViewAdded value: +{ + "description": "Only listings flagged sea_view", + "type": "boolean" +} - added
Output schema / properties / fxRatesAdded value: +{ + "type": [ + "object", + "null" + ] +} - added
Output schema / properties / listings / items / properties / monthlyRentGbpAdded value: +{ + "type": [ + "number", + "null" + ] +} - added
Output schema / properties / offsetAdded value: +{ + "type": "number" +} - added
Output schema / properties / rankingAdded value: +{ + "properties": { + "of": { + "type": "number" + }, + "pooled": { + "type": "number" + }, + "scope": { + "enum": [ + "complete", + "partial" + ], + "type": "string" + } + }, + "required": [ + "scope", + "pooled", + "of" + ], + "type": [ + "object", + "null" + ] +} - changed
Output schema / requiredPrevious value: -[ - "count", - "totalMatched", - "sortApplied", - "listings", - "appliedFilters" -]New value: +[ + "count", + "totalMatched", + "offset", + "sortApplied", + "listings", + "appliedFilters" +]
- Removed
student_housing - Removed
suggest_neighborhood
3 tool updates
- Changed
get_listing_by_number1 field changed- added
Output schema / properties / locationPrecisionAdded value: +{ + "enum": [ + "exact", + "district", + "city" + ], + "type": "string" +}
- Changed
get_listing_detail1 field changed- added
Output schema / properties / locationPrecisionAdded value: +{ + "enum": [ + "exact", + "district", + "city" + ], + "type": "string" +}
- Changed
search_listings1 field changed- added
Output schema / properties / listings / items / properties / locationPrecisionAdded value: +{ + "enum": [ + "exact", + "district", + "city" + ], + "type": "string" +}
1 tool update
- Changed
search_listings1 field changed- changed
Input schema / properties / propertyType / enumPrevious value: -[ - "apartment", - "residence", - "villa", - "twin", - "detached", - "bungalow", - "penthouse", - "studio", - "duplex", - "shop", - "office", - "warehouse", - "whole_building", - "residential_land", - "commercial_land", - "farmland" -]New value: +[ + "apartment", + "residence", + "villa", + "twin", + "detached", + "bungalow", + "penthouse", + "studio", + "duplex", + "shop", + "office", + "warehouse", + "whole_building", + "hotel", + "residential_land", + "commercial_land", + "farmland" +]
Related MCP Connectors
Northern Cyprus property listings for rent and sale: search by region, price, layout. Read-only.
Property search, comparison, investment analysis and watchlists with change alerts
Read-only European property search by location, price, size and features. No sign-in required.
GDPR-clean property listings, rents, price stats, yields and below-market deals. UK, EU.
Related MCP Servers
- AlicenseAqualityAmaintenanceUK property data MCP server — Land Registry comps, EPC, Rightmove, rental yields, stamp duty, Companies House. 13 tools.1318MIT
- AlicenseAqualityBmaintenanceEnables AI assistants to query Polish new-build housing data: developers' asking prices with price history, real transaction prices from the RCN register, and GUS/NBP market statistics, plus searchable locations, offers, investments and developers. Exposes thirteen read-only tools over the public deweloperuch.pl data, usable from any MCP client or the bundled CLI.13148 PyPI28MIT
- AlicenseAqualityBmaintenanceGives AI agents read-only access to Bulgarian real-estate data from imotai.bg, letting them list districts, search and fetch active listings, pull district-level market statistics, and estimate values from current asking prices. All results are field-allowlisted and rate limited, with no credentials, broker contact details, or written descriptions exposed.5MIT
- AlicenseAqualityAmaintenanceA read-only MCP server providing 56 tools to query Qobrix real-estate CRM data, covering listings, leads, viewings, offers, contracts, analytics, and more, with RESO Data Dictionary alignment and caching support.643Apache 2.0
Glama MCP Gateway
Add one secure layer between your agents and this server.