Skip to main content
Glama

Evlek — Northern Cyprus Property MCP Server

Server Details

AI-native property MCP for Northern Cyprus (KKTC/TRNC): listings, prices, districts, yields.

If you are the author of this connector, you can claim ownership with GitHub, an HTTP challenge, or a DNS record. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Last Tested
Transport
Streamable HTTP
URL
Repository
Evlek/evlek-mcp
GitHub Stars
0
Server Listing
Evlek — Northern Cyprus Property MCP Server

Available Tools

14 tools
compare_citiesCompare Northern Cyprus Cities Side-by-SideA
Read-only
Inspect

Compare source-dated live active-listing asking-price aggregates across 2-4 Northern Cyprus cities. Descriptive listing facts only; not transaction prices, valuation, forecast, ranking, or investment advice.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoSale or rent (default: sale)
citiesYesCities to compare (2-4)

Output Schema

ParametersJSON Schema
NameRequiredDescription
typeYes
citiesYes
dataSourceNo
isEstimateNo
metricTypeNo
generatedAtNo

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true. The description adds meaningful context beyond these hints: 'source-dated live active-listing' clarifies data recency and source, while 'descriptive listing facts only' and the list of exclusions disclose what the output does not represent. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences, front-loaded with the core purpose and followed by clear exclusions. Every word earns its place, with no fluff or repetition of schema details.

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?

The tool has an output schema (not shown) and comprehensive annotations. The description fully covers the tool's scope and limitations for a read-only comparison tool. It does not need to explain return values (output schema exists) and provides sufficient context for an agent to select it appropriately.

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?

The input schema has 100% coverage with descriptions for both parameters ('type' with default and enum, 'cities' with 2-4 constraint and enum values). The description adds no parameter-specific detail beyond what the schema already provides, so the baseline score of 3 is appropriate.

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?

The description uses a specific verb ('compare') and resource ('Northern Cyprus cities') with a clear scope: 'asking-price aggregates across 2-4 cities.' It also explicitly states what it is not ('not transaction prices, valuation, forecast, ranking, or investment advice'), which distinguishes it from sibling tools like get_price_index or get_yield_estimate.

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?

The description implies when to use the tool: when needing city-level asking-price aggregates. It also provides when-not guidance through exclusions ('not transaction prices, valuation, forecast, ranking, or investment advice'). However, it does not explicitly name alternatives or contrast with sibling tools like compare_properties, so it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

compare_propertiesCompare Evlek Property Listings Side-by-SideA
Read-only
Inspect

Compare descriptive facts from 2-4 active Evlek sale or long-term-rent listings of the same type. Shows advertised asking price, size and £/m² differences without making a value, suitability, appraisal, or investment judgment.

ParametersJSON Schema
NameRequiredDescriptionDefault
listing_idsYesEvlek listing UUIDs (2-4)

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
missingNo
listingsYes
dataSourceNo
isEstimateNo
metricTypeNo

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate read-only and non-destructive behavior. The description adds valuable context by explicitly stating it shows only descriptive facts (price, size, £/m²) and refrains from making judgments. This clarifies the tool's scope and limitations beyond the annotation hints, though it doesn't discuss failure modes or return format (covered by output schema).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences long and front-loaded with the primary purpose. Every sentence adds value: the first defines the action and constraints, the second details the specific outputs and explicitly excludes subjective analysis. There is no redundancy or unnecessary wording.

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?

The description, combined with the annotations and output schema, provides complete context. It covers what the tool compares, the constraints (2-4, same type, active), and explicitly states what it does not do. Since an output schema exists, the description doesn't need to explain return values. All critical usage aspects are addressed.

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?

The input schema fully describes the only parameter, listing_ids, including its type, format, and count (2-4). The description does not add additional semantic meaning to the parameter itself; it only reiterates the count requirement. Since schema coverage is 100%, the baseline of 3 applies.

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?

The description clearly states the tool's function: comparing descriptive facts from 2-4 active Evlek listings. It specifies the resource (listings), the action (compare), the scope (same type, sale or long-term rent), and the specific outputs (price, size, £/m²). This distinguishes it from siblings like compare_cities and get_listing_detail.

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?

The description provides clear when-to-use context: comparing 2-4 listings of the same type. It also implies boundaries by stating it does not make value or investment judgments, which is a useful guideline. However, it does not explicitly mention alternatives for single listing details or city comparisons, so it lacks full exclusionary guidance.

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 detailA
Read-only
Inspect

Fetch the full detail of one Evlek listing by id (from search): title, description, GBP-normalized price, location, size, amenities. Same data as get_listing_detail — this fixed id-only form exists for the ChatGPT/OpenAI connector contract. Use when: an id from search is known. Don't use for: discovery — use search first.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesEvlek listing id (UUID) from search

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
urlYes
textYes
titleYes
photosNo
metadataNo
coverImageUrlNo

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, and the description aligns with that. Beyond annotations, it adds meaningful context: the data is identical to get_listing_detail and this fixed id-only form exists for the ChatGPT/OpenAI connector contract. This helps the agent understand why this tool exists and what to expect behaviorally.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each earning its place: the first states the purpose, the second explains the relationship to get_listing_detail and the connector contract, and the third provides explicit usage guidance. No filler or redundancy.

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?

For a single-parameter read-only tool with an output schema present, the description covers purpose, usage boundaries, relationship to a sibling, and the reason for its existence. There are no significant gaps, and the combination of annotations, schema, and descriptions is sufficient for the agent to select and invoke it 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%—the only parameter 'id' is already described as 'Evlek listing id (UUID) from search.' The description repeats 'by id (from search)' but adds no extra syntax, format, or constraints beyond the schema, so the baseline of 3 applies.

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?

The description starts with 'Fetch the full detail of one Evlek listing by id'—a specific verb and resource—and enumerates the included fields. It also distinguishes itself from the sibling get_listing_detail by explaining this is a fixed id-only form, so it is immediately clear how it differs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states 'Use when: an id from search is known' and 'Don't use for: discovery — use search first.' It also names the sibling get_listing_detail as providing the same data, effectively guiding the agent toward the correct alternative when applicable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_district_profileGet Live Asking-Price Context for a Northern Cyprus DistrictA
Read-only
Inspect

Returns source-dated active sale/long-term-rent listing counts and asking-price aggregates for one district. Any rent-to-price percentage is a derived asking-price ratio, not observed income, net yield, valuation, forecast, ranking, or recommendation.

ParametersJSON Schema
NameRequiredDescriptionDefault
cityYes
districtYesDistrict name (2-60 chars)

Output Schema

ParametersJSON Schema
NameRequiredDescription
cityYes
rentNo
saleNo
districtYes
dataSourceNo
metricTypeNo
totalActiveYes
isObservedYieldNo
personaContextsNo
yieldMetricTypeNo
indicativeGrossRentToPricePctNo

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnly and non-destructive behavior. The description adds valuable context by noting data is 'source-dated,' 'active,' and that rent-to-price is a 'derived asking-price ratio, not observed income, net yield, valuation, forecast, ranking, or recommendation.' This prevents misinterpretation beyond what annotations provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the core function and followed by an essential caveat. Every word earns its place, with no redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema exists and annotations cover safety, the description sufficiently covers purpose, scope ('one district'), and important disclaimers. It could be slightly more explicit about sibling differentiation, but overall it is complete for a simple read-only tool with structured output.

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 50%, with district described as 'District name (2-60 chars)' and city as an enum. The description does not elaborate on parameter meaning beyond identifying 'one district,' but the city enum values are self-explanatory. It adds no additional semantics beyond 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?

