Evlek — Northern Cyprus Property MCP Server
REMOTE · EVLEK.APP · SCANNED AUG 3
AI-native property MCP for Northern Cyprus (KKTC/TRNC): listings, prices, districts, yields.
Available components
How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score →
Endpoint Security80
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- No authorisation is required to call this server. Every tool declares its destructiveHint and none is destructive, so open access doesn't expose one. See how to fix → View diagnostics → Partial
- HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
- The HSTS (Strict-Transport-Security) header is present. View diagnostics → Pass
- DNSSEC check failed: this domain isn't protected by DNSSEC. See how to fix → View diagnostics → Fail
Transport & Reachability100
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
Schema Quality & AI Usability85
- 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
- AI-judged instruction clarity (excellent).Pass
- Tool/resource definitions use about 1784 tokens (~71/item across 25 items; 15 tools + 10 resources), lean.Pass
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management8
- Stability check failed: schema churn in the 8 days we've observed: 3 tool removals, 0 breaking changes, 0 auth/transport breaks, 2 additions. See how to fix → Fail
Tool Coverage94
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 80% of tool parameters carry a description.Partial
- Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
- Supports UI / widget rendering.Pass
Add this component to your MCP client. Where a client-specific snippet is available, pick your client below and copy it straight into your config; otherwise use the connection detail shown.
remote · evlek.app
claude mcp add --transport http app-evlek-mcp-server https://evlek.app/api/mcp
[mcp_servers.app-evlek-mcp-server] url = "https://evlek.app/api/mcp"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"app-evlek-mcp-server": {
"type": "remote",
"url": "https://evlek.app/api/mcp",
"enabled": true
}
}
} openclaw mcp add app-evlek-mcp-server --url https://evlek.app/api/mcp --transport streamable-http
mcp_servers:
app-evlek-mcp-server:
url: "https://evlek.app/api/mcp" {
"mcpServers": {
"app-evlek-mcp-server": {
"type": "http",
"url": "https://evlek.app/api/mcp"
}
}
} The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 3 Aug 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 5 to 8.
- 1 Aug 26 +1
- Stability: 0.17 → fail ▼ security
- Tool “foreign_buyer_roadmap” was removed ▼ security
- Tool “assess_title_risk” was removed ▼ security
- Tool “get_legal_info” was removed ▼ security
- Tool “get_listing_detail” rewrote its description, which is the text the model reads security
- Prompt “foreign_buyer_guide” was removed ▼ functional
- Prompt “kocan_risk_check” was removed ▼ functional
- Resource “kocan-types” was removed ▼ functional
- Schema quality: 1936 → 1610 ▲ functional
- First check of Capabilities: pass functional
- Schema quality: good → excellent functional
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- Server version: 1.6.0 → 1.7.0 functional
- 31 Jul 26 +5
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 30 Jul 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 10 to 13. That category is still filling its 30-day observation window: 3 days of observed history at the previous scan, 4 at this one. The score rises as the window fills, whether or not the server changes.
- 28 Jul 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 3 to 7. That category is still filling its 30-day observation window: 1 days of observed history at the previous scan, 2 at this one. The score rises as the window fills, whether or not the server changes.
- 27 Jul 26 +1
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 26 Jul 26 65
First indexed and scored.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 3 Aug 2026 · Probed https://evlek.app/api/mcp
TLS valid
Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .
| Subject | Issuer | Valid from | Valid until | Key | Signature | Serial |
|---|---|---|---|---|---|---|
| CN=evlek.app | CN=YR2,O=Let's Encrypt,C=US | 1 Jul 2026 | 29 Sept 2026 | RSA 2048 | SHA256-RSA | 5ba78657d25a79cf2821f30686d6f684e6d |
| SANs: evlek.app | ||||||
| CN=YR2,O=Let's Encrypt,C=US (CA) | CN=Root YR,O=ISRG,C=US | 3 Sept 2025 | 2 Sept 2028 | RSA 2048 | SHA256-RSA | 4ebd24947e24d394802d84a52fd5b319 |
| CN=Root YR,O=ISRG,C=US (CA) | CN=ISRG Root X1,O=Internet Security Research Group,C=US | 13 May 2026 | 2 Sept 2032 | RSA 4096 | SHA256-RSA | f24b6d17f9d9ad7cb1c9fea78782699f |
DNSSEC insecure
Validation of evlek.app. — Not signed
| Zone | DS | Keys | Algorithms | Outcome |
|---|---|---|---|---|
| . | trust_anchor | 20326, 38696 | 8, 8 | Verified |
| app. | present | 23684 | 8 | Verified |
| evlek.app. | absent | Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation |
Authentication No authorisation required
The endpoint answered without asking for a token. Anyone who knows the URL can reach it.
| Result | No authorisation required |
|---|---|
| HTTP status | 200 |
| Header | Value |
|---|---|
| strict-transport-security | max-age=31536000; includeSubDomains; preload |
| content-security-policy | default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval' https://api.mapbox.com https://events.mapbox.com https://www.googletagmanager.com https://www.google-analytics.com https://va.vercel-scripts.com https://tracker.metricool.com https://www.clarity.ms https://*.clarity.ms; style-src 'self' 'unsafe-inline' https://api.mapbox.com; img-src 'self' data: blob: https://*.supabase.co https://*.mapbox.com https://*.googleapis.com https://*.google.com.cy https://*.doubleclick.net https://tracker.metricool.com https://*.clarity.ms https://c.bing.com; font-src 'self'; connect-src 'self' https://*.supabase.co wss://*.supabase.co https://api.mapbox.com https://events.mapbox.com https://generativelanguage.googleapis.com https://www.googletagmanager.com https://www.google-analytics.com https://*.google-analytics.com https://*.analytics.google.com https://*.doubleclick.net https://*.google.com.cy https://*.ingest.de.sentry.io https://va.vercel-scripts.com https://vitals.vercel-insights.com https://api.frankfurt |
| x-content-type-options | nosniff |
| x-frame-options | DENY |
| referrer-policy | strict-origin-when-cross-origin |
| permissions-policy | camera=(), microphone=(), geolocation=(self), tools=(self) |
Transports 2 probes
| Transport | URL | Outcome | Status | Location |
|---|---|---|---|---|
| streamable-http | https://evlek.app/api/mcp | Verified | 200 | |
| http (plaintext) | http://evlek.app/api/mcp | HTTPS enforced | 308 | https://evlek.app/api/mcp |
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability.
compare_cities Compare Northern Cyprus Cities Side-by-Side ~74
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.
| Name | Type | Req | Description |
|---|---|---|---|
| cities | array | yes | Cities to compare (2-4) |
| type | string | — | Sale or rent (default: sale) |
| Name | Type | Req | Description |
|---|---|---|---|
| cities | array | — | — |
| generatedAt | string | — | — |
| type | string | — | — |
No examples provided.
compare_properties Compare Evlek Property Listings Side-by-Side ~84
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.
| Name | Type | Req | Description |
|---|---|---|---|
| listing_ids | array | yes | Evlek listing UUIDs (2-4) |
| Name | Type | Req | Description |
|---|---|---|---|
| count | number | — | — |
| listings | array | — | — |
| missing | number | — | — |
No examples provided.
fetch Fetch full Evlek listing detail ~93
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.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | Evlek listing id (UUID) from search |
| Name | Type | Req | Description |
|---|---|---|---|
| coverImageUrl | string|null | — | — |
| id | string | — | — |
| metadata | object | — | — |
| photos | array | — | — |
| text | string | — | — |
| title | string | — | — |
| url | string | — | — |
No examples provided.
get_district_profile Get 360° Profile for a Northern Cyprus District ~101
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.
| Name | Type | Req | Description |
|---|---|---|---|
| city | string | yes | — |
| district | string | yes | District name (2-60 chars) |
| Name | Type | Req | Description |
|---|---|---|---|
| city | string | — | — |
| district | string | — | — |
| grossYieldPct | number|null | — | — |
| personas | array | — | — |
| rent | object|null | — | — |
| sale | object|null | — | — |
| totalActive | number | — | — |
No examples provided.
get_listing_by_number Get Evlek Listing by Number ~96
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.
| Name | Type | Req | Description |
|---|---|---|---|
| listing_number | string | yes | Evlek listing number, e.g. "EVL-123456" or "123456". |
| Name | Type | Req | Description |
|---|---|---|---|
| amenities | array | — | — |
| areaSqm | number|null | — | — |
| bathrooms | number|null | — | — |
| bedrooms | number|null | — | — |
| city | string | — | — |
| coverImageUrl | string|null | — | — |
| currency | string | — | — |
| district | string|null | — | — |
| features | array | — | — |
| found | boolean | — | — |
| furnished | boolean|null | — | — |
| fxRates | object | — | — |
| id | string | — | — |
| listedAt | string|null | — | — |
| listingNumber | number|null | — | — |
| photoCount | number | — | — |
| photos | array | — | — |
| price | number | — | — |
| priceGbp | number|null | — | — |
| pricePerSqmGBP | number|null | — | — |
| title | string | — | — |
| type | string | — | — |
| url | string | — | — |
| virtualStaging | object | — | — |
No examples provided.
get_listing_detail Get Full Detail for a Single Evlek Listing ~90
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 where available (always AI-disclosed). Contact details are intentionally omitted. Pass a UUID from search_listings.
| Name | Type | Req | Description |
|---|---|---|---|
| property_id | string | yes | Evlek listing UUID |
| Name | Type | Req | Description |
|---|---|---|---|
| amenities | array | — | — |
| areaSqm | number|null | — | — |
| bathrooms | number|null | — | — |
| bedrooms | number|null | — | — |
| city | string | — | — |
| coverImageUrl | string|null | — | — |
| currency | string | — | — |
| district | string|null | — | — |
| features | array | — | — |
| found | boolean | — | — |
| furnished | boolean|null | — | — |
| fxRates | object | — | — |
| id | string | — | — |
| listedAt | string|null | — | — |
| listingNumber | number|null | — | — |
| photoCount | number | — | — |
| photos | array | — | — |
| price | number | — | — |
| priceGbp | number|null | — | — |
| pricePerSqmGBP | number|null | — | — |
| title | string | — | — |
| type | string | — | — |
| url | string | — | — |
| virtualStaging | object | — | — |
No examples provided.
get_market_overview Get Northern Cyprus Market Overview ~75
Returns a live, high-level market overview for Northern Cyprus property: active listing counts and average/median sale & rent prices per city (same live data as get_price_index/compare_cities), estimated gross rental yield where sample size allows, and investment-tool routing. Coverage grows automatically as more listings are added to Evlek.
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| cities | array | — | — |
| generatedAt | string | — | — |
| investmentHighlights | array | — | — |
| totalActiveListings | number | — | — |
No examples provided.
get_price_index Get Northern Cyprus Price Index ~71
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.
| Name | Type | Req | Description |
|---|---|---|---|
| city | string | — | — |
| type | string | — | Sale or rent (default: sale) |
| Name | Type | Req | Description |
|---|---|---|---|
| cities | array | — | — |
| generatedAt | string|null | — | — |
| totalListings | number|null | — | — |
| type | string | — | — |
No examples provided.
get_yield_estimate Estimate Rental Yield for a Northern Cyprus Property ~74
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.
| Name | Type | Req | Description |
|---|---|---|---|
| bedrooms | number | — | Bedroom count (integer 0-10) |
| city | string | yes | — |
| purchasePrice | number | yes | Purchase price in GBP |
| Name | Type | Req | Description |
|---|---|---|---|
| breakevenYears | number | — | — |
| city | string | — | — |
| cityBenchmark | string|null | — | — |
| dataSource | string | — | modelled — not derived from live rental listings |
| grossAnnualGBP | number | — | — |
| grossYieldPct | number | — | — |
| monthlyRentGBP | number | — | — |
| netAnnualGBP | number | — | — |
| netYieldPct | number | — | — |
| purchasePriceGBP | number | — | — |
No examples provided.
list_locations List Valid Evlek Cities and Districts ~78
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.
| Name | Type | Req | Description |
|---|---|---|---|
| city | string | — | Optional — limit districts to a single city slug. |
| Name | Type | Req | Description |
|---|---|---|---|
| cities | array | — | — |
No examples provided.
payment_plan KKTC Property Payment & Currency Breakdown ~98
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.
| Name | Type | Req | Description |
|---|---|---|---|
| currency | string | — | Currency of the price (default GBP). |
| offPlan | boolean | — | True if off-plan (under construction). |
| price | number | yes | Property price. |
| Name | Type | Req | Description |
|---|---|---|---|
| amounts | object | — | — |
| fx | object | — | — |
| inputCurrency | string | — | — |
| offPlan | boolean | — | — |
| priceGBP | number | — | — |
| warnings | array | — | — |
No examples provided.
search Search Evlek property listings ~107
Search live Northern Cyprus (KKTC/TRNC) property listings on Evlek with a free-text query (city, sale/rent, bedrooms). Returns matching listings as id/title/url for the fetch tool. Read-only; no contact details. Same underlying data as search_listings — this fixed single-query-string form exists for the ChatGPT/OpenAI connector contract; prefer search_listings directly for structured filters (price range, exact bedroom count).
| Name | Type | Req | Description |
|---|---|---|---|
| query | string | yes | Free-text property search query |
| Name | Type | Req | Description |
|---|---|---|---|
| appliedFilters | object | — | — |
| fxRates | object|null | — | — |
| listings | array | — | — |
| results | array | — | — |
No examples provided.
search_listings Search Northern Cyprus Property Listings ~130
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.
| Name | Type | Req | Description |
|---|---|---|---|
| bedrooms | number | — | Bedroom count (integer 0-10) |
| city | string | — | City to filter |
| limit | number | — | Result count (integer 1-10, default 5) |
| maxPrice | number | — | Max price in GBP |
| minPrice | number | — | Min price in GBP |
| type | string | — | Listing type |
| Name | Type | Req | Description |
|---|---|---|---|
| appliedFilters | object | — | — |
| count | number | — | — |
| fxRates | object | — | — |
| listings | array | — | — |
No examples provided.
student_housing Student-Housing Rental Outlook near a KKTC University ~122
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.
| Name | Type | Req | Description |
|---|---|---|---|
| bedrooms | number | — | Bedroom count (0=studio). |
| purchasePrice | number | — | Optional purchase price in GBP (enables yield). |
| university | string | yes | University name, short code, or known alias, matched against the canonical Evlek university catalog. |
| Name | Type | Req | Description |
|---|---|---|---|
| academicAnnualGBP | number | — | — |
| academicYieldPct | number|null | — | — |
| city | string | — | — |
| cityBand | string|null | — | — |
| dataSource | string | — | modelled — not derived from live rental listings |
| monthlyRentGBP | number | — | — |
| university | string | — | — |
| yearRoundAnnualGBP | number | — | — |
| yearRoundYieldPct | number|null | — | — |
No examples provided.
suggest_neighborhood Suggest Best Northern Cyprus Neighborhoods for a Buyer Persona ~81
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.
| Name | Type | Req | Description |
|---|---|---|---|
| budgetGBP | number | — | — |
| persona | string | yes | — |
| preferences | array | — | — |
| Name | Type | Req | Description |
|---|---|---|---|
| budgetGBP | number|null | — | — |
| persona | string | — | — |
| preferences | array | — | — |
| suggestions | array | — | — |
No examples provided.