Evlek MCP Server

MCP de propiedades nativo de IA para el norte de Chipre (KKTC) — 9 herramientas, datos en vivo de evlek.app, alojado, sin autenticación requerida.

Documentación

Servidor Evlek MCP

MCP Hosted License Coverage MCP Registry smithery badge

Descubrimiento de propiedades nativo para IA en el norte de Chipre (KKTC). Construido sobre el Model Context Protocol: funciona en Claude, ChatGPT, Gemini, Cursor y cualquier cliente compatible con MCP.

El servidor Evlek MCP brinda a los agentes de IA acceso estructurado y en tiempo real a los datos de propiedades del norte de Chipre: busque anuncios activos, compare ciudades y distritos y realice un seguimiento del índice de precios. Todos los datos provienen en vivo de evlek.app. Evlek no ofrece una estimación de rendimiento de alquiler ni de retorno de inversión: las cifras son solo hechos descriptivos del precio de venta, nunca una valoración, pronóstico o recomendación. Las herramientas de título de propiedad (koçan) y procedimientos legales están deliberadamente fuera de la superficie: esa taxonomía no ha pasado una auditoría legal independiente de KKTC.

Alcance de la licencia

Este repositorio tiene licencia MIT para el manifiesto público, la documentación, los ejemplos y los clientes de referencia contenidos aquí. El servicio Evlek alojado, la aplicación web evlek.app, las aplicaciones móviles, la base de datos de anuncios, los prompts de IA, la lógica de negocio, los activos de marca, el nombre, el logotipo y la imagen comercial siguen siendo propietarios y no están cubiertos por la licencia MIT. Consulte LICENCIA para obtener más detalles.


Por qué Evlek MCP

  • Prioridad a la IA. Diseñado para flujos de trabajo agénticos desde el primer día, no adaptado de una API de anuncios heredada.
  • Multilingüe. Responde en TR, EN, RU, DE, AR: pase locale (o escriba la consulta search en ese idioma) y el texto, los nombres de las comodidades, los formatos numéricos y los enlaces lo seguirán. Los nombres de lugares se resuelven en cualquiera de los cinco idiomas.
  • Anuncios conscientes de la verificación. Evlek muestra el contexto de verificación de anuncios y cuentas cuando está disponible, y el MCP omite los campos de contacto para preservar el embudo de revelación/contacto de Evlek.
  • Diseñado para la región. Optimizado para las 6 ciudades del norte de Chipre (Lefkoşa, Girne, Gazimağusa, İskele, Güzelyurt, Lefke) y más de 100 distritos.
  • Listo para producción. Alineado con el Top 10 de OWASP MCP: validación de entrada con Zod, saneamiento de salida, límite de velocidad (60/min/IP, 500/min global), observabilidad con Sentry.

Inicio rápido

Clientes con capacidad remota (preferido)

La mayoría de los clientes MCP modernos (Claude, Cursor, VS Code) se conectan directamente al endpoint HTTP Streamable, sin necesidad de un puente local:

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

ChatGPT (conector + Deep Research)

Agregue https://evlek.app/api/mcp como conector personalizado. Evlek expone herramientas search y fetch compatibles con OpenAI, por lo que funciona en conectores de ChatGPT y Deep Research además del modo de desarrollador.

Claude Desktop (puente stdio heredado)

Si su cliente solo admite servidores stdio, use el puente mcp-remote fijado. Agregue esto a ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) o %APPDATA%\Claude\claude_desktop_config.json (Windows):

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

Reinicie Claude Desktop. El servidor "evlek" aparece en la lista de herramientas.

MCP Inspector (probar antes de instalar)

npx @modelcontextprotocol/inspector https://evlek.app/api/mcp

API directa (cURL)

curl -X POST https://evlek.app/api/mcp \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

Más configuraciones: examples/


Servidor stdio local (este repositorio)

Este repositorio también es un servidor MCP ejecutable. Responde initialize / tools/list completamente en local desde el contrato de herramientas integrado (tools.json) y obtiene datos en vivo de la API de datos de Evlek cuando se llama a una herramienta. Solo implementa herramientas: no declara la capacidad resources ni prompts, por lo que resources/list y prompts/list devuelven un error MCP normal de "método no encontrado" en este puente; esas primitivas (ver más abajo) son solo del endpoint alojado, accesibles a través de la URL HTTP Streamable anterior. También habla la versión del protocolo MCP que admita el @modelcontextprotocol/sdk fijado durante initialize (actualmente 2025-11-25), no necesariamente el 2026-07-28 del endpoint alojado: los esquemas de herramientas son idénticos en cualquier caso.

