{
  "openapi": "3.0.1",
  "info": {
    "title": "Real Estate MCP API - Allee Spain",
    "version": "1.1",
    "description": "Contexto MCP Inmobiliario para buscar inmuebles y enviar solicitudes de contacto. - Allee Spain",
    "termsOfService": "https://www.alleespain.com/termos-e-condicoes",
    "contact": {
      "name": "Allee Spain",
      "url": "https://www.alleespain.com/",
      "email": "info@alleespain.com"
    },
    "x-company-info": {
      "name": "Allee Spain",
      "address": "Avda. Juan Luis Peralta, 3. Local 4, 29639 Benalmádena"
    }
  },
  "servers": [
    {
      "url": "https://www.alleespain.com/",
      "description": "Identificador del servidor MCP"
    }
  ],
  "components": {
    "schemas": {
      "searchToMatchRequest": {
        "type": "object",
        "properties": {
          "businessType": {
            "type": "string",
            "description": "Define o devuelve el identificador del tipo de negocio del inmueble"
          },
          "countryName": {
            "type": "string",
            "description": "Nombre del país utilizado como criterio de filtrado. Este campo debe permanecer vacío cuando el país no se identifica."
          },
          "stateName": {
            "type": "string",
            "description": "Nombre de la región (distrito) del inmueble (obligatorio en la búsqueda si no se especifica municipio)."
          },
          "townName": {
            "type": "string",
            "description": "Nombre del municipio del inmueble (obligatorio en la búsqueda si no se especifica distrito)."
          },
          "neighborhoodName": {
            "type": "string",
            "description": "Nombre o ID del barrio o parroquia donde se encuentra la propiedad."
          },
          "zoneName": {
            "type": "string",
            "description": "Identificador de la zona geográfica para filtrar en las búsquedas."
          },
          "masterCategoryIds": {
            "type": "array",
            "description": "Identificadores (IDs) de uno o más grupos principales de categorías de inmueble (p. ej.: apartamentos, pisos, viviendas, almacenes, terrenos, hoteles). Es obligatorio indicar al menos uno si no se especifica un tipo específico de inmueble."
          },
          "categoryIds": {
            "type": "array",
            "description": "Identificadores (ID) de una o más categorías específicas de inmuebles (p. ej.: apartamento, piso, vivienda, almacén, terreno, hotel)."
          },
          "condition": {
            "type": "string",
            "description": "Estado de conservación."
          },
          "minPrice": {
            "type": "integer",
            "description": "Precio mínimo en euros. Completar cuando el usuario indique un presupuesto mínimo o límite inferior de precio.",
            "format": "int32"
          },
          "maxPrice": {
            "type": "integer",
            "description": "Precio máximo en euros. Completar cuando el usuario indique un presupuesto máximo o límite superior de precio.",
            "format": "int32"
          },
          "minBedrooms": {
            "type": "integer",
            "description": "Número mínimo de habitaciones o dormitorios para filtrar",
            "format": "int32"
          },
          "maxBedrooms": {
            "type": "integer",
            "description": "Número máximo de habitaciones o dormitorios para filtrar",
            "format": "int32"
          },
          "bathrooms": {
            "type": "integer",
            "description": "Número mínimo de baños.",
            "format": "int32"
          },
          "listingReference": {
            "type": "string",
            "description": "Referencia interna del inmueble utilizada para su identificación."
          },
          "developmentName": {
            "type": "string",
            "description": "Nombre de la promoción."
          },
          "developmentFractions": {
            "type": "boolean",
            "description": "Indica si la búsqueda debe considerar fracciones de un proyecto inmobiliario (por ejemplo, apartamentos o locales) en lugar del proyecto en su conjunto. Cuando está activado, los resultados incluyen solo fracciones asociadas a un proyecto."
          },
          "developmentTags": {
            "type": "array",
            "description": "MCP\\INPUTSCHEMA_DEVELOPMENTTAG_DESCRIPTION"
          },
          "withVideos": {
            "type": "boolean",
            "description": "Busca solo propiedades con vídeos disponibles. Aplicar cuando el usuario mencione expresiones como 'con vídeo', 'con vídeos', 'tiene vídeo', 'tiene vídeos', 'ver vídeo de la propiedad', 'ver vídeo online', etc."
          },
          "withBluePrints": {
            "type": "boolean",
            "description": "Busca solo propiedades que tengan planos (blueprints) disponibles. Aplicar cuando el usuario mencione 'con plano', 'tiene planos', 'planos de la casa', 'mapa de la propiedad', 'planta baja', 'ver plano', etc."
          },
          "withVirtualVisits": {
            "type": "boolean",
            "description": "Busca solo propiedades con visitas virtuales disponibles. Aplicar cuando el usuario mencione 'con visita virtual', 'tiene visita virtual', 'tour virtual', 'tour 3D', 'visita 3D', 'tour interactivo', 'recorrido virtual', 'experiencia virtual', 'visualización virtual', 'ver visita virtual online'."
          },
          "with360Photos": {
            "type": "boolean",
            "description": "Busca solo propiedades con fotos 360º disponibles. Aplicar cuando el usuario mencione 'con fotos 360º', 'tiene fotos 360º', 'con fotos panorámicas', 'tiene fotos panorámicas', 'ver fotos 360º online', etc."
          },
          "featuresNames": {
            "type": "array",
            "description": "Características del inmueble, incluidas las comodidades, servicios y lugares de interés cercanos, así como tipos de vistas para proporcionar una descripción completa de la propiedad"
          },
          "page": {
            "type": "integer",
            "description": "Número de página a devolver en los resultados de búsqueda.",
            "format": "int32"
          }
        },
        "description": "Esquema que describe los parámetros de entrada para la búsqueda inmobiliaria."
      },
      "searchResponse": {
        "type": "object",
        "properties": {
          "results": {
            "type": "array",
            "description": "Lista de resultados de la página actual, basada en el número de registros por página.",
            "items": {
              "$ref": "#/components/schemas/DetailResponse"
            }
          },
          "count": {
            "type": "integer",
            "description": "Número total de resultados que corresponden a los criterios de búsqueda.",
            "format": "int32"
          },
          "page": {
            "type": "integer",
            "description": "Número de la página actual según los criterios de búsqueda.",
            "format": "int32"
          },
          "totalpages": {
            "type": "integer",
            "description": "Número total de páginas correspondientes a los criterios de búsqueda.",
            "format": "int32"
          },
          "statetownnameequals": {
            "type": "boolean",
            "description": "Indica si el nombre del distrito es igual al nombre del municipio."
          },
          "developmentname": {
            "type": "string",
            "description": "Nombre del proyecto; este campo solo se completará si los resultados están relacionados con un proyecto específico con este nombre."
          }
        },
        "description": "Esquema que describe los parámetros de salida de la búsqueda inmobiliaria."
      },
      "detailRequest": {
        "type": "object",
        "properties": {
          "listingId": {
            "type": "integer",
            "description": "ID del inmueble para contacto.",
            "format": "int32"
          },
          "listingReference": {
            "type": "string",
            "description": "Referencia interna del inmueble utilizada para su identificación."
          },
          "developmentFractions": {
            "type": "boolean",
            "description": "Indica si la búsqueda debe considerar fracciones de un proyecto inmobiliario (por ejemplo, apartamentos o locales) en lugar del proyecto en su conjunto. Cuando está activado, los resultados incluyen solo fracciones asociadas a un proyecto."
          }
        },
        "description": "Esquema que describe los parámetros de entrada para el detalle del inmueble."
      },
      "detailResponse": {
        "type": "object",
        "properties": {
          "listingId": {
            "type": "integer",
            "description": "ID único del anuncio del inmueble.",
            "format": "int32"
          },
          "propertyType": {
            "type": "string",
            "description": "Tipo de inmueble."
          },
          "condition": {
            "type": "string",
            "description": "Estado de conservación del inmueble."
          },
          "listingReference": {
            "type": "string",
            "description": "Referencia del inmueble mostrada en los resultados de búsqueda."
          },
          "firstPhoto": {
            "type": "string",
            "description": "URL de la miniatura de la primera foto del inmueble."
          },
          "description": {
            "type": "string",
            "description": "Descripción detallada de la propiedad."
          },
          "title": {
            "type": "string",
            "description": "Título del anuncio."
          },
          "price": {
            "type": "string",
            "description": "Precio en euros."
          },
          "imiValue": {
            "type": "string",
            "description": "Importe del IMI a pagar por el inmueble, calculado según el VPT y las normas fiscales aplicables."
          },
          "business": {
            "type": "string",
            "description": "Tipo de negocio del inmueble."
          },
          "location": {
            "type": "string",
            "description": "Nombre de la ubicación."
          },
          "bedrooms": {
            "type": "integer",
            "description": "Número de dormitorios de la propiedad.",
            "format": "int32"
          },
          "bathrooms": {
            "type": "integer",
            "description": "Número de baños de la propiedad.",
            "format": "int32"
          },
          "url": {
            "type": "string",
            "description": "URL público del anuncio."
          },
          "hasVideos": {
            "type": "boolean",
            "description": "Indica si la propiedad tiene vídeos disponibles."
          },
          "hasBluePrints": {
            "type": "boolean",
            "description": "Indica si la propiedad tiene planos o blueprints disponibles."
          },
          "has360Photos": {
            "type": "boolean",
            "description": "Indica si la propiedad tiene fotos 360° disponibles."
          },
          "hasVirtualVisits": {
            "type": "boolean",
            "description": "Indica si la propiedad tiene visitas virtuales o recorridos virtuales disponibles."
          },
          "features": {
            "description": "Estas claves representan la descripción de las características específicas de una propiedad, incluyendo atributos físicos y ubicaciones relevantes como piscina, vistas al mar, cercanía a hospitales, escuelas y otras instalaciones importantes. Esta información ayuda a detallar y calificar la propiedad para facilitar la búsqueda y la presentación de resultados según las preferencias del usuario.",
            "$ref": "#/components/schemas/Dictionary`2"
          }
        },
        "description": "Esquema que describe los parámetros de salida del detalle del inmueble."
      },
      "leadRequest": {
        "type": "object",
        "properties": {
          "listingId": {
            "type": "integer",
            "description": "ID del inmueble para contacto.",
            "format": "int32"
          },
          "listingReference": {
            "type": "string",
            "description": "Referencia interna del inmueble utilizada para su identificación."
          },
          "name": {
            "type": "string",
            "description": "Nombre del usuario."
          },
          "email": {
            "type": "string",
            "description": "Dirección de correo electrónico del usuario (obligatoria si no proporciona teléfono)."
          },
          "phone": {
            "type": "string",
            "description": "Número de teléfono del usuario (opcional si proporciona dirección de correo electrónico)."
          },
          "phoneCountryCode": {
            "type": "string",
            "description": "Código del país del teléfono incluyendo el signo más, por ejemplo, \"+34\" para España, \"+351\" para Portugal."
          },
          "message": {
            "type": "string",
            "description": "Mensaje personalizado del usuario."
          }
        },
        "description": "Esquema que describe los parámetros de entrada para el envío de leads inmobiliarios."
      },
      "leadResponse": {
        "type": "object",
        "properties": {
          "status": {
            "type": "string",
            "description": "Estado del envío del formulario de contacto (ej.: éxito, error)."
          },
          "message": {
            "type": "string",
            "description": "Mensaje que describe el resultado del envío del formulario de contacto."
          },
          "confirmedLead": {
            "type": "boolean",
            "description": ""
          }
        },
        "description": "Esquema que describe los parámetros de salida del envío de leads inmobiliarios."
      },
      "companyInfoRequest": {
        "type": "object",
        "properties": {
          "companyId": {
            "type": "integer",
            "description": "Identificador de la empresa/agencia a consultar (opcional, por defecto se usa el interno de la empresa).",
            "format": "int32"
          }
        },
        "description": "Esquema de entrada para solicitud de información de la empresa"
      },
      "companyInfoWithAgenciesResponse": {
        "type": "object",
        "properties": {
          "headquarters": {
            "description": "Información de los datos de contacto de la empresa correspondientes a la sede.",
            "$ref": "#/components/schemas/CompanyInfoResponse"
          },
          "agencies": {
            "type": "array",
            "description": "Información de los datos de contacto de las agencias de la empresa.",
            "items": {
              "$ref": "#/components/schemas/CompanyInfoResponse"
            }
          }
        },
        "description": "Esquema de salida con datos de información de la empresa"
      },
      "companyInfoResponse": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Nombre de la empresa"
          },
          "phone": {
            "type": "string",
            "description": "Teléfono de la empresa"
          },
          "mobile": {
            "type": "string",
            "description": "Teléfono móvil de la empresa"
          },
          "email": {
            "type": "string",
            "description": "Correo electrónico de contacto de la empresa"
          },
          "address": {
            "type": "string",
            "description": "Dirección de la empresa (sin código postal)"
          },
          "district": {
            "type": "string",
            "description": "Provincia donde se encuentra la empresa"
          },
          "municipality": {
            "type": "string",
            "description": "Municipio donde se encuentra la empresa"
          },
          "parish": {
            "type": "string",
            "description": "Población/Barrio donde se encuentra la empresa"
          },
          "zipCode": {
            "type": "string",
            "description": "Código postal de la dirección de la empresa"
          },
          "businessHours": {
            "type": "string",
            "description": "Horario de atención de la empresa"
          },
          "googleMapsUrl": {
            "type": "string",
            "description": "Enlace directo a la ubicación de la empresa en Google Maps"
          }
        },
        "description": "Esquema de salida con datos de información de la empresa"
      },
      "rasorInfoRequest": {
        "type": "object",
        "properties": {
          "rasorName": {
            "type": "string",
            "description": "Nombre del consultor inmobiliario sobre el cual se desea obtener información detallada."
          },
          "stateName": {
            "type": "string",
            "description": "Permite buscar consultores por distrito."
          },
          "townName": {
            "type": "string",
            "description": "Permite buscar consultores por municipio."
          }
        },
        "description": "Esquema de entrada para solicitar información detallada del consultor inmobiliario"
      },
      "rasorInfoResponse": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Nombre completo del consultor inmobiliario."
          },
          "phone": {
            "type": "string",
            "description": "Teléfono fijo del consultor inmobiliario."
          },
          "mobile": {
            "type": "string",
            "description": "Teléfono móvil del consultor inmobiliario."
          },
          "observations": {
            "type": "string",
            "description": "Observaciones adicionales relacionadas con el consultor."
          },
          "email": {
            "type": "string",
            "description": "Correo electrónico del consultor inmobiliario."
          },
          "address": {
            "type": "string",
            "description": "Dirección completa del consultor inmobiliario o oficina."
          },
          "city": {
            "type": "string",
            "description": "Municipio donde el consultor ejerce su actividad."
          },
          "parish": {
            "type": "string",
            "description": "Parroquia donde el consultor ejerce su actividad."
          },
          "spokenLanguages": {
            "type": "array",
            "description": "Lista de idiomas que habla el consultor."
          },
          "socialProfiles": {
            "type": "array",
            "description": "Listado de enlaces a perfiles o páginas sociales del consultor.",
            "items": {
              "$ref": "#/components/schemas/SocialProfile"
            }
          },
          "avatar": {
            "type": "string",
            "description": "Imagen del avatar asociado al consultor."
          },
          "listingUrl": {
            "type": "string",
            "description": "URL de la página que muestra todas las propiedades asignadas o relacionadas con el consultor, permitiendo el acceso directo al listado completo de las respectivas propiedades."
          },
          "detailUrl": {
            "type": "string",
            "description": "Página que muestra la información completa del agente, incluidos datos de contacto, perfil profesional y propiedades asociadas."
          }
        },
        "description": "Esquema de salida con información detallada del consultor inmobiliario"
      },
      "imiRequest": {
        "type": "object",
        "properties": {
          "townName": {
            "type": "string",
            "description": "Nombre del municipio donde se encuentra el inmueble. Este campo es obligatorio para la identificación geográfica y la determinación de la tasa de IMI. Ejemplo: \"Lisboa\", \"Oporto\", \"Sintra\", \"Albufeira\"."
          },
          "taxableValue": {
            "type": "number",
            "description": "Valor catastral imponible del inmueble (VPT), según consta en la Autoridad Tributaria portuguesa. Es el valor fiscal oficial utilizado como base para calcular el IMI. Debe ser un valor decimal positivo expresado en euros. Ejemplo: \"185000.00\".",
            "format": "decimal"
          },
          "dependentsNumber": {
            "type": "integer",
            "description": "Número de personas dependientes en el hogar del contribuyente para el año fiscal de referencia. Incluye hijos, padres mayores u otros dependientes legalmente reconocidos que puedan dar derecho a reducciones o exenciones del IMI. Valores válidos: entero ≥ 0. Ejemplo: \"2\".",
            "format": "int32"
          },
          "isUrban": {
            "type": "boolean",
            "description": "Indica si la propiedad está clasificada como urbana o rústica. Las propiedades urbanas están sujetas al IMI, mientras que las propiedades rústicas pueden estar sujetas a reglas fiscales distintas. Ejemplo: true/false."
          }
        },
        "description": "Esquema de datos de entrada utilizado para solicitar el cálculo del Impuesto Municipal sobre Inmuebles (IMI) de una propiedad."
      },
      "imiResponse": {
        "type": "object",
        "properties": {
          "townName": {
            "type": "string",
            "description": "Nombre del municipio considerado para el cálculo del IMI"
          },
          "taxableValue": {
            "type": "string",
            "description": "Valor Patrimonial Tributario (VPT) considerado para el cálculo del IMI, expresado en euros"
          },
          "dependentsNumber": {
            "type": "string",
            "description": "Número de dependientes contabilizados para efectos de beneficios aplicados en el cálculo del IMI"
          },
          "isUrban": {
            "type": "string",
            "description": "Indicación si el inmueble es urbano o rústico, considerado para el cálculo del IMI"
          },
          "imiValue": {
            "type": "string",
            "description": "Valor final del IBI (Impuesto sobre Bienes Inmuebles) calculado según los datos proporcionados."
          },
          "imiTaxValue": {
            "type": "string",
            "description": "Tasa utilizada para el cálculo del IMI."
          },
          "dependentDiscount": {
            "type": "string",
            "description": "Valor del descuento basado en el número de dependientes."
          },
          "dataYear": {
            "type": "integer",
            "description": "Año de referencia de las tasas utilizadas para el cálculo del IMI.",
            "format": "int32"
          }
        },
        "description": "Esquema de datos de salida que proporciona el resultado del cálculo del IMI, incluyendo información detallada sobre el importe a pagar."
      },
      "servicesInfoRequest": {
        "type": "object",
        "properties": {
          "companyId": {
            "type": "integer",
            "description": "Identificador de la empresa/agencia a consultar (opcional, por defecto se usa el interno de la empresa).",
            "format": "int32"
          }
        },
        "description": "Resumen de los servicios disponibles, incluyendo su finalidad y aplicación para los clientes."
      },
      "servicesInfoResponse": {
        "type": "object",
        "properties": {
          "companyId": {
            "type": "integer",
            "description": "Identificador único de la empresa asociada al catálogo de servicios.",
            "format": "int32"
          },
          "companyName": {
            "type": "string",
            "description": "Nombre de la empresa que proporciona el catálogo de servicios."
          },
          "categories": {
            "type": "array",
            "description": "Lista de categorías de servicios disponibles, organizadas por perfil de cliente.",
            "items": {
              "$ref": "#/components/schemas/ServiceCategory"
            }
          }
        },
        "description": "Resumen de los servicios proporcionados al cliente, incluidos detalles, alcance y aplicación."
      }
    }
  },
  "paths": {
    "/mcp/search": {
      "get": {
        "summary": "Buscar anuncios inmobiliarios usando filtros como ubicación, precio, tipo y condición.",
        "description": "Buscar anuncios inmobiliarios usando filtros como ubicación, precio, tipo y condición.",
        "operationId": "mcpSearch",
        "parameters": [
          {
            "name": "BusinessType",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Define o devuelve el identificador del tipo de negocio del inmueble (Alquiler, Venta). Si no se indica en la búsqueda, se usará Venta por defecto"
          },
          {
            "name": "CountryName",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Nombre del país utilizado como criterio de filtrado. Este campo debe permanecer vacío cuando el país no se identifica., (es obligatorio)"
          },
          {
            "name": "StateName",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Nombre de la región (distrito) del inmueble (obligatorio en la búsqueda si no se especifica municipio)., (es obligatorio)"
          },
          {
            "name": "TownName",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Nombre del municipio del inmueble (obligatorio en la búsqueda si no se especifica distrito)."
          },
          {
            "name": "NeighborhoodName",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Nombre o ID del barrio o parroquia donde se encuentra la propiedad."
          },
          {
            "name": "ZoneName",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Identificador de la zona geográfica para filtrar en las búsquedas."
          },
          {
            "name": "MasterCategoryIds",
            "in": "query",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "description": "Identificadores (IDs) de uno o más grupos principales de categorías de inmueble (p. ej.: apartamentos, pisos, viviendas, almacenes, terrenos, hoteles). Es obligatorio indicar al menos uno si no se especifica un tipo específico de inmueble."
          },
          {
            "name": "CategoryIds",
            "in": "query",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "description": "Identificadores (ID) de una o más categorías específicas de inmuebles (p. ej.: apartamento, piso, vivienda, almacén, terreno, hotel)."
          },
          {
            "name": "Condition",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Estado de conservación. (A demoler o reconstruir, A estrenar, A reformar, Con incentivos a la rehabilitación, En buen estado, En construcción, En proyecto, No aplicable, Para la venta, Reformado, Rehabilitado, Reservado)"
          },
          {
            "name": "MinPrice",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "description": "Precio mínimo en euros. Completar cuando el usuario indique un presupuesto mínimo o límite inferior de precio."
          },
          {
            "name": "MaxPrice",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "description": "Precio máximo en euros. Completar cuando el usuario indique un presupuesto máximo o límite superior de precio."
          },
          {
            "name": "MinBedrooms",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "description": "Número mínimo de habitaciones o dormitorios para filtrar"
          },
          {
            "name": "MaxBedrooms",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "description": "Número máximo de habitaciones o dormitorios para filtrar"
          },
          {
            "name": "Bathrooms",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "description": "Número mínimo de baños."
          },
          {
            "name": "ListingReference",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Referencia interna del inmueble utilizada para su identificación."
          },
          {
            "name": "DevelopmentName",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Nombre de la promoción."
          },
          {
            "name": "DevelopmentFractions",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Indica si la búsqueda debe considerar fracciones de un proyecto inmobiliario (por ejemplo, apartamentos o locales) en lugar del proyecto en su conjunto. Cuando está activado, los resultados incluyen solo fracciones asociadas a un proyecto."
          },
          {
            "name": "DevelopmentTags",
            "in": "query",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "description": "MCP\\INPUTSCHEMA_DEVELOPMENTTAG_DESCRIPTION ()"
          },
          {
            "name": "WithVideos",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Busca solo propiedades con vídeos disponibles. Aplicar cuando el usuario mencione expresiones como 'con vídeo', 'con vídeos', 'tiene vídeo', 'tiene vídeos', 'ver vídeo de la propiedad', 'ver vídeo online', etc."
          },
          {
            "name": "WithBluePrints",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Busca solo propiedades que tengan planos (blueprints) disponibles. Aplicar cuando el usuario mencione 'con plano', 'tiene planos', 'planos de la casa', 'mapa de la propiedad', 'planta baja', 'ver plano', etc."
          },
          {
            "name": "WithVirtualVisits",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Busca solo propiedades con visitas virtuales disponibles. Aplicar cuando el usuario mencione 'con visita virtual', 'tiene visita virtual', 'tour virtual', 'tour 3D', 'visita 3D', 'tour interactivo', 'recorrido virtual', 'experiencia virtual', 'visualización virtual', 'ver visita virtual online'."
          },
          {
            "name": "With360Photos",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Busca solo propiedades con fotos 360º disponibles. Aplicar cuando el usuario mencione 'con fotos 360º', 'tiene fotos 360º', 'con fotos panorámicas', 'tiene fotos panorámicas', 'ver fotos 360º online', etc."
          },
          {
            "name": "FeaturesNames",
            "in": "query",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "description": "Características del inmueble, incluidas las comodidades, servicios y lugares de interés cercanos, así como tipos de vistas para proporcionar una descripción completa de la propiedad (Aeropuerto, Aire acondicionado, Aislamiento agudo, Aislamiento termico, Alarma, Amueblado, Aparcamiento, Ascensor, Baño de servicio, Baño privado, Benzinstation, Biblioteca, Bodega de vino, Bomba eléctrica, Calefacción, Campo, Campo de golf, Capota de cocina, Carretera, CCTV, Centro ciudad, Centro comercial, Cerca del mar, Closet, Cocina, Comedor, Complejo sellado, Cristal doble, Dryer, Edificio, Entrada de vídeo, Escuela, Espacios verdes, Estación de autobuses, Estufa eléctrica, Farmacia, Garaje, Gimnasio, Golf, Hipermercado, Hoja de inducción, Horno, Hospital, Internet Pre-Instalación, Jardín, Lavadero, Lavadora, Mar, Microondas, Montaña, Oficina, Orientación solar, Paneles solares, Piscina, Piscina compartida, Piscinas, Playa, Playroom, Policía, Puerta blindada, Puerta de alta seguridad, Refrigerador, Sala de estar, Satélite, Seguridad 24 horas, Suite, Tabla de planchar, Terraza, Transportes Públicos, Videovigilancia)"
          },
          {
            "name": "Page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "description": "Número de página a devolver en los resultados de búsqueda."
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SearchResponse"
                }
              }
            }
          }
        }
      }
    },
    "/mcp/detail": {
      "get": {
        "summary": "Obtiene información detallada sobre una propiedad inmobiliaria.",
        "description": "Obtiene información detallada sobre una propiedad inmobiliaria.",
        "operationId": "mcpDetail",
        "parameters": [
          {
            "name": "ListingId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "description": "ID del inmueble para contacto."
          },
          {
            "name": "ListingReference",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Referencia interna del inmueble utilizada para su identificación."
          },
          {
            "name": "DevelopmentFractions",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Indica si la búsqueda debe considerar fracciones de un proyecto inmobiliario (por ejemplo, apartamentos o locales) en lugar del proyecto en su conjunto. Cuando está activado, los resultados incluyen solo fracciones asociadas a un proyecto."
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DetailResponse"
                }
              }
            }
          }
        }
      }
    },
    "/mcp/lead": {
      "get": {
        "summary": "Enviar un formulario de contacto para un anuncio específico.",
        "description": "Enviar un formulario de contacto para un anuncio específico.",
        "operationId": "mcpLead",
        "parameters": [
          {
            "name": "ListingId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "description": "ID del inmueble para contacto."
          },
          {
            "name": "ListingReference",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Referencia interna del inmueble utilizada para su identificación."
          },
          {
            "name": "Name",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Nombre del usuario., (es obligatorio)"
          },
          {
            "name": "Email",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Dirección de correo electrónico del usuario (obligatoria si no proporciona teléfono)., (es obligatorio)"
          },
          {
            "name": "Phone",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Número de teléfono del usuario (opcional si proporciona dirección de correo electrónico)."
          },
          {
            "name": "PhoneCountryCode",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Código del país del teléfono incluyendo el signo más, por ejemplo, \"+34\" para España, \"+351\" para Portugal."
          },
          {
            "name": "Message",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Mensaje personalizado del usuario."
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LeadResponse"
                }
              }
            }
          }
        }
      }
    },
    "/mcp/companyinfo": {
      "get": {
        "summary": "Permite obtener los datos de contacto de la empresa, incluyendo el nombre de la agencia, dirección, teléfono y correo electrónico. Ideal para mostrar información institucional o permitir que el usuario contacte con la agencia.",
        "description": "Permite obtener los datos de contacto de la empresa, incluyendo el nombre de la agencia, dirección, teléfono y correo electrónico. Ideal para mostrar información institucional o permitir que el usuario contacte con la agencia.",
        "operationId": "mcpCompanyInfo",
        "parameters": [
          {
            "name": "CompanyId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "description": "Identificador de la empresa/agencia a consultar (opcional, por defecto se usa el interno de la empresa)."
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CompanyInfoWithAgenciesResponse"
                }
              }
            }
          }
        }
      }
    },
    "/mcp/rasorinfo": {
      "get": {
        "summary": "Permite obtener los datos de contacto del consultor inmobiliario, incluyendo nombre, teléfono, correo electrónico y dirección. Ideal para mostrar información de contacto del consultor o permitir que el usuario se comunique con él.",
        "description": "Permite obtener los datos de contacto del consultor inmobiliario, incluyendo nombre, teléfono, correo electrónico y dirección. Ideal para mostrar información de contacto del consultor o permitir que el usuario se comunique con él.",
        "operationId": "mcpRasorInfo",
        "parameters": [
          {
            "name": "RasorName",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Nombre del consultor inmobiliario sobre el cual se desea obtener información detallada."
          },
          {
            "name": "StateName",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Permite buscar consultores por distrito."
          },
          {
            "name": "TownName",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Permite buscar consultores por municipio."
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RasorInfoResponse"
                }
              }
            }
          }
        }
      }
    },
    "/mcp/imicalculator": {
      "get": {
        "summary": "Permite determinar el valor del Impuesto Municipal sobre Inmuebles (IMI) basado en los datos proporcionados por el usuario. Este servicio valida el municipio indicado, identifica el coeficiente aplicable, procesa el Valor Patrimonial Tributario (VPT), el número de dependientes y la naturaleza del inmueble (urbano o rústico), devolviendo el importe final del IMI a pagar de acuerdo con las normas fiscales vigentes en Portugal.",
        "description": "Permite determinar el valor del Impuesto Municipal sobre Inmuebles (IMI) basado en los datos proporcionados por el usuario. Este servicio valida el municipio indicado, identifica el coeficiente aplicable, procesa el Valor Patrimonial Tributario (VPT), el número de dependientes y la naturaleza del inmueble (urbano o rústico), devolviendo el importe final del IMI a pagar de acuerdo con las normas fiscales vigentes en Portugal.",
        "operationId": "mcpImiCalculator",
        "parameters": [
          {
            "name": "TownName",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Nombre del municipio donde se encuentra el inmueble. Este campo es obligatorio para la identificación geográfica y la determinación de la tasa de IMI. Ejemplo: \"Lisboa\", \"Oporto\", \"Sintra\", \"Albufeira\"."
          },
          {
            "name": "TaxableValue",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number",
              "format": "decimal"
            },
            "description": "Valor catastral imponible del inmueble (VPT), según consta en la Autoridad Tributaria portuguesa. Es el valor fiscal oficial utilizado como base para calcular el IMI. Debe ser un valor decimal positivo expresado en euros. Ejemplo: \"185000.00\"."
          },
          {
            "name": "DependentsNumber",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "description": "Número de personas dependientes en el hogar del contribuyente para el año fiscal de referencia. Incluye hijos, padres mayores u otros dependientes legalmente reconocidos que puedan dar derecho a reducciones o exenciones del IMI. Valores válidos: entero ≥ 0. Ejemplo: \"2\"."
          },
          {
            "name": "IsUrban",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Indica si la propiedad está clasificada como urbana o rústica. Las propiedades urbanas están sujetas al IMI, mientras que las propiedades rústicas pueden estar sujetas a reglas fiscales distintas. Ejemplo: true/false."
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IMIResponse"
                }
              }
            }
          }
        }
      }
    },
    "/mcp/servicesinfo": {
      "get": {
        "summary": "Descripción del endpoint que proporciona información completa sobre los servicios disponibles para un perfil de cliente.",
        "description": "Descripción del endpoint que proporciona información completa sobre los servicios disponibles para un perfil de cliente.",
        "operationId": "mcpServicesInfo",
        "parameters": [
          {
            "name": "CompanyId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "description": "Identificador de la empresa/agencia a consultar (opcional, por defecto se usa el interno de la empresa)."
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServicesInfoResponse"
                }
              }
            }
          }
        }
      }
    }
  }
}