Skip to main content
Glama

Evlek — Northern Cyprus Property MCP Server

Compare Evlek listings

compare_listings
Read-onlyIdempotent

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

Input Schema

NameRequiredDescriptionDefault
idsYes2 to 4 listings, in any mix of ids, numbers and links. The order is kept.
localeNoLanguage of the answer and of the links. Pass the language the user writes in. Default en.

Output Schema

NameRequiredDescriptionDefault
codeNoAbsent 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.
countNo
groupsNoThe compared listings by transaction (sale and rent are never ranked against each other).
issuesNo
localeYes
missingNo
comparedYesThe listings that were compared, in the order of the request.
insightsYes
warningsYes
retryableNoTrue when the search backend could not answer (code SEARCH_BACKEND_UNAVAILABLE).
dataSourceNo
isEstimateNo
metricTypeNo
missingIdsYesOne NOT_FOUND entry per requested reference that names no public listing.
contentLocaleNoThe language every link resolved to; null when the listings differ (see compared[].contentLocale).
localeFallbackNoTrue when at least one link opens a page in another language than requested.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed4 schema fields changed
    • changedOutput schema / properties / compared / items / 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 / compared / items / properties / areaLabel
      Added value: +{
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • changedOutput schema / properties / compared / items / 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 / compared / items / properties / areaText
      Added value: +{
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
  2. Changed3 schema fields changed
    • addedOutput schema / properties / compared / items / 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 / compared / items / properties / areaSqm / description
      Previous 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."
    • changedOutput schema / properties / compared / items / properties / pricePerSqmGbp / description
      Previous 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²."
  3. Added

TDQS

A4.4/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

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

Purpose5/5

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.

Usage Guidelines4/5

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.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.