Skip to main content
Glama
Evlek

Evlek — Northern Cyprus Property MCP Server

Official

Evlek MCP Server

MCP Hosted License Coverage MCP Registry

AI-native property discovery for North Cyprus (KKTC). Built on the Model Context Protocol — works in Claude, ChatGPT, Gemini, Cursor, and any MCP-compatible client.

The Evlek MCP server gives AI agents structured, real-time access to North Cyprus property data — search active listings, compare cities and districts, track the price index, and estimate rental yield. All data is sourced live from evlek.app. Title-deed (koçan) and legal-procedure tools are deliberately not part of the surface: that taxonomy has not passed an independent KKTC legal audit.

License scope

This repository is MIT-licensed for the public manifest, documentation, examples, and reference clients contained here. The hosted Evlek service, evlek.app web app, mobile apps, listing database, AI prompts, business logic, brand assets, name, logo, and trade dress remain proprietary and are not licensed under MIT. See LICENSE for details.


Related MCP server: UK Property Data

Why Evlek MCP

  • AI-first. Built for agentic workflows from day one — not retrofitted on a legacy listing API.

  • Multilingual. Property data in TR, EN, RU, DE, AR (currently exposed via tool descriptions in EN).

  • Verification-aware listings. Evlek surfaces listing and account verification context where available, and the MCP omits contact fields to preserve Evlek's reveal/contact funnel.

  • Built for the region. Optimized for the 6 cities of North Cyprus (Lefkoşa, Girne, Gazimağusa, İskele, Güzelyurt, Lefke) and 100+ districts.

  • Production-grade. OWASP MCP Top 10 aligned — Zod input validation, output sanitization, rate limiting (60/min/IP, 500/min global), Sentry observability.


Quick start

Remote-capable clients (preferred)

Most modern MCP clients (Claude, Cursor, VS Code) connect directly to the Streamable HTTP endpoint — no local bridge needed:

{
  "mcpServers": {
    "evlek": {
      "url": "https://evlek.app/api/mcp"
    }
  }
}

ChatGPT (connector + Deep Research)

Add https://evlek.app/api/mcp as a custom connector. Evlek exposes OpenAI-compatible search and fetch tools, so it works in ChatGPT connectors and Deep Research in addition to developer mode.

Claude Desktop (legacy stdio bridge)

If your client only supports stdio servers, use the pinned mcp-remote bridge. Add this to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):

{
  "mcpServers": {
    "evlek": {
      "command": "npx",
      "args": ["-y", "mcp-remote@0.1.16", "https://evlek.app/api/mcp"]
    }
  }
}

Restart Claude Desktop. The "evlek" server appears in the tools list.

MCP Inspector (test before installing)

npx @modelcontextprotocol/inspector https://evlek.app/api/mcp

Direct API (cURL)

curl -X POST https://evlek.app/api/mcp \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

More configs: examples/


Local stdio server (this repository)

This repo is also a runnable MCP server. It answers initialize / tools/list entirely locally from the embedded tool contract (tools.json) and fetches live data from the Evlek data API when a tool is called:

npx github:Evlek/evlek-mcp        # or: npm install && npm start
{
  "mcpServers": {
    "evlek": {
      "command": "npx",
      "args": ["-y", "github:Evlek/evlek-mcp"]
    }
  }
}

Smoke-test it (spawns the server and speaks real MCP over stdio):

npm test              # live: initialize + tools/list + a real tools/call
OFFLINE=1 npm test    # offline: introspection works with zero network

Available tools (v1.9.0 — 15 tools)

#

Tool

What it does

1

search_listings

Search active listings by city, type (sale/rent/daily), bedrooms, and GBP price range (normalized server-side). Up to 10 results with title, price, location, direct link.

2

get_price_index

Aggregated avg/median/min/max prices per city + top districts (Evlek Price Index), with IQR outlier exclusion and a minimum-sample floor.

3

get_market_overview

High-level market overview — indicative city rent/sale levels, yield ranges, and routing to Evlek's calculators.

4

compare_cities

Compare 2-4 cities side-by-side with prices, listing counts, top districts, automatic verdict.

5

get_yield_estimate

Estimate gross/net annual rental yield + breakeven years. Cities without sufficient data return a clear unsupported message.

6

suggest_neighborhood

Match a buyer persona (retiree, investor, student, family, digital_nomad, vacation) to neighborhoods.

7

compare_properties

Compare 2-4 active listing UUIDs side-by-side with GBP price-per-m², area, bedrooms, value insight. Mixed sale/rent/daily IDs are rejected — those prices are not comparable.

8

get_district_profile

360° district profile — sale/rent stats, £/m², bedroom breakdown, estimated yield, persona match. Same outlier filter and sample floor as the price index.

9

student_housing

