Evlek — Northern Cyprus Property MCP Server
Server Details
AI-native property MCP for Northern Cyprus (KKTC/TRNC): listings, prices, districts, yields.
- 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 toolscompare_citiesCompare Northern Cyprus Cities Side-by-SideARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Sale or rent (default: sale) | |
| cities | Yes | Cities to compare (2-4) |
Output Schema
| Name | Required | Description |
|---|---|---|
| type | Yes | |
| cities | Yes | |
| dataSource | No | |
| isEstimate | No | |
| metricType | No | |
| generatedAt | No |
TDQS
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.
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.
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.
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.
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.
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-SideARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| listing_ids | Yes | Evlek listing UUIDs (2-4) |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | |
| missing | No | |
| listings | Yes | |
| dataSource | No | |
| isEstimate | No | |
| metricType | No |
TDQS
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.
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.
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.
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.
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.
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 detailARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Evlek listing id (UUID) from search |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| url | Yes | |
| text | Yes | |
| title | Yes | |
| photos | No | |
| metadata | No | |
| coverImageUrl | No |
TDQS
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.
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.
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.
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.
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.
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 DistrictARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| city | Yes | ||
| district | Yes | District name (2-60 chars) |
Output Schema
| Name | Required | Description |
|---|---|---|
| city | Yes | |
| rent | No | |
| sale | No | |
| district | Yes | |
| dataSource | No | |
| metricType | No | |
| totalActive | Yes | |
| isObservedYield | No | |
| personaContexts | No | |
| yieldMetricType | No | |
| indicativeGrossRentToPricePct | No |
TDQS
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.
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.
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.
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.
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.
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 NumberARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| listing_number | Yes | Evlek listing number, e.g. "EVL-123456", "123456", or the bare number 123456. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| url | No | |
| city | No | |
| type | No | |
| found | Yes | |
| price | No | |
| title | No | |
| photos | No | |
| areaSqm | No | |
| bedrooms | No | |
| currency | No | |
| district | No | |
| factType | No | |
| features | No | |
| listedAt | No | |
| priceGbp | No | |
| amenities | No | |
| bathrooms | No | |
| furnished | No | |
| dataSource | No | |
| isEstimate | No | |
| photoCount | No | |
| photosShown | No | |
| coverImageUrl | No | |
| listingNumber | No | |
| pricePerSqmGBP | No | |
| virtualStaging | No | |
| photosTruncated | No | |
| locationPrecision | No |
TDQS
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.
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.
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.
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.
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.
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 ListingARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| property_id | Yes | Evlek listing UUID |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| url | No | |
| city | No | |
| type | No | |
| found | Yes | |
| price | No | |
| title | No | |
| photos | No | |
| areaSqm | No | |
| bedrooms | No | |
| currency | No | |
| district | No | |
| factType | No | |
| features | No | |
| listedAt | No | |
| priceGbp | No | |
| amenities | No | |
| bathrooms | No | |
| furnished | No | |
| dataSource | No | |
| isEstimate | No | |
| photoCount | No | |
| photosShown | No | |
| coverImageUrl | No | |
| listingNumber | No | |
| pricePerSqmGBP | No | |
| virtualStaging | No | |
| photosTruncated | No | |
| locationPrecision | No |
TDQS
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.
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.
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.
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.
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.
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 IndexARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | ||
| type | No | Sale or rent (default: sale) |
Output Schema
| Name | Required | Description |
|---|---|---|
| type | Yes | |
| cities | Yes | |
| dataSource | No | |
| isEstimate | No | |
| metricType | No | |
| generatedAt | No | |
| totalListings | No |
TDQS
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.
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.
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.
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.
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.
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 ScenarioARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | ||
| monthlyRentGBP | Yes | User-supplied monthly long-term rent assumption in GBP | |
| occupiedMonths | Yes | User-supplied number of occupied and paid months in the 12-month scenario period | |
| purchasePriceGBP | Yes | User-supplied purchase price in GBP | |
| annualOperatingCostsGBP | Yes | User-supplied annual operating-cost assumption in GBP |
Output Schema
| Name | Required | Description |
|---|---|---|
| city | Yes | |
| dataSource | Yes | |
| assumptions | No | |
| netYieldPct | No | |
| estimateType | No | |
| netAnnualGBP | No | |
| grossYieldPct | Yes | |
| breakevenYears | No | |
| grossAnnualGBP | No | |
| monthlyRentGBP | Yes | |
| occupiedMonths | No | |
| purchasePriceGBP | Yes | |
| usesLiveListingData | No |
TDQS
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.
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.
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.
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.
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.
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 DistrictsARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | Optional — limit districts to a single city slug. |
Output Schema
| Name | Required | Description |
|---|---|---|
| cities | Yes | |
| dataSource | No | |
| isEstimate | No |
TDQS
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.
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.
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.
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.
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.
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)ARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| price | Yes | Entered property asking-price amount; not a deposit or installment. | |
| currency | No | Currency of the price (default GBP). |
Output Schema
| Name | Required | Description |
|---|---|---|
| fx | No | |
| amounts | Yes | |
| priceGBP | Yes | |
| dataSource | No | |
| inputCurrency | Yes | |
| usesStoredRate | No |
TDQS
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.
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.
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.
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.
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.
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.
searchSearch Evlek property listingsARead-onlyInspect
Search live Northern Cyprus (KKTC/TRNC) property listings on Evlek with a free-text query. Returns matching listings as id/title/url for the fetch tool. Same data as search_listings — this fixed form exists for the ChatGPT/OpenAI connector contract. Use when: the caller only has a free-text query. Don't use for: structured filters — use search_listings.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Free-text property search query |
Output Schema
| Name | Required | Description |
|---|---|---|
| fxRates | No | |
| results | Yes | |
| listings | No | |
| outOfScope | No | |
| unresolved | No | |
| appliedFilters | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, openWorldHint=true, and destructiveHint=false, so the safety profile is covered. The description adds value by explaining the return format ('id/title/url for the fetch tool') and the purpose of this fixed form (connector contract), providing context beyond the annotations. It does not cover all possible behaviors but is adequate for a simple search tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four sentences, each serving a purpose: what it does, return format, relationship to sibling, and when to use. It is front-loaded with the core function and avoids unnecessary fluff. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with a clear output schema and helpful annotations, the description is complete. It explains the free-text nature, return structure, relationship to the alternative tool, and the contract context. No critical information is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with the query parameter described as 'Free-text property search query.' The description reinforces the semantic by emphasizing 'free-text query' and contrasting it with 'structured filters,' which adds clarity about the intended input style beyond the schema's terse description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Search live Northern Cyprus (KKTC/TRNC) property listings on Evlek with a free-text query.' It specifies the verb (search), resource (property listings), and geographic scope. It also distinguishes from the sibling tool search_listings by noting it is a fixed form for the ChatGPT/OpenAI connector contract.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage guidance: 'Use when: the caller only has a free-text query. Don't use for: structured filters — use search_listings.' This clearly states when to use this tool, when not to use it, and names the alternative (search_listings), making it easy for an agent to select correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_listingsSearch Northern Cyprus Property ListingsARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | City to filter | |
| type | No | Listing type | |
| limit | No | Result count (integer 1-10, default 5) | |
| sortBy | No | Sort order (default: newest) | |
| bedrooms | No | Bedroom count (integer 0-10) | |
| maxPrice | No | Max price in GBP | |
| minPrice | No | Min price in GBP | |
| propertyType | No | Property type filter |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | |
| factType | No | |
| listings | Yes | |
| dataSource | No | |
| isEstimate | No | |
| sortApplied | Yes | |
| totalMatched | Yes | |
| appliedFilters | Yes |
TDQS
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.
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.
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.
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.
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.
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 ScenarioARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| university | Yes | University name, short code, or known alias, matched against the canonical Evlek university catalog. | |
| purchasePrice | No | Optional purchase price in GBP (enables yield). | |
| monthlyRentGBP | Yes | User-supplied monthly long-term rent assumption in GBP. | |
| occupiedMonths | Yes | User-supplied number of occupied and paid months in the 12-month scenario period. |
Output Schema
| Name | Required | Description |
|---|---|---|
| city | Yes | |
| dataSource | Yes | |
| university | Yes | |
| assumptions | No | |
| estimateType | No | |
| monthlyRentGBP | Yes | |
| occupiedMonths | No | |
| grossRentToPricePct | No | |
| usesLiveListingData | No | |
| modelledGrossRentGBP | No |
TDQS
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.
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.
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.
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.
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.
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 PersonaARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| persona | Yes | ||
| preferences | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| persona | Yes | |
| dataSource | No | |
| preferences | No | |
| suggestions | Yes | |
| notRecommendation | No |
TDQS
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.
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.
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.
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.
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.
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.
3 tool updates
- Changed
get_listing_by_number1 field changed- added
Output schema / properties / locationPrecisionAdded value: +{ + "enum": [ + "exact", + "district", + "city" + ], + "type": "string" +}
- Changed
get_listing_detail1 field changed- added
Output schema / properties / locationPrecisionAdded value: +{ + "enum": [ + "exact", + "district", + "city" + ], + "type": "string" +}
- Changed
search_listings1 field changed- added
Output schema / properties / listings / items / properties / locationPrecisionAdded value: +{ + "enum": [ + "exact", + "district", + "city" + ], + "type": "string" +}
1 tool update
- Changed
search_listings1 field changed- changed
Input schema / properties / propertyType / enumPrevious value: -[ - "apartment", - "residence", - "villa", - "twin", - "detached", - "bungalow", - "penthouse", - "studio", - "duplex", - "shop", - "office", - "warehouse", - "whole_building", - "residential_land", - "commercial_land", - "farmland" -]New value: +[ + "apartment", + "residence", + "villa", + "twin", + "detached", + "bungalow", + "penthouse", + "studio", + "duplex", + "shop", + "office", + "warehouse", + "whole_building", + "hotel", + "residential_land", + "commercial_land", + "farmland" +]
13 tool updates
- Changed
compare_cities3 fields changed- added
Output schema / properties / dataSourceAdded value: +{ + "type": "string" +} - added
Output schema / properties / isEstimateAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / metricTypeAdded value: +{ + "type": "string" +}
- Changed
compare_properties3 fields changed- added
Output schema / properties / dataSourceAdded value: +{ + "type": "string" +} - added
Output schema / properties / isEstimateAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / metricTypeAdded value: +{ + "type": "string" +}
- Changed
get_district_profile8 fields changed- added
Output schema / properties / dataSourceAdded value: +{ + "type": "string" +} - removed
Output schema / properties / grossYieldPctRemoved value: -{ - "type": [ - "number", - "null" - ] -} - added
Output schema / properties / indicativeGrossRentToPricePctAdded value: +{ + "type": [ + "number", + "null" + ] +} - added
Output schema / properties / isObservedYieldAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / metricTypeAdded value: +{ + "type": "string" +} - added
Output schema / properties / personaContextsAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - removed
Output schema / properties / personasRemoved value: -{ - "items": { - "type": "string" - }, - "type": "array" -} - added
Output schema / properties / yieldMetricTypeAdded value: +{ + "type": "string" +}
- Changed
get_listing_by_number6 fields changed- removed
Output schema / properties / dataQualityRemoved value: -{ - "properties": { - "priceOutlier": { - "type": "boolean" - } - }, - "type": "object" -} - added
Output schema / properties / dataSourceAdded value: +{ + "type": "string" +} - added
Output schema / properties / factTypeAdded value: +{ + "type": "string" +} - removed
Output schema / properties / fxRatesRemoved value: -{ - "properties": { - "base": { - "type": "string" - }, - "isFallback": { - "type": "boolean" - }, - "rates": { - "type": "object" - }, - "source": { - "type": "string" - }, - "updatedAt": { - "type": [ - "string", - "null" - ] - } - }, - "type": "object" -} - added
Output schema / properties / isEstimateAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / virtualStaging / properties / items / items / properties / provenanceAdded 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" +}
- Changed
get_listing_detail6 fields changed- removed
Output schema / properties / dataQualityRemoved value: -{ - "properties": { - "priceOutlier": { - "type": "boolean" - } - }, - "type": "object" -} - added
Output schema / properties / dataSourceAdded value: +{ + "type": "string" +} - added
Output schema / properties / factTypeAdded value: +{ + "type": "string" +} - removed
Output schema / properties / fxRatesRemoved value: -{ - "properties": { - "base": { - "type": "string" - }, - "isFallback": { - "type": "boolean" - }, - "rates": { - "type": "object" - }, - "source": { - "type": "string" - }, - "updatedAt": { - "type": [ - "string", - "null" - ] - } - }, - "type": "object" -} - added
Output schema / properties / isEstimateAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / virtualStaging / properties / items / items / properties / provenanceAdded 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" +}
- Removed
get_market_overview - Changed
get_price_index3 fields changed- added
Output schema / properties / dataSourceAdded value: +{ + "type": "string" +} - added
Output schema / properties / isEstimateAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / metricTypeAdded value: +{ + "type": "string" +}
- Changed
get_yield_estimate15 fields changed- added
Input schema / properties / annualOperatingCostsGBPAdded value: +{ + "description": "User-supplied annual operating-cost assumption in GBP", + "maximum": 10000000, + "minimum": 0, + "type": "number" +} - removed
Input schema / properties / bedroomsRemoved value: -{ - "description": "Bedroom count (integer 0-10)", - "maximum": 10, - "minimum": 0, - "type": "number" -} - added
Input schema / properties / monthlyRentGBPAdded value: +{ + "description": "User-supplied monthly long-term rent assumption in GBP", + "maximum": 1000000, + "minimum": 1, + "type": "number" +} - added
Input schema / properties / occupiedMonthsAdded value: +{ + "description": "User-supplied number of occupied and paid months in the 12-month scenario period", + "maximum": 12, + "minimum": 1, + "type": "integer" +} - removed
Input schema / properties / purchasePriceRemoved value: -{ - "description": "Purchase price in GBP", - "maximum": 10000000, - "minimum": 10000, - "type": "number" -} - added
Input schema / properties / purchasePriceGBPAdded value: +{ + "description": "User-supplied purchase price in GBP", + "maximum": 10000000, + "minimum": 10000, + "type": "number" +} - changed
Input schema / requiredPrevious value: -[ - "city", - "purchasePrice" -]New value: +[ + "purchasePriceGBP", + "monthlyRentGBP", + "annualOperatingCostsGBP", + "occupiedMonths" +] - added
Output schema / properties / assumptionsAdded value: +{ + "type": "object" +} - changed
Output schema / properties / breakevenYears / typePrevious value: -"number"New value: +[ + "number", + "null" +] - changed
Output schema / properties / city / typePrevious value: -"string"New value: +[ + "string", + "null" +] - removed
Output schema / properties / cityBenchmarkRemoved value: -{ - "type": [ - "string", - "null" - ] -} - removed
Output schema / properties / dataSource / descriptionRemoved value: -"modelled — not derived from live rental listings" - added
Output schema / properties / estimateTypeAdded value: +{ + "type": "string" +} - added
Output schema / properties / occupiedMonthsAdded value: +{ + "type": "integer" +} - added
Output schema / properties / usesLiveListingDataAdded value: +{ + "type": "boolean" +}
- Changed
list_locations2 fields changed- added
Output schema / properties / dataSourceAdded value: +{ + "type": "string" +} - added
Output schema / properties / isEstimateAdded value: +{ + "type": "boolean" +}
- Changed
payment_plan6 fields changed- removed
Input schema / properties / offPlanRemoved value: -{ - "description": "True if off-plan (under construction).", - "type": "boolean" -} - changed
Input schema / properties / price / descriptionPrevious value: -"Property price."New value: +"Entered property asking-price amount; not a deposit or installment." - added
Output schema / properties / dataSourceAdded value: +{ + "type": "string" +} - removed
Output schema / properties / offPlanRemoved value: -{ - "type": "boolean" -} - added
Output schema / properties / usesStoredRateAdded value: +{ + "type": "boolean" +} - removed
Output schema / properties / warningsRemoved value: -{ - "items": { - "type": "string" - }, - "type": "array" -}
- Changed
search_listings5 fields changed- changed
Input schema / properties / type / enumPrevious value: -[ - "sale", - "rent", - "daily" -]New value: +[ + "sale", + "rent" +] - added
Output schema / properties / dataSourceAdded value: +{ + "type": "string" +} - added
Output schema / properties / factTypeAdded value: +{ + "type": "string" +} - removed
Output schema / properties / fxRatesRemoved value: -{ - "properties": { - "base": { - "type": "string" - }, - "isFallback": { - "type": "boolean" - }, - "rates": { - "type": "object" - }, - "source": { - "type": "string" - }, - "updatedAt": { - "type": [ - "string", - "null" - ] - } - }, - "type": "object" -} - added
Output schema / properties / isEstimateAdded value: +{ + "type": "boolean" +}
- Changed
student_housing16 fields changed- removed
Input schema / properties / bedroomsRemoved value: -{ - "description": "Bedroom count (0=studio).", - "maximum": 10, - "minimum": 0, - "type": "number" -} - added
Input schema / properties / monthlyRentGBPAdded value: +{ + "description": "User-supplied monthly long-term rent assumption in GBP.", + "maximum": 1000000, + "minimum": 1, + "type": "number" +} - added
Input schema / properties / occupiedMonthsAdded value: +{ + "description": "User-supplied number of occupied and paid months in the 12-month scenario period.", + "maximum": 12, + "minimum": 1, + "type": "integer" +} - changed
Input schema / requiredPrevious value: -[ - "university" -]New value: +[ + "university", + "monthlyRentGBP", + "occupiedMonths" +] - removed
Output schema / properties / academicAnnualGBPRemoved value: -{ - "type": "number" -} - removed
Output schema / properties / academicYieldPctRemoved value: -{ - "type": [ - "number", - "null" - ] -} - added
Output schema / properties / assumptionsAdded value: +{ + "type": "object" +} - removed
Output schema / properties / cityBandRemoved value: -{ - "type": [ - "string", - "null" - ] -} - removed
Output schema / properties / dataSource / descriptionRemoved value: -"modelled — not derived from live rental listings" - added
Output schema / properties / estimateTypeAdded value: +{ + "type": "string" +} - added
Output schema / properties / grossRentToPricePctAdded value: +{ + "type": [ + "number", + "null" + ] +} - added
Output schema / properties / modelledGrossRentGBPAdded value: +{ + "type": "number" +} - added
Output schema / properties / occupiedMonthsAdded value: +{ + "type": "integer" +} - added
Output schema / properties / usesLiveListingDataAdded value: +{ + "type": "boolean" +} - removed
Output schema / properties / yearRoundAnnualGBPRemoved value: -{ - "type": "number" -} - removed
Output schema / properties / yearRoundYieldPctRemoved value: -{ - "type": [ - "number", - "null" - ] -}
- Changed
suggest_neighborhood5 fields changed- removed
Input schema / properties / budgetGBPRemoved value: -{ - "maximum": 5000000, - "minimum": 20000, - "type": "number" -} - changed
Input schema / properties / persona / enumPrevious value: -[ - "retiree", - "investor", - "student", - "family", - "digital_nomad", - "vacation" -]New value: +[ + "retiree", + "student", + "family", + "digital_nomad" +] - removed
Output schema / properties / budgetGBPRemoved value: -{ - "type": [ - "number", - "null" - ] -} - added
Output schema / properties / dataSourceAdded value: +{ + "type": "string" +} - added
Output schema / properties / notRecommendationAdded value: +{ + "type": "boolean" +}
15 tool updates
- Changed
compare_cities1 field changed- added
Output schema / requiredAdded value: +[ + "type", + "cities" +]
- Changed
compare_properties1 field changed- added
Output schema / requiredAdded value: +[ + "count", + "listings" +]
- Changed
fetch1 field changed- added
Output schema / requiredAdded value: +[ + "id", + "title", + "text", + "url" +]
- Changed
get_district_profile1 field changed- added
Output schema / requiredAdded value: +[ + "city", + "district", + "totalActive" +]
- Changed
get_listing_by_number6 fields changed- changed
Input schema / properties / listing_number / descriptionPrevious 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." - changed
Input schema / properties / listing_number / typePrevious value: -"string"New value: +[ + "string", + "number" +] - added
Output schema / properties / dataQualityAdded value: +{ + "properties": { + "priceOutlier": { + "type": "boolean" + } + }, + "type": "object" +} - added
Output schema / properties / photosShownAdded value: +{ + "type": "number" +} - added
Output schema / properties / photosTruncatedAdded value: +{ + "type": "number" +} - added
Output schema / requiredAdded value: +[ + "found" +]
- Changed
get_listing_detail4 fields changed- added
Output schema / properties / dataQualityAdded value: +{ + "properties": { + "priceOutlier": { + "type": "boolean" + } + }, + "type": "object" +} - added
Output schema / properties / photosShownAdded value: +{ + "type": "number" +} - added
Output schema / properties / photosTruncatedAdded value: +{ + "type": "number" +} - added
Output schema / requiredAdded value: +[ + "found" +]
- Changed
get_market_overview1 field changed- added
Output schema / requiredAdded value: +[ + "generatedAt", + "totalActiveListings", + "cities" +]
- Changed
get_price_index1 field changed- added
Output schema / requiredAdded value: +[ + "type", + "cities" +]
- Changed
get_yield_estimate1 field changed- added
Output schema / requiredAdded value: +[ + "city", + "purchasePriceGBP", + "monthlyRentGBP", + "grossYieldPct", + "dataSource" +]
- Changed
list_locations1 field changed- added
Output schema / requiredAdded value: +[ + "cities" +]
- Changed
payment_plan1 field changed- added
Output schema / requiredAdded value: +[ + "inputCurrency", + "priceGBP", + "amounts" +]
- Changed
search3 fields changed- added
Output schema / properties / outOfScopeAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / unresolvedAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / requiredAdded value: +[ + "results" +]
- Changed
search_listings7 fields changed- added
Input schema / properties / propertyTypeAdded 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" +} - added
Input schema / properties / sortByAdded value: +{ + "description": "Sort order (default: newest)", + "enum": [ + "newest", + "price_asc", + "price_desc", + "area_desc", + "price_per_sqm_asc" + ], + "type": "string" +} - added
Output schema / properties / listings / items / properties / propertyTypeAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / listings / items / requiredAdded value: +[ + "id", + "title", + "city", + "district", + "price", + "priceGbp", + "currency", + "type", + "url" +] - added
Output schema / properties / sortAppliedAdded value: +{ + "enum": [ + "newest", + "price_asc", + "price_desc", + "area_desc", + "price_per_sqm_asc" + ], + "type": "string" +} - added
Output schema / properties / totalMatchedAdded value: +{ + "type": "number" +} - added
Output schema / requiredAdded value: +[ + "count", + "totalMatched", + "sortApplied", + "listings", + "appliedFilters" +]
- Changed
student_housing1 field changed- added
Output schema / requiredAdded value: +[ + "university", + "city", + "monthlyRentGBP", + "dataSource" +]
- Changed
suggest_neighborhood1 field changed- added
Output schema / requiredAdded value: +[ + "persona", + "suggestions" +]
4 tool updates
- Changed
get_listing_by_number1 field changed- added
Output schema / properties / fxRatesAdded value: +{ + "properties": { + "base": { + "type": "string" + }, + "isFallback": { + "type": "boolean" + }, + "rates": { + "type": "object" + }, + "source": { + "type": "string" + }, + "updatedAt": { + "type": [ + "string", + "null" + ] + } + }, + "type": "object" +}
- Changed
get_listing_detail1 field changed- added
Output schema / properties / fxRatesAdded value: +{ + "properties": { + "base": { + "type": "string" + }, + "isFallback": { + "type": "boolean" + }, + "rates": { + "type": "object" + }, + "source": { + "type": "string" + }, + "updatedAt": { + "type": [ + "string", + "null" + ] + } + }, + "type": "object" +}
- Changed
search1 field changed- added
Output schema / properties / fxRatesAdded value: +{ + "type": [ + "object", + "null" + ] +}
- Changed
search_listings1 field changed- added
Output schema / properties / fxRatesAdded value: +{ + "properties": { + "base": { + "type": "string" + }, + "isFallback": { + "type": "boolean" + }, + "rates": { + "type": "object" + }, + "source": { + "type": "string" + }, + "updatedAt": { + "type": [ + "string", + "null" + ] + } + }, + "type": "object" +}
2 tool updates
- Changed
search2 fields changed- added
Output schema / properties / appliedFiltersAdded value: +{ + "type": "object" +} - added
Output schema / properties / listingsAdded 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" +}
- Changed
search_listings1 field changed- added
Output schema / properties / appliedFiltersAdded value: +{ + "type": "object" +}
5 tool updates
- Changed
fetch2 fields changed- added
Output schema / properties / coverImageUrlAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / photosAdded value: +{ + "items": { + "properties": { + "caption": { + "type": [ + "string", + "null" + ] + }, + "tags": { + "items": { + "type": "string" + }, + "type": "array" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" +}
- Changed
get_listing_by_number1 field changed- added
Output schema / properties / virtualStagingAdded 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" +}
- Changed
get_listing_detail1 field changed- added
Output schema / properties / virtualStagingAdded 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" +}
- Changed
get_market_overview6 fields changed- added
Output schema / properties / citiesAdded value: +{ + "type": "array" +} - added
Output schema / properties / generatedAtAdded value: +{ + "type": "string" +} - removed
Output schema / properties / indexesRemoved value: -{ - "type": "object" -} - removed
Output schema / properties / lastUpdatedRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / sourceRemoved value: -{ - "type": "string" -} - added
Output schema / properties / totalActiveListingsAdded value: +{ + "type": "number" +}
- Changed
search_listings1 field changed- added
Output schema / properties / listings / itemsAdded 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" +}
5 tool updates
- Removed
assess_title_risk - Removed
foreign_buyer_roadmap - Removed
get_legal_info - Changed
get_listing_by_number3 fields changed- removed
Output schema / properties / titleDeedBandRemoved value: -{ - "type": [ - "string", - "null" - ] -} - removed
Output schema / properties / titleDeedLabelRemoved value: -{ - "type": [ - "string", - "null" - ] -} - removed
Output schema / properties / titleDeedTypeRemoved value: -{ - "type": [ - "string", - "null" - ] -}
- Changed
get_listing_detail3 fields changed- removed
Output schema / properties / titleDeedBandRemoved value: -{ - "type": [ - "string", - "null" - ] -} - removed
Output schema / properties / titleDeedLabelRemoved value: -{ - "type": [ - "string", - "null" - ] -} - removed
Output schema / properties / titleDeedTypeRemoved value: -{ - "type": [ - "string", - "null" - ] -}
6 tool updates
- Changed
assess_title_risk2 fields changed- changed
Input schema / properties / title_deed_type / descriptionPrevious 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)." - changed
Input schema / properties / title_deed_type / enumPrevious value: -[ - "turk_kocan", - "esdeger_kocan", - "tahsis", - "foreign_title", - "kat_irtifak" -]New value: +[ + "turk_kocan", + "esdeger_kocan", + "tahsis", + "foreign_title", + "kat_irtifak", + "unknown" +]
- Changed
foreign_buyer_roadmap6 fields changed- removed
Output schema / properties / disclaimerRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / legalAuditStatusRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / processRemoved value: -{ - "items": { - "type": "string" - }, - "type": "array" -} - removed
Output schema / properties / summaryRemoved value: -{ - "type": "string" -} - added
Output schema / properties / topicAdded value: +{ + "type": "string" +} - removed
Output schema / properties / verifyFlagRemoved value: -{ - "type": "boolean" -}
- Added
get_listing_by_number - Changed
get_yield_estimate1 field changed- added
Output schema / properties / dataSourceAdded value: +{ + "description": "modelled — not derived from live rental listings", + "type": "string" +}
- Added
list_locations - Changed
student_housing2 fields changed- changed
Input schema / properties / university / descriptionPrevious 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." - added
Output schema / properties / dataSourceAdded value: +{ + "description": "modelled — not derived from live rental listings", + "type": "string" +}
3 tool updates
- Added
fetch - Changed
get_listing_detail2 fields changed- added
Output schema / properties / listedAtAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / priceGbpAdded value: +{ + "type": [ + "number", + "null" + ] +}
- Added
search
1 tool update
- Changed
get_listing_detail2 fields changed- added
Output schema / properties / coverImageUrlAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / photosAdded value: +{ + "items": { + "properties": { + "caption": { + "type": [ + "string", + "null" + ] + }, + "tags": { + "items": { + "type": "string" + }, + "type": "array" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" +}
14 tool updates
- Added
assess_title_risk - Changed
compare_cities1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "cities": { + "type": "array" + }, + "generatedAt": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "type": "object" +}
- Changed
compare_properties1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "count": { + "type": "number" + }, + "listings": { + "type": "array" + }, + "missing": { + "type": "number" + } + }, + "type": "object" +}
- Added
foreign_buyer_roadmap - Changed
get_district_profile1 field changed- changed
Output 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" +}
- Changed
get_legal_info1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "topic": { + "type": "string" + } + }, + "type": "object" +}
- Added
get_listing_detail - Changed
get_market_overview1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "indexes": { + "type": "object" + }, + "investmentHighlights": { + "items": { + "type": "string" + }, + "type": "array" + }, + "lastUpdated": { + "type": "string" + }, + "source": { + "type": "string" + } + }, + "type": "object" +}
- Changed
get_price_index1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "cities": { + "type": "array" + }, + "generatedAt": { + "type": [ + "string", + "null" + ] + }, + "totalListings": { + "type": [ + "number", + "null" + ] + }, + "type": { + "type": "string" + } + }, + "type": "object" +}
- Changed
get_yield_estimate1 field changed- changed
Output 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" +}
- Added
payment_plan - Changed
search_listings1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "count": { + "type": "number" + }, + "listings": { + "type": "array" + } + }, + "type": "object" +}
- Added
student_housing - Changed
suggest_neighborhood1 field changed- changed
Output 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" +}
3 tool updates
- Changed
compare_cities1 field changed- changed
Input schema / properties / cities / items / enumPrevious value: -[ - "girne", - "iskele", - "lefkosa", - "gazimagusa" -]New value: +[ + "girne", + "iskele", + "lefkosa", + "gazimagusa", + "guzelyurt", + "lefke" +]
- Changed
get_price_index1 field changed- changed
Input schema / properties / city / enumPrevious value: -[ - "girne", - "iskele", - "lefkosa", - "gazimagusa" -]New value: +[ + "girne", + "iskele", + "lefkosa", + "gazimagusa", + "guzelyurt", + "lefke" +]
- Changed
get_yield_estimate1 field changed- changed
Input schema / properties / city / enumPrevious value: -[ - "girne", - "iskele", - "lefkosa", - "gazimagusa" -]New value: +[ + "girne", + "iskele", + "lefkosa", + "gazimagusa", + "guzelyurt", + "lefke" +]
6 tool updates
- Changed
compare_cities5 fields changed- added
Input schema / properties / cities / descriptionAdded value: +"Cities to compare (2-4)" - removed
Input schema / properties / cities / maxItemsRemoved value: -4 - removed
Input schema / properties / cities / minItemsRemoved value: -2 - removed
Input schema / properties / type / defaultRemoved value: -"sale" - added
Input schema / properties / type / descriptionAdded value: +"Sale or rent (default: sale)"
- Changed
compare_properties2 fields changed- removed
Input schema / properties / listing_ids / maxItemsRemoved value: -4 - removed
Input schema / properties / listing_ids / minItemsRemoved value: -2
- Changed
get_district_profile3 fields changed- added
Input schema / properties / district / descriptionAdded value: +"District name (2-60 chars)" - removed
Input schema / properties / district / maxLengthRemoved value: -60 - removed
Input schema / properties / district / minLengthRemoved value: -2
- Changed
get_price_index2 fields changed- removed
Input schema / properties / type / defaultRemoved value: -"sale" - added
Input schema / properties / type / descriptionAdded value: +"Sale or rent (default: sale)"
- Changed
get_yield_estimate2 fields changed- added
Input schema / properties / bedrooms / descriptionAdded value: +"Bedroom count (integer 0-10)" - changed
Input schema / properties / bedrooms / typePrevious value: -"integer"New value: +"number"
- Changed
search_listings5 fields changed- added
Input schema / properties / bedrooms / descriptionAdded value: +"Bedroom count (integer 0-10)" - changed
Input schema / properties / bedrooms / typePrevious value: -"integer"New value: +"number" - removed
Input schema / properties / limit / defaultRemoved value: -5 - added
Input schema / properties / limit / descriptionAdded value: +"Result count (integer 1-10, default 5)" - changed
Input schema / properties / limit / typePrevious value: -"integer"New value: +"number"
Frequently Asked Questions
Claiming proves that you control a remote MCP connector. It does not move, proxy, or interrupt the server.
Open the connector listing, choose Claim ownership, and sign in to Glama.
Complete one verification method:
GitHub identity — fastest for official registry listings. For a namespace such as
io.github.alice/server, link the matching GitHub user, then choose Claim with GitHub. An organization namespace such asio.github.acme/serveralso needs that organization to have installed the Glama AI GitHub App and approved its permissions, because GitHub discloses organization membership only to apps it has installed. Use HTTP or DNS when it has not.HTTP challenge — works when you can deploy a public file. Generate a token, publish the exact JSON Glama shows at
/.well-known/glama.jsonon the same origin as the connector, then choose Check HTTP challenge.DNS challenge — works when you control DNS but cannot change the server. Generate a token, create the exact TXT record Glama shows, wait for it to propagate, then choose Check DNS challenge.
After verification, Glama sends a confirmation email and gives you access to listing details, thumbnails, health checks, and analytics. Keep the HTTP file or DNS record in place: Glama periodically checks it and ownership remains verified while the token is discoverable.
The HTTP ownership file has this structure:
{
"$schema": "https://glama.ai/mcp/schemas/connector.json",
"claim": "glama_claim_..."
}Claim tokens are opaque, stable, and bound to the signed-in Glama account. They contain no email address or other personal information. If Glama can no longer discover a verified HTTP or DNS token, it starts a seven-day grace period before removing claim-based access. Restore the same token during that period to keep ownership verified. Never publish an email address, Glama session token, GitHub token, or connector credential as ownership proof.
If verification fails, confirm that you copied the current token exactly. The HTTP file must be public, return valid JSON with a successful HTTP response, and stay on the connector's origin. DNS changes may need more time to propagate. A claim cannot transfer to a different origin or hostname: if the connector target changes, Glama starts the grace period and the new target must be claimed separately after the previous claim is released.
For a connector linked to the official MCP Registry, registry updates continue to replace its name, description, and URL by default. After claiming, open Manage connector and enable Use Glama listing details as the source of truth if edits made on Glama should be preserved. Categories and thumbnails are always managed on Glama; registry linkage and technical connection settings continue to sync.
Control your server's listing on Glama, including description and metadata
Access analytics and receive server usage reports
Get monitoring and health status updates for your server
Feature your server to boost visibility and reach more users
To improve your MCP server's ranking:
Claim ownership of the server listing
Complete the server profile with an accurate description and thumbnail
Provide a test profile so Glama can connect to and evaluate the server
Keep tool definitions clear and complete to earn a high Tool Definition Quality Score (TDQS)
Route real usage through the Glama Gateway; more recorded successful server uses also improve the ranking
For users:
Full audit trail – every tool call is logged with inputs and outputs for compliance and debugging
Granular tool control – enable or disable individual tools per connector to limit what your AI agents can do
Centralized credential management – store and rotate API keys and OAuth tokens in one place
Change alerts – get notified when a connector changes its schema, adds or removes tools, or updates tool definitions, so nothing breaks silently
For server owners:
Proven adoption – public usage metrics on your listing show real-world traction and build trust with prospective users
Tool-level analytics – see which tools are being used most, helping you prioritize development and documentation
Direct user feedback – users can report issues and suggest improvements through the listing, giving you a channel you would not have otherwise
The connector status is unhealthy when Glama is unable to successfully connect to the server. This can happen for several reasons:
The server is experiencing an outage
The URL of the server is wrong
Credentials required to access the server are missing or invalid
If you are the owner of this MCP connector and would like to make modifications to the listing, including providing test credentials for accessing the server, please contact support@glama.ai.
Discussions
No comments yet. Be the first to start the discussion!
Related MCP Connectors
AI-native real estate discovery with structured property search and market intelligence.
GDPR-clean property listings, rents, price stats, yields and below-market deals. UK, EU.
Singapore property & financial data APIs for AI agents. 27 MCP tools. x402 micropayments.
UK area & property intelligence for AI agents: reports, EPC, comparables, with source provenance.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceProvides 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
- AlicenseAqualityDmaintenanceEnables AI-powered real estate analysis with built-in EU AI Act compliance, providing a production-ready MCP server for property insights and governance.1MIT
- FlicenseNot gradedqualityDmaintenanceRemote 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-
- AlicenseNot gradedqualityBmaintenanceUK property data MCP server for AI hosts (Claude, ChatGPT). Wraps Land Registry, Rightmove, EPC, rental yields, stamp duty, and Companies House into 13 tools.2MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.
TDQS
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.
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.
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.
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.