Back to Discover

evlek-mcp

connector

Evlek

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

View on GitHub
0 starsSynced Aug 2, 2026

Install to Claude Code

/plugin marketplace add Evlek/evlek-mcp

README

Evlek MCP Server

MCP Hosted License Coverage MCP Registry smithery badge

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.


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)

#ToolWhat it does
1search_listingsSearch 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.
2get_price_indexAggregated avg/median/min/max prices per city + top districts (Evlek Price Index), with IQR outlier exclusion and a minimum-sample floor.
3get_market_overviewHigh-level market overview — indicative city rent/sale levels, yield ranges, and routing to Evlek's calculators.
4compare_citiesCompare 2-4 cities side-by-side with prices, listing counts, top districts, automatic verdict.
5get_yield_estimateEstimate gross/net annual rental yield + breakeven years. Cities without sufficient data return a clear unsupported message.
6suggest_neighborhoodMatch a buyer persona (retiree, investor, student, family, digital_nomad, vacation) to neighborhoods.
7compare_propertiesCompare 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.
8get_district_profile360° district profile — sale/rent stats, £/m², bedroom breakdown, estimated yield, persona match. Same outlier filter and sample floor as the price index.
9student_housingStudent-housing rental outlook near a KKTC university, academic-year vs year-round.
10payment_planConvert a price across GBP/EUR/USD/TRY using live date-stamped rates; off-plan staged-payment context.
11get_listing_detail360° profile of one active listing by UUID, including GBP-normalized price-per-m².
12search(ChatGPT-compatible) Free-text search returning listings as {id, title, url}. Understands city, type, bedroom and GBP price constraints in the query.
13fetch(ChatGPT-compatible) Fetch full listing detail by id from search.
14list_locationsValid city + district dictionary — call first when unsure of location names.
15get_listing_by_numberLook 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:

ToolWidgetWhat you get
search_listings, searchui://evlek/listing-cards-v2.htmlCard grid with cover photos; per-card drill-down into the detail view without leaving the widget
get_listing_detailui://evlek/listing-detail-v2.htmlPhoto gallery with AI captions, spec sheet, and a before/after AI virtual-staging comparison slider
get_price_indexui://evlek/price-index-v2.htmlDistrict bar chart with explicit sample-size confidence tiers

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.


Links


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

Rendered live from Evlek/evlek-mcp's GitHub README — not stored, always reflects the source repo.

1 Install Method

NameDescriptionCategorySource
streamable-http remoteHosted streamable-http endpointmcp-serverhttps://evlek.app/api/mcp

0 Comments

Login required
Log in to post a comment or update on this repo.

No comments yet — be the first to share an update.