Student-housing rental outlook near a KKTC university, academic-year vs year-round.

10

payment_plan

Convert a price across GBP/EUR/USD/TRY using live date-stamped rates; off-plan staged-payment context.

11

get_listing_detail

360° profile of one active listing by UUID, including GBP-normalized price-per-m².

12

search

(ChatGPT-compatible) Free-text search returning listings as {id, title, url}. Understands city, type, bedroom and GBP price constraints in the query.

13

fetch

(ChatGPT-compatible) Fetch full listing detail by id from search.

14

list_locations

Valid city + district dictionary — call first when unsure of location names.

15

get_listing_by_number

Look up a listing by its EVL-XXXXXX listing number.

Interactive widgets (MCP Apps / SEP-1865)

Three tools additionally ship a sandboxed HTML view that MCP Apps-capable hosts (Claude web/desktop) render inline in the conversation:

Tool

Widget

What you get

search_listings, search

ui://evlek/listing-cards-v2.html

Horizontal carousel of cards (cover photo, price, location) — the whole card is the link, no separate CTA button; opening one drills into the SAME detail view as get_listing_detail, in fullscreen, never an inline half-panel. An opt-in "select to compare" mode sends 2-4 listings to compare_properties, rendered as a comparison table.

get_listing_detail

ui://evlek/listing-detail-v2.html

Photo gallery with AI captions, spec sheet, and a before/after AI virtual-staging comparison slider

get_price_index

ui://evlek/price-index-v2.html

Per-city summary rows inline (avg/median, capped to a few cities to stay compact); the full district breakdown and city-comparison table open in fullscreen, not inline

Views are static, self-contained HTML — no bundler, no third-party JS. Listing data reaches them only at runtime over postMessage and is written with textContent, never innerHTML. CSP is declared per resource (_meta.ui.csp) and limited to the public listing-photo origin.

See TOOLS.md for full input schemas, parameter details, and response examples.

Resources (7) & resource templates (2)

Read-only evlek:// data via resources/list / resources/read, plus parameterized templates via resources/templates/list:

  • Templates: evlek://price-index/{city} · evlek://district/{city}/{district}

  • Instances: per-city price indexes (girne, iskele, lefkosa, gazimagusa, guzelyurt, lefke) and a sample district profile.

Prompts (2)

  • investment_analysis · student_rental_outlook


Example prompts

  • "Find 2-bedroom flats for rent in Girne under £500/month."

  • "What's the median sale price per square meter in Lefkoşa?"

  • "Compare İskele and Famagusta for investment — which has higher rental yield?"

  • "Estimate the rental yield on a £150,000 2+1 in Girne."

  • "Show me apartments in Girne under £150,000."

  • "What does a district profile for Alsancak look like?"


Coverage

  • Cities: 6 (Girne, İskele, Lefkoşa, Gazimağusa, Güzelyurt, Lefke)

  • Districts: 100+

  • Currency: GBP primary; TRY/USD/EUR normalized to GBP server-side using live daily exchange rates

  • Tool descriptions: EN · Listing data fields: TR + EN


Architecture

The Evlek MCP server runs as a hosted endpoint at https://evlek.app/api/mcp. It speaks the Model Context Protocol over Streamable HTTP (JSON-RPC 2.0), protocolVersion 2026-07-28, and exposes tools, resources, resource templates, and prompts. Discovery metadata is published at /.well-known/mcp.json.

This repository contains:

  • server.json — MCP Registry manifest

  • TOOLS.md — Full tool reference (JSON schemas + examples)

  • examples/ — Configuration files for Claude Desktop, Cursor, VS Code

  • CONTRIBUTING.md — How to file issues and propose docs improvements

The full server implementation (database schemas, API routes, AI prompt engineering, listing pipeline) is hosted at evlek.app and remains proprietary.

Security model

Per OWASP MCP Top 10: per-IP rate limit 60/min, global 500/min, 30s hard timeout, Zod input validation, output sanitization (prompt-injection defense), max 10 results per query, Supabase anon key + RLS, no stack traces leaked, Sentry observability.

To report a security issue, email hello@evlek.app.


Status

  • MCP version: 1.9.0 (live)

  • Protocol: 2026-07-28

  • Primitives: 15 tools · 7 data resources + 3 interactive widget resources · 2 resource templates · 2 prompts

  • Auth: none (public read-only)

  • Endpoint: https://evlek.app/api/mcp

  • MCP Registry: app.evlek/mcp-server


License

MIT — see LICENSE. MIT covers the public manifest, documentation, examples, and reference clients in this repository only (see License scope above). The hosted Evlek service (web app, mobile apps, listing data, AI prompts, database schemas, business logic) is proprietary.

Trademark notice: "Evlek" is a trademark of Onur Dokuzoğlu. The MIT license does not grant rights to use the "Evlek" name, logo, or branding except as described in this README. To request brand usage permission, contact hello@evlek.app.