The description clearly states the tool returns 'source-dated active sale/long-term-rent listing counts and asking-price aggregates for one district,' with a specific verb and resource. This distinguishes it from siblings like get_price_index or compare_cities by focusing on asking-price context at the district level.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies use for a single district's aggregate asking-price data, but does not explicitly state when to use this versus alternatives such as compare_cities or get_yield_estimate. No exclusions or alternative guidance is provided, leaving usage to be inferred from the tool's purpose.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_listing_by_numberGet Evlek Listing by NumberA
Read-only
Inspect

Look up a single Evlek listing by its public listing number (e.g. "EVL-123456", "123456", or a bare number) and return its full detail — same shape as get_listing_detail. Use when: a listing number is known. Don't use for: UUID lookups — use get_listing_detail.

ParametersJSON Schema
NameRequiredDescriptionDefault
listing_numberYesEvlek listing number, e.g. "EVL-123456", "123456", or the bare number 123456.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNo
urlNo
cityNo
typeNo
foundYes
priceNo
titleNo
photosNo
areaSqmNo
bedroomsNo
currencyNo
districtNo
factTypeNo
featuresNo
listedAtNo
priceGbpNo
amenitiesNo
bathroomsNo
furnishedNo
dataSourceNo
isEstimateNo
photoCountNo
photosShownNo
coverImageUrlNo
listingNumberNo
pricePerSqmGBPNo
virtualStagingNo
photosTruncatedNo
locationPrecisionNo

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, openWorldHint=true, and destructiveHint=false, which covers the safety profile. The description adds useful behavioral context about accepted listing-number formats ('EVL-123456', '123456', or bare number) and that the returned shape matches get_listing_detail. This goes beyond the annotations without contradicting them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact, front-loads the core action, and uses the 'Use when / Don't use for' structure to pack routing guidance into a few words. Every sentence earns its place, and it remains highly scannable.

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?

For a single-parameter, read-only lookup tool with an output schema and clear annotations, this description is complete. It covers input formats, return shape, and the alternative for UUID lookups. No important contextual gap remains for an agent to invoke it 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 description coverage is 100% and the property description already lists the same accepted formats. The tool description repeats those examples but adds no new parameter-level meaning beyond what the schema provides. Baseline 3 is appropriate because the schema fully carries the parameter documentation.

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?

The description clearly states the verb (look up), the resource (a single Evlek listing by public listing number), and the result (full detail). It explicitly distinguishes this tool from get_listing_detail by noting the UUID lookup case, so an agent can tell them apart.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit guidance: 'Use when: a listing number is known. Don't use for: UUID lookups — use get_listing_detail.' This is a clear when/when-not statement with a named alternative, which is exactly what an agent needs.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_listing_detailGet Full Detail for a Single Evlek ListingA
Read-only
Inspect

Return a 360° profile of one active Evlek listing by UUID: title, description, price, location, size, amenities, features, cover image, per-photo captions/tags, and AI virtual-staging before/after pairs (always AI-disclosed). Contact details omitted. Use when: a UUID is already known. Don't use for: discovery — use search_listings first.

ParametersJSON Schema
NameRequiredDescriptionDefault
property_idYesEvlek listing UUID

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNo
urlNo
cityNo
typeNo
foundYes
priceNo
titleNo
photosNo
areaSqmNo
bedroomsNo
currencyNo
districtNo
factTypeNo
featuresNo
listedAtNo
priceGbpNo
amenitiesNo
bathroomsNo
furnishedNo
dataSourceNo
isEstimateNo
photoCountNo
photosShownNo
coverImageUrlNo
listingNumberNo
pricePerSqmGBPNo
virtualStagingNo
photosTruncatedNo
locationPrecisionNo

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, while the description adds extra behavioral context beyond that: it only returns active listings, omits contact details, and clarifies that AI virtual-staging pairs are always AI-disclosed. This meaningfully enriches the structured annotation data.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two dense sentences front-load the core behavior and field list, then add exclusions and routing guidance. Every clause earns its place with no filler or repetition of schema content.

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?

For a single-parameter read tool with an output schema, the description covers what is returned, what is explicitly omitted, when to use it, and which sibling to use instead. Combined with the annotations and existing schema, nothing needed for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single parameter property_id is already fully documented in the schema as an 'Evlek listing UUID' (100% coverage). The description adds useful nuance by specifying that the UUID must refer to an active listing and is the lookup key, slightly extending the schema's bare definition.

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?

The description names a specific verb ('Return') and a specific resource ('a 360° profile of one active Evlek listing by UUID'), and enumerates the fields returned. It clearly differentiates this lookup-from-UUID tool from discovery tools like search_listings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit 'Use when' and 'Don't use for' guidance is given, including naming the alternative discovery tool 'search_listings'. This leaves no ambiguity about when the tool is appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_price_indexGet Northern Cyprus Price IndexA
Read-only
Inspect

Returns source-dated aggregates of live active Evlek sale or long-term-rent asking prices. Descriptive listing facts only: not completed transactions, a valuation, a forecast, or an investment recommendation.

ParametersJSON Schema
NameRequiredDescriptionDefault
cityNo
typeNoSale or rent (default: sale)

Output Schema

ParametersJSON Schema
NameRequiredDescription
typeYes
citiesYes
dataSourceNo
isEstimateNo
metricTypeNo
generatedAtNo
totalListingsNo

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, establishing the safety profile. The description adds meaningful behavioral context: data is source-dated, reflects live active listings only, and is descriptive rather than analytical. This goes beyond the annotations by clarifying the nature and limitations of the returned data, which is valuable for correct interpretation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the core purpose and followed by a concise exclusion list. Every word earns its place; there is no fluff or redundant information. Perfectly sized for an agent to quickly parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has an output schema, so return-value details need not be in the description. The description covers the data source, aggregation type, property type, and explicit exclusions, which is comprehensive for a read-only aggregate tool. It doesn't detail the index computation method, but that is likely covered by the output schema or supplemental documentation. Given the simplicity and existing annotations, this is nearly complete.

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 50% (only 'type' has a description, 'city' does not). The description adds some semantic meaning by connecting 'sale or long-term-rent' to the type parameter and implying the aggregation scope, but it does not explain the city parameter or clarify default behavior when parameters are omitted. The enums are self-explanatory, but the description does not fully compensate for the schema gap.

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?

The description states a specific verb ('Returns') and resource ('source-dated aggregates of live active Evlek sale or long-term-rent asking prices'). It clearly distinguishes itself from individual listing tools by emphasizing it provides aggregate asking-price data, and it further differentiates itself from valuation/forecast tools by explicitly stating what it is NOT. This is more than sufficient to set it apart from the listed siblings.

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?

The description provides clear context on what data is included (live active asking prices) and explicitly excludes completed transactions, valuations, forecasts, and investment recommendations. While it does not name sibling tools like get_yield_estimate or search_listings as alternatives, the exclusions strongly imply when this tool should and shouldn't be used. Lacks explicit 'when to use' guidance but has effective 'when not to use' statements.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_yield_estimateBuild an Illustrative Long-Term Rental ScenarioA
Read-only
Inspect

Calculate an illustrative long-term-rent scenario only from caller-supplied purchase price, monthly rent, occupied months, and annual operating costs. No Evlek market baseline or occupancy assumption is used; outputs are not observed income, forecasts, guarantees, or advice.

