{
  "openapi": "3.0.1",
  "info": {
    "title": "Real Estate MCP API - MVP - Most Valued Property",
    "version": "1.1",
    "description": "Contesto MCP Immobiliare per la ricerca di immobili e l'invio di richieste di contatto. - MVP - Most Valued Property",
    "termsOfService": "https://www.mvp.pt/termos-e-condicoes",
    "contact": {
      "name": "MVP - Most Valued Property",
      "url": "https://www.mvp.pt/",
      "email": "semagmvp@gmail.com"
    },
    "x-company-info": {
      "name": "MVP - Most Valued Property",
      "ami": "6489",
      "address": "Av. da República, 202 A, 8700-310 Olhão"
    }
  },
  "servers": [
    {
      "url": "https://www.mvp.pt/",
      "description": "Identificatore del server MCP"
    }
  ],
  "components": {
    "schemas": {
      "searchToMatchRequest": {
        "type": "object",
        "properties": {
          "businessType": {
            "type": "string",
            "description": "Definisce o restituisce l'identificatore del tipo di attività dell'immobile"
          },
          "countryName": {
            "type": "string",
            "description": "Nome del paese utilizzato come criterio di filtraggio. Questo campo deve rimanere vuoto quando il paese non è identificato."
          },
          "stateName": {
            "type": "string",
            "description": "Nome della regione (distretto) per la proprietà (obbligatorio nella ricerca se non è specificato il comune)."
          },
          "townName": {
            "type": "string",
            "description": "Nome del comune per la proprietà (obbligatorio nella ricerca se non è specificato il distretto)."
          },
          "neighborhoodName": {
            "type": "string",
            "description": "Nome o ID del quartiere o parrocchia in cui si trova la proprietà."
          },
          "zoneName": {
            "type": "string",
            "description": "Identificatore della zona geografica utilizzato per filtrare le ricerche."
          },
          "masterCategoryIds": {
            "type": "array",
            "description": "Identificatori (ID) di uno o più gruppi principali di categorie di proprietà (ad es.: appartamenti, case, magazzini, terreni, hotel). Almeno uno è obbligatorio se non è specificato un tipo di immobile specifico."
          },
          "categoryIds": {
            "type": "array",
            "description": "ID di una o più categorie specifiche di proprietà (ad es.: appartamento, casa, magazzino, terreno, hotel)."
          },
          "condition": {
            "type": "string",
            "description": "Stato di conservazione."
          },
          "minPrice": {
            "type": "integer",
            "description": "Prezzo minimo in euro. Compilare quando l’utente indica un budget minimo o un limite inferiore di prezzo.",
            "format": "int32"
          },
          "maxPrice": {
            "type": "integer",
            "description": "Prezzo massimo in euro. Compilare quando l’utente indica un budget massimo o un limite superiore di prezzo.",
            "format": "int32"
          },
          "minBedrooms": {
            "type": "integer",
            "description": "Numero minimo di camere da letto per filtrare",
            "format": "int32"
          },
          "maxBedrooms": {
            "type": "integer",
            "description": "Numero massimo di camere da letto per filtrare",
            "format": "int32"
          },
          "bathrooms": {
            "type": "integer",
            "description": "Numero minimo di bagni.",
            "format": "int32"
          },
          "listingReference": {
            "type": "string",
            "description": "Riferimento interno della proprietà utilizzato per l'identificazione."
          },
          "developmentName": {
            "type": "string",
            "description": "Nome del progetto."
          },
          "developmentFractions": {
            "type": "boolean",
            "description": "Indica se la ricerca deve considerare le unità di un progetto immobiliare (ad es. appartamenti o negozi) invece del progetto nel suo complesso. Quando attivo, i risultati includono solo le unità associate a un progetto."
          },
          "developmentTags": {
            "type": "array",
            "description": "Tag dei progetti immobiliari usati per filtrare la ricerca."
          },
          "withVideos": {
            "type": "boolean",
            "description": "Cerca solo proprietà con video disponibili. Applicare quando l’utente menziona espressioni come 'con video', 'con video disponibili', 'ha video', 'ha dei video', 'vedere il video della proprietà', 'vedere video online', ecc."
          },
          "withBluePrints": {
            "type": "boolean",
            "description": "Cerca solo proprietà con planimetrie (blueprints) disponibili. Applicare quando l'utente menziona 'con pianta', 'ha pianta', 'planimetrie della casa', 'mappa della proprietà', 'pianta piano terra', 'vedere la pianta', ecc."
          },
          "withVirtualVisits": {
            "type": "boolean",
            "description": "Cerca solo immobili con visite virtuali disponibili. Applicare quando l'utente menziona 'visita virtuale', 'tour virtuale', 'tour 3D', 'visita 3D', 'tour interattivo', 'percorso virtuale', 'esperienza virtuale', 'visualizzazione virtuale', 'vedere visita virtuale online'."
          },
          "with360Photos": {
            "type": "boolean",
            "description": "Cerca solo proprietà con foto 360º disponibili. Applicare quando l'utente menziona 'con foto 360º', 'ha foto 360º', 'con foto panoramiche', 'ha foto panoramiche', 'vedere foto 360º online', ecc."
          },
          "featuresNames": {
            "type": "array",
            "description": "Caratteristiche della proprietà, comprese le comodità, i servizi e i luoghi di interesse nelle vicinanze, nonché i tipi di viste per fornire una descrizione completa dell’immobile"
          },
          "page": {
            "type": "integer",
            "description": "Numero di pagina da restituire nei risultati di ricerca.",
            "format": "int32"
          }
        },
        "description": "Schema che descrive i parametri di input per la ricerca immobiliare."
      },
      "searchResponse": {
        "type": "object",
        "properties": {
          "results": {
            "type": "array",
            "description": "Elenco dei risultati della pagina corrente, in base al numero di record per pagina.",
            "items": {
              "$ref": "#/components/schemas/DetailResponse"
            }
          },
          "count": {
            "type": "integer",
            "description": "Numero totale di risultati che corrispondono ai criteri di ricerca.",
            "format": "int32"
          },
          "page": {
            "type": "integer",
            "description": "Numero della pagina corrente in base ai criteri di ricerca.",
            "format": "int32"
          },
          "totalpages": {
            "type": "integer",
            "description": "Numero totale di pagine corrispondenti ai criteri di ricerca.",
            "format": "int32"
          },
          "statetownnameequals": {
            "type": "boolean",
            "description": "Indica se il nome del distretto è uguale al nome del comune."
          },
          "developmentname": {
            "type": "string",
            "description": "Nome del progetto; questo campo viene compilato solo se i risultati sono associati a uno specifico progetto con questo nome."
          }
        },
        "description": "Schema che descrive i parametri di output della ricerca immobiliare."
      },
      "detailRequest": {
        "type": "object",
        "properties": {
          "listingId": {
            "type": "integer",
            "description": "ID della proprietà per contatto.",
            "format": "int32"
          },
          "listingReference": {
            "type": "string",
            "description": "Riferimento interno della proprietà utilizzato per l'identificazione."
          },
          "developmentFractions": {
            "type": "boolean",
            "description": "Indica se la ricerca deve considerare le unità di un progetto immobiliare (ad es. appartamenti o negozi) invece del progetto nel suo complesso. Quando attivo, i risultati includono solo le unità associate a un progetto."
          }
        },
        "description": "Schema che descrive i parametri di input per il dettaglio dell’immobile."
      },
      "detailResponse": {
        "type": "object",
        "properties": {
          "listingId": {
            "type": "integer",
            "description": "ID univoco dell'annuncio immobiliare.",
            "format": "int32"
          },
          "propertyType": {
            "type": "string",
            "description": "Tipo di proprietà."
          },
          "condition": {
            "type": "string",
            "description": "Stato di conservazione della proprietà."
          },
          "listingReference": {
            "type": "string",
            "description": "Riferimento della proprietà mostrato nei risultati di ricerca."
          },
          "firstPhoto": {
            "type": "string",
            "description": "URL della miniatura della prima foto della proprietà."
          },
          "description": {
            "type": "string",
            "description": "Descrizione dettagliata della proprietà."
          },
          "title": {
            "type": "string",
            "description": "Titolo dell'annuncio."
          },
          "price": {
            "type": "string",
            "description": "Prezzo in euro."
          },
          "imiValue": {
            "type": "string",
            "description": "Importo dell'IMI da pagare per l'immobile, calcolato in base al VPT e alle norme fiscali applicabili."
          },
          "business": {
            "type": "string",
            "description": "Tipo di attività immobiliare."
          },
          "location": {
            "type": "string",
            "description": "Nome della località."
          },
          "bedrooms": {
            "type": "integer",
            "description": "Numero di camere da letto della proprietà.",
            "format": "int32"
          },
          "bathrooms": {
            "type": "integer",
            "description": "Numero di bagni della proprietà.",
            "format": "int32"
          },
          "url": {
            "type": "string",
            "description": "URL pubblica dell'annuncio."
          },
          "hasVideos": {
            "type": "boolean",
            "description": "Indica se l'immobile dispone di video disponibili."
          },
          "hasBluePrints": {
            "type": "boolean",
            "description": "Indica se l'immobile dispone di planimetrie o blueprints disponibili."
          },
          "has360Photos": {
            "type": "boolean",
            "description": "Indica se la proprietà ha foto a 360° disponibili."
          },
          "hasVirtualVisits": {
            "type": "boolean",
            "description": "Indica se la proprietà ha visite virtuali o tour virtuali disponibili."
          },
          "features": {
            "description": "Queste chiavi rappresentano la descrizione delle caratteristiche specifiche di una proprietà, inclusi attributi fisici e localizzazioni rilevanti come piscina, vista mare, vicinanza a ospedali, scuole e altre strutture importanti. Queste informazioni aiutano a dettagliare e qualificare la proprietà per migliorare la ricerca e la presentazione dei risultati secondo le preferenze dell'utente.",
            "$ref": "#/components/schemas/Dictionary`2"
          }
        },
        "description": "Schema che descrive i parametri di output del dettaglio dell’immobile."
      },
      "leadRequest": {
        "type": "object",
        "properties": {
          "listingId": {
            "type": "integer",
            "description": "ID della proprietà per contatto.",
            "format": "int32"
          },
          "listingReference": {
            "type": "string",
            "description": "Riferimento interno della proprietà utilizzato per l'identificazione."
          },
          "name": {
            "type": "string",
            "description": "Nome dell'utente."
          },
          "email": {
            "type": "string",
            "description": "Indirizzo email dell'utente (obbligatorio se non viene fornito un numero di telefono)."
          },
          "phone": {
            "type": "string",
            "description": "Numero di telefono dell'utente (facoltativo se viene fornito l'indirizzo email)."
          },
          "phoneCountryCode": {
            "type": "string",
            "description": "Prefisso internazionale del telefono incluso il segno più, ad es. \"+39\" per Italia, \"+351\" per Portogallo."
          },
          "message": {
            "type": "string",
            "description": "Messaggio personalizzato dall'utente."
          }
        },
        "description": "Schema che descrive i parametri di input per l’invio di lead immobiliari."
      },
      "leadResponse": {
        "type": "object",
        "properties": {
          "status": {
            "type": "string",
            "description": "Stato dell'invio del modulo di contatto (es.: successo, errore)."
          },
          "message": {
            "type": "string",
            "description": "Messaggio che descrive il risultato dell'invio del modulo di contatto."
          },
          "confirmedLead": {
            "type": "boolean",
            "description": ""
          }
        },
        "description": "Schema che descrive i parametri di output dell’invio di lead immobiliari."
      },
      "companyInfoRequest": {
        "type": "object",
        "properties": {
          "companyId": {
            "type": "integer",
            "description": "Identificatore della società/agenzia da interrogare (facoltativo, predefinito quello interno dell’azienda).",
            "format": "int32"
          }
        },
        "description": "Schema di input per richiesta informazioni aziendali"
      },
      "companyInfoWithAgenciesResponse": {
        "type": "object",
        "properties": {
          "headquarters": {
            "description": "Informazioni sui dati di contatto dell’azienda relativi alla sede.",
            "$ref": "#/components/schemas/CompanyInfoResponse"
          },
          "agencies": {
            "type": "array",
            "description": "Informazioni sui dati di contatto delle agenzie dell’azienda.",
            "items": {
              "$ref": "#/components/schemas/CompanyInfoResponse"
            }
          }
        },
        "description": "Schema di output con i dati delle informazioni aziendali"
      },
      "companyInfoResponse": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Nome dell'azienda"
          },
          "phone": {
            "type": "string",
            "description": "Numero di telefono aziendale"
          },
          "mobile": {
            "type": "string",
            "description": "Numero di cellulare aziendale"
          },
          "email": {
            "type": "string",
            "description": "Indirizzo email di contatto dell'azienda"
          },
          "address": {
            "type": "string",
            "description": "Indirizzo dell'azienda (senza CAP)"
          },
          "district": {
            "type": "string",
            "description": "Distretto in cui si trova l'azienda"
          },
          "municipality": {
            "type": "string",
            "description": "Municipalità in cui si trova l'azienda"
          },
          "parish": {
            "type": "string",
            "description": "Freguesia in cui si trova l'azienda"
          },
          "zipCode": {
            "type": "string",
            "description": "CAP dell'indirizzo dell'azienda"
          },
          "businessHours": {
            "type": "string",
            "description": "Orari di apertura dell'azienda"
          },
          "googleMapsUrl": {
            "type": "string",
            "description": "Link diretto a Google Maps per la posizione dell'azienda"
          }
        },
        "description": "Schema di output con i dati delle informazioni aziendali"
      },
      "rasorInfoRequest": {
        "type": "object",
        "properties": {
          "rasorName": {
            "type": "string",
            "description": "Nome del consulente immobiliare per il quale si desiderano ottenere informazioni dettagliate."
          },
          "stateName": {
            "type": "string",
            "description": "Consente di cercare consulenti per distretto."
          },
          "townName": {
            "type": "string",
            "description": "Consente di cercare consulenti per comune."
          }
        },
        "description": "Schema di input per richiedere informazioni dettagliate sul consulente immobiliare"
      },
      "rasorInfoResponse": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Nome completo del consulente immobiliare."
          },
          "phone": {
            "type": "string",
            "description": "Numero di telefono fisso del consulente immobiliare."
          },
          "mobile": {
            "type": "string",
            "description": "Numero di cellulare del consulente immobiliare."
          },
          "observations": {
            "type": "string",
            "description": "Osservazioni aggiuntive relative al consulente immobiliare."
          },
          "email": {
            "type": "string",
            "description": "Indirizzo email del consulente immobiliare."
          },
          "address": {
            "type": "string",
            "description": "Indirizzo completo del consulente immobiliare o ufficio."
          },
          "city": {
            "type": "string",
            "description": "Comune in cui il consulente opera."
          },
          "parish": {
            "type": "string",
            "description": "Parrocchia in cui il consulente opera."
          },
          "spokenLanguages": {
            "type": "array",
            "description": "Elenco delle lingue parlate dal consulente."
          },
          "socialProfiles": {
            "type": "array",
            "description": "Elenco dei link ai profili o pagine social del consulente.",
            "items": {
              "$ref": "#/components/schemas/SocialProfile"
            }
          },
          "avatar": {
            "type": "string",
            "description": "Immagine dell'avatar associato al consulente."
          },
          "listingUrl": {
            "type": "string",
            "description": "URL della pagina che mostra tutte le proprietà assegnate o correlate al consulente, consentendo l'accesso diretto all'elenco completo delle rispettive proprietà."
          },
          "detailUrl": {
            "type": "string",
            "description": "Pagina che mostra tutte le informazioni dell’agente, inclusi i dati di contatto, il profilo professionale e gli immobili associati."
          }
        },
        "description": "Schema di output con informazioni dettagliate sul consulente immobiliare"
      },
      "imiRequest": {
        "type": "object",
        "properties": {
          "townName": {
            "type": "string",
            "description": "Nome del comune in cui si trova l'immobile. Questo campo è obbligatorio per l'identificazione geografica e la determinazione dell'aliquota IMI. Esempio: \"Lisbona\", \"Porto\", \"Sintra\", \"Albufeira\"."
          },
          "taxableValue": {
            "type": "number",
            "description": "Valore patrimoniale imponibile dell’immobile (VPT), come registrato presso l’Autorità Fiscale Portoghese. È il valore fiscale ufficiale utilizzato come base per il calcolo dell’IMI. Deve essere un valore decimale positivo espresso in euro. Esempio: \"185000.00\".",
            "format": "decimal"
          },
          "dependentsNumber": {
            "type": "integer",
            "description": "Numero di persone a carico nel nucleo familiare del contribuente per l’anno fiscale di riferimento. Includere figli, genitori anziani o altri soggetti legalmente riconosciuti che possono beneficiare di riduzioni o esenzioni IMI. Valori validi: intero ≥ 0. Esempio: \"2\".",
            "format": "int32"
          },
          "isUrban": {
            "type": "boolean",
            "description": "Indica se l’immobile è classificato come urbano o rurale. Gli immobili urbani sono soggetti all’IMI, mentre quelli rurali possono essere soggetti a regole fiscali differenti. Esempio: true/false."
          }
        },
        "description": "Schema di input utilizzato per richiedere il calcolo dell'IMI di un immobile."
      },
      "imiResponse": {
        "type": "object",
        "properties": {
          "townName": {
            "type": "string",
            "description": "Nome del comune considerato per il calcolo dell'IMI"
          },
          "taxableValue": {
            "type": "string",
            "description": "Valore Patrimoniale Imponibile (VPT) considerato per il calcolo dell'IMI, espresso in euro"
          },
          "dependentsNumber": {
            "type": "string",
            "description": "Numero di persone a carico considerate ai fini dei benefici applicati nel calcolo dell'IMI"
          },
          "isUrban": {
            "type": "string",
            "description": "Indicazione se l'immobile è urbano o rurale, considerato per il calcolo dell'IMI"
          },
          "imiValue": {
            "type": "string",
            "description": "Valore finale dell’IMI (Imposta Municipale sugli Immobili) calcolato in base ai dati forniti."
          },
          "imiTaxValue": {
            "type": "string",
            "description": "Aliquota utilizzata per il calcolo dell'IMI."
          },
          "dependentDiscount": {
            "type": "string",
            "description": "Valore dello sconto basato sul numero di persone a carico."
          },
          "dataYear": {
            "type": "integer",
            "description": "Anno di riferimento delle aliquote utilizzate per il calcolo dell'IMI.",
            "format": "int32"
          }
        },
        "description": "Schema di output che fornisce il risultato del calcolo dell'IMI, comprese informazioni dettagliate sull'importo da pagare."
      },
      "servicesInfoRequest": {
        "type": "object",
        "properties": {
          "companyId": {
            "type": "integer",
            "description": "Identificatore della società/agenzia da interrogare (facoltativo, predefinito quello interno dell’azienda).",
            "format": "int32"
          }
        },
        "description": "Riepilogo dei servizi disponibili, inclusi il loro scopo e applicazione per i clienti."
      },
      "servicesInfoResponse": {
        "type": "object",
        "properties": {
          "companyId": {
            "type": "integer",
            "description": "Identificativo univoco dell’azienda associata al catalogo dei servizi.",
            "format": "int32"
          },
          "companyName": {
            "type": "string",
            "description": "Nome dell’azienda che fornisce il catalogo dei servizi."
          },
          "categories": {
            "type": "array",
            "description": "Elenco delle categorie di servizi disponibili, organizzate per profilo cliente.",
            "items": {
              "$ref": "#/components/schemas/ServiceCategory"
            }
          }
        },
        "description": "Riepilogo dei servizi forniti al cliente, inclusi dettagli, ambito e applicazione."
      }
    }
  },
  "paths": {
    "/mcp/search": {
      "get": {
        "summary": "Cerca annunci immobiliari utilizzando filtri come posizione, prezzo, tipo e condizione.",
        "description": "Cerca annunci immobiliari utilizzando filtri come posizione, prezzo, tipo e condizione.",
        "operationId": "mcpSearch",
        "parameters": [
          {
            "name": "BusinessType",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Definisce o restituisce l'identificatore del tipo di attività dell'immobile (Cessione attività, In affitto, In vendita). Se non specificato nella ricerca, verrà utilizzata la Vendita per default"
          },
          {
            "name": "CountryName",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Nome del paese utilizzato come criterio di filtraggio. Questo campo deve rimanere vuoto quando il paese non è identificato., (is required)"
          },
          {
            "name": "StateName",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Nome della regione (distretto) per la proprietà (obbligatorio nella ricerca se non è specificato il comune)., (is required)"
          },
          {
            "name": "TownName",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Nome del comune per la proprietà (obbligatorio nella ricerca se non è specificato il distretto)."
          },
          {
            "name": "NeighborhoodName",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Nome o ID del quartiere o parrocchia in cui si trova la proprietà."
          },
          {
            "name": "ZoneName",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Identificatore della zona geografica utilizzato per filtrare le ricerche."
          },
          {
            "name": "MasterCategoryIds",
            "in": "query",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "description": "Identificatori (ID) di uno o più gruppi principali di categorie di proprietà (ad es.: appartamenti, case, magazzini, terreni, hotel). Almeno uno è obbligatorio se non è specificato un tipo di immobile specifico."
          },
          {
            "name": "CategoryIds",
            "in": "query",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "description": "ID di una o più categorie specifiche di proprietà (ad es.: appartamento, casa, magazzino, terreno, hotel)."
          },
          {
            "name": "Condition",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Stato di conservazione. (Con incentivi per la ristrutturazione, Da demolire o ricostruire, Da ristrutturare, In buon stato, In costruzione, In progetto, In vendita, Non applicabile, Nuovo, Riservato, Ristrutturato)"
          },
          {
            "name": "MinPrice",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "description": "Prezzo minimo in euro. Compilare quando l’utente indica un budget minimo o un limite inferiore di prezzo."
          },
          {
            "name": "MaxPrice",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "description": "Prezzo massimo in euro. Compilare quando l’utente indica un budget massimo o un limite superiore di prezzo."
          },
          {
            "name": "MinBedrooms",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "description": "Numero minimo di camere da letto per filtrare"
          },
          {
            "name": "MaxBedrooms",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "description": "Numero massimo di camere da letto per filtrare"
          },
          {
            "name": "Bathrooms",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "description": "Numero minimo di bagni."
          },
          {
            "name": "ListingReference",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Riferimento interno della proprietà utilizzato per l'identificazione."
          },
          {
            "name": "DevelopmentName",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Nome del progetto."
          },
          {
            "name": "DevelopmentFractions",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Indica se la ricerca deve considerare le unità di un progetto immobiliare (ad es. appartamenti o negozi) invece del progetto nel suo complesso. Quando attivo, i risultati includono solo le unità associate a un progetto."
          },
          {
            "name": "DevelopmentTags",
            "in": "query",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "description": "Tag dei progetti immobiliari usati per filtrare la ricerca. (comissão 4%, const Imomodelo, Google Maps, Montra Olhão, Nova construção)"
          },
          {
            "name": "WithVideos",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Cerca solo proprietà con video disponibili. Applicare quando l’utente menziona espressioni come 'con video', 'con video disponibili', 'ha video', 'ha dei video', 'vedere il video della proprietà', 'vedere video online', ecc."
          },
          {
            "name": "WithBluePrints",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Cerca solo proprietà con planimetrie (blueprints) disponibili. Applicare quando l'utente menziona 'con pianta', 'ha pianta', 'planimetrie della casa', 'mappa della proprietà', 'pianta piano terra', 'vedere la pianta', ecc."
          },
          {
            "name": "WithVirtualVisits",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Cerca solo immobili con visite virtuali disponibili. Applicare quando l'utente menziona 'visita virtuale', 'tour virtuale', 'tour 3D', 'visita 3D', 'tour interattivo', 'percorso virtuale', 'esperienza virtuale', 'visualizzazione virtuale', 'vedere visita virtuale online'."
          },
          {
            "name": "With360Photos",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Cerca solo proprietà con foto 360º disponibili. Applicare quando l'utente menziona 'con foto 360º', 'ha foto 360º', 'con foto panoramiche', 'ha foto panoramiche', 'vedere foto 360º online', ecc."
          },
          {
            "name": "FeaturesNames",
            "in": "query",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "description": "Caratteristiche della proprietà, comprese le comodità, i servizi e i luoghi di interesse nelle vicinanze, nonché i tipi di viste per fornire una descrizione completa dell’immobile (Accesso alla terra, Accesso eccellente, Acqua, Acqua calda elettrica, Acqua calda gas, Aeroporto, alberi da frutto, Allarme, Ambience music, Ammobiliato, Ampia gamma di servizi, Area commerciale, Aria Condizionata, Aria condizionata preinstallata, Armadio, Ascensore, Asciugatrice, Attico, Autostrada, Bagno in comune, Bagno privato, Banca, Barbecue, Camera di festa, Camino, Campagna, Campo da golf, Cancello elettrico, Cantina di vino, Cappa della cucina, CCTV, Centro città, Centro Commerciale, Città, Complesso sportivo, Connessione Wi-fi, Coppa, Cucina, Cucina attrezzata, Domotica, Doppi vetri, Edilizia, Elettricità, Farmacia, Forno, Frigorifero, Garage, Gas convogliato, Gas naturale, Giardino, Golf, Hob elettrico, Impianto di Aspirazione Centrale, Ingresso video, Internet, Ipermercato, Isolamento termico, Jacuzzi, La porta della lama, Lavanderia, Lavastoviglie, Lavatrice, L'orientamento solare, Luce naturale, Mare, Mercato, Mezzi di Trasporto Pubblico, Microonde, Montagna, Ospedale, Palestra, Pannelli solari, Parcheggio, Parco giochi, Parco giochi per bambini, Parete, Piano di induzione, Piscina, Piscina condivisa, Polizia, Porta ad alta sicurezza, Porta blindata, Portico, Pre-installazione di musica di sottofondo, Preinstallazione di pannelli solari, Preinstallazione di TV via cavo, Reception, Recinzione, Rilevatore di fumo, Ripostiglio, Riscaldamento Centralizzato, Rivelatore antincendio, Sala giochi, Sauna, Scuola, Seminterrato, Servizio bagno, Sewage pubblico, Soggiorno, Solarium, Sorveglianza video, Spazi verdi, Spazio aperto, Spiaggia, Stazione degli autobus, Stazione di fuoco, Stazione di rifornimento, Stoviglie, Suite, Taxi rango, Telefono, Tende elettriche, Terrazza, Tipo di terreno (pendenza), Ufficio, Unità di recupero di calore, Vasca idromassaggio, Vicino al mare, Zona storica)"
          },
          {
            "name": "Page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "description": "Numero di pagina da restituire nei risultati di ricerca."
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SearchResponse"
                }
              }
            }
          }
        }
      }
    },
    "/mcp/detail": {
      "get": {
        "summary": "Recupera informazioni dettagliate su una proprietà immobiliare.",
        "description": "Recupera informazioni dettagliate su una proprietà immobiliare.",
        "operationId": "mcpDetail",
        "parameters": [
          {
            "name": "ListingId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "description": "ID della proprietà per contatto."
          },
          {
            "name": "ListingReference",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Riferimento interno della proprietà utilizzato per l'identificazione."
          },
          {
            "name": "DevelopmentFractions",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Indica se la ricerca deve considerare le unità di un progetto immobiliare (ad es. appartamenti o negozi) invece del progetto nel suo complesso. Quando attivo, i risultati includono solo le unità associate a un progetto."
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DetailResponse"
                }
              }
            }
          }
        }
      }
    },
    "/mcp/lead": {
      "get": {
        "summary": "Invia un modulo di contatto per un annuncio specifico.",
        "description": "Invia un modulo di contatto per un annuncio specifico.",
        "operationId": "mcpLead",
        "parameters": [
          {
            "name": "ListingId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "description": "ID della proprietà per contatto."
          },
          {
            "name": "ListingReference",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Riferimento interno della proprietà utilizzato per l'identificazione."
          },
          {
            "name": "Name",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Nome dell'utente., (is required)"
          },
          {
            "name": "Email",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Indirizzo email dell'utente (obbligatorio se non viene fornito un numero di telefono)., (is required)"
          },
          {
            "name": "Phone",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Numero di telefono dell'utente (facoltativo se viene fornito l'indirizzo email)."
          },
          {
            "name": "PhoneCountryCode",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Prefisso internazionale del telefono incluso il segno più, ad es. \"+39\" per Italia, \"+351\" per Portogallo."
          },
          {
            "name": "Message",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Messaggio personalizzato dall'utente."
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LeadResponse"
                }
              }
            }
          }
        }
      }
    },
    "/mcp/companyinfo": {
      "get": {
        "summary": "Consente di ottenere i dettagli di contatto dell'azienda, incluso il nome dell'agenzia, l'indirizzo, il numero di telefono e l'e-mail. Ideale per mostrare informazioni istituzionali o consentire all'utente di contattare l'agenzia.",
        "description": "Consente di ottenere i dettagli di contatto dell'azienda, incluso il nome dell'agenzia, l'indirizzo, il numero di telefono e l'e-mail. Ideale per mostrare informazioni istituzionali o consentire all'utente di contattare l'agenzia.",
        "operationId": "mcpCompanyInfo",
        "parameters": [
          {
            "name": "CompanyId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "description": "Identificatore della società/agenzia da interrogare (facoltativo, predefinito quello interno dell’azienda)."
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CompanyInfoWithAgenciesResponse"
                }
              }
            }
          }
        }
      }
    },
    "/mcp/rasorinfo": {
      "get": {
        "summary": "Consente di ottenere i dettagli di contatto del consulente immobiliare, incluso nome, telefono, e-mail e indirizzo. Ideale per mostrare le informazioni di contatto del consulente o consentire all’utente di contattarlo.",
        "description": "Consente di ottenere i dettagli di contatto del consulente immobiliare, incluso nome, telefono, e-mail e indirizzo. Ideale per mostrare le informazioni di contatto del consulente o consentire all’utente di contattarlo.",
        "operationId": "mcpRasorInfo",
        "parameters": [
          {
            "name": "RasorName",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Nome del consulente immobiliare per il quale si desiderano ottenere informazioni dettagliate."
          },
          {
            "name": "StateName",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Consente di cercare consulenti per distretto."
          },
          {
            "name": "TownName",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Consente di cercare consulenti per comune."
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RasorInfoResponse"
                }
              }
            }
          }
        }
      }
    },
    "/mcp/imicalculator": {
      "get": {
        "summary": "Permette di determinare il valore dell'Imposta Municipale sugli Immobili (IMI) in base ai dati forniti dall'utente. Questo servizio convalida il comune indicato, individua il coefficiente applicabile, elabora il Valore Patrimoniale Imponibile (VPT), il numero di dipendenti e la natura dell'immobile (urbano o rurale), restituendo l'importo finale dell'IMI da pagare secondo le norme fiscali vigenti in Portogallo.",
        "description": "Permette di determinare il valore dell'Imposta Municipale sugli Immobili (IMI) in base ai dati forniti dall'utente. Questo servizio convalida il comune indicato, individua il coefficiente applicabile, elabora il Valore Patrimoniale Imponibile (VPT), il numero di dipendenti e la natura dell'immobile (urbano o rurale), restituendo l'importo finale dell'IMI da pagare secondo le norme fiscali vigenti in Portogallo.",
        "operationId": "mcpImiCalculator",
        "parameters": [
          {
            "name": "TownName",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Nome del comune in cui si trova l'immobile. Questo campo è obbligatorio per l'identificazione geografica e la determinazione dell'aliquota IMI. Esempio: \"Lisbona\", \"Porto\", \"Sintra\", \"Albufeira\"."
          },
          {
            "name": "TaxableValue",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number",
              "format": "decimal"
            },
            "description": "Valore patrimoniale imponibile dell’immobile (VPT), come registrato presso l’Autorità Fiscale Portoghese. È il valore fiscale ufficiale utilizzato come base per il calcolo dell’IMI. Deve essere un valore decimale positivo espresso in euro. Esempio: \"185000.00\"."
          },
          {
            "name": "DependentsNumber",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "description": "Numero di persone a carico nel nucleo familiare del contribuente per l’anno fiscale di riferimento. Includere figli, genitori anziani o altri soggetti legalmente riconosciuti che possono beneficiare di riduzioni o esenzioni IMI. Valori validi: intero ≥ 0. Esempio: \"2\"."
          },
          {
            "name": "IsUrban",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Indica se l’immobile è classificato come urbano o rurale. Gli immobili urbani sono soggetti all’IMI, mentre quelli rurali possono essere soggetti a regole fiscali differenti. Esempio: true/false."
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IMIResponse"
                }
              }
            }
          }
        }
      }
    },
    "/mcp/servicesinfo": {
      "get": {
        "summary": "Descrizione dell’endpoint che fornisce informazioni complete sui servizi disponibili per un profilo cliente.",
        "description": "Descrizione dell’endpoint che fornisce informazioni complete sui servizi disponibili per un profilo cliente.",
        "operationId": "mcpServicesInfo",
        "parameters": [
          {
            "name": "CompanyId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "description": "Identificatore della società/agenzia da interrogare (facoltativo, predefinito quello interno dell’azienda)."
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServicesInfoResponse"
                }
              }
            }
          }
        }
      }
    }
  }
}