Built in North Cyprus by an architect, not a software firm. Powered by Anthropic Claude, Supabase, Vercel, and the Model Context Protocol.

Available Tools

18 tools
assess_title_riskAssess KKTC Title-Deed (Koçan) Risk BandA
Read-only
Inspect

Given a KKTC title-deed (koçan) type, return a neutral risk BAND, framing notes, and verification steps. General information only — every result carries a disclaimer and recommends an independent KKTC lawyer plus a Land Registry title check. Not legal advice.

ParametersJSON Schema
NameRequiredDescriptionDefault
title_deed_typeYesKKTC koçan type: turk_kocan, esdeger_kocan, tahsis, foreign_title, kat_irtifak, or unknown (legacy turkish/equivalent/allocation/foreign accepted).

Output Schema

ParametersJSON Schema
NameRequiredDescription
bandNo
labelNo
framingNo
kocanTypeNo
disclaimerNo
verifyStepsNo
bandDescriptionNo
legalAuditStatusNo

TDQS

A4.7/5.0
Behavior5/5

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

Beyond annotations (readOnlyHint, openWorldHint, destructiveHint), the description adds that results are neutral, carry a disclaimer, and are not legal advice, fully disclosing behavioral traits.

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

Conciseness5/5

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

Two sentences, no fluff; the first sentence clearly states the action and output, the second adds disclaimers. Highly efficient.

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

Completeness5/5

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

Given the presence of an output schema, the description adequately covers input, output, and limitations, making it complete for the tool's role.

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

Parameters3/5

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

Schema coverage is 100% with enum descriptions. The description only restates 'Given a KKTC title-deed type', adding no new parameter semantics beyond what schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses specific verb 'return' and resource 'risk band', and clearly distinguishes from sibling tools which are about properties, districts, prices, etc.

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

Usage Guidelines5/5

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

The description explicitly states it is for general information only, not legal advice, and recommends consulting a lawyer and Land Registry, providing clear usage boundaries.

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

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

Compare 2-4 Northern Cyprus cities side-by-side with aggregated prices (avg, median, min, max), listing counts, and top districts. Useful for deciding between investment locations.

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

Output Schema

ParametersJSON Schema
NameRequiredDescription
typeNo
citiesNo
generatedAtNo

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the description does not need to reiterate safety. The description adds no further behavioral traits (e.g., rate limits, data freshness), but it does not contradict annotations.

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

Conciseness5/5

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

The description is two sentences, front-loading the action and output. Every word adds value; no unnecessary details.

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

Completeness5/5

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

Given the simple parameter set (2 params, 1 required), existing annotations, and presence of an output schema, the description is complete and sufficient for an agent to understand usage.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema fully documents both parameters and their enums. The description does not add extra meaning beyond the schema, which is adequate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description specifically states 'Compare 2-4 Northern Cyprus cities side-by-side' with clear output details (aggregated prices, listing counts, top districts). This clearly distinguishes it from siblings like 'get_district_profile' or 'compare_properties'.

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

Usage Guidelines4/5

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

The description mentions 'Useful for deciding between investment locations,' providing clear context. It does not explicitly state when not to use it or name alternatives, but the purpose is evident, and siblings are available for other use cases.

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

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

Compare 2-4 active Evlek property listings side-by-side. Returns price, area, bedrooms, price-per-m², location for each, plus an automatic value insight (cheapest £/m², largest area, same-city grouping). Pass UUIDs from search_listings results.

ParametersJSON Schema
NameRequiredDescriptionDefault
listing_idsYesEvlek listing UUIDs (2-4)

Output Schema

ParametersJSON Schema
NameRequiredDescription
countNo
missingNo
listingsNo

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true. The description adds that it returns a side-by-side comparison with automatic value insights, providing useful behavioral context beyond annotations.

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

Conciseness5/5

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

The description is two sentences, front-loaded with the core purpose, and every sentence adds essential information without redundancy.

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

Completeness5/5

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

Given that an output schema exists (so return values need not be detailed), the description covers purpose, prerequisites, and what it returns, making it complete for the tool's complexity.

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

Parameters4/5

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

With 100% schema coverage, the schema already documents the 'listing_ids' parameter. The description adds value by telling users to pass UUIDs from search_listings results, clarifying the source.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Compare 2-4 active Evlek property listings side-by-side' and lists specific return fields (price, area, bedrooms, etc.), distinguishing it from sibling tools like search_listings and get_listing_detail.

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

Usage Guidelines4/5

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

The description explicitly states 'Pass UUIDs from search_listings results', indicating the prerequisite step. While it doesn't mention when not to use, the context is clear enough.

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

fetchFetch full Evlek listing detailA
Read-only
Inspect