ParametersJSON Schema
NameRequiredDescriptionDefault
cityNo
monthlyRentGBPYesUser-supplied monthly long-term rent assumption in GBP
occupiedMonthsYesUser-supplied number of occupied and paid months in the 12-month scenario period
purchasePriceGBPYesUser-supplied purchase price in GBP
annualOperatingCostsGBPYesUser-supplied annual operating-cost assumption in GBP

Output Schema

ParametersJSON Schema
NameRequiredDescription
cityYes
dataSourceYes
assumptionsNo
netYieldPctNo
estimateTypeNo
netAnnualGBPNo
grossYieldPctYes
breakevenYearsNo
grossAnnualGBPNo
monthlyRentGBPYes
occupiedMonthsNo
purchasePriceGBPYes
usesLiveListingDataNo

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate read-only and non-destructive behavior. The description adds valuable disclosure that outputs are illustrative, not observed income, forecasts, guarantees, or advice. Also clarifies no external data is used, which goes beyond annotation hints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with function then limitations. No redundant information. Every sentence contributes to understanding the tool's scope and caveats.

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?

The description, combined with the output schema and annotations, provides a complete picture. It covers inputs, computation scope, exclusions, and important disclaimers. The presence of an output schema means return value documentation is handled externally.

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 covers 80% of parameters with descriptions. The description mentions the four key inputs but does not add per-parameter semantics beyond what schema already provides. It also omits the optional city parameter. Baseline 3 is appropriate.

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?

The description clearly states the tool calculates an illustrative long-term-rent scenario using specific caller-supplied inputs. It distinguishes itself from market-data tools by explicitly stating no market baseline or occupancy assumption is used.

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?

The description implies when to use this tool: when the user has their own assumptions and wants an illustrative calculation. It explicitly excludes market baselines and occupancy assumptions, which signals not to use it for market-based estimates. However, it does not name alternative sibling tools explicitly, so it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_locationsList Valid Evlek Cities and DistrictsA
Read-only
Inspect

Return canonical KKTC city slugs plus districts represented by active Evlek sale or long-term-rent listings. Live inventory-location facts only; holiday-home inventory remains unavailable.

ParametersJSON Schema
NameRequiredDescriptionDefault
cityNoOptional — limit districts to a single city slug.

Output Schema

ParametersJSON Schema
NameRequiredDescription
citiesYes
dataSourceNo
isEstimateNo

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (readOnlyHint, openWorldHint, destructiveHint), the description adds valuable context: data is derived from live Evlek sale and long-term-rent listings, and holiday-home inventory is explicitly excluded. This clarifies the tool's data coverage and currentness.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the action verb 'Return', and each sentence earns its place: the first defines the output, the second adds a necessary data-scope qualifier. There is no redundant or extraneous text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with zero required parameters, one optional parameter, strong annotations, and an output schema, the description covers the key facts: what is returned, the data source, and exclusions. It lacks explicit use-case guidance but is otherwise complete for its scope.

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?

The schema already fully documents the only parameter 'city' with an enum and description. The tool description reiterates the concept of city slugs but does not add material semantics beyond the schema, so a baseline score of 3 is appropriate.

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?

The description clearly states the tool returns 'canonical KKTC city slugs plus districts' from active Evlek listings, using a specific verb and resource. This distinguishes it from sibling tools like get_district_profile or suggest_neighborhood by emphasizing its role as a source of valid slug data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies this tool is used to obtain canonical location slugs for querying other tools, but it does not explicitly state when to use it over alternatives or exclude inappropriate cases. No sibling tool is referenced, so usage guidance is only implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

payment_planCurrency Conversion Only (legacy payment_plan name)A
Read-only
Inspect

The payment_plan identifier is retained only for compatibility. This tool converts an entered property asking-price amount across GBP/EUR/USD/TRY when complete, valid, fresh, date-stamped stored FX rates are available; otherwise it fails closed without amounts. It does not produce a payment plan, deposit schedule, installment schedule, acquisition-cost estimate, or advice.

ParametersJSON Schema
NameRequiredDescriptionDefault
priceYesEntered property asking-price amount; not a deposit or installment.
currencyNoCurrency of the price (default GBP).

Output Schema

ParametersJSON Schema
NameRequiredDescription
fxNo
amountsYes
priceGBPYes
dataSourceNo
inputCurrencyYes
usesStoredRateNo

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

While annotations already declare readOnlyHint=true, openWorldHint=true, and destructiveHint=false, the description adds critical behavioral details: it fails closed without amounts if rates are not complete/valid/fresh/date-stamped, and it explicitly disclaims generating any payment-plan-related outputs. This goes beyond what annotations provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences: first disarms the legacy name, second states the core function and condition, third eliminates common misconceptions. Every sentence earns its place, and the main purpose is front-loaded.

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?

Given the tool's simplicity (two parameters, full schema descriptions, output schema present, and strong annotations), the description adequately covers what the tool does, under what conditions it works, and what it does not do. No critical selection-relevant information is missing.

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?

The input schema has 100% description coverage, including clear descriptions for both 'price' and 'currency.' The tool description restates the scope (asking-price amount, not deposit) but adds no new parameter-level information beyond the schema. The schema already carries the burden, so a baseline of 3 is appropriate.

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?

The description explicitly states that the tool converts an entered property asking-price amount across GBP/EUR/USD/TRY, with the title reinforcing 'Currency Conversion Only.' It also distinguishes itself by listing what it does not do (payment plan, deposit schedule, etc.), making its purpose unmistakable.

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?

The description clearly presents the tool's use case (currency conversion of an asking price) and even clarifies that the legacy name is retained only for compatibility. However, it does not explicitly name alternative tools for related tasks or provide exclusion criteria, so it stops short of a full 5.

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 ListingsA
Read-only
Inspect

Search live active sale and long-term-rent listings on Evlek. Results are newest-first by default; limit caps returned rows and totalMatched reports the full match count. Returns advertised asking-price and listing facts only; not valuation, verification of property-specific claims, forecast, ranking, or recommendation.

ParametersJSON Schema
NameRequiredDescriptionDefault
cityNoCity to filter
typeNoListing type
limitNoResult count (integer 1-10, default 5)
sortByNoSort order (default: newest)
bedroomsNoBedroom count (integer 0-10)
maxPriceNoMax price in GBP
minPriceNoMin price in GBP
propertyTypeNoProperty type filter

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
factTypeNo
listingsYes
dataSourceNo
isEstimateNo
sortAppliedYes
totalMatchedYes
appliedFiltersYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (readOnlyHint=true, openWorldHint=true, destructiveHint=false), the description discloses that results are newest-first by default, that `limit` caps returned rows while `totalMatched` reports the full match count, and that output is limited to advertised listing facts. This adds meaningful behavioral detail about ordering, result sizing, and content boundaries that the annotations do not provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each earning its place: the first identifies the resource and scope, the second covers ordering and result-count semantics, and the third clarifies exclusions. The most important information is front-loaded and there is no 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?

The description covers the resource scope, default ordering, limit/totalMatched behavior, and what is excluded, while the output schema handles return values. Given the annotations covering safety and the rich input schema, nothing critical is missing for an agent to invoke this tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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 adds value by explaining the relationship between `limit` and `totalMatched`: limit caps only the returned rows, while totalMatched exposes the full match count. This pagination semantics is not present in the schema, justifying a score above baseline.

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?