npx github:Evlek/evlek-mcp        # or: npm install && npm start
{
  "mcpServers": {
    "evlek": {
      "command": "npx",
      "args": ["-y", "github:Evlek/evlek-mcp"]
    }
  }
}

Pruébelo con una prueba de humo (inicia el servidor y habla MCP real a través de stdio):

npm test              # live: initialize + tools/list + a real tools/call
OFFLINE=1 npm test    # offline: introspection works with zero network

Herramientas disponibles

8 herramientas · protocolo 2026-07-28 · Streamable HTTP JSON-RPC 2.0

HerramientaTítuloDescripción
search_listingsBuscar anuncios de propiedades en el norte de ChipreÚselo cuando el usuario quiera encontrar o ver anuncios de propiedades; los resultados se muestran con fotos reales en el widget de Evlek. Busque anuncios activos de Evlek de propiedades en venta y alquiler a largo plazo en el norte de Chipre (KKTC/TRNC; precios en GBP a menos que se indique una moneda; 2+1 significa 2 dormitorios) con filtros estructurados: transacción, ciudad, distrito, tipo de propiedad, dormitorios, precio, áreas, comodidades, universidad cercana. Pase el idioma del usuario como locale (tr|en|ru|de|ar): el texto, los nombres de las comodidades, los formatos numéricos y los enlaces lo seguirán. Devuelve como máximo 10 anuncios por llamada, cada uno como una línea legible (tipo, lugar, precio, habitaciones, área, una oración determinista, notas de datos, enlace canónico) más una tarjeta estructurada; continúe con el nextCursor de un grupo. Sin transaction, los anuncios en venta y en alquiler vienen como dos grupos separados, cada uno con su propio cursor que solo es válido junto con la transacción de ese grupo. Los nombres de lugares en cualquier idioma se resuelven; un lugar desconocido devuelve sugerencias en lugar de resultados. Una comodidad que no se puede filtrar se informa como no aplicada. Para un solo anuncio use get_listing. Devuelve solo el precio de venta anunciado y los hechos del anuncio: no es una valoración, verificación de afirmaciones específicas de la propiedad, pronóstico, clasificación o recomendación.
searchBuscar anuncios de propiedades en EvlekÚselo solo para investigación y consultas de citas (deep research). Para mostrar anuncios al usuario, use search_listings en su lugar. Busque anuncios de propiedades en vivo del norte de Chipre (KKTC/TRNC) en Evlek con una consulta de texto libre en turco, inglés, ruso, alemán o árabe. Devuelve los anuncios coincidentes como id/título/url para la herramienta de recuperación, los más recientes primero (venta y alquiler como dos grupos cuando la consulta no menciona ninguno). El idioma de la respuesta sigue el idioma de la consulta. Mismos datos que search_listings: esta forma fija existe para el contrato del conector ChatGPT/OpenAI. Úselo cuando: el llamador solo tiene una consulta de texto libre ("apartamento 2+1 en Kyrenia por menos de 150000 libras", "EVL-100464"). No lo use para: filtros estructurados, paginación u otro idioma de respuesta: use search_listings.
fetchObtener el detalle completo de un anuncio de EvlekObtenga el detalle completo de un anuncio de Evlek: título, precio, ubicación, habitaciones, áreas, comodidades, notas de calidad de datos y el enlace canónico. El id es el id del anuncio (UUID) de un resultado de búsqueda, un número de anuncio como EVL-100464 o un enlace de anuncio de evlek.app; el idioma de la respuesta sigue el enlace (inglés en caso contrario). Un anuncio que no está disponible (no existe, no es público o fue eliminado) siempre recibe la misma respuesta. Mismos datos que get_listing: esta forma fija de solo id existe para el contrato del conector ChatGPT/OpenAI. Úselo cuando: se conoce un id de una búsqueda. No lo use para: descubrimiento (use search primero) u otro idioma de respuesta (use get_listing).
get_listingObtener un anuncio de EvlekObtenga los detalles completos de UN anuncio público de Evlek (venta o alquiler a largo plazo) en el idioma del usuario. ref es el id del anuncio (UUID), el número de anuncio (EVL-100464 o solo 100464) o un enlace de anuncio de evlek.app en cualquier idioma. Devuelve el precio, las habitaciones, los baños, el área construida y el área de la parcela (siempre separadas), la ubicación aproximada, las características, el nombre de la oficina, las fechas, las notas de calidad de datos, las fotos con pies de foto cuando existen, las imágenes antes/después de virtual staging con IA cuando la oficina las aprobó (siempre etiquetadas como generadas por IA) y el enlace canónico. Los datos de contacto nunca se incluyen: envíe al usuario al enlace. Un anuncio desconocido o que ya no es público responde found:false con el código NOT_FOUND (esto no es un error). Pase el idioma del usuario como locale (tr, en, ru, de o ar).
compare_listingsComparar anuncios de EvlekCompare de 2 a 4 anuncios públicos de Evlek lado a lado en el idioma del usuario: precio, precio por m² (solo cuando el área construida es creíble), habitaciones, baños, área construida y área de la parcela (siempre separadas), ubicación, mobiliario, características clave y notas de calidad de datos, además de algunos aspectos destacados descriptivos (precio más bajo, área interior más grande, anunciado más recientemente). ids acepta ids de anuncios (UUID), números de anuncios (EVL-100464) o enlaces de anuncios de evlek.app, en cualquier combinación; se mantiene el orden que usted dé. Los anuncios de venta y alquiler nunca se clasifican entre sí: una solicitud mixta se muestra en dos grupos con una advertencia. Una referencia desconocida o que ya no es pública se lista en missingIds con el código NOT_FOUND (esto no es un error). Solo hechos descriptivos: sin valoración ni recomendación. Pase el idioma del usuario como locale (tr, en, ru, de o ar).
market_statsEstadísticas de mercado del norte de ChipreEstadísticas de mercado del norte de Chipre a partir de los precios de venta de anuncios públicos activos (no ventas, valoraciones ni pronósticos). Sin ciudad = la isla por ciudad; una ciudad = sus distritos; varias = lado a lado; ciudad + distrito = un perfil de distrito. La venta y el alquiler se informan por separado. Cada cifra tiene activeCount (anuncios públicos en el alcance) y sampleCount (la muestra limpia detrás de la estadística); por debajo de 10 anuncios muestreados se omite. Pase locale.
list_locationsListar ubicaciones de EvlekListe los lugares que Evlek conoce en el norte de Chipre (6 ciudades, distritos, pueblos, subáreas, puntos de referencia, la región de Karpaz) con sus recuentos públicos de anuncios de venta y alquiler a largo plazo. Llámelo primero cuando no esté seguro de cómo se escribe un lugar: cada nombre e id devuelto es aceptado por las otras herramientas. Pase city (cualquier ortografía o idioma) para un lugar en detalle. Los nombres son en turco o latín; las ortografías en ruso, alemán y árabe se aceptan como entrada pero no se listan.
convert_currencyConversión de moneda (GBP/EUR/USD/TRY)Convierte un monto entre GBP, EUR, USD y TRY con los tipos de cambio que Evlek almacena (actualizados diariamente) y devuelve los cuatro equivalentes. Solo conversión de moneda: sin plan de pago, depósito o calendario de cuotas, impuestos, tarifas o estimación de costos de adquisición, sin asesoramiento. Los tipos de cambio con más de 24 horas se marcan como desactualizados; más allá de 72 horas (o cuando no hay ninguno almacenado) no se produce conversión (FX_UNAVAILABLE).

