{
  "openapi": "3.0.1",
  "info": {
    "title": "Real Estate MCP API - Allee Spain",
    "version": "1.1",
    "description": "Contexte MCP Immobilier pour rechercher des biens et soumettre des demandes de contact. - 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": "Identifiant du serveur MCP"
    }
  ],
  "components": {
    "schemas": {
      "searchToMatchRequest": {
        "type": "object",
        "properties": {
          "businessType": {
            "type": "string",
            "description": "Définit ou renvoie l'identifiant du type d'activité de la propriété"
          },
          "countryName": {
            "type": "string",
            "description": "Nom du pays utilisé comme critère de filtrage. Ce champ doit rester vide lorsque le pays n’est pas identifié."
          },
          "stateName": {
            "type": "string",
            "description": "Nom de la région (district) du bien (obligatoire dans la recherche si la commune n'est pas précisée)."
          },
          "townName": {
            "type": "string",
            "description": "Nom de la commune pour le bien (obligatoire dans la recherche si la région n'est pas précisée)."
          },
          "neighborhoodName": {
            "type": "string",
            "description": "Nom ou identifiant du quartier ou de la paroisse où se situe la propriété."
          },
          "zoneName": {
            "type": "string",
            "description": "Identifiant de la zone géographique utilisé pour filtrer les recherches."
          },
          "masterCategoryIds": {
            "type": "array",
            "description": "Identifiants (IDs) d’un ou plusieurs groupes principaux de catégories de biens immobiliers (ex. : appartements, maisons, entrepôts, terrains, hôtels). Il est obligatoire d’en indiquer au moins un si aucun type spécifique de bien n’est mentionné."
          },
          "categoryIds": {
            "type": "array",
            "description": "Identifiants (ID) d’un ou plusieurs types spécifiques de biens immobiliers (ex. : appartement, maison, entrepôt, terrain, hôtel)."
          },
          "condition": {
            "type": "string",
            "description": "État de conservation."
          },
          "minPrice": {
            "type": "integer",
            "description": "Prix minimum en euros. Remplir lorsque l’utilisateur indique un budget minimum ou une limite inférieure de prix.",
            "format": "int32"
          },
          "maxPrice": {
            "type": "integer",
            "description": "Prix maximum en euros. Remplir lorsque l’utilisateur indique un budget maximum ou une limite supérieure de prix.",
            "format": "int32"
          },
          "minBedrooms": {
            "type": "integer",
            "description": "Nombre minimum de chambres à filtrer",
            "format": "int32"
          },
          "maxBedrooms": {
            "type": "integer",
            "description": "Nombre maximum de chambres à filtrer",
            "format": "int32"
          },
          "bathrooms": {
            "type": "integer",
            "description": "Nombre minimum de salles de bains.",
            "format": "int32"
          },
          "listingReference": {
            "type": "string",
            "description": "Référence interne du bien utilisée pour l'identification."
          },
          "developmentName": {
            "type": "string",
            "description": "Nom du programme immobilier."
          },
          "developmentFractions": {
            "type": "boolean",
            "description": "Indique si la recherche doit prendre en compte les unités d’un programme immobilier (par exemple des appartements ou des commerces) plutôt que le programme dans son ensemble. Lorsqu’elle est activée, les résultats incluent uniquement les unités associées à un programme."
          },
          "developmentTags": {
            "type": "array",
            "description": "MCP\\INPUTSCHEMA_DEVELOPMENTTAG_DESCRIPTION"
          },
          "withVideos": {
            "type": "boolean",
            "description": "Recherche uniquement les propriétés disposant de vidéos. À appliquer lorsque l’utilisateur mentionne des expressions telles que 'avec vidéo', 'avec vidéos', 'a vidéo', 'a vidéos', 'voir la vidéo du bien', 'voir vidéo en ligne', etc."
          },
          "withBluePrints": {
            "type": "boolean",
            "description": "Recherche uniquement les propriétés disposant de plans (blueprints). Appliquer lorsque l'utilisateur mentionne 'avec plan', 'a des plans', 'plans de la maison', 'plan de la propriété', 'plan du rez-de-chaussée', 'voir plan', etc."
          },
          "withVirtualVisits": {
            "type": "boolean",
            "description": "Recherche uniquement les biens disposant de visites virtuelles. À appliquer lorsque l'utilisateur mentionne 'visite virtuelle', 'tour virtuel', 'visite 3D', 'tour interactif', 'parcours virtuel', 'expérience virtuelle', 'visualisation virtuelle', 'voir la visite virtuelle en ligne'."
          },
          "with360Photos": {
            "type": "boolean",
            "description": "Recherche uniquement les propriétés disposant de photos 360º. Appliquer lorsque l'utilisateur mentionne 'avec photos 360º', 'a photos 360º', 'avec photos panoramiques', 'a photos panoramiques', 'voir photos 360º en ligne', etc."
          },
          "featuresNames": {
            "type": "array",
            "description": "Caractéristiques du bien, y compris les commodités, services et points d'intérêt à proximité, ainsi que les types de vues pour fournir une description complète et détaillée de la propriété"
          },
          "page": {
            "type": "integer",
            "description": "Numéro de page à retourner dans les résultats de recherche.",
            "format": "int32"
          }
        },
        "description": "Schéma décrivant les paramètres d’entrée pour la recherche immobilière."
      },
      "searchResponse": {
        "type": "object",
        "properties": {
          "results": {
            "type": "array",
            "description": "Liste des résultats de la page actuelle, basée sur le nombre d’enregistrements par page.",
            "items": {
              "$ref": "#/components/schemas/DetailResponse"
            }
          },
          "count": {
            "type": "integer",
            "description": "Nombre total de résultats correspondant aux critères de recherche.",
            "format": "int32"
          },
          "page": {
            "type": "integer",
            "description": "Numéro de la page actuelle selon les critères de recherche.",
            "format": "int32"
          },
          "totalpages": {
            "type": "integer",
            "description": "Nombre total de pages correspondant aux critères de recherche.",
            "format": "int32"
          },
          "statetownnameequals": {
            "type": "boolean",
            "description": "Indique si le nom du district est identique au nom de la commune."
          },
          "developmentname": {
            "type": "string",
            "description": "Nom du programme ; ce champ est renseigné uniquement si les résultats sont liés à un programme spécifique portant ce nom."
          }
        },
        "description": "Schéma décrivant les paramètres de sortie de la recherche immobilière."
      },
      "detailRequest": {
        "type": "object",
        "properties": {
          "listingId": {
            "type": "integer",
            "description": "ID de la propriété pour contact.",
            "format": "int32"
          },
          "listingReference": {
            "type": "string",
            "description": "Référence interne du bien utilisée pour l'identification."
          },
          "developmentFractions": {
            "type": "boolean",
            "description": "Indique si la recherche doit prendre en compte les unités d’un programme immobilier (par exemple des appartements ou des commerces) plutôt que le programme dans son ensemble. Lorsqu’elle est activée, les résultats incluent uniquement les unités associées à un programme."
          }
        },
        "description": "Schéma décrivant les paramètres d’entrée pour le détail du bien immobilier."
      },
      "detailResponse": {
        "type": "object",
        "properties": {
          "listingId": {
            "type": "integer",
            "description": "ID unique de l'annonce immobilière.",
            "format": "int32"
          },
          "propertyType": {
            "type": "string",
            "description": "Type de propriété."
          },
          "condition": {
            "type": "string",
            "description": "État de conservation du bien immobilier."
          },
          "listingReference": {
            "type": "string",
            "description": "Référence du bien affichée dans les résultats de recherche."
          },
          "firstPhoto": {
            "type": "string",
            "description": "URL de la miniature de la première photo du bien."
          },
          "description": {
            "type": "string",
            "description": "Description détaillée du bien immobilier."
          },
          "title": {
            "type": "string",
            "description": "Titre de l'annonce."
          },
          "price": {
            "type": "string",
            "description": "Prix en euros."
          },
          "imiValue": {
            "type": "string",
            "description": "Montant de l'IMI à payer pour le bien, calculé selon la VPT et la réglementation fiscale applicable."
          },
          "business": {
            "type": "string",
            "description": "Type de transaction immobilière."
          },
          "location": {
            "type": "string",
            "description": "Nom de l'emplacement."
          },
          "bedrooms": {
            "type": "integer",
            "description": "Nombre de chambres du bien immobilier.",
            "format": "int32"
          },
          "bathrooms": {
            "type": "integer",
            "description": "Nombre de salles de bains du bien immobilier.",
            "format": "int32"
          },
          "url": {
            "type": "string",
            "description": "URL publique de l'annonce."
          },
          "hasVideos": {
            "type": "boolean",
            "description": "Indique si le bien dispose de vidéos disponibles."
          },
          "hasBluePrints": {
            "type": "boolean",
            "description": "Indique si le bien dispose de plans ou blueprints disponibles."
          },
          "has360Photos": {
            "type": "boolean",
            "description": "Indique si la propriété dispose de photos 360°."
          },
          "hasVirtualVisits": {
            "type": "boolean",
            "description": "Indique si la propriété dispose de visites virtuelles ou de visites guidées virtuelles."
          },
          "features": {
            "description": "Ces clés représentent la description des caractéristiques spécifiques d’un bien immobilier, y compris les attributs physiques et les emplacements pertinents tels qu’une piscine, une vue sur la mer, la proximité des hôpitaux, des écoles et d’autres infrastructures importantes. Ces informations permettent de détailler et qualifier le bien pour améliorer la recherche et l'affichage des résultats selon les préférences de l'utilisateur.",
            "$ref": "#/components/schemas/Dictionary`2"
          }
        },
        "description": "Schéma décrivant les paramètres de sortie du détail du bien immobilier."
      },
      "leadRequest": {
        "type": "object",
        "properties": {
          "listingId": {
            "type": "integer",
            "description": "ID de la propriété pour contact.",
            "format": "int32"
          },
          "listingReference": {
            "type": "string",
            "description": "Référence interne du bien utilisée pour l'identification."
          },
          "name": {
            "type": "string",
            "description": "Nom de l'utilisateur."
          },
          "email": {
            "type": "string",
            "description": "Adresse email de l'utilisateur (obligatoire si aucun numéro de téléphone n'est fourni)."
          },
          "phone": {
            "type": "string",
            "description": "Numéro de téléphone de l'utilisateur (optionnel si l'adresse email est fournie)."
          },
          "phoneCountryCode": {
            "type": "string",
            "description": "Code pays du téléphone incluant le signe plus, par exemple, \"+33\" pour la France, \"+351\" pour le Portugal."
          },
          "message": {
            "type": "string",
            "description": "Message personnalisé de l'utilisateur."
          }
        },
        "description": "Schéma décrivant les paramètres d’entrée pour l’envoi de leads immobiliers."
      },
      "leadResponse": {
        "type": "object",
        "properties": {
          "status": {
            "type": "string",
            "description": "Statut de l'envoi du formulaire de contact (ex.: succès, erreur)."
          },
          "message": {
            "type": "string",
            "description": "Message décrivant le résultat de l'envoi du formulaire de contact."
          },
          "confirmedLead": {
            "type": "boolean",
            "description": ""
          }
        },
        "description": "Schéma décrivant les paramètres de sortie de l’envoi de leads immobiliers."
      },
      "companyInfoRequest": {
        "type": "object",
        "properties": {
          "companyId": {
            "type": "integer",
            "description": "Identifiant de l’entreprise/agence à consulter (optionnel, utilise celui de l’entreprise par défaut).",
            "format": "int32"
          }
        },
        "description": "Schéma d'entrée pour la demande d'informations sur l'entreprise"
      },
      "companyInfoWithAgenciesResponse": {
        "type": "object",
        "properties": {
          "headquarters": {
            "description": "Informations sur les coordonnées de contact de l’entreprise relatives au siège.",
            "$ref": "#/components/schemas/CompanyInfoResponse"
          },
          "agencies": {
            "type": "array",
            "description": "Informations sur les coordonnées de contact des agences de l’entreprise.",
            "items": {
              "$ref": "#/components/schemas/CompanyInfoResponse"
            }
          }
        },
        "description": "Schéma de sortie avec les données d'information sur l'entreprise"
      },
      "companyInfoResponse": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Nom de l'entreprise"
          },
          "phone": {
            "type": "string",
            "description": "Numéro de téléphone de l'entreprise"
          },
          "mobile": {
            "type": "string",
            "description": "Numéro de mobile de l'entreprise"
          },
          "email": {
            "type": "string",
            "description": "Adresse email de contact de l'entreprise"
          },
          "address": {
            "type": "string",
            "description": "Adresse de l'entreprise (sans code postal)"
          },
          "district": {
            "type": "string",
            "description": "District où se situe l'entreprise"
          },
          "municipality": {
            "type": "string",
            "description": "Commune où se situe l'entreprise"
          },
          "parish": {
            "type": "string",
            "description": "Freguesia où se situe l'entreprise"
          },
          "zipCode": {
            "type": "string",
            "description": "Code postal de l'adresse de l'entreprise"
          },
          "businessHours": {
            "type": "string",
            "description": "Heures d'ouverture de l'entreprise"
          },
          "googleMapsUrl": {
            "type": "string",
            "description": "Lien direct vers l'emplacement de l'entreprise sur Google Maps"
          }
        },
        "description": "Schéma de sortie avec les données d'information sur l'entreprise"
      },
      "rasorInfoRequest": {
        "type": "object",
        "properties": {
          "rasorName": {
            "type": "string",
            "description": "Nom du conseiller immobilier pour lequel des informations détaillées sont demandées."
          },
          "stateName": {
            "type": "string",
            "description": "Permet de rechercher des conseillers par district."
          },
          "townName": {
            "type": "string",
            "description": "Permet de rechercher des conseillers par commune."
          }
        },
        "description": "Schéma d'entrée pour demander des informations détaillées sur le conseiller immobilier"
      },
      "rasorInfoResponse": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Nom complet du conseiller immobilier."
          },
          "phone": {
            "type": "string",
            "description": "Numéro de téléphone fixe du conseiller immobilier."
          },
          "mobile": {
            "type": "string",
            "description": "Numéro de téléphone portable du conseiller immobilier."
          },
          "observations": {
            "type": "string",
            "description": "Observations supplémentaires relatives au conseiller immobilier."
          },
          "email": {
            "type": "string",
            "description": "Adresse e-mail du conseiller immobilier."
          },
          "address": {
            "type": "string",
            "description": "Adresse complète du conseiller immobilier ou du bureau."
          },
          "city": {
            "type": "string",
            "description": "Commune où le consultant exerce son activité."
          },
          "parish": {
            "type": "string",
            "description": "Paroisse où le consultant exerce son activité."
          },
          "spokenLanguages": {
            "type": "array",
            "description": "Liste des langues parlées par le consultant."
          },
          "socialProfiles": {
            "type": "array",
            "description": "Liste des liens vers les profils ou pages sociales du consultant.",
            "items": {
              "$ref": "#/components/schemas/SocialProfile"
            }
          },
          "avatar": {
            "type": "string",
            "description": "Image de l'avatar associé au consultant."
          },
          "listingUrl": {
            "type": "string",
            "description": "URL de la page affichant tous les biens attribués ou liés au consultant, offrant un accès direct à la liste complète des biens concernés."
          },
          "detailUrl": {
            "type": "string",
            "description": "Page présentant l’ensemble des informations de l’agent, y compris ses coordonnées, son profil professionnel et les biens qui lhe sont associés."
          }
        },
        "description": "Schéma de sortie avec des informations détaillées sur le conseiller immobilier"
      },
      "imiRequest": {
        "type": "object",
        "properties": {
          "townName": {
            "type": "string",
            "description": "Nom de la commune où se trouve le bien. Ce champ est obligatoire pour l'identification géographique et la détermination du taux d'IMI. Exemple : \"Lisbonne\", \"Porto\", \"Sintra\", \"Albufeira\"."
          },
          "taxableValue": {
            "type": "number",
            "description": "Valeur patrimoniale imposable du bien (VPT), telle qu’enregistrée auprès de l’Autorité Fiscale portugaise. Il s’agit de la valeur fiscale officielle servant de base au calcul de l’IMI. Elle doit être un nombre décimal positif exprimé en euros. Exemple : \"185000.00\".",
            "format": "decimal"
          },
          "dependentsNumber": {
            "type": "integer",
            "description": "Nombre de personnes à charge dans le foyer fiscal du contribuable pour l’année de référence. Cela inclut les enfants, les parents âgés ou d’autres personnes légalement reconnues pouvant donner droit à une réduction ou exonération de l’IMI. Valeurs valides : entier ≥ 0. Exemple : \"2\".",
            "format": "int32"
          },
          "isUrban": {
            "type": "boolean",
            "description": "Indique si le bien est classé comme urbain ou rural. Les biens urbains sont soumis à l’IMI, tandis que les biens ruraux peuvent être soumis à des règles fiscales différentes. Exemple : true/false."
          }
        },
        "description": "Schéma d'entrée utilisé pour demander le calcul de la taxe municipale sur les propriétés (IMI) d'un bien immobilier."
      },
      "imiResponse": {
        "type": "object",
        "properties": {
          "townName": {
            "type": "string",
            "description": "Nom de la commune considéré pour le calcul de l'IMI"
          },
          "taxableValue": {
            "type": "string",
            "description": "Valeur patrimoniale imposable (VPT) prise en compte pour le calcul de l'IMI, exprimée en euros"
          },
          "dependentsNumber": {
            "type": "string",
            "description": "Nombre de personnes à charge comptabilisées pour les avantages appliqués dans le calcul de l'IMI"
          },
          "isUrban": {
            "type": "string",
            "description": "Indication si le bien est urbain ou rural, pris en compte pour le calcul de l'IMI"
          },
          "imiValue": {
            "type": "string",
            "description": "Valeur finale de l’IMI (Impôt Municipal sur les Immeubles) calculée à partir des données fournies."
          },
          "imiTaxValue": {
            "type": "string",
            "description": "Taux utilisé pour le calcul de l'IMI."
          },
          "dependentDiscount": {
            "type": "string",
            "description": "Valeur de la réduction basée sur le nombre de personnes à charge."
          },
          "dataYear": {
            "type": "integer",
            "description": "Année de référence des taux utilisés pour le calcul de l'IMI.",
            "format": "int32"
          }
        },
        "description": "Schéma de sortie fournissant le résultat du calcul de l'IMI, incluant des informations détaillées sur le montant à payer."
      },
      "servicesInfoRequest": {
        "type": "object",
        "properties": {
          "companyId": {
            "type": "integer",
            "description": "Identifiant de l’entreprise/agence à consulter (optionnel, utilise celui de l’entreprise par défaut).",
            "format": "int32"
          }
        },
        "description": "Résumé des services disponibles, y compris leur objectif et leur application pour les clients."
      },
      "servicesInfoResponse": {
        "type": "object",
        "properties": {
          "companyId": {
            "type": "integer",
            "description": "Identifiant unique de l’entreprise associée au catalogue de services.",
            "format": "int32"
          },
          "companyName": {
            "type": "string",
            "description": "Nom de l’entreprise qui fournit le catalogue de services."
          },
          "categories": {
            "type": "array",
            "description": "Liste des catégories de services disponibles, organisées par profil client.",
            "items": {
              "$ref": "#/components/schemas/ServiceCategory"
            }
          }
        },
        "description": "Résumé des services fournis au client, y compris les détails, la portée et l’application."
      }
    }
  },
  "paths": {
    "/mcp/search": {
      "get": {
        "summary": "Rechercher des annonces immobilières en utilisant des filtres tels que la localisation, le prix, le type et l’état.",
        "description": "Rechercher des annonces immobilières en utilisant des filtres tels que la localisation, le prix, le type et l’état.",
        "operationId": "mcpSearch",
        "parameters": [
          {
            "name": "BusinessType",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Définit ou renvoie l'identifiant du type d'activité de la propriété (Acheter, Location). Si non indiqué dans la recherche, Vente sera utilisée par défaut"
          },
          {
            "name": "CountryName",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Nom du pays utilisé comme critère de filtrage. Ce champ doit rester vide lorsque le pays n’est pas identifié., (est requis)"
          },
          {
            "name": "StateName",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Nom de la région (district) du bien (obligatoire dans la recherche si la commune n'est pas précisée)., (est requis)"
          },
          {
            "name": "TownName",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Nom de la commune pour le bien (obligatoire dans la recherche si la région n'est pas précisée)."
          },
          {
            "name": "NeighborhoodName",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Nom ou identifiant du quartier ou de la paroisse où se situe la propriété."
          },
          {
            "name": "ZoneName",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Identifiant de la zone géographique utilisé pour filtrer les recherches."
          },
          {
            "name": "MasterCategoryIds",
            "in": "query",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "description": "Identifiants (IDs) d’un ou plusieurs groupes principaux de catégories de biens immobiliers (ex. : appartements, maisons, entrepôts, terrains, hôtels). Il est obligatoire d’en indiquer au moins un si aucun type spécifique de bien n’est mentionné."
          },
          {
            "name": "CategoryIds",
            "in": "query",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "description": "Identifiants (ID) d’un ou plusieurs types spécifiques de biens immobiliers (ex. : appartement, maison, entrepôt, terrain, hôtel)."
          },
          {
            "name": "Condition",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "État de conservation. (À démolir ou reconstruire, À rénover, Acheter, Avec programme d'encouragement à la rénovation, Bon état, En construction, En projet, Neuf, Non Applicable, Réhabilité, Rénové, Réservé)"
          },
          {
            "name": "MinPrice",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "description": "Prix minimum en euros. Remplir lorsque l’utilisateur indique un budget minimum ou une limite inférieure de prix."
          },
          {
            "name": "MaxPrice",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "description": "Prix maximum en euros. Remplir lorsque l’utilisateur indique un budget maximum ou une limite supérieure de prix."
          },
          {
            "name": "MinBedrooms",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "description": "Nombre minimum de chambres à filtrer"
          },
          {
            "name": "MaxBedrooms",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "description": "Nombre maximum de chambres à filtrer"
          },
          {
            "name": "Bathrooms",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "description": "Nombre minimum de salles de bains."
          },
          {
            "name": "ListingReference",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Référence interne du bien utilisée pour l'identification."
          },
          {
            "name": "DevelopmentName",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Nom du programme immobilier."
          },
          {
            "name": "DevelopmentFractions",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Indique si la recherche doit prendre en compte les unités d’un programme immobilier (par exemple des appartements ou des commerces) plutôt que le programme dans son ensemble. Lorsqu’elle est activée, les résultats incluent uniquement les unités associées à un programme."
          },
          {
            "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": "Recherche uniquement les propriétés disposant de vidéos. À appliquer lorsque l’utilisateur mentionne des expressions telles que 'avec vidéo', 'avec vidéos', 'a vidéo', 'a vidéos', 'voir la vidéo du bien', 'voir vidéo en ligne', etc."
          },
          {
            "name": "WithBluePrints",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Recherche uniquement les propriétés disposant de plans (blueprints). Appliquer lorsque l'utilisateur mentionne 'avec plan', 'a des plans', 'plans de la maison', 'plan de la propriété', 'plan du rez-de-chaussée', 'voir plan', etc."
          },
          {
            "name": "WithVirtualVisits",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Recherche uniquement les biens disposant de visites virtuelles. À appliquer lorsque l'utilisateur mentionne 'visite virtuelle', 'tour virtuel', 'visite 3D', 'tour interactif', 'parcours virtuel', 'expérience virtuelle', 'visualisation virtuelle', 'voir la visite virtuelle en ligne'."
          },
          {
            "name": "With360Photos",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Recherche uniquement les propriétés disposant de photos 360º. Appliquer lorsque l'utilisateur mentionne 'avec photos 360º', 'a photos 360º', 'avec photos panoramiques', 'a photos panoramiques', 'voir photos 360º en ligne', etc."
          },
          {
            "name": "FeaturesNames",
            "in": "query",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "description": "Caractéristiques du bien, y compris les commodités, services et points d'intérêt à proximité, ainsi que les types de vues pour fournir une description complète et détaillée de la propriété (Aéroport, Alarme, Ascenseur, Autoroute, Bâtiment, Bibliothèque, Blanchisserie, Campagne, Cave à vin, CCTV, Centre commercial, Centre-Ville, Chauffage central, Chauffage électrique, Cité de cuisine, Climatisation, Closet, Complexe marin, Cuisine, Double verre, École, Ejendommen har kontor, Entrée vidéo, Espaces verts, Garage, Golf, Gymnase, Hôpital, Hypermarché, Induction hob, Internet Pre-Installation, Isolation acustique, Isolation temporaire, Jardin, Machine à laver, Mer, Meublé, Micro-ondes, Montagne, Orientation solaire, Oven, Panneaux solaires, Parking, Petrol station, Pharmacie, Piscine, Piscine partagée, Piscines, Plage, Planche à repasser, Plat satellite, Police, Porch, Porte blindée, Porte haute sécurité, Près de la mer, Réchaud électrique, Réfrigérateur, Salle à manger, Salle de bain, Salle de bain privée, Salle de jeux, Salon, Sèche-linge, Station de bus, Suite, Surveillance 24h, Terrain de golf, Terrasse, Toile verte, Transports Publics, Vidéo surveillance, Ville)"
          },
          {
            "name": "Page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "description": "Numéro de page à retourner dans les résultats de recherche."
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SearchResponse"
                }
              }
            }
          }
        }
      }
    },
    "/mcp/detail": {
      "get": {
        "summary": "Récupère les informations détaillées d’un bien immobilier.",
        "description": "Récupère les informations détaillées d’un bien immobilier.",
        "operationId": "mcpDetail",
        "parameters": [
          {
            "name": "ListingId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "description": "ID de la propriété pour contact."
          },
          {
            "name": "ListingReference",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Référence interne du bien utilisée pour l'identification."
          },
          {
            "name": "DevelopmentFractions",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Indique si la recherche doit prendre en compte les unités d’un programme immobilier (par exemple des appartements ou des commerces) plutôt que le programme dans son ensemble. Lorsqu’elle est activée, les résultats incluent uniquement les unités associées à un programme."
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DetailResponse"
                }
              }
            }
          }
        }
      }
    },
    "/mcp/lead": {
      "get": {
        "summary": "Soumettre un formulaire de contact pour une annonce spécifique.",
        "description": "Soumettre un formulaire de contact pour une annonce spécifique.",
        "operationId": "mcpLead",
        "parameters": [
          {
            "name": "ListingId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "description": "ID de la propriété pour contact."
          },
          {
            "name": "ListingReference",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Référence interne du bien utilisée pour l'identification."
          },
          {
            "name": "Name",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Nom de l'utilisateur., (est requis)"
          },
          {
            "name": "Email",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Adresse email de l'utilisateur (obligatoire si aucun numéro de téléphone n'est fourni)., (est requis)"
          },
          {
            "name": "Phone",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Numéro de téléphone de l'utilisateur (optionnel si l'adresse email est fournie)."
          },
          {
            "name": "PhoneCountryCode",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Code pays du téléphone incluant le signe plus, par exemple, \"+33\" pour la France, \"+351\" pour le Portugal."
          },
          {
            "name": "Message",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Message personnalisé de l'utilisateur."
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LeadResponse"
                }
              }
            }
          }
        }
      }
    },
    "/mcp/companyinfo": {
      "get": {
        "summary": "Permet d’obtenir les coordonnées de l’entreprise, y compris le nom de l’agence, l’adresse, le téléphone et l’e-mail. Idéal pour afficher des informations institutionnelles ou permettre à l’utilisateur de contacter l’agence.",
        "description": "Permet d’obtenir les coordonnées de l’entreprise, y compris le nom de l’agence, l’adresse, le téléphone et l’e-mail. Idéal pour afficher des informations institutionnelles ou permettre à l’utilisateur de contacter l’agence.",
        "operationId": "mcpCompanyInfo",
        "parameters": [
          {
            "name": "CompanyId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "description": "Identifiant de l’entreprise/agence à consulter (optionnel, utilise celui de l’entreprise par défaut)."
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CompanyInfoWithAgenciesResponse"
                }
              }
            }
          }
        }
      }
    },
    "/mcp/rasorinfo": {
      "get": {
        "summary": "Permet d’obtenir les coordonnées du conseiller immobilier, y compris le nom, le téléphone, l’e-mail et l’adresse. Idéal pour afficher les informations de contact du conseiller ou permettre à l’utilisateur de le contacter.",
        "description": "Permet d’obtenir les coordonnées du conseiller immobilier, y compris le nom, le téléphone, l’e-mail et l’adresse. Idéal pour afficher les informations de contact du conseiller ou permettre à l’utilisateur de le contacter.",
        "operationId": "mcpRasorInfo",
        "parameters": [
          {
            "name": "RasorName",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Nom du conseiller immobilier pour lequel des informations détaillées sont demandées."
          },
          {
            "name": "StateName",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Permet de rechercher des conseillers par district."
          },
          {
            "name": "TownName",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Permet de rechercher des conseillers par commune."
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RasorInfoResponse"
                }
              }
            }
          }
        }
      }
    },
    "/mcp/imicalculator": {
      "get": {
        "summary": "Permet de déterminer la valeur de la taxe municipale sur les biens immobiliers (IMI) en fonction des données fournies par l'utilisateur. Ce service valide la commune indiquée, identifie le coefficient applicable, traite la Valeur Patrimoniale Imposable (VPT), le nombre de personnes à charge et la nature du bien (urbain ou rural), et renvoie le montant final de l'IMI à payer conformément aux règles fiscales en vigueur au Portugal.",
        "description": "Permet de déterminer la valeur de la taxe municipale sur les biens immobiliers (IMI) en fonction des données fournies par l'utilisateur. Ce service valide la commune indiquée, identifie le coefficient applicable, traite la Valeur Patrimoniale Imposable (VPT), le nombre de personnes à charge et la nature du bien (urbain ou rural), et renvoie le montant final de l'IMI à payer conformément aux règles fiscales en vigueur au Portugal.",
        "operationId": "mcpImiCalculator",
        "parameters": [
          {
            "name": "TownName",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Nom de la commune où se trouve le bien. Ce champ est obligatoire pour l'identification géographique et la détermination du taux d'IMI. Exemple : \"Lisbonne\", \"Porto\", \"Sintra\", \"Albufeira\"."
          },
          {
            "name": "TaxableValue",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number",
              "format": "decimal"
            },
            "description": "Valeur patrimoniale imposable du bien (VPT), telle qu’enregistrée auprès de l’Autorité Fiscale portugaise. Il s’agit de la valeur fiscale officielle servant de base au calcul de l’IMI. Elle doit être un nombre décimal positif exprimé en euros. Exemple : \"185000.00\"."
          },
          {
            "name": "DependentsNumber",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "description": "Nombre de personnes à charge dans le foyer fiscal du contribuable pour l’année de référence. Cela inclut les enfants, les parents âgés ou d’autres personnes légalement reconnues pouvant donner droit à une réduction ou exonération de l’IMI. Valeurs valides : entier ≥ 0. Exemple : \"2\"."
          },
          {
            "name": "IsUrban",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Indique si le bien est classé comme urbain ou rural. Les biens urbains sont soumis à l’IMI, tandis que les biens ruraux peuvent être soumis à des règles fiscales différentes. Exemple : true/false."
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IMIResponse"
                }
              }
            }
          }
        }
      }
    },
    "/mcp/servicesinfo": {
      "get": {
        "summary": "Description de l’endpoint fournissant des informations complètes sur les services disponibles pour un profil client.",
        "description": "Description de l’endpoint fournissant des informations complètes sur les services disponibles pour un profil client.",
        "operationId": "mcpServicesInfo",
        "parameters": [
          {
            "name": "CompanyId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "description": "Identifiant de l’entreprise/agence à consulter (optionnel, utilise celui de l’entreprise par défaut)."
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServicesInfoResponse"
                }
              }
            }
          }
        }
      }
    }
  }
}