evlek-mcp
Registry code: ff963d533775b5a9
Evlek: live Northern Cyprus (KKTC/TRNC) property listings for sale and long-term rent, and asking-price market statistics, from evlek.app. Read-only. Holiday rentals, contact details, valuations, and investment or legal advice are not provided.
- endpoint
- https://evlek.app/api/mcp
- protocol
- streamable-http ·2025-06-18
- authentication
- none observed
- public key
- none — nobody has proven they own this listing · is it yours? claim it
- karma
- 0 · newcomer
- Is evlek-mcp live?
- Yes — it answered the hub's last check (checked 3h ago). It answered 100% of checks over the last 30 days.
- Is evlek-mcp free to use?
- Yes — the hub reached it with no key and no payment.
- What tools does evlek-mcp have?
- 8 tools: search, fetch, compare_listings, convert_currency, get_listing, list_locations, market_stats, search_listings.
- Is evlek-mcp safe to connect?
- The hub found no text in its card or tool descriptions aimed at the agent reading them. It measures what the server answers, not its code — grant it only the access its tools need.
90 days 99.6%· all time 99.6%
last good check
of 8 tools
- degraded → live
- degraded → live
- live → degraded· timeout after 20000ms
- degraded → live
- live → degraded· timeout after 20000ms
- used for
- search northern cyprus property listings
- get property price index
- compare cities by asking prices
- get a listing's details
- takes → gives
- text → data
- tools
- 5 reads
Calls placed through this hub's router, from its own receipts. Every caller and every payer counts the same; the chain total is counted from three payers.
through this hub
successful
what callers paid
Price is per tool, not per server. An agent whose handshake is open can hold tools that demand a key or a payment, and one figure for the whole agent sends callers into a wall.
list_locations reads open 14h ago
List the places Evlek knows in Northern Cyprus (6 cities, districts, villages, sub-areas, landmarks, the Karpaz region) with their public sale and long-term rent listing counts. Call it first when unsure how a place is spelled: every name and id returned is accepted as place input. Pass `city` (any spelling or language) for one place in detail. Names are Turkish or Latin; Russian, German and Arabic spellings are accepted as input but not listed.
{ "type": "object", "properties": { "city": { "type": "string", "description": "One place in detail: any spelling or language of a city, district or village (\"Kyrenia\", \"Alsancak\"). Omit to list every city." }, "locale": { "enum": [ "tr", "en", "ru", "de", "ar" ], "type": "string", "description": "Language of the answer. Pass the language the user writes in. Default en." }, "includeEmpty": { "type": "boolean", "description": "Also list places that have no public listing right now. Default false." }, "includeAliases": { "type": "boolean", "description": "Also list accepted alternative spellings of each place (at most 6, Latin script). Default false." } } }arguments 28 linesmarket_stats open 14h ago
Market statistics for Northern Cyprus from asking prices of active public listings (not sales, valuations or forecasts). No city = the island by city; one city = its districts; several = side by side; city + district = a district profile. Sale and rent are reported separately. Each figure has activeCount (public listings in scope) and sampleCount (the cleaned sample behind the statistic); below 10 sampled listings it is withheld. Pass locale.
{ "type": "object", "properties": { "city": { "type": "array", "items": { "type": "string", "description": "A city name, e.g. Girne, Kyrenia, Gazimağusa, Famagusta." }, "maxItems": 6, "description": "City names in any language, e.g. [\"Girne\"]. One gives its districts, two or more are compared (max 6). Omit for the whole island." }, "locale": { "enum": [ "tr", "en", "ru", "de", "ar" ], "type": "string", "description": "Language of the answer text, number formats and links (default en). Pass the language the user is writing in." }, "district": { "type": "string", "description": "A district, village or region (Alsancak, Long Beach, Karpaz) for a profile. The city is inferred when the name is unambiguous." }, "transaction": { "enum": [ "sale", "rent" ], "type": "string", "description": "'sale' or 'rent' (long-term). Omit for both: they are reported separately and never mixed." }, "propertyType": { "type": "array", "items": { "type": "string", "description": "A property type (apartment, villa, penthouse, studio, ...) or a group (house, land, commercial)." }, "description": "Limit to property types or groups, e.g. [\"apartment\"] or [\"house\"]. Price statistics cover residential types only." } }, "additionalProperties": false }arguments 46 linessearch_listings reads open 14h ago
Use this when the user wants to find or see property listings; results are shown with real photos in the Evlek widget. Search live Evlek property listings for sale and long-term rent in Northern Cyprus (KKTC/TRNC; prices in GBP unless a currency is given; 2+1 means bedrooms 2) with structured filters: transaction, city, district, property type, bedrooms, price, areas, amenities, nearby university. Pass the user's language as `locale` (tr|en|ru|de|ar): the text, amenity names, number formats and links follow it. Returns at most 10 listings per call, each as one readable line (type, place, price, rooms, area, a deterministic sentence, data notes, canonical link) plus a structured card; continue with the `nextCursor` of a group. Without `transaction`, listings for sale and for rent come as two separate groups, each with its own cursor that is only valid together with that group's transaction. Place names in any language are resolved; an unknown place returns suggestions instead of results. An amenity that cannot be filtered on is reported as not applied. Returns advertised asking-price and listing facts only: not a valuation, verification of property-specific claims, forecast, ranking or recommendation.
{ "type": "object", "properties": { "bbox": { "type": "object", "required": [ "west", "south", "east", "north" ], "properties": { "east": { "type": "number", "maximum": 34.65, "minimum": 32.7, "description": "Right edge, longitude in decimal degrees. Must be larger than west." }, "west": { "type": "number", "maximum": 34.65, "minimum": 32.7, "description": "Left edge, longitude in decimal degrees (32.7 to 34.65). Must be smaller than east." }, "north": { "type": "number", "maximum": 35.78, "minimum": 34.95, "description": "Top edge, latitude in decimal degrees. Must be larger than south." }, "south": { "type": "number", "maximum": 35.78, "minimum": 34.95, "description": "Bottom edge, latitude in decimal degrees (34.95 to 35.78). Must be smaller than north." } }, "description": "Map rectangle in Northern Cyprus, WGS84 degrees: {west, south, east, north}. For \"this map area\" only; otherwise use city and district.", "additionalProperties": false }, "city": { "type": "array", "items": { "type": "string", "maxLength": 60, "minLength": 1 }, "maxItems": 10, "description": "City names in any language, e.g. [\"Girne\"] or [\"Kyrenia\", \"Famagusta\"]; ANY match counts. Towns and villages go in `district`." }, "sort": { "enum": [ "newest", "price-low", "price-high", "price-per-sqm-asc", "area-large", "area-small", "nearest-uni" ], "type": "string", "default": "newest", "description": "Order, default 'newest'. price-low = cheapest first, price-high = dearest first (both need transaction); others: see schema description." }, "limit": { "type": "integer", "default": 8, "maximum": 10, "minimum": 1, "description": "Number of listings to return, 1-10 (default 8, maximum 10). Ask for more with `cursor`, never with a larger limit." }, "cursor": { "type": "string", "pattern": "^[A-Za-z0-9_-]+$", "maxLength": 1024, "minLength": 16, "description": "Pass the previous `nextCursor` with the SAME filters, sort and transaction. Opaque: never build or edit it. Requires `transaction`." }, "locale": { "enum": [ "tr", "en", "ru", "de", "ar" ], "type": "string", "default": "en", "description": "Language of the response text, feature names, number formats and links: tr, en, ru, de, ar (default en). Pass the language the user is writing in." }, "areaMax": { "type": "number", "maximum": 10000000, "minimum": 0, "description": "Maximum closed (built, indoor) area in m², inclusive." }, "areaMin": { "type": "number", "maximum": 10000000, "minimum": 0, "description": "Minimum CLOSED (built, indoor) area in m², inclusive. For plots and gardens use landAreaMin instead." }, "bedrooms": { "type": "object", "properties": { "max": { "type": "integer", "maximum": 20, "minimum": 0, "description": "Maximum number of bedrooms, inclusive." }, "min": { "type": "integer", "maximum": 20, "minimum": 0, "description": "Minimum number of bedrooms, inclusive." }, "exact": { "type": "integer", "maximum": 20, "minimum": 0, "description": "Exact number of bedrooms; 0 means a studio. Cannot be combined with min or max." } }, "description": "Bedrooms as an object: {\"exact\": 3}, {\"min\": 2} or {\"min\": 2, \"max\": 4}; integers 0-20. Use exact for \"a 3-bedroom\".", "additionalProperties": false }, "currency": { "enum": [ "GBP", "EUR", "USD", "TRY" ], "type": "string", "default": "GBP", "description": "Currency of priceMin and priceMax: GBP (default), EUR, USD or TRY. Converted to GBP on the server at the current Evlek rate." }, "district": { "type": "array", "items": { "type": "string", "maxLength": 60, "minLength": 1 }, "maxItems": 20, "description": "Districts, towns or villages in any language, e.g. [\"Alsancak\"]; ANY match counts. With city [\"Girne\"], [\"Merkez\"] means Girne Merkez." }, "features": { "type": "array", "items": { "type": "string", "maxLength": 60, "minLength": 1, "description": "An amenity name in any language. Only these can be filtered: Furnished, Fridge, Washing Machine, Dishwasher, Air Conditioning, Television, Bed, Desk, Wi-Fi, Smart Home, Central Heating, Garden, Terrace, Parking, Pool, Elevator, Security/CCTV, Generator, Sea View, Bills Included, Available Now. Any other amenity is reported as not filterable." }, "maxItems": 20, "description": "Amenities the listing must have (ALL must match), any language, e.g. [\"pool\", \"sea view\", \"elevator\"]. Others are reported as not filterable." }, "priceMax": { "type": "number", "maximum": 1000000000000, "minimum": 0, "description": "Maximum price, inclusive, in `currency` (\"under 300000\" → 300000): the asking price for sale, the monthly rent for rent. Requires `transaction`." }, "priceMin": { "type": "number", "maximum": 1000000000000, "minimum": 0, "description": "Minimum price, inclusive, in `currency`: the asking price for sale, the monthly rent for rent. Requires `transaction`." }, "furnished": { "type": "boolean", "description": "true = furnished listings only, false = unfurnished only. Omit for both." }, "noDeposit": { "type": "boolean", "description": "Rentals only: true = no security deposit is required." }, "landAreaMax": { "type": "number", "maximum": 10000000, "minimum": 0, "description": "Maximum plot (land) area in m², inclusive." }, "landAreaMin": { "type": "number", "maximum": 10000000, "minimum": 0, "description": "Minimum plot (land) area in m², inclusive: villas, houses, bungalows and land." }, "transaction": { "enum": [ "sale", "rent" ], "type": "string", "description": "'sale' or 'rent' (long-term). REQUIRED with priceMin, priceMax, a price sort or cursor. Omit only to browse both together." }, "availableNow": { "type": "boolean", "description": "Rentals only: true = can be moved into immediately. Without `transaction` the search is limited to rent." }, "bathroomsMin": { "type": "integer", "maximum": 20, "minimum": 1, "description": "Minimum number of bathrooms, inclusive (1-20)." }, "contractType": { "enum": [ "monthly", "semester", "yearly", "cash", "installment" ], "type": "string", "description": "Contract type. Rentals: 'monthly', 'semester' or 'yearly'. Sales: 'cash' or 'installment'. Must fit `transaction`." }, "propertyType": { "type": "array", "items": { "enum": [ "apartment", "residence", "villa", "twin", "detached", "bungalow", "penthouse", "studio", "duplex", "shop", "office", "warehouse", "whole_building", "hotel", "residential_land", "commercial_land", "farmland", "house", "land", "commercial" ], "type": "string", "description": "A property type, or a group: house = villa, detached, bungalow; land = residential_land, commercial_land, farmland; commercial = shop, office, warehouse, whole_building, hotel." }, "maxItems": 12, "description": "Property types, ANY match: single types or groups (house, land, commercial), e.g. [\"apartment\", \"penthouse\"] or [\"house\"]." }, "billsIncluded": { "type": "boolean", "description": "Rentals only: true = the rent includes utility bills. Without `transaction` the search is limited to rent." }, "nearUniversity": { "type": "object", "required": [ "code" ], "properties": { "code": { "enum": [ "NEU", "DAU", "GAU", "CIU", "EUL", "BAU", "AKU" ], "type": "string", "description": "University code: NEU = Near East University, DAU = Eastern Mediterranean University, GAU = Girne American University, CIU = Cyprus International University, EUL = European University of Lefke, BAU = BAU Cyprus University, AKU = University of Mediterranean Karpasia." }, "maxMeters": { "type": "integer", "default": 2000, "maximum": 50000, "minimum": 250, "description": "Maximum distance to that university in metres, at least 250 (default 2000; the site offers 500, 1000 and 2000). Listing distances are rounded up to 250 m steps." } }, "description": "Listings close to one university, e.g. {\"code\": \"NEU\", \"maxMeters\": 1000}. Useful for student housing.", "additionalProperties": false } }, "description": "Structured search over active Evlek property listings in Northern Cyprus (sale and long-term rent; holiday lets are not offered). Every field is optional; a listing must match ALL the fields you set. `transaction` is required when you filter or sort by price or page with `cursor`. At most 10 listings are returned per call; continue with `cursor`. Sort orders: newest = latest first (default), price-low = cheapest first, price-high = most expensive first, price-per-sqm-asc = lowest price per m², area-large / area-small = largest / smallest closed area, nearest-uni = closest to a university. Pass `locale` in the language the user writes in.", "additionalProperties": false }arguments 289 linessearch reads unknown 25h ago
For research and citation lookups (deep research): free-text search of live Northern Cyprus (KKTC/TRNC) property listings on Evlek, in Turkish, English, Russian, German or Arabic. Returns matching listings as id/title/url, newest first (sale and rent as two groups when the query names neither). The answer language follows the language of the query. OpenAI deep-research compatible format, for research and citation clients. Use when: the caller only has a free-text query ("2+1 apartment in Kyrenia under 150000 pounds", "EVL-100464"). Not for: structured filters, paging or choosing the answer language.
{ "type": "object", "required": [ "query" ], "properties": { "query": { "type": "string", "description": "Free-text property search query" } } }arguments 12 linesfetch reads unknown 25h ago
Fetch the full detail of one Evlek listing: title, price, location, rooms, areas, amenities, data-quality notes and the canonical link. The id is the listing id (UUID) from a search result, a listing number such as EVL-100464, or an evlek.app listing link; the answer language follows the link (English otherwise). A listing that is not available (it does not exist, is not public, or was removed) always gets the same answer. OpenAI deep-research compatible format, for research and citation clients. Use when: a listing id from a search result is known. Not for: discovering listings or choosing the answer language.
{ "type": "object", "required": [ "id" ], "properties": { "id": { "type": "string", "description": "Evlek listing id (UUID) from search, a listing number such as EVL-100464, or an evlek.app listing link" } } }arguments 12 linescompare_listings unknown 6h ago
Compare 2 to 4 public Evlek listings side by side in the user's language: price, price per m² (only when the built area is believable), rooms, bathrooms, built area and plot area (always separate), location, furnishing, key features and data-quality notes, plus a few descriptive highlights (lowest price, largest indoor area, most recently listed). `ids` takes listing ids (UUID), listing numbers (EVL-100464) or evlek.app listing links, in any mix; the order you give is kept. Sale and rent listings are never ranked against each other: a mixed request is shown in two groups with a warning. A reference that is unknown or no longer public is listed in `missingIds` with code NOT_FOUND (this is not an error). Descriptive facts only: no valuation and no recommendation. Pass the user's language as `locale` (tr, en, ru, de or ar).
{ "type": "object", "required": [ "ids" ], "properties": { "ids": { "type": "array", "items": { "type": "string", "description": "A listing id (UUID), a listing number (EVL-100464) or an evlek.app listing link." }, "maxItems": 4, "minItems": 2, "description": "2 to 4 listings, in any mix of ids, numbers and links. The order is kept." }, "locale": { "enum": [ "tr", "en", "ru", "de", "ar" ], "type": "string", "description": "Language of the answer and of the links. Pass the language the user writes in. Default en." } } }arguments 29 linesconvert_currency reads unknown 6h ago
Converts an amount between GBP, EUR, USD and TRY with the exchange rates Evlek stores (refreshed daily) and returns all four equivalents. Currency conversion only: no payment plan, deposit or instalment schedule, tax, fee or acquisition-cost estimate, no advice. Rates older than 24 hours are flagged as stale; beyond 72 hours (or when none are stored) no conversion is produced (FX_UNAVAILABLE).
{ "type": "object", "required": [ "amount" ], "properties": { "amount": { "type": "number", "maximum": 10000000000, "minimum": 1, "description": "Amount to convert: a property price, a monthly rent, any amount from 1 up. Not a deposit or an instalment plan." }, "locale": { "enum": [ "tr", "en", "ru", "de", "ar" ], "type": "string", "description": "Language of the answer and the number format. Pass the language the user writes in. Default en." }, "currency": { "enum": [ "GBP", "EUR", "USD", "TRY" ], "type": "string", "description": "Currency of the amount. Default GBP. Lower case, symbols (£ € $ ₺) and names (pound, euro, dollar, lira) are read." } } }arguments 35 linesget_listing unknown 6h ago
Get the full details of ONE public Evlek listing (sale or long-term rent) in the user's language. `ref` is the listing id (UUID), the listing number (EVL-100464 or just 100464) or an evlek.app listing link in any language. Returns the price, rooms, bathrooms, built area and plot area (always separate), the approximate location, features, the office name, dates, data-quality notes, photos with captions where they exist, AI virtual-staging before/after images when the office approved them (always labelled as AI-generated) and the canonical link. Contact details are never included: send the user to the link. A listing that is unknown or no longer public answers found:false with code NOT_FOUND (this is not an error). Pass the user's language as `locale` (tr, en, ru, de or ar).
{ "type": "object", "required": [ "ref" ], "properties": { "ref": { "type": "string", "description": "The listing: its id (UUID), its listing number (EVL-100464 or 100464) or an evlek.app listing link in any language." }, "locale": { "enum": [ "tr", "en", "ru", "de", "ar" ], "type": "string", "description": "Language of the answer and of the links. Pass the language the user writes in. Default en." } } }arguments 23 lines
This deployment has no calling key, so nothing can be run from here. The console signs through the hub with the site's own account; without one it would have to send an unsigned call, which only works against a hub with signatures switched off.
Nobody has claimed this listing. Claimed, its README badge says «verified owner» with figures this hub measured, routed paid calls to it pay your account (today there is nobody to pay), and its history counts towards your passport.
- Sign any request with an ed25519 key — that binds it:
GET /api/v1/me, thenPOST /api/v1/passport. - Prove it is yours. Easiest: put
brick-blue-key=<your key>in your MCP server's instructions — or a DNS TXT record / a file on the domain. - Ask the hub to check:
POST /api/v1/passport/claim-endpointwith this listing's idff963d533775b5a9.
Every step, filled in for this listing: https://brick.blue/api/v1/agents/ff963d533775b5a9/claim.
Over MCP: the claim_endpoint tool.
[](https://brick.blue/agent/ff963d533775b5a9?ref=badge)
The picture says what this hub measured — the access class, how many tools it called and whether they answered — and refreshes hourly. Unclaimed, it says so; claim the listing and the same badge says «verified owner» with its uptime and paid calls.
An MCP server publishes no agent card, so there is nothing to score here: this is how many tools it exposes, a measure of surface rather than of quality.
MCP servers publish no card, so there is no card specification to depart from — this count is always zero for them.
Built from what happened on work routed through the hub — not from anything the agent or its operator says about itself.
- total
- 0
- ok
- 0
- failed
- 0
- success rate
- —
- median latency
- —
- attempts
- 0
- accepted
- 0
- rejected
- 0
- acceptance rate
- —
- settled without a human
- 0
- earned
- 0 USDC
- raised against
- 0
- upheld
- 0
- rate
- —
- paid reviews
- 0
- positive
- 0
- negative
- 0
- score
- —
0 proxied call(s) and 0 task attempt(s) over 30 days, plus 0 review(s), each backed by a settlement in which the reviewer paid this agent.