Cada herramienta declara annotations: { readOnlyHint: true, destructiveHint: false, openWorldHint: false }: toda la superficie es de solo lectura.

Widgets interactivos (MCP Apps / SEP-1865)

Cinco herramientas además vinculan una vista HTML en sandbox (_meta.ui.resourceUri) que los hosts con capacidad para MCP Apps (Claude web/escritorio) renderizan en línea en la conversación:

HerramientaWidgetQué obtiene
search_listings, searchui://evlek/listing-cards-v3-11.htmlTarjetas de anuncios (foto de portada, precio, ubicación); abrir una muestra la vista de detalle del anuncio; en ChatGPT, "Mostrar en el mapa" abre un mapa de pantalla completa de cada coincidencia
get_listing, fetchui://evlek/listing-detail-v3-8.htmlGalería de fotos, hoja de especificaciones y antes/después de virtual staging con IA (siempre divulgado como IA)
market_statsui://evlek/price-index-v3-6.htmlEstadísticas de precio de venta por ciudad / distrito

compare_listings, list_locations y convert_currency no tienen widget. Los URI de los widgets se movieron de -v2 a -v3 en 3.0.0 para que un host nunca sirva una plantilla v2 en caché con datos v3. 3.0.1 los movió a -v3-1, 3.0.2 a -v3-2, 3.0.3 a -v3-3 y 3.1.0 a -v3-4 (tarjetas y detalle, luego -v3-5); 3.1.4 sirve tarjetas -v3-11, detalle -v3-8 e índice de precios -v3-6. Los URI v3 más antiguos siguen respondiendo con el contenido actual. Regla desde 3.1.0: el contenido de un widget nunca cambia bajo un URI con el que se publicó (un host almacena en caché una plantilla por URI), por lo que un widget modificado obtiene un URI nuevo. En ChatGPT (3.0.2, search desde 3.0.3) los datos de los listados llegan al widget a través del resultado _meta["evlek/widget"], que ChatGPT solo muestra al widget; para search_listings y get_listing el modelo recibe un resumen breve (recuentos, rango de precios, números de listado). Otros clientes reciben el structuredContent completo como antes.