Fetch the full detail of one Evlek listing by id (from search): title, description, GBP-normalized price, location, size, amenities. Read-only; contact details intentionally omitted. Same underlying data as get_listing_detail — this fixed id-only form exists for the ChatGPT/OpenAI connector contract; prefer get_listing_detail directly outside that connector.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesEvlek listing id (UUID) from search

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNo
urlNo
textNo
titleNo
metadataNo

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and destructiveHint. Description adds useful context beyond annotations: contact details are intentionally omitted, and it shares the same data as get_listing_detail. No contradiction.

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

Conciseness5/5

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

Two well-structured sentences that front-load the purpose and add necessary context. No redundant information.

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

Completeness5/5

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

Given output schema exists, return values are not needed. Tool is simple with one parameter; description covers purpose, usage guidelines, and behavioral traits completely, including its relationship to get_listing_detail.

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

Parameters4/5

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

Schema coverage is 100% for the single parameter 'id'. Description adds that the id comes from search and is a UUID, providing extra context beyond the schema description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states it fetches full detail of one Evlek listing by id, listing specific fields returned. It explicitly distinguishes itself from the sibling tool get_listing_detail by explaining this is a fixed id-only form for a connector contract.

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

Usage Guidelines5/5

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

States 'prefer get_listing_detail directly outside that connector', giving explicit guidance on when to use this tool vs the alternative. Also mentions contact details are omitted, setting expectations.

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

foreign_buyer_roadmapKKTC Foreign-Buyer Purchase Roadmap (deprecated)A
Read-only
Inspect

DEPRECATED — alias of get_legal_info(topic: 'ptp_process'); will be removed after 2027-07-30, use get_legal_info directly. Step-by-step roadmap for a foreign national buying property in Northern Cyprus (KKTC), including the Permission to Purchase (PTP) process. General information only — confirm current rules with an independent KKTC lawyer. Not legal advice.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
topicNo

TDQS

A4.9/5.0
Behavior5/5

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

Describes deprecation status, alias relationship, and that it provides only general information. Annotations already indicate read-only and open-world, but the description adds context that is not present in annotations (deprecation timeline, alias).

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

Conciseness5/5

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

Description is concise with three sentences, front-loads the deprecation warning, and every sentence adds value. No wasted words.

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

Completeness5/5

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

For a deprecated alias tool with no parameters and existing annotations and output schema, the description provides all necessary context: purpose, alias, deprecation, and disclaimer. Complete and sufficient.

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

Parameters4/5

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

Input schema has no parameters, so parameter semantics are not applicable. Baseline for 0 parameters is 4. Description does not need to add parameter info.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states it is a step-by-step roadmap for foreign nationals buying property in Northern Cyprus, including the PTP process. Also explicitly says it is an alias of get_legal_info and deprecated, distinguishing it from siblings.

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

Usage Guidelines5/5

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

Explicitly advises to use get_legal_info directly instead, and warns that it is general information only, not legal advice, and to confirm with a lawyer. Provides clear when-to-use and when-not-to-use guidance.

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

get_district_profileGet 360° Profile for a Northern Cyprus DistrictA
Read-only
Inspect

Returns a comprehensive profile for a single district: active listing counts (sale & rent), average/median prices, £/m², bedroom breakdown, estimated gross yield (rent/sale ratio), and matching buyer personas (retiree, investor, student, family, digital_nomad, vacation). Use after compare_cities narrows the city.

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

Output Schema

ParametersJSON Schema
NameRequiredDescription
cityNo
rentNo
saleNo
districtNo
personasNo
totalActiveNo
grossYieldPctNo

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true. The description adds context about returned metrics (active listings, prices, yields, personas) without contradicting annotations. It does not disclose additional behavioral traits like rate limits or data freshness, but the annotations cover the safety profile adequately.

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

Conciseness5/5

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

Three sentences front-loaded with the tool's purpose and contents, followed by a clear usage recommendation. No redundant words, every sentence adds value.

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

Completeness4/5

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

With an existing output schema, the description does not need to detail return values. The description is sufficient given the tool's complexity and annotations. It could mention that the output is open-world (per annotation) but overall is complete enough.

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

Parameters2/5

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

Schema coverage is 50% (district has a description, city does not). The description does not explain either parameter further, relying on the schema. Since coverage is low, the description should compensate but it does not, leaving ambiguity about city values (list in schema) and district format.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'Returns' and clearly names the resource 'comprehensive profile for a single district', listing exact metrics. It also distinguishes itself from the sibling 'compare_cities' by advising to use it after that tool narrows the city.

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

Usage Guidelines4/5

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

Explicitly states 'Use after compare_cities narrows the city.' which provides clear context for when to invoke this tool. However, it does not include when-not-to-use or alternative tools for similar purposes.

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