The description states the specific verb ('Search'), the resource ('live active sale and long-term-rent listings on Evlek'), and the scope of output ('advertised asking-price and listing facts only'). It explicitly excludes valuation, verification, forecast, ranking, and recommendation, which clearly distinguishes it from siblings like get_yield_estimate and get_price_index.

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?

The description does not name sibling tools, but the clause 'not valuation, verification of property-specific claims, forecast, ranking, or recommendation' gives clear implicit guidance on when not to use this tool. It establishes context for selecting alternatives, though it stops short of explicitly directing the agent to a specific sibling.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

student_housingIllustrative Student-Housing Rental ScenarioA
Read-only
Inspect

Calculate one illustrative student-rent scenario from caller-supplied monthly rent and occupied months. The university only supplies location context; no Evlek rent or occupancy baseline, observed demand/income, forecast, guarantee, or advice is used.

ParametersJSON Schema
NameRequiredDescriptionDefault
universityYesUniversity name, short code, or known alias, matched against the canonical Evlek university catalog.
purchasePriceNoOptional purchase price in GBP (enables yield).
monthlyRentGBPYesUser-supplied monthly long-term rent assumption in GBP.
occupiedMonthsYesUser-supplied number of occupied and paid months in the 12-month scenario period.

Output Schema

ParametersJSON Schema
NameRequiredDescription
cityYes
dataSourceYes
universityYes
assumptionsNo
estimateTypeNo
monthlyRentGBPYes
occupiedMonthsNo
grossRentToPricePctNo
usesLiveListingDataNo
modelledGrossRentGBPNo

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=true and destructiveHint=false, which the description does not contradict. It adds value by clarifying that the output is illustrative and that the tool does not use or imply any baseline data, forecast, or advice, setting expectations about the limited scope and nature of the calculation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact, two sentences long, with the primary action and key inputs in the first sentence. It front-loads the core purpose and adds a clarifying limitation in the second, with no wasted words.

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?

Given the tool's simplicity, the presence of an output schema, and annotations, the description sufficiently covers the essential context. It explains the illustrative nature and what inputs are used, while the schema and output schema handle parameter and return details. No critical information is missing.

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 description coverage is 100%, so the schema already documents all parameters. The description mentions 'caller-supplied monthly rent and occupied months' but adds no additional meaning beyond what the schema provides. It does not discuss the optional purchasePrice, leaving the schema to carry that information.

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?

The description states a specific verb and resource: 'Calculate one illustrative student-rent scenario from caller-supplied monthly rent and occupied months.' This clearly distinguishes it from sibling tools that retrieve listings or price indices, as it is a calculation tool with a specific, narrow purpose.

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?

The description provides clear context: this tool is for an illustrative scenario, not a forecast, and explicitly states that no Evlek baseline, demand/income, guarantee, or advice is used. However, it does not explicitly name alternative tools for when a forecast or more detailed analysis is needed, so it stops short of full usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

suggest_neighborhoodCurated Neighborhood Context by PersonaA
Read-only
Inspect

Return static editorial orientation context for a persona and optional preferences. It contains no price or yield figures and is not live listing data, a ranking, suitability finding, valuation, or recommendation.

ParametersJSON Schema
NameRequiredDescriptionDefault
personaYes
preferencesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
personaYes
dataSourceNo
preferencesNo
suggestionsYes
notRecommendationNo

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true. The description adds that the content is 'static editorial orientation context,' indicating no live computation or dynamic data. This adds context beyond the annotations without contradicting them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise, with two sentences that front-load the primary purpose and immediately follow with clarifying exclusions. No wasted words or redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of an output schema and read-only annotations, the description covers the essential aspects. However, it lacks a positive explanation of what the tool returns and how the context is useful, relying heavily on negative claims. This is adequate but not fully comprehensive for a tool with this level of complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description only mentions 'persona and optional preferences' without explaining the meaning or effect of each enum value. While the schema provides enums, the description does not add sufficient detail to clarify how preferences influence the orientation context, leaving the agent with limited semantic understanding.

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?

The description clearly states the tool's function: returning static editorial orientation context for a persona and optional preferences. It further distinguishes itself by explicitly listing what it does not contain (price/yield figures, live listings, rankings, etc.), which helps differentiate it from sibling tools like get_yield_estimate and search_listings.

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?