Las vistas son HTML estático y autocontenido — sin bundler, sin JS de terceros. Los datos de los listados llegan solo en tiempo de ejecución a través de postMessage y se escriben con textContent, nunca con innerHTML. La CSP se declara por recurso (_meta.ui.csp) y se limita al origen público de fotos de listados.

Consulta TOOLS.md para ver los esquemas de entrada completos, los detalles de parámetros y ejemplos de respuesta.

Recursos (12) y plantillas de recursos (2)

resources/list devuelve 12 recursos en el endpoint alojado — 9 recursos de datos evlek:// de solo lectura más los 3 recursos de widget interactivo ui:// descritos anteriormente (predeclarados para que un host pueda precargarlos). Las plantillas parametrizadas son independientes, a través de resources/templates/list:

  • Plantillas (2): evlek://price-index/{city} · evlek://district/{city}/{district}
  • Recursos de datos (9): índices de precios por ciudad (girne, iskele, lefkosa, gazimagusa, guzelyurt, lefke), un perfil de distrito de muestra (Girne/Alsancak) y 2 guías de orientación — evlek://guides/neighborhood-personas, evlek://guides/universities.
  • Recursos de widget (3): ui://evlek/listing-cards-v3-11.html, ui://evlek/listing-detail-v3-8.html, ui://evlek/price-index-v3-6.html — consulta "Widgets interactivos" más arriba.

Herramientas renombradas en 3.0.0 (alias obsoletos)

3.0.0 consolida las 12 herramientas v2 en 8. Los nombres antiguos que aparecen a continuación ya no están en tools/list, pero el endpoint alojado aún responde a ellos durante una versión: la llamada se traduce a la nueva herramienta, se ejecuta, y el resultado comienza con una línea Deprecated: … Use <new> instead. (además de structuredContent.deprecated). Los alias se eliminan en 3.1.0 — cambia a los nuevos nombres ahora.

Nombre antiguo (v2)Nombre nuevo (3.0.0)Cambio de argumento
get_listing_detailget_listingpropertyId / property_id → ref
get_listing_by_numberget_listinglistingNumber / listing_number → ref
compare_propertiescompare_listingslistingIds / listing_ids → ids
get_price_indexmarket_statscity se mantiene; type → transaction (por defecto sale)
compare_citiesmarket_statscities → city; type → transaction (por defecto sale)
get_district_profilemarket_statscity, district se mantienen
payment_planconvert_currencyprice → amount (el nombre queda reservado para una futura herramienta de cuotas)

Nombres sin cambios: search_listings, search, fetch, list_locations, convert_currency. search_listings, list_locations y convert_currency ganaron nuevos parámetros y nombres canónicos (p. ej. transaction, priceMin/priceMax, sort, cursor, amount, locale) — consulta TOOLS.md. Los nombres v2 type, maxPrice y price todavía se aceptan en el endpoint alojado. Las herramientas eliminadas en 2.0.0 y versiones anteriores (get_yield_estimate, suggest_neighborhood, student_housing, get_market_overview, get_legal_info) siguen devolviendo un error de protocolo que indica el reemplazo, no un alias.

Prompts (2)

  • property_scenario — Escenario ilustrativo de propiedad con datos reales separados
  • student_rental_scenario — Escenario ilustrativo de alquiler para estudiantes