get_listing_by_numberGet Evlek Listing by NumberA
Read-only
Inspect

Look up a single Evlek listing by its public listing number (e.g. "EVL-123456" or "123456") and return its full detail — same shape as get_listing_detail. Use this when a listing number is known (site/card reference) instead of a UUID.

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

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNo
urlNo
cityNo
typeNo
foundNo
priceNo
titleNo
photosNo
areaSqmNo
bedroomsNo
currencyNo
districtNo
featuresNo
listedAtNo
priceGbpNo
amenitiesNo
bathroomsNo
furnishedNo
photoCountNo
coverImageUrlNo
listingNumberNo
titleDeedBandNo
titleDeedTypeNo
pricePerSqmGBPNo
titleDeedLabelNo

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is clear. The description adds that the output shape matches get_listing_detail, which is useful context beyond annotations.

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

Conciseness5/5

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

Two concise sentences, front-loaded with purpose and usage guidance. No unnecessary words.

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

Completeness5/5

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

For a single-parameter lookup tool with an output schema, the description provides sufficient context: it explains the input, output shape, and when to use it. No gaps.

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

Parameters3/5

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

Schema coverage is 100%, so the parameter is already well-documented. The description reiterates the format (e.g., 'EVL-123456' or '123456'), adding minimal extra meaning. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Look up', the resource 'Evlek listing', and the input method (by listing number). It also differentiates from get_listing_detail by noting the same shape and alternative identifier (UUID vs number).

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

Usage Guidelines5/5

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

Explicitly instructs when to use: 'when a listing number is known (site/card reference) instead of a UUID.' This provides clear guidance on choosing this tool over alternatives like get_listing_detail.

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

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

Return a 360° profile of one active Evlek listing by UUID: title, description, price, location, size, amenities, features, cover image, per-photo captions and tags, and title-deed (koçan) type with its risk band. Contact details are intentionally omitted. Pass a UUID from search_listings.

ParametersJSON Schema
NameRequiredDescriptionDefault
property_idYesEvlek listing UUID

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNo
urlNo
cityNo
typeNo
foundNo
priceNo
titleNo
photosNo
areaSqmNo
bedroomsNo
currencyNo
districtNo
featuresNo
listedAtNo
priceGbpNo
amenitiesNo
bathroomsNo
furnishedNo
photoCountNo
coverImageUrlNo
listingNumberNo
titleDeedBandNo
titleDeedTypeNo
pricePerSqmGBPNo
titleDeedLabelNo

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and destructiveHint, so the description adds context beyond them by specifying omitted fields (contact details) and the breadth of data returned. No contradictions.

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

Conciseness5/5

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

The description is a single sentence that front-loads the purpose and enumerates fields concisely. Every phrase adds value with no wasted words.

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

Completeness5/5

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

Given the presence of output schema, the description need not detail return format. It enumerates many included fields and explicitly notes omitted contact details. For a single-parameter detail retrieval tool, it is complete.

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

Parameters4/5

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

The schema has 100% coverage for property_id with a basic description. The tool description adds value by specifying the parameter should come from search_listings, providing origin context beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns a '360° profile' of an active listing by UUID, listing many fields. It implies differentiation from siblings like 'get_listing_by_number' by specifying UUID input, but does not explicitly distinguish.

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

Usage Guidelines3/5

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

The description says 'Pass a UUID from search_listings', indicating when to use this tool after searching. It mentions 'Contact details are intentionally omitted', giving insight into limitations, but no explicit when-not-to-use or alternatives.

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

get_market_overviewGet Northern Cyprus Market OverviewA
Read-only
Inspect

Returns a high-level market overview for Northern Cyprus property: average rents and sale prices by major city, rental yields, investment highlights, and key facts (taxes, foreign ownership rules).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
sourceNo
indexesNo
lastUpdatedNo
investmentHighlightsNo

TDQS

A4.5/5.0
Behavior4/5

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

Annotations (readOnlyHint, openWorldHint, destructiveHint) already indicate safe read-only behavior. The description adds value by detailing the output contents (rents, sales, yields, investment highlights, key facts) without contradicting annotations.

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

Conciseness5/5

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

A single sentence that efficiently conveys the tool's purpose and output details without redundant words. Every clause adds value: 'high-level market overview', 'average rents and sale prices by major city', 'rental yields', 'investment highlights', 'key facts'.

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

Completeness5/5

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

For a zero-parameter tool with an output schema, the description fully explains what the tool returns, covering all relevant aspects (prices, yields, highlights, facts). No gaps.

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

Parameters4/5

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

No parameters exist (schema coverage 100%), so the description need not add param info. Baseline for zero params is 4. The description focuses on output, which is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns a 'high-level market overview for Northern Cyprus property' and lists specific data points (average rents, sale prices, rental yields). This verb+resource combination is specific and distinguishes it from sibling tools like get_district_profile or compare_cities.

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