The description provides clear exclusions (not live data, not a recommendation) that implicitly guide when not to use this tool, but it does not explicitly name alternative tools or provide positive use-case scenarios. The context is clear but lacks explicit when-to-use guidance.

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. Dates show when Glama detected each change.

  1. 3 tool updates
    • Changedget_listing_by_number1 field changed
      • addedOutput schema / properties / locationPrecision
        Added value: +{
        +  "enum": [
        +    "exact",
        +    "district",
        +    "city"
        +  ],
        +  "type": "string"
        +}
    • Changedget_listing_detail1 field changed
      • addedOutput schema / properties / locationPrecision
        Added value: +{
        +  "enum": [
        +    "exact",
        +    "district",
        +    "city"
        +  ],
        +  "type": "string"
        +}
    • Changedsearch_listings1 field changed
      • addedOutput schema / properties / listings / items / properties / locationPrecision
        Added value: +{
        +  "enum": [
        +    "exact",
        +    "district",
        +    "city"
        +  ],
        +  "type": "string"
        +}
  2. 1 tool update
    • Changedsearch_listings1 field changed
      • changedInput schema / properties / propertyType / enum
        Previous 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"
        +]
  3. 13 tool updates
    • Changedcompare_cities3 fields changed
      • addedOutput schema / properties / dataSource
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / isEstimate
        Added value: +{
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / metricType
        Added value: +{
        +  "type": "string"
        +}
    • Changedcompare_properties3 fields changed
      • addedOutput schema / properties / dataSource
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / isEstimate
        Added value: +{
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / metricType
        Added value: +{
        +  "type": "string"
        +}
    • Changedget_district_profile8 fields changed
      • addedOutput schema / properties / dataSource
        Added value: +{
        +  "type": "string"
        +}
      • removedOutput schema / properties / grossYieldPct
        Removed value: -{
        -  "type": [
        -    "number",
        -    "null"
        -  ]
        -}
      • addedOutput schema / properties / indicativeGrossRentToPricePct
        Added value: +{
        +  "type": [
        +    "number",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / isObservedYield
        Added value: +{
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / metricType
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / personaContexts
        Added value: +{
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • removedOutput schema / properties / personas
        Removed value: -{
        -  "items": {
        -    "type": "string"
        -  },
        -  "type": "array"
        -}
      • addedOutput schema / properties / yieldMetricType
        Added value: +{
        +  "type": "string"
        +}
    • Changedget_listing_by_number6 fields changed
      • removedOutput schema / properties / dataQuality
        Removed value: -{
        -  "properties": {
        -    "priceOutlier": {
        -      "type": "boolean"
        -    }
        -  },
        -  "type": "object"
        -}
      • addedOutput schema / properties / dataSource
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / factType
        Added value: +{
        +  "type": "string"
        +}
      • removedOutput schema / properties / fxRates
        Removed value: -{
        -  "properties": {
        -    "base": {
        -      "type": "string"
        -    },
        -    "isFallback": {
        -      "type": "boolean"
        -    },
        -    "rates": {
        -      "type": "object"
        -    },
        -    "source": {
        -      "type": "string"
        -    },
        -    "updatedAt": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    }
        -  },
        -  "type": "object"
        -}
      • addedOutput schema / properties / isEstimate
        Added value: +{
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / virtualStaging / properties / items / items / properties / provenance
        Added value: +{
        +  "properties": {
        +    "digitalSourceType": {
        +      "type": "string"
        +    },
        +    "generatedAt": {
        +      "type": "string"
        +    },
        +    "humanReview": {
        +      "type": "string"
        +    },
        +    "kind": {
        +      "type": "string"
        +    },
        +    "model": {
        +      "type": "string"
        +    },
        +    "modelVersion": {
        +      "type": "string"
        +    },
        +    "originalRetained": {
        +      "type": "boolean"
        +    },
        +    "outputId": {
        +      "type": "string"
        +    },
        +    "outputSha256": {
        +      "type": "string"
        +    },
        +    "provider": {
        +      "type": "string"
        +    },
        +    "version": {
        +      "type": "number"
        +    },
        +    "visibleDisclosureApplied": {
        +      "type": "boolean"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedget_listing_detail6 fields changed
      • removedOutput schema / properties / dataQuality
        Removed value: -{
        -  "properties": {
        -    "priceOutlier": {
        -      "type": "boolean"
        -    }
        -  },
        -  "type": "object"
        -}
      • addedOutput schema / properties / dataSource
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / factType
        Added value: +{
        +  "type": "string"
        +}
      • removedOutput schema / properties / fxRates
        Removed value: -{
        -  "properties": {
        -    "base": {
        -      "type": "string"
        -    },
        -    "isFallback": {
        -      "type": "boolean"
        -    },
        -    "rates": {
        -      "type": "object"
        -    },
        -    "source": {
        -      "type": "string"
        -    },
        -    "updatedAt": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    }
        -  },
        -  "type": "object"
        -}
      • addedOutput schema / properties / isEstimate
        Added value: +{
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / virtualStaging / properties / items / items / properties / provenance
        Added value: +{
        +  "properties": {
        +    "digitalSourceType": {
        +      "type": "string"
        +    },
        +    "generatedAt": {
        +      "type": "string"
        +    },
        +    "humanReview": {
        +      "type": "string"
        +    },
        +    "kind": {
        +      "type": "string"
        +    },
        +    "model": {
        +      "type": "string"
        +    },
        +    "modelVersion": {
        +      "type": "string"
        +    },
        +    "originalRetained": {
        +      "type": "boolean"
        +    },
        +    "outputId": {
        +      "type": "string"
        +    },
        +    "outputSha256": {
        +      "type": "string"
        +    },
        +    "provider": {
        +      "type": "string"
        +    },
        +    "version": {
        +      "type": "number"
        +    },
        +    "visibleDisclosureApplied": {
        +      "type": "boolean"
        +    }
        +  },
        +  "type": "object"
        +}
    • Removedget_market_overview
    • Changedget_price_index3 fields changed
      • addedOutput schema / properties / dataSource
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / isEstimate
        Added value: +{
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / metricType
        Added value: +{
        +  "type": "string"
        +}
    • Changedget_yield_estimate15 fields changed
      • addedInput schema / properties / annualOperatingCostsGBP
        Added value: +{
        +  "description": "User-supplied annual operating-cost assumption in GBP",
        +  "maximum": 10000000,
        +  "minimum": 0,
        +  "type": "number"
        +}
      • removedInput schema / properties / bedrooms
        Removed value: -{
        -  "description": "Bedroom count (integer 0-10)",
        -  "maximum": 10,
        -  "minimum": 0,
        -  "type": "number"
        -}
      • addedInput schema / properties / monthlyRentGBP
        Added value: +{
        +  "description": "User-supplied monthly long-term rent assumption in GBP",
        +  "maximum": 1000000,
        +  "minimum": 1,
        +  "type": "number"
        +}
      • addedInput schema / properties / occupiedMonths
        Added value: +{
        +  "description": "User-supplied number of occupied and paid months in the 12-month scenario period",
        +  "maximum": 12,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • removedInput schema / properties / purchasePrice
        Removed value: -{
        -  "description": "Purchase price in GBP",
        -  "maximum": 10000000,
        -  "minimum": 10000,
        -  "type": "number"
        -}
      • addedInput schema / properties / purchasePriceGBP
        Added value: +{
        +  "description": "User-supplied purchase price in GBP",
        +  "maximum": 10000000,
        +  "minimum": 10000,
        +  "type": "number"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "city",
        -  "purchasePrice"
        -]New value: +[
        +  "purchasePriceGBP",
        +  "monthlyRentGBP",
        +  "annualOperatingCostsGBP",
        +  "occupiedMonths"
        +]
      • addedOutput schema / properties / assumptions
        Added value: +{
        +  "type": "object"
        +}
      • changedOutput schema / properties / breakevenYears / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • changedOutput schema / properties / city / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / cityBenchmark
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / dataSource / description
        Removed value: -"modelled — not derived from live rental listings"
      • addedOutput schema / properties / estimateType
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / occupiedMonths
        Added value: +{
        +  "type": "integer"
        +}
      • addedOutput schema / properties / usesLiveListingData
        Added value: +{
        +  "type": "boolean"
        +}
    • Changedlist_locations2 fields changed
      • addedOutput schema / properties / dataSource
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / isEstimate
        Added value: +{
        +  "type": "boolean"
        +}
    • Changedpayment_plan6 fields changed
      • removedInput schema / properties / offPlan
        Removed value: -{
        -  "description": "True if off-plan (under construction).",
        -  "type": "boolean"
        -}
      • changedInput schema / properties / price / description
        Previous value: -"Property price."New value: +"Entered property asking-price amount; not a deposit or installment."
      • addedOutput schema / properties / dataSource
        Added value: +{
        +  "type": "string"
        +}
      • removedOutput schema / properties / offPlan
        Removed value: -{
        -  "type": "boolean"
        -}
      • addedOutput schema / properties / usesStoredRate
        Added value: +{
        +  "type": "boolean"
        +}
      • removedOutput schema / properties / warnings
        Removed value: -{
        -  "items": {
        -    "type": "string"
        -  },
        -  "type": "array"
        -}
    • Changedsearch_listings5 fields changed
      • changedInput schema / properties / type / enum
        Previous value: -[
        -  "sale",
        -  "rent",
        -  "daily"
        -]New value: +[
        +  "sale",
        +  "rent"
        +]
      • addedOutput schema / properties / dataSource
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / factType
        Added value: +{
        +  "type": "string"
        +}
      • removedOutput schema / properties / fxRates
        Removed value: -{
        -  "properties": {
        -    "base": {
        -      "type": "string"
        -    },
        -    "isFallback": {
        -      "type": "boolean"
        -    },
        -    "rates": {
        -      "type": "object"
        -    },
        -    "source": {
        -      "type": "string"
        -    },
        -    "updatedAt": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    }
        -  },
        -  "type": "object"
        -}
      • addedOutput schema / properties / isEstimate
        Added value: +{
        +  "type": "boolean"
        +}
    • Changedstudent_housing16 fields changed
      • removedInput schema / properties / bedrooms
        Removed value: -{
        -  "description": "Bedroom count (0=studio).",
        -  "maximum": 10,
        -  "minimum": 0,
        -  "type": "number"
        -}
      • addedInput schema / properties / monthlyRentGBP
        Added value: +{
        +  "description": "User-supplied monthly long-term rent assumption in GBP.",
        +  "maximum": 1000000,
        +  "minimum": 1,
        +  "type": "number"
        +}
      • addedInput schema / properties / occupiedMonths
        Added value: +{
        +  "description": "User-supplied number of occupied and paid months in the 12-month scenario period.",
        +  "maximum": 12,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "university"
        -]New value: +[
        +  "university",
        +  "monthlyRentGBP",
        +  "occupiedMonths"
        +]
      • removedOutput schema / properties / academicAnnualGBP
        Removed value: -{
        -  "type": "number"
        -}
      • removedOutput schema / properties / academicYieldPct
        Removed value: -{
        -  "type": [
        -    "number",
        -    "null"
        -  ]
        -}
      • addedOutput schema / properties / assumptions
        Added value: +{
        +  "type": "object"
        +}
      • removedOutput schema / properties / cityBand
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / dataSource / description
        Removed value: -"modelled — not derived from live rental listings"
      • addedOutput schema / properties / estimateType
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / grossRentToPricePct
        Added value: +{
        +  "type": [
        +    "number",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / modelledGrossRentGBP
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / occupiedMonths
        Added value: +{
        +  "type": "integer"
        +}
      • addedOutput schema / properties / usesLiveListingData
        Added value: +{
        +  "type": "boolean"
        +}
      • removedOutput schema / properties / yearRoundAnnualGBP
        Removed value: -{
        -  "type": "number"
        -}
      • removedOutput schema / properties / yearRoundYieldPct
        Removed value: -{
        -  "type": [
        -    "number",
        -    "null"
        -  ]
        -}
    • Changedsuggest_neighborhood5 fields changed
      • removedInput schema / properties / budgetGBP
        Removed value: -{
        -  "maximum": 5000000,
        -  "minimum": 20000,
        -  "type": "number"
        -}
      • changedInput schema / properties / persona / enum
        Previous value: -[
        -  "retiree",
        -  "investor",
        -  "student",
        -  "family",
        -  "digital_nomad",
        -  "vacation"
        -]New value: +[
        +  "retiree",
        +  "student",
        +  "family",
        +  "digital_nomad"
        +]
      • removedOutput schema / properties / budgetGBP
        Removed value: -{
        -  "type": [
        -    "number",
        -    "null"
        -  ]
        -}
      • addedOutput schema / properties / dataSource
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / notRecommendation
        Added value: +{
        +  "type": "boolean"
        +}
  4. 15 tool updates
    • Changedcompare_cities1 field changed
      • addedOutput schema / required
        Added value: +[
        +  "type",
        +  "cities"
        +]
    • Changedcompare_properties1 field changed
      • addedOutput schema / required
        Added value: +[
        +  "count",
        +  "listings"
        +]
    • Changedfetch1 field changed
      • addedOutput schema / required
        Added value: +[
        +  "id",
        +  "title",
        +  "text",
        +  "url"
        +]
    • Changedget_district_profile1 field changed
      • addedOutput schema / required
        Added value: +[
        +  "city",
        +  "district",
        +  "totalActive"
        +]
    • Changedget_listing_by_number6 fields changed
      • changedInput schema / properties / listing_number / description
        Previous value: -"Evlek listing number, e.g. \"EVL-123456\" or \"123456\"."New value: +"Evlek listing number, e.g. \"EVL-123456\", \"123456\", or the bare number 123456."
      • changedInput schema / properties / listing_number / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "number"
        +]
      • addedOutput schema / properties / dataQuality
        Added value: +{
        +  "properties": {
        +    "priceOutlier": {
        +      "type": "boolean"
        +    }
        +  },
        +  "type": "object"
        +}
      • addedOutput schema / properties / photosShown
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / photosTruncated
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / required
        Added value: +[
        +  "found"
        +]
    • Changedget_listing_detail4 fields changed
      • addedOutput schema / properties / dataQuality
        Added value: +{
        +  "properties": {
        +    "priceOutlier": {
        +      "type": "boolean"
        +    }
        +  },
        +  "type": "object"
        +}
      • addedOutput schema / properties / photosShown
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / photosTruncated
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / required
        Added value: +[
        +  "found"
        +]
    • Changedget_market_overview1 field changed
      • addedOutput schema / required
        Added value: +[
        +  "generatedAt",
        +  "totalActiveListings",
        +  "cities"
        +]
    • Changedget_price_index1 field changed
      • addedOutput schema / required
        Added value: +[
        +  "type",
        +  "cities"
        +]
    • Changedget_yield_estimate1 field changed
      • addedOutput schema / required
        Added value: +[
        +  "city",
        +  "purchasePriceGBP",
        +  "monthlyRentGBP",
        +  "grossYieldPct",
        +  "dataSource"
        +]
    • Changedlist_locations1 field changed
      • addedOutput schema / required
        Added value: +[
        +  "cities"
        +]
    • Changedpayment_plan1 field changed
      • addedOutput schema / required
        Added value: +[
        +  "inputCurrency",
        +  "priceGBP",
        +  "amounts"
        +]
    • Changedsearch3 fields changed
      • addedOutput schema / properties / outOfScope
        Added value: +{
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / unresolved
        Added value: +{
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / required
        Added value: +[
        +  "results"
        +]
    • Changedsearch_listings7 fields changed
      • addedInput schema / properties / propertyType
        Added value: +{
        +  "description": "Property type filter",
        +  "enum": [
        +    "apartment",
        +    "residence",
        +    "villa",
        +    "twin",
        +    "detached",
        +    "bungalow",
        +    "penthouse",
        +    "studio",
        +    "duplex",
        +    "shop",
        +    "office",
        +    "warehouse",
        +    "whole_building",
        +    "residential_land",
        +    "commercial_land",
        +    "farmland"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / sortBy
        Added value: +{
        +  "description": "Sort order (default: newest)",
        +  "enum": [
        +    "newest",
        +    "price_asc",
        +    "price_desc",
        +    "area_desc",
        +    "price_per_sqm_asc"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / listings / items / properties / propertyType
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / listings / items / required
        Added value: +[
        +  "id",
        +  "title",
        +  "city",
        +  "district",
        +  "price",
        +  "priceGbp",
        +  "currency",
        +  "type",
        +  "url"
        +]
      • addedOutput schema / properties / sortApplied
        Added value: +{
        +  "enum": [
        +    "newest",
        +    "price_asc",
        +    "price_desc",
        +    "area_desc",
        +    "price_per_sqm_asc"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / totalMatched
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / required
        Added value: +[
        +  "count",
        +  "totalMatched",
        +  "sortApplied",
        +  "listings",
        +  "appliedFilters"
        +]
    • Changedstudent_housing1 field changed
      • addedOutput schema / required
        Added value: +[
        +  "university",
        +  "city",
        +  "monthlyRentGBP",
        +  "dataSource"
        +]
    • Changedsuggest_neighborhood1 field changed
      • addedOutput schema / required
        Added value: +[
        +  "persona",
        +  "suggestions"
        +]
  5. 4 tool updates
    • Changedget_listing_by_number1 field changed
      • addedOutput schema / properties / fxRates
        Added value: +{
        +  "properties": {
        +    "base": {
        +      "type": "string"
        +    },
        +    "isFallback": {
        +      "type": "boolean"
        +    },
        +    "rates": {
        +      "type": "object"
        +    },
        +    "source": {
        +      "type": "string"
        +    },
        +    "updatedAt": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedget_listing_detail1 field changed
      • addedOutput schema / properties / fxRates
        Added value: +{
        +  "properties": {
        +    "base": {
        +      "type": "string"
        +    },
        +    "isFallback": {
        +      "type": "boolean"
        +    },
        +    "rates": {
        +      "type": "object"
        +    },
        +    "source": {
        +      "type": "string"
        +    },
        +    "updatedAt": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedsearch1 field changed
      • addedOutput schema / properties / fxRates
        Added value: +{
        +  "type": [
        +    "object",
        +    "null"
        +  ]
        +}
    • Changedsearch_listings1 field changed
      • addedOutput schema / properties / fxRates
        Added value: +{
        +  "properties": {
        +    "base": {
        +      "type": "string"
        +    },
        +    "isFallback": {
        +      "type": "boolean"
        +    },
        +    "rates": {
        +      "type": "object"
        +    },
        +    "source": {
        +      "type": "string"
        +    },
        +    "updatedAt": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    }
        +  },
        +  "type": "object"
        +}
  6. 2 tool updates
    • Changedsearch2 fields changed
      • addedOutput schema / properties / appliedFilters
        Added value: +{
        +  "type": "object"
        +}
      • addedOutput schema / properties / listings
        Added value: +{
        +  "items": {
        +    "properties": {
        +      "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"
        +        ]
        +      },
        +      "price": {
        +        "type": "number"
        +      },
        +      "priceGbp": {
        +        "type": "number"
        +      },
        +      "title": {
        +        "type": "string"
        +      },
        +      "type": {
        +        "type": "string"
        +      },
        +      "url": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
    • Changedsearch_listings1 field changed
      • addedOutput schema / properties / appliedFilters
        Added value: +{
        +  "type": "object"
        +}
  7. 5 tool updates
    • Changedfetch2 fields changed
      • addedOutput schema / properties / coverImageUrl
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / photos
        Added value: +{
        +  "items": {
        +    "properties": {
        +      "caption": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "tags": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "url": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
    • Changedget_listing_by_number1 field changed
      • addedOutput schema / properties / virtualStaging
        Added value: +{
        +  "properties": {
        +    "available": {
        +      "type": "boolean"
        +    },
        +    "disclosure": {
        +      "type": "string"
        +    },
        +    "items": {
        +      "items": {
        +        "properties": {
        +          "afterUrl": {
        +            "type": "string"
        +          },
        +          "beforeUrl": {
        +            "type": "string"
        +          },
        +          "roomType": {
        +            "type": "string"
        +          },
        +          "style": {
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedget_listing_detail1 field changed
      • addedOutput schema / properties / virtualStaging
        Added value: +{
        +  "properties": {
        +    "available": {
        +      "type": "boolean"
        +    },
        +    "disclosure": {
        +      "type": "string"
        +    },
        +    "items": {
        +      "items": {
        +        "properties": {
        +          "afterUrl": {
        +            "type": "string"
        +          },
        +          "beforeUrl": {
        +            "type": "string"
        +          },
        +          "roomType": {
        +            "type": "string"
        +          },
        +          "style": {
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedget_market_overview6 fields changed
      • addedOutput schema / properties / cities
        Added value: +{
        +  "type": "array"
        +}
      • addedOutput schema / properties / generatedAt
        Added value: +{
        +  "type": "string"
        +}
      • removedOutput schema / properties / indexes
        Removed value: -{
        -  "type": "object"
        -}
      • removedOutput schema / properties / lastUpdated
        Removed value: -{
        -  "type": "string"
        -}
      • removedOutput schema / properties / source
        Removed value: -{
        -  "type": "string"
        -}
      • addedOutput schema / properties / totalActiveListings
        Added value: +{
        +  "type": "number"
        +}
    • Changedsearch_listings1 field changed
      • addedOutput schema / properties / listings / items
        Added value: +{
        +  "properties": {
        +    "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"
        +      ]
        +    },
        +    "price": {
        +      "type": "number"
        +    },
        +    "priceGbp": {
        +      "type": "number"
        +    },
        +    "title": {
        +      "type": "string"
        +    },
        +    "type": {
        +      "type": "string"
        +    },
        +    "url": {
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
  8. 5 tool updates
    • Removedassess_title_risk
    • Removedforeign_buyer_roadmap
    • Removedget_legal_info
    • Changedget_listing_by_number3 fields changed
      • removedOutput schema / properties / titleDeedBand
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / titleDeedLabel
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / titleDeedType
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
    • Changedget_listing_detail3 fields changed
      • removedOutput schema / properties / titleDeedBand
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / titleDeedLabel
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / titleDeedType
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
  9. 6 tool updates
    • Changedassess_title_risk2 fields changed
      • changedInput schema / properties / title_deed_type / description
        Previous value: -"KKTC koçan type: turk_kocan, esdeger_kocan, tahsis, foreign_title, kat_irtifak (legacy turkish/equivalent/allocation/foreign accepted)."New value: +"KKTC koçan type: turk_kocan, esdeger_kocan, tahsis, foreign_title, kat_irtifak, or unknown (legacy turkish/equivalent/allocation/foreign accepted)."
      • changedInput schema / properties / title_deed_type / enum
        Previous value: -[
        -  "turk_kocan",
        -  "esdeger_kocan",
        -  "tahsis",
        -  "foreign_title",
        -  "kat_irtifak"
        -]New value: +[
        +  "turk_kocan",
        +  "esdeger_kocan",
        +  "tahsis",
        +  "foreign_title",
        +  "kat_irtifak",
        +  "unknown"
        +]
    • Changedforeign_buyer_roadmap6 fields changed
      • removedOutput schema / properties / disclaimer
        Removed value: -{
        -  "type": "string"
        -}
      • removedOutput schema / properties / legalAuditStatus
        Removed value: -{
        -  "type": "string"
        -}
      • removedOutput schema / properties / process
        Removed value: -{
        -  "items": {
        -    "type": "string"
        -  },
        -  "type": "array"
        -}
      • removedOutput schema / properties / summary
        Removed value: -{
        -  "type": "string"
        -}
      • addedOutput schema / properties / topic
        Added value: +{
        +  "type": "string"
        +}
      • removedOutput schema / properties / verifyFlag
        Removed value: -{
        -  "type": "boolean"
        -}
    • Addedget_listing_by_number
    • Changedget_yield_estimate1 field changed
      • addedOutput schema / properties / dataSource
        Added value: +{
        +  "description": "modelled — not derived from live rental listings",
        +  "type": "string"
        +}
    • Addedlist_locations
    • Changedstudent_housing2 fields changed
      • changedInput schema / properties / university / description
        Previous value: -"University name or code, matched against the live roster."New value: +"University name, short code, or known alias, matched against the canonical Evlek university catalog."
      • addedOutput schema / properties / dataSource
        Added value: +{
        +  "description": "modelled — not derived from live rental listings",
        +  "type": "string"
        +}
  10. 3 tool updates
    • Addedfetch
    • Changedget_listing_detail2 fields changed
      • addedOutput schema / properties / listedAt
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / priceGbp
        Added value: +{
        +  "type": [
        +    "number",
        +    "null"
        +  ]
        +}
    • Addedsearch
  11. 1 tool update
    • Changedget_listing_detail2 fields changed
      • addedOutput schema / properties / coverImageUrl
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / photos
        Added value: +{
        +  "items": {
        +    "properties": {
        +      "caption": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "tags": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "url": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
  12. 14 tool updates
    • Addedassess_title_risk
    • Changedcompare_cities1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "cities": {
        +      "type": "array"
        +    },
        +    "generatedAt": {
        +      "type": "string"
        +    },
        +    "type": {
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedcompare_properties1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "count": {
        +      "type": "number"
        +    },
        +    "listings": {
        +      "type": "array"
        +    },
        +    "missing": {
        +      "type": "number"
        +    }
        +  },
        +  "type": "object"
        +}
    • Addedforeign_buyer_roadmap
    • Changedget_district_profile1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "city": {
        +      "type": "string"
        +    },
        +    "district": {
        +      "type": "string"
        +    },
        +    "grossYieldPct": {
        +      "type": [
        +        "number",
        +        "null"
        +      ]
        +    },
        +    "personas": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "rent": {
        +      "type": [
        +        "object",
        +        "null"
        +      ]
        +    },
        +    "sale": {
        +      "type": [
        +        "object",
        +        "null"
        +      ]
        +    },
        +    "totalActive": {
        +      "type": "number"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedget_legal_info1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "topic": {
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
    • Addedget_listing_detail
    • Changedget_market_overview1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "indexes": {
        +      "type": "object"
        +    },
        +    "investmentHighlights": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "lastUpdated": {
        +      "type": "string"
        +    },
        +    "source": {
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedget_price_index1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "cities": {
        +      "type": "array"
        +    },
        +    "generatedAt": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "totalListings": {
        +      "type": [
        +        "number",
        +        "null"
        +      ]
        +    },
        +    "type": {
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedget_yield_estimate1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "breakevenYears": {
        +      "type": "number"
        +    },
        +    "city": {
        +      "type": "string"
        +    },
        +    "cityBenchmark": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "grossAnnualGBP": {
        +      "type": "number"
        +    },
        +    "grossYieldPct": {
        +      "type": "number"
        +    },
        +    "monthlyRentGBP": {
        +      "type": "number"
        +    },
        +    "netAnnualGBP": {
        +      "type": "number"
        +    },
        +    "netYieldPct": {
        +      "type": "number"
        +    },
        +    "purchasePriceGBP": {
        +      "type": "number"
        +    }
        +  },
        +  "type": "object"
        +}
    • Addedpayment_plan
    • Changedsearch_listings1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "count": {
        +      "type": "number"
        +    },
        +    "listings": {
        +      "type": "array"
        +    }
        +  },
        +  "type": "object"
        +}
    • Addedstudent_housing
    • Changedsuggest_neighborhood1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "budgetGBP": {
        +      "type": [
        +        "number",
        +        "null"
        +      ]
        +    },
        +    "persona": {
        +      "type": "string"
        +    },
        +    "preferences": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "suggestions": {
        +      "type": "array"
        +    }
        +  },
        +  "type": "object"
        +}
  13. 3 tool updates
    • Changedcompare_cities1 field changed
      • changedInput schema / properties / cities / items / enum
        Previous value: -[
        -  "girne",
        -  "iskele",
        -  "lefkosa",
        -  "gazimagusa"
        -]New value: +[
        +  "girne",
        +  "iskele",
        +  "lefkosa",
        +  "gazimagusa",
        +  "guzelyurt",
        +  "lefke"
        +]
    • Changedget_price_index1 field changed
      • changedInput schema / properties / city / enum
        Previous value: -[
        -  "girne",
        -  "iskele",
        -  "lefkosa",
        -  "gazimagusa"
        -]New value: +[
        +  "girne",
        +  "iskele",
        +  "lefkosa",
        +  "gazimagusa",
        +  "guzelyurt",
        +  "lefke"
        +]
    • Changedget_yield_estimate1 field changed
      • changedInput schema / properties / city / enum
        Previous value: -[
        -  "girne",
        -  "iskele",
        -  "lefkosa",
        -  "gazimagusa"
        -]New value: +[
        +  "girne",
        +  "iskele",
        +  "lefkosa",
        +  "gazimagusa",
        +  "guzelyurt",
        +  "lefke"
        +]
  14. 6 tool updates
    • Changedcompare_cities5 fields changed
      • addedInput schema / properties / cities / description
        Added value: +"Cities to compare (2-4)"
      • removedInput schema / properties / cities / maxItems
        Removed value: -4
      • removedInput schema / properties / cities / minItems
        Removed value: -2
      • removedInput schema / properties / type / default
        Removed value: -"sale"
      • addedInput schema / properties / type / description
        Added value: +"Sale or rent (default: sale)"
    • Changedcompare_properties2 fields changed
      • removedInput schema / properties / listing_ids / maxItems
        Removed value: -4
      • removedInput schema / properties / listing_ids / minItems
        Removed value: -2
    • Changedget_district_profile3 fields changed
      • addedInput schema / properties / district / description
        Added value: +"District name (2-60 chars)"
      • removedInput schema / properties / district / maxLength
        Removed value: -60
      • removedInput schema / properties / district / minLength
        Removed value: -2
    • Changedget_price_index2 fields changed
      • removedInput schema / properties / type / default
        Removed value: -"sale"
      • addedInput schema / properties / type / description
        Added value: +"Sale or rent (default: sale)"
    • Changedget_yield_estimate2 fields changed
      • addedInput schema / properties / bedrooms / description
        Added value: +"Bedroom count (integer 0-10)"
      • changedInput schema / properties / bedrooms / type
        Previous value: -"integer"New value: +"number"
    • Changedsearch_listings5 fields changed
      • addedInput schema / properties / bedrooms / description
        Added value: +"Bedroom count (integer 0-10)"
      • changedInput schema / properties / bedrooms / type
        Previous value: -"integer"New value: +"number"
      • removedInput schema / properties / limit / default
        Removed value: -5
      • addedInput schema / properties / limit / description
        Added value: +"Result count (integer 1-10, default 5)"
      • changedInput schema / properties / limit / type
        Previous value: -"integer"New value: +"number"

Frequently Asked Questions

Discussions

No comments yet. Be the first to start the discussion!

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Provides comprehensive real estate market intelligence, property valuation, and investment analysis for AI agents. Unifies data from multiple sources like Zillow, Redfin, and public records into a single MCP interface.
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Enables AI-powered real estate analysis with built-in EU AI Act compliance, providing a production-ready MCP server for property insights and governance.
    1
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Remote MCP server for Saudi real estate data, giving AI assistants access to 65,000+ rental and sale property listings across 5 Saudi cities with market analytics and price trends.
    1
    -
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

TDQS

A3.9/5.0
Disambiguation2/5

Several tools have overlapping purposes: fetch and get_listing_detail both return full listing details (differing only by ID type), and search and search_listings both perform listing searches (differing by query style). The payment_plan tool is misleadingly named as it only converts currency, not plan payments.

Naming Consistency3/5

Most tools follow a verb_noun pattern (compare_cities, get_listing_detail, search_listings), but exceptions like fetch, search, payment_plan, and student_housing break the pattern. The mix is readable but not fully consistent.

Tool Count4/5

14 tools is within the typical well-scoped range, but the set includes redundant pairs (fetch/get_listing_detail and search/search_listings) that could be consolidated, making it feel slightly inflated for the actual functionality.

Completeness4/5

The server covers core discovery (search, get detail), aggregate pricing (index, district, city comparisons), and specialized calculations (yield, student housing). As a read-only property search server it is fairly complete, though it lacks explicit filter/list-by-type tools beyond search_listings.