Evlek — Northern Cyprus Property Mcp

by Evlek

229 downloads
Not rated
GitHub

About

AI-native property MCP server for Northern Cyprus (KKTC). Nine read-only tools — search active listings, get the live price index, compare cities, estimate rental yield, look up KKTC legal procedures, profile districts — pulled live from evlek.app, where every listing is KYC-veri

Details

Author
Evlek
Downloads
229
Categories
Other, Security, AI

- 9 tools: search_listings, get_price_index, get_market_overview, compare_cities, get_yield_estimate, get_legal_info, suggest_neighborhood, compare_properties, get_district_profile.
- Verified listings only – every property passes KYC verification.
- Covers 6 North Cyprus cities (Girne, İskele, Lefkoşa, Gazimağusa, Güzelyurt, Lefke) and 100+ districts.
- Multilingual data (TR, EN, RU, DE, AR) exposed in English tool descriptions.
- OWASP MCP Top 10 compliant: Zod input validation, output sanitization, rate limiting (60/min/IP, 500/min global), Sentry observability.
- Production‑grade with 30‑second hard timeout and no stack trace leaks.

Setting up with Highlight

This MCP is not yet compatible with Highlight’s one-click setup. However, you can still use it with Highlight by following these steps:

  1. Download and install Highlight from highlightai.com/download
  2. Navigate to the plugins tab and select "Add Custom Plugin"
  3. Configure the plugin with the settings below
    Plugin Name Evlek — Northern Cyprus Property Mcp
    Command (node, npx, python, etc.)

    Please refer to the README for specific instructions on how to obtain API keys or other required environment variables.

  4. Enable "Start Automatically" if you want the plugin to start when Highlight launches

From the repository

Add the server endpoint (https://evlek.app/api/mcp) to your MCP client’s configuration. For Claude Desktop, use npx -y mcp-remote with the URL; for Cursor/VS Code, add the URL directly. No local installation required – all data is fetched live from the hosted API. Prompts like “Find 2‑bedroom flats for rent in Girne under £500/month” invoke the appropriate tool automatically.

search_listings

Search live active sale and long-term-rent listings on Evlek. Results are newest-first by default; `limit` caps returned rows and `totalMatched` reports the full match count. Returns advertised asking-price and listing facts only; not valuation, verification of property-specific claims, forecast, ranking, or recommendation.

get_price_index

Returns source-dated aggregates of live active Evlek sale or long-term-rent asking prices. Descriptive listing facts only: not completed transactions, a valuation, a forecast, or an investment recommendation.

compare_cities

Compare source-dated live active-listing asking-price aggregates across 2-4 Northern Cyprus cities. Descriptive listing facts only; not transaction prices, valuation, forecast, ranking, or investment advice.

get_yield_estimate

Calculate an illustrative long-term-rent scenario only from caller-supplied purchase price, monthly rent, occupied months, and annual operating costs. No Evlek market baseline or occupancy assumption is used; outputs are not observed income, forecasts, guarantees, or advice.

suggest_neighborhood

Return static editorial orientation context for a persona and optional preferences. It contains no price or yield figures and is not live listing data, a ranking, suitability finding, valuation, or recommendation.

compare_properties

Compare descriptive facts from 2-4 active Evlek sale or long-term-rent listings of the same type. Shows advertised asking price, size and £/m² differences without making a value, suitability, appraisal, or investment judgment.

get_district_profile

Returns source-dated active sale/long-term-rent listing counts and asking-price aggregates for one district. Any rent-to-price percentage is a derived asking-price ratio, not observed income, net yield, valuation, forecast, ranking, or recommendation.

student_housing

Calculate one illustrative student-rent scenario from caller-supplied monthly rent and occupied months. The university only supplies location context; no Evlek rent or occupancy baseline, observed demand/income, forecast, guarantee, or advice is used.

payment_plan

The payment_plan identifier is retained only for compatibility. This tool converts an entered property asking-price amount across GBP/EUR/USD/TRY when complete, valid, fresh, date-stamped stored FX rates are available; otherwise it fails closed without amounts. It does not produce a payment plan, deposit schedule, installment schedule, acquisition-cost estimate, or advice.

get_listing_detail

Return a 360° profile of one active Evlek listing by UUID: title, description, price, location, size, amenities, features, cover image, per-photo captions/tags, and AI virtual-staging before/after pairs (always AI-disclosed). Contact details omitted. Use when: a UUID is already known. Don't use for: discovery — use search_listings first.

search

Search live Northern Cyprus (KKTC/TRNC) property listings on Evlek with a free-text query. Returns matching listings as id/title/url for the fetch tool. Same data as search_listings — this fixed form exists for the ChatGPT/OpenAI connector contract. Use when: the caller only has a free-text query. Don't use for: structured filters — use search_listings.

fetch

Fetch the full detail of one Evlek listing by id (from search): title, description, GBP-normalized price, location, size, amenities. Same data as get_listing_detail — this fixed id-only form exists for the ChatGPT/OpenAI connector contract. Use when: an id from search is known. Don't use for: discovery — use search first.

list_locations

Return canonical KKTC city slugs plus districts represented by active Evlek sale or long-term-rent listings. Live inventory-location facts only; holiday-home inventory remains unavailable.

get_listing_by_number

Look up a single Evlek listing by its public listing number (e.g. "EVL-123456", "123456", or a bare number) and return its full detail — same shape as get_listing_detail. Use when: a listing number is known. Don't use for: UUID lookups — use get_listing_detail.

Claude Desktop / Cursor

Paste into your MCP client config file to install this server.

{
    "mcpServers": {
        "evlek \u2014 northern cyprus property mcp": {
            "evlek": {
                "command": "npx",
                "args": [
                    "-y",
                    "mcp-remote",
                    "https://evlek.app/api/mcp"
                ]
            }
        }
    }
}

McpServers

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

Evlek MCP Server

MCP
Hosted
License
Coverage
Anthropic 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, estimate rental yield, look up KKTC legal procedures, get district profiles, and more. All data is sourced live from evlek.app.

---

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).
- Verified listings only. Every listing on Evlek passes KYC verification — no ghost ads, no fake agents.
- 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 compliant — Zod input validation, output sanitization, rate limiting (60/min/IP, 500/min global), Sentry observability.