Ejemplos de prompts

  • "Busca pisos de 2 dormitorios en alquiler en Girne por menos de £1.500/mes."
  • "Muéstrame apartamentos en Girne por menos de £150.000."
  • "¿Cuál es el precio medio de venta por metro cuadrado en Lefkoşa?"
  • "Compara Kyrenia y Famagusta: ¿cuál tiene más listados activos y cómo difieren los precios medios de venta?"
  • "¿Cómo es un perfil de distrito para Alsancak?"
  • "Convierte £150.000 a EUR, USD y TRY."

Cobertura

  • Ciudades: 6 (Girne, İskele, Lefkoşa, Gazimağusa, Güzelyurt, Lefke)
  • Distritos: más de 100
  • Moneda: GBP principal; TRY/USD/EUR normalizados a GBP en el servidor con tipos de cambio diarios en vivo
  • Descripciones de herramientas: EN · Respuestas: TR · EN · RU · DE · AR (locale)

Arquitectura

El servidor MCP de Evlek se ejecuta como un endpoint alojado en https://evlek.app/api/mcp. Habla el Model Context Protocol a través de Streamable HTTP (JSON-RPC 2.0), protocolVersion 2026-07-28, y expone herramientas, recursos, plantillas de recursos y prompts. Los metadatos de descubrimiento se publican en /.well-known/mcp.json.

Este repositorio contiene:

  • server.json — Manifiesto del registro MCP
  • tools.json — Contrato de herramientas en vivo (lo que el servidor stdio local responde tools/list)
  • TOOLS.md — Referencia completa de herramientas (esquemas JSON + ejemplos)
  • CHANGELOG.md — Cambios notables en la superficie de herramientas, incluidas herramientas eliminadas/renombradas
  • examples/ — Archivos de configuración para Claude Desktop, Cursor, VS Code
  • CONTRIBUTING.md — Cómo informar problemas y proponer mejoras de documentación

Archivos de contrato

  • tools.json y TOOLS.md son una proyección del servidor en vivo, generados por pnpm mcp:export-public en el repositorio fuente y copiados aquí textualmente. Nunca los edites a mano; el flujo de trabajo de Contract Drift compara tools.json con el tools/list en vivo a diario y en cada PR.
  • server.json no es esa proyección. Es el manifiesto de publicación del registro MCP y debe mantener la forma del registro: name es app.evlek/mcp-server (patrón ^[a-zA-Z0-9.-]+/[a-zA-Z0-9._-]+$) y description tiene como máximo 100 caracteres. Una sincronización solo actualiza su version, el recuento de herramientas en description y la lista de herramientas _meta. (Copiar el propio server.json de la exportación aquí es lo que hizo fallar la publicación del registro v2.1.0.)

La implementación completa del servidor (esquemas de base de datos, rutas de API, ingeniería de prompts de IA, canalización de listados) está alojada en evlek.app y sigue siendo propietaria.

Modelo de seguridad

Según OWASP MCP Top 10: límite de velocidad por IP de 60/min, global de 500/min, tiempo de espera máximo de 30 s, validación de entrada con Zod, saneamiento de salida (defensa contra inyección de prompts), máximo 10 resultados por consulta, clave anónima de Supabase + RLS, sin fugas de trazas de pila, observabilidad con Sentry.

Para informar de un problema de seguridad, escribe a hello@evlek.app.


Estado

  • Versión MCP: 3.1.4 (en vivo)
  • Protocolo: 2026-07-28
  • Primitivas: 8 herramientas · 9 recursos de datos + 3 recursos de widget interactivo · 2 plantillas de recursos · 2 prompts
  • Autenticación: ninguna (solo lectura pública)
  • Endpoint: https://evlek.app/api/mcp
  • Registro MCP: app.evlek/mcp-server

Licencia

MIT — consulta LICENSE. MIT cubre solo el manifiesto público, la documentación, los ejemplos y los clientes de referencia de este repositorio (consulta Alcance de la licencia más arriba). El servicio alojado de Evlek (aplicación web, aplicaciones móviles, datos de listados, prompts de IA, esquemas de base de datos, lógica de negocio) es propietario.

Aviso de marca comercial: "Evlek" es una marca comercial de Onur Dokuzoğlu. La licencia MIT no otorga derechos para usar el nombre, el logotipo o la imagen de marca de "Evlek", salvo lo descrito en este README. Para solicitar permiso de uso de la marca, contacta con hello@evlek.app.


Enlaces


Construido en el norte de Chipre por un arquitecto, no por una empresa de software. Impulsado por Anthropic Claude, Supabase, Vercel y el Model Context Protocol.