Usage Guidelines4/5

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

The description implies the tool is for broad market context but does not explicitly state when to use alternatives like get_district_profile or compare_cities. The context is clear, yet no exclusions are provided.

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

get_price_indexGet Northern Cyprus Price IndexA
Read-only
Inspect

Returns the live Evlek Price Index: aggregated average, median, min, max prices per city and top districts. Based on all active listings on evlek.app. Useful for market analysis and investment decisions.

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

Output Schema

ParametersJSON Schema
NameRequiredDescription
typeNo
citiesNo
generatedAtNo
totalListingsNo

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint=true and destructiveHint=false. The description adds valuable behavioral context: it is 'live' and 'based on all active listings on evlek.app,' which goes beyond the annotations and clarifies data freshness and source. No contradictions.

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

Conciseness5/5

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

The description is two sentences long, front-loaded with the key action and result, and contains no filler. Every sentence adds value.

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

Completeness4/5

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

Given the tool's simplicity (2 optional enum parameters, read-only, with an output schema), the description adequately explains what is returned and its source. It covers the main use case without needing extensive detail.

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

Parameters3/5

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

The input schema has two parameters with enums, and the 'type' parameter includes a description. The description mentions 'per city' referencing the city parameter but does not detail the 'type' parameter or any other semantics. With 50% schema description coverage, the description provides partial compensation but not full clarity.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns the 'live Evlek Price Index' with aggregated statistics per city and top districts. The verb 'returns' and resource 'Price Index' are explicit. However, it does not differentiate from sibling tools like 'get_market_overview' or 'compare_cities', which could have overlapping purposes.

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

Usage Guidelines3/5

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

The description mentions 'useful for market analysis and investment decisions,' providing a reasonable context. However, it offers no explicit guidance on when not to use this tool or which alternative sibling tool might be better suited for a given scenario.

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

get_yield_estimateEstimate Rental Yield for a Northern Cyprus PropertyA
Read-only
Inspect

Calculate estimated gross and net annual rental yield for a property given its purchase price and city. Returns breakeven years and comparison to city averages.

ParametersJSON Schema
NameRequiredDescriptionDefault
cityYes
bedroomsNoBedroom count (integer 0-10)
purchasePriceYesPurchase price in GBP

Output Schema

ParametersJSON Schema
NameRequiredDescription
cityNo
dataSourceNomodelled — not derived from live rental listings
netYieldPctNo
netAnnualGBPNo
cityBenchmarkNo
grossYieldPctNo
breakevenYearsNo
grossAnnualGBPNo
monthlyRentGBPNo
purchasePriceGBPNo

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, openWorldHint=true, and destructiveHint=false, which are consistent with the description. The description adds that it returns breakeven years and city comparison, but does not disclose any additional behaviors beyond what annotations and schema imply.

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

Conciseness5/5

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

The description is a single, clear sentence with no wasted words, front-loading the core action of calculating estimated rental yield.

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

Completeness4/5

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

With an output schema present and annotations covering safety, the description adequately explains return values (breakeven years, city comparison). Could be considered complete for a straightforward estimation tool, though it lacks differentiation from sibling tools in usage guidance.

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

Parameters3/5

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

Schema description coverage is 67% (two of three parameters have descriptions). The description adds context for purchasePrice and city but does not explain the optional bedrooms parameter beyond the schema's existing description. Baseline 3 is appropriate given moderate coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it calculates gross and net annual rental yield for a property given purchase price and city, distinguishing it from sibling tools like get_market_overview or get_price_index by focusing specifically on yield estimation.

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

Usage Guidelines3/5

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

The description implies usage when needing rental yield estimates but does not explicitly state when to use or not use this tool versus alternatives, nor does it mention prerequisites or exclusions.

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

list_locationsList Valid Evlek Cities and DistrictsA
Read-only
Inspect

Return the canonical list of valid KKTC city slugs plus the districts that currently have active Evlek listings. Call this first when unsure about exact city/district spelling — search_listings, compare_cities, and get_district_profile all reject unrecognized city values.

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

Output Schema

ParametersJSON Schema
NameRequiredDescription
citiesNo

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, openWorldHint=true, destructiveHint=false. The description adds context about returning only active listings and being a validation step, which is useful but not extensive. No contradictions.

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

Conciseness5/5

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

Two sentences, no waste. First sentence states the core functionality, second provides usage guidance. Ideal structure for efficient parsing.

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

Completeness5/5

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

Given the simple one-parameter schema and presence of an output schema, the description fully covers what the agent needs: purpose, usage timing, and relation to siblings. No gaps.

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

Parameters3/5

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