---

Quick start

Claude Desktop

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", "https://evlek.app/api/mcp"]
    }
  }
}

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

Cursor / VS Code (GitHub Copilot)

Cursor: Settings → Model Context Protocol → Add Server. VS Code: .vscode/mcp.json.

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

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/

---

Available tools (v1.2.0 — 9 tools)

| # | Tool | What it does |
|---|------|--------------|
| 1 | search_listings | Search active listings by city, type (sale/rent/daily), bedrooms, price range. Returns up to 10 with title, price, location, direct link. |
| 2 | get_price_index | Aggregated avg/median/min/max prices per city + top districts (Evlek Price Index). |
| 3 | get_market_overview | High-level market overview — avg rent/sale prices, rental yields, hot zones, key facts (taxes, foreign ownership). |
| 4 | compare_cities | Compare 2-4 North Cyprus cities side-by-side with prices, listing counts, top districts, automatic verdict. |
| 5 | get_yield_estimate | Estimate gross/net annual rental yield for a property given purchase price + city + bedrooms. |
| 6 | get_legal_info | Authoritative info on koçan types, foreign purchase rules, taxes, residence permit, PTP (Permission to Purchase) process. |
| 7 | suggest_neighborhood | Given a buyer persona (retiree, investor, student, family, digital_nomad, vacation), return matched neighborhoods with rationale. |
| 8 | compare_properties | Compare 2-4 active listing UUIDs side-by-side with price-per-m², area, bedrooms, automatic value insight. |
| 9 | get_district_profile | 360° district profile — sale/rent stats, £/m², bedroom breakdown, estimated yield, persona match. |

> v2.0 roadmap (Q2 2026): 6 additional tools — find_near_university, analyze_ruhsat, calculate_mortgage, calculate_acquisition_cost, convert_price, search_blog. With namespace prefixes (prop_, market_, area_, legal_, util_).

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

---

Example prompts

Try these in any MCP-enabled client:

