Skip to main content
Glama

Evlek — Northern Cyprus Property MCP Server

Get an Evlek listing

get_listing
Read-onlyIdempotent

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

Input Schema

NameRequiredDescriptionDefault
refYesThe listing: its id (UUID), its listing number (EVL-100464 or 100464) or an evlek.app listing link in any language.
localeNoLanguage of the answer and of the links. Pass the language the user writes in. Default en.

Output Schema

NameRequiredDescriptionDefault
idNo
refNoShort summary: listing number.
urlNoThe canonical link of the listing page in contentLocale.
areaNo
cityNo
codeNoWhen found is false: NOT_FOUND (the listing does not exist or is not public), SEARCH_BACKEND_UNAVAILABLE, INVALID_PARAMS or INTERNAL_ERROR.
datesNo
floorNo
foundYes
mediaNo
priceNo
roomsNo
titleNo
issuesNo
localeNo
officeNo
photosNo
plotM2No
rentalNo
areaSqmNoThe 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.
areaTextNo
bedroomsNo
currencyNo
districtNo
factTypeNo
featuresNo
listedAtNo
locationNo
priceGbpNo
warningsNo
areaBasisNo'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.
areaLabelNo
bathroomsNo
furnishedNo
requestedNoThe identifier the caller sent, when found is false.
retryableNoTrue when found is false because the search backend could not answer (code SEARCH_BACKEND_UNAVAILABLE).
roomLabelNo
updatedAtNo
agencyNameNoShort summary: office name.
dataSourceNo
isEstimateNo
listingRefNo
officeNameNo
photoCountNo
priceLabelNoShort summary: printed price.
areaSuspectNo
buildingAgeNo
dataQualityNo
descriptionNo
photosShownNo
titleSourceNo
totalFloorsNo
transactionNo
propertyTypeNo
contentLocaleNoThe language the listing page and url really resolved to.
coverImageUrlNo
listingNumberNo
localeFallbackNo
monthlyRentGbpNo
pricePerSqmGbpNoGBP 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².
virtualStagingNoPresent only when approved AI virtual-staging images exist. Every image is AI-generated and must be shown with the disclosure.
photosTruncatedNo
descriptionLocaleNo
locationPrecisionNo
propertyTypeLabelNo
titleGeneratedReasonNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changed
    • changedOutput schema / properties / agencyName / description
      Previous value: -"ChatGPT summary: office name."New value: +"Short summary: office name."
    • changedOutput schema / properties / priceLabel / description
      Previous value: -"ChatGPT summary: printed price."New value: +"Short summary: printed price."
    • changedOutput schema / properties / ref / description
      Previous value: -"ChatGPT summary: listing number."New value: +"Short summary: listing number."
  2. Changed8 schema fields changed
    • changedOutput schema / properties / area / properties / basis / description
      Previous 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."
    • changedOutput schema / properties / area / properties / closedM2 / description
      Previous 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."
    • addedOutput schema / properties / area / properties / label
      Added 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"
      +  ]
      +}
    • addedOutput schema / properties / area / properties / text
      Added 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"
      +  ]
      +}
    • changedOutput schema / properties / areaBasis / description
      Previous 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."
    • addedOutput schema / properties / areaLabel
      Added value: +{
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • changedOutput schema / properties / areaSqm / description
      Previous 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."
    • addedOutput schema / properties / areaText
      Added value: +{
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
  3. Changed6 schema fields changed
    • addedOutput schema / properties / area / properties / basis
      Added 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"
      +  ]
      +}
    • addedOutput schema / properties / area / properties / closedM2 / description
      Added 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."
    • addedOutput schema / properties / areaBasis
      Added 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"
      +  ]
      +}
    • changedOutput schema / properties / areaSqm / description
      Previous 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."
    • changedOutput schema / properties / price / properties / perSqmGbp / description
      Previous 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²."
    • changedOutput schema / properties / pricePerSqmGbp / description
      Previous 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²."
  4. Changed3 schema fields changed
    • addedOutput schema / properties / agencyName
      Added value: +{
      +  "description": "ChatGPT summary: office name.",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / priceLabel
      Added value: +{
      +  "description": "ChatGPT summary: printed price.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / ref
      Added value: +{
      +  "description": "ChatGPT summary: listing number.",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
  5. Added

TDQS

A4.4/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.