Schema coverage is 100% with a clear enum and description. The description does not add new parameter info beyond schema, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Return', the resource 'canonical list of valid KKTC city slugs plus districts', and the scope 'active Evlek listings'. It distinguishes from sibling tools by noting that they reject unrecognized city values, making it the go-to for spelling validation.

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

Usage Guidelines5/5

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

Explicitly advises to 'Call this first when unsure about exact city/district spelling' and lists sibling tools that reject unrecognized values, providing clear when-to-use and contextual alternatives.

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

payment_planKKTC Property Payment & Currency BreakdownA
Read-only
Inspect

Convert a Northern Cyprus property price across GBP/EUR/USD/TRY using live, date-stamped exchange rates (base GBP), and surface off-plan staged-payment risk warnings. General information only — confirm escrow, milestones and title transfer with an independent KKTC lawyer.

ParametersJSON Schema
NameRequiredDescriptionDefault
priceYesProperty price.
offPlanNoTrue if off-plan (under construction).
currencyNoCurrency of the price (default GBP).

Output Schema

ParametersJSON Schema
NameRequiredDescription
fxNo
amountsNo
offPlanNo
priceGBPNo
warningsNo
inputCurrencyNo

TDQS

A4.8/5.0
Behavior5/5

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

The description adds significant behavioral context beyond annotations: it specifies 'live, date-stamped exchange rates (base GBP)' and mentions surfacing off-plan risk warnings. The annotations (readOnlyHint, openWorldHint, destructiveHint) are consistent and the description enhances transparency about the tool's mechanics.

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

Conciseness5/5

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

The description is two sentences: the first states the core action, the second provides essential legal context. It is front-loaded with actionable information and contains no wasteful words.

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

Completeness5/5

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

The description fully explains the tool's output (currency conversion results and off-plan risk warnings), and the presence of an output schema covers return values. For a moderately complex tool with parameters and annotations, the description is complete and leaves no ambiguity.

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

Parameters5/5

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

With 100% schema description coverage, the description still adds value by explaining the role of parameters: price is the property price in the given currency, offPlan triggers risk warnings, and currency defaults to GBP. This clearly ties parameters to the tool's conversion and warning functionality.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states the tool converts a Northern Cyprus property price across four currencies using live exchange rates and surfaces off-plan payment risk warnings, which is a specific verb+resource combination. This clearly distinguishes it from sibling tools like get_price_index or get_yield_estimate.

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

Usage Guidelines4/5

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

The description provides clear usage context (currency conversion and off-plan risk warnings) and a strong disclaimer ('general information only — confirm with a lawyer'). However, it does not explicitly name alternative tools or state when not to use this tool, slightly reducing its guidance value.

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

search_listingsSearch Northern Cyprus Property ListingsA
Read-only
Inspect

Search live property listings on Evlek. Filter by city, type (sale/rent/daily), bedrooms, and price range. Returns up to 10 matching properties with title, price, location, and direct link.

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

Output Schema

ParametersJSON Schema
NameRequiredDescription
countNo
listingsNo

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the description adds value by specifying return fields (title, price, location, link) and result limit. No contradictions.

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

Conciseness5/5

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

Two sentences, front-loaded with action and key details. No unnecessary words. Efficient and clear.

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

Completeness4/5

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

Covers essential aspects: filtering, limit, return format. With an output schema (not shown) and annotations, this is adequate. Missing details like sorting or empty results, but not critical.

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

Parameters3/5

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

Schema coverage is 100% with detailed descriptions for each parameter. Description summarizes filters but adds no new meaning beyond the schema. Baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states it searches live property listings on Evlek with specific filters (city, type, bedrooms, price range) and returns matching properties. Distinguishes from sibling tools like get_district_profile or get_market_overview.

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

Usage Guidelines3/5

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

Provides context of when to use (search listings with filters) but lacks explicit guidance on when to prefer sibling tools like compare_properties or get_price_index. Implied usage, but no exclusions or alternatives.

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

student_housingStudent-Housing Rental Outlook near a KKTC UniversityA
Read-only
Inspect

Given a Northern Cyprus university (resolved from the live Evlek roster), estimate student-rental monthly rent and academic-year (9-month) vs year-round (12-month) gross income/yield, with the city yield band and a link to nearby listings. Estimates only — not financial advice.

ParametersJSON Schema
NameRequiredDescriptionDefault
bedroomsNoBedroom count (0=studio).
universityYesUniversity name, short code, or known alias, matched against the canonical Evlek university catalog.
purchasePriceNoOptional purchase price in GBP (enables yield).

Output Schema

ParametersJSON Schema
NameRequiredDescription
cityNo
cityBandNo
dataSourceNomodelled — not derived from live rental listings
universityNo
monthlyRentGBPNo
academicYieldPctNo
academicAnnualGBPNo
yearRoundYieldPctNo
yearRoundAnnualGBPNo

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds that outputs are estimates only and not financial advice, covering additional behavioral context beyond structured fields.

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