- "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?"
-
"Show me studios in Gazimağusa near DAÜ."
-
"What koçan type is safest for a foreign buyer in North Cyprus?"
-
"I'm a retiree looking at North Cyprus — which neighborhoods fit?"
-
"Estimate the rental yield on a £150,000 2+1 in Girne."

---

Coverage

- Cities: 6 (Girne, İskele, Lefkoşa, Gazimağusa, Güzelyurt, Lefke)
- Districts: 100+
- Universities: 7 indexed (YDÜ, DAÜ, GAÜ, UKÜ, LAÜ, BAÜ, AKÜ) — surfaced via area_near_university in v2.0
- Currency: GBP primary; TRY/USD/EUR conversion in util_convert_price (v2.0)
- Tool descriptions: EN
- Listing data fields: TR + EN (additional language tools planned for v2.1)

---

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), spec version 2025-11-05, and complies with the Anthropic Registry v1.2 spec.

This repository contains:

- server.json — Anthropic Registry manifest
- TOOLS.md — Full tool reference (JSON schemas + examples)
- examples/ — Configuration files for Claude Desktop, Cursor, Continue, VS Code
- examples/clients/ — Reference open-source thin clients (Python + TypeScript) under MIT
- 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. This repository focuses on documentation, the Anthropic Registry manifest, and integration examples.

Security model

Per OWASP MCP Top 10:

- Per-IP rate limit: 60 req/min
- Global rate limit: 500 req/min (Supabase/Vercel guard)
- Hard timeout: 30 seconds per request
- Input validation: Zod schemas, every tool
- Output sanitization: Indirect prompt-injection defense (8-pattern regex)
- Response size caps: Max 10 results per query
- Database access: Supabase anon key + Row Level Security
- Error containment: No stack traces leaked
- Observability: Sentry per-tool spans + breadcrumbs + duration tracking

See evlek.app/security for the full disclosure policy.

---

Roadmap

- [x] v1.0 — 3 tools (search, price index, market overview)
- [x] v1.2 — 9 tools (added compare_cities, yield_estimate, legal_info, suggest_neighborhood, compare_properties, district_profile)
- [ ] v2.0
(Q2 2026) — 15 tools, namespace prefixes, +6 new (mortgage, acquisition_cost, near_university, analyze_ruhsat, convert_price, blog_search)
- [ ] v2.1
(Q3 2026) — Additional micro-MCPs: evlek-poi-mcp (POI + coast distance), evlek-agent-mcp (B2B agent finder)
- [ ] v3.0
(Q4 2026)get_market_pulse_30day, get_construction_status, find_emergency_short_term
- [ ] Vision (2027) — Multimodal search_by_image, auth-gated tools (favorites, viewing requests, contact reveal), webhook subscriptions

---

Status

- MCP version: 1.2.0 (live)
- Endpoint: https://evlek.app/api/mcp
- Anthropic Registry: app.evlek/mcp-serverisLatest: true
- Health: evlek.app/status
- Documentation: evlek.app/mcp

---

Contributing

This server is operated by Evlek. The hosted implementation is proprietary, but this repository (manifest + docs + examples + reference clients) is open under MIT.

Documentation issues and PRs are welcome — typo fixes, clarifications, additional client examples, translations of the README. For bugs against the hosted server, open an issue with the server-bug label and include your prompt, the tool called, and the response (with PII redacted).

See CONTRIBUTING.md for details.

---

License

MIT — see LICENSE.

The hosted Evlek service (web app, mobile app, listing data, AI prompts, database schemas) is proprietary and not covered by this license.

> Trademark notice: "Evlek" is a trademark of Onur Dokuzoğlu. The MIT license covers source code only — it 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

- Web: evlek.app
- iOS: App Store
- Android: Internal Test (closed beta)
- MCP endpoint: https://evlek.app/api/mcp
- MCP documentation: evlek.app/mcp
- Anthropic Registry: app.evlek/mcp-server
- Model Context Protocol: modelcontextprotocol.io
- 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.*

No reviews yet — be the first

Sign in to leave a review

Use Google, GitHub, or an email account so ratings stay tied to real people.

Email sign in

No reviews posted yet.