Evlek MCP Server
Evlek is the Northern Cyprus property portal: Northern Cyprus property listings for sale and long-term rent, an asking-price index by city and district, and this MCP server (see the MCP documentation).
[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.
Evlek MCP gives AI assistants read-only access to live Northern Cyprus (KKTC/TRNC) property listings for sale and long-term rent, plus asking-price statistics, in TR, EN, RU, DE and AR. 8 tools, no auth, hosted at https://evlek.app/api/mcp. Asking prices only: no valuations, yield estimates, legal or investment advice.
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.
Why Evlek MCP
- AI-first. Built for agentic workflows from day one — not retrofitted on a legacy listing API.
- Multilingual. Answers in TR, EN, RU, DE, AR: pass
locale (or write the search query in that language) and the text, amenity names, number formats and links follow it. Place names are resolved in any of the five languages.
- 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.
Add Evlek to ChatGPT, Claude or your MCP client
The server URL is https://evlek.app/api/mcp. No sign-in, no API key.
ChatGPT
Evlek is in the ChatGPT app directory:
- ChatGPT → Apps → search for "Evlek" → Connect.
- In a chat, pick Evlek from the tools menu and ask, for example, "2-bedroom flats for rent in Girne".
To add it by hand instead: Settings → Apps & Connectors → Advanced settings → developer mode on, then Create with the URL https://evlek.app/api/mcp (no authentication).
Claude (web and desktop)
- Settings → Connectors → Add custom connector.
- Name:
Evlek. URL: https://evlek.app/api/mcp.
- In a chat, turn Evlek on from the tools menu.
Claude Code
Gemini CLI
The extension (gemini-extension.json) points Gemini CLI at https://evlek.app/api/mcp.
Cline
Ask Cline to install the server from this repository; it follows llms-install.md (remote URL, no
API key).
MCP Registry
Evlek is in the official MCP Registry as app.evlek/mcp-server
(registry entry).
Clients that install from the registry find it under that name; the entry points at the same URL.
More options (Cursor, VS Code, stdio) are under Quick start and on the MCP documentation page.
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:
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):
Restart Claude Desktop. The "evlek" server appears in the tools list.
MCP Inspector (test before installing)
Direct API (cURL)
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. It only implements tools — it does not declare the resources or prompts capability, so resources/list and prompts/list return a normal MCP "method not found" error on this bridge; those primitives (see below) are hosted-endpoint-only, reachable via the Streamable HTTP URL above. It also speaks whatever MCP protocol version the pinned @modelcontextprotocol/sdk supports during initialize (currently 2025-11-25), not necessarily the hosted endpoint's 2026-07-28 — tool schemas are identical either way.
Smoke-test it (spawns the server and speaks real MCP over stdio):
Available tools
8 tools · protocol 2026-07-28 · Streamable HTTP JSON-RPC 2.0
Every tool declares annotations: { readOnlyHint: true, destructiveHint: false, openWorldHint: false } — the whole surface is read-only.
Interactive widgets (MCP Apps / SEP-1865)
Five tools additionally bind a sandboxed HTML view (_meta.ui.resourceUri) that
MCP Apps-capable hosts (Claude web/desktop) render inline in the conversation:
compare_listings, list_locations and convert_currency have no widget. The
widget URIs moved from -v2 to -v3 in 3.0.0 so a host never serves a cached
v2 template against v3 data. 3.0.1 moved them to -v3-1, 3.0.2 to -v3-2, 3.0.3 to -v3-3 and 3.1.0 to -v3-4
(cards and detail then -v3-5); 3.1.4 served cards -v3-11, detail -v3-8 and price index -v3-6; 3.2.1 served cards -v3-13, detail -v3-10 and price index -v3-8; 3.2.2 serves cards -v3-14, detail -v3-11 and price index -v3-9. The older v3 URIs keep
answering with the current content. Rule since 3.1.0: a widget's
content never changes under a URI it was published with (a host caches a template by URI), so a changed widget gets a new URI.
In ChatGPT (3.0.2, search since 3.0.3) the listing data reaches the widget through the result _meta["evlek/widget"],
which ChatGPT shows only to the widget; for search_listings and get_listing the model gets a short summary (counts, price range,
listing numbers). Other clients get the full structuredContent as before.
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 (12) & resource templates (2)
resources/list returns 12 resources on the hosted endpoint — 9 read-only evlek:// data resources plus the 3 ui:// interactive-widget resources described above (pre-declared so a host can pre-cache them). Parameterized templates are separate, via resources/templates/list:
- Templates (2):
evlek://price-index/{city} · evlek://district/{city}/{district}
- Data resources (9): per-city price indexes (girne, iskele, lefkosa, gazimagusa, guzelyurt, lefke), a sample district profile (Girne/Alsancak), and 2 orientation guides —
evlek://guides/neighborhood-personas, evlek://guides/universities.
- Widget resources (3):
ui://evlek/listing-cards-v3-14.html, ui://evlek/listing-detail-v3-11.html, ui://evlek/price-index-v3-9.html — see "Interactive widgets" above.
Renamed tools in 3.0.0 (deprecated aliases)
3.0.0 consolidates the 12 v2 tools into 8. The old names below are not in
tools/list any more, but the hosted endpoint still answers them for one
release: the call is translated to the new tool, runs it, and the result starts
with a Deprecated: … Use <new> instead. line (plus
structuredContent.deprecated). The aliases are removed in 3.1.0 — switch
to the new names now.
Unchanged names: search_listings, search, fetch, list_locations,
convert_currency. search_listings, list_locations and convert_currency
gained new parameters and canonical names (e.g. transaction, priceMin/priceMax,
sort, cursor, amount, locale) — see TOOLS.md. The v2 names
type, maxPrice and price are still accepted on the hosted endpoint.
Tools removed in 2.0.0 and earlier (get_yield_estimate, suggest_neighborhood,
student_housing, get_market_overview, get_legal_info) still return a
protocol error naming the replacement, not an alias.
Prompts (2)
property_scenario — Illustrative Property Scenario with Separate Live Facts
student_rental_scenario — Illustrative Student-Rental Scenario
Example prompts
- "Find 2-bedroom flats for rent in Girne under £1,500/month."
- "Show me apartments in Girne under £150,000."
- "What's the median sale price per square meter in Lefkoşa?"
- "Compare Kyrenia and Famagusta — which has more active listings and how do median asking prices differ?"
- "What does a district profile for Alsancak look like?"
- "Convert £150,000 to EUR, USD, and TRY."
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 · Answers: TR · EN · RU · DE · AR (
locale)
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.json — Live tool contract (what the local stdio server answers
tools/list with)
- TOOLS.md — Full tool reference (JSON schemas + examples)
- CHANGELOG.md — Notable changes to the tool surface, including removed/renamed tools
- examples/ — Configuration files for Claude Desktop, Cursor, VS Code
- CONTRIBUTING.md — How to file issues and propose docs improvements
Sözleşme dosyaları (contract files)
tools.json and TOOLS.md are a projection of the live server, generated by pnpm mcp:export-public in the source repo and copied here verbatim. Never hand-edit them; the Contract Drift workflow compares tools.json against the live tools/list daily and on every PR.
- The
Live Sync workflow (.github/workflows/live-sync.yml, daily) reads the live server and, when it differs from this repo, opens an issue listing the tools and fields that differ (one issue per live version; later runs comment on it). It never changes the repo. node scripts/sync-from-live.mjs updates tools.json, the versions, the README tools table and widget URIs for the sync PR.
server.json is not that projection. It is the MCP Registry publish manifest and must keep the registry shape: name is app.evlek/mcp-server (pattern ^[a-zA-Z0-9.-]+/[a-zA-Z0-9._-]+$) and description is at most 100 characters. A sync only updates its version, the tool count in description, and the _meta tool list. (Copying the export's own server.json here is what failed the v2.1.0 registry publish.)
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 [email protected].
Status
- MCP version: 3.2.2 (live)
- Protocol: 2026-07-28
- Primitives: 8 tools · 9 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 [email protected].
Links
Built in North Cyprus by an architect, not a software firm. Powered by Anthropic Claude, Supabase, Vercel, and the Model Context Protocol.