Conciseness5/5

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

Two sentences, front-loaded with core action, no redundant words. Every sentence contributes meaning.

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

Completeness5/5

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

Given the presence of an output schema (not shown but indicated), the description covers key outputs (rent, yield, band, link) and is complete for the tool's complexity.

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

Parameters4/5

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

Schema description coverage is 100%, baseline 3. The description adds value by noting the university is resolved from the Evlek roster, enhancing understanding of that parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool estimates student-rental monthly rent and income/yield for a Northern Cyprus university, distinguishing it from siblings like 'get_yield_estimate' which may be more general.

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

Usage Guidelines3/5

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

The description implies usage when estimating student-housing near a university but lacks explicit guidance on when to use this tool over siblings or when not to use it.

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

suggest_neighborhoodSuggest Best Northern Cyprus Neighborhoods for a Buyer PersonaA
Read-only
Inspect

Given a buyer persona (retiree, investor, student, family, digital_nomad, vacation) and optional budget/preferences, return 2-3 best-matched neighborhoods with rationale. Based on Evlek expert knowledge of KKTC regional characteristics.

ParametersJSON Schema
NameRequiredDescriptionDefault
personaYes
budgetGBPNo
preferencesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
personaNo
budgetGBPNo
preferencesNo
suggestionsNo

TDQS

A4.2/5.0
Behavior4/5

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

Annotations (readOnlyHint, openWorldHint, destructiveHint false) are consistent and describe safety. The description adds context about expert knowledge (Evlek) but does not detail edge cases like no matches found or behavior with invalid personas. Overall adds value beyond annotations.

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

Conciseness5/5

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

Two sentences: first covers purpose, input, and output; second adds credibility. No wasted words, front-loaded with key info.

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

Completeness4/5

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

Given the presence of an output schema (not shown but signaled) and sibling tools covering related topics, the description adequately covers what the tool does. It specifies input, output count, and basis (expert knowledge). Could mention handling of missing matches but sufficient.

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

Parameters4/5

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

Schema description coverage is 0%, but the description enumerates the possible personas and notes that budget and preferences are optional. It adds meaning beyond the schema by explaining how parameters are used together to generate recommendations.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb (suggest), the resource (neighborhoods), the input (buyer persona with optional budget/preferences), and output (2-3 best-matched neighborhoods with rationale). It distinguishes itself from siblings by focusing on persona-based recommendation.

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

Usage Guidelines3/5

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

The description implies usage for matching neighborhoods to buyer personas but does not explicitly state when to use this tool versus siblings like 'get_district_profile' or 'search'. No when-not-to-use or alternative guidance.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 18 tool updatesv1.6.0
    • First observedassess_title_risk
    • First observedcompare_cities
    • First observedcompare_properties
    • First observedfetch
    • First observedforeign_buyer_roadmap
    • First observedget_district_profile
    • First observedget_legal_info
    • First observedget_listing_by_number
    • First observedget_listing_detail
    • First observedget_market_overview
    • First observedget_price_index
    • First observedget_yield_estimate
    • First observedlist_locations
    • First observedpayment_plan
    • First observedsearch
    • First observedsearch_listings
    • First observedstudent_housing
    • First observedsuggest_neighborhood

TDQS

A4/5.0
Disambiguation2/5

There are clear duplicate tools: 'search' vs 'search_listings' and 'fetch' vs 'get_listing_detail' with nearly identical purposes. Descriptions warn to prefer one over the other, which adds confusion. Also, several market analysis tools overlap partially, making it hard for an agent to pick the right one.

Naming Consistency4/5

Most tools follow a verb_noun pattern (e.g., get_district_profile, search_listings). However, 'student_housing' and 'payment_plan' are noun phrases, and 'foreign_buyer_roadmap' is also noun-heavy, breaking the pattern slightly. Overall, the convention is mostly consistent.

Tool Count5/5

18 tools is well-scoped for a property domain covering search, detail, comparisons, market analysis, legal info, and specialized calculators. Each tool has a clear role despite some overlap, and the count is neither too few nor too many.

Completeness4/5

The toolset covers core workflows: listing search and retrieval, comparisons, market overviews, legal guidance, and specialized estimates (yield, student housing, payment plans). Minor gaps exist (e.g., no amenity-based filtering), but the surface is largely complete for a read-only property data server.

Maintenance

ActivityMaintained
ResponsivenessSyncing

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    B
    maintenance
    Provides comprehensive Australian planning property reports, including zoning, overlays, land size, and utility information for AI assistants. This high-performance MCP server is built for Cloudflare Workers and enables real-time property data retrieval through an HTTP-based interface.
    -

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Evlek/evlek-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server