{
  "openapi": "3.0.1",
  "info": {
    "title": "Real Estate MCP API - Dils Portugal",
    "version": "1.1",
    "description": "MCP Real Estate context for searching properties and submitting contact requests. - Dils Portugal",
    "termsOfService": "/en-gb/terms-and-conditions",
    "contact": {
      "name": "Dils Portugal",
      "url": "https://dils.pt/",
      "email": "info.portugal@dils.com"
    },
    "x-company-info": {
      "name": "Dils Portugal",
      "ami": "3497",
      "address": "Avenida da República, 5 – 2º Piso, 1050-185 Lisboa"
    }
  },
  "servers": [
    {
      "url": "https://dils.pt/",
      "description": "MCP server identifier"
    }
  ],
  "components": {
    "schemas": {
      "searchToMatchRequest": {
        "type": "object",
        "properties": {
          "businessType": {
            "type": "string",
            "description": "Defines or returns the identifier of the property's business type"
          },
          "countryName": {
            "type": "string",
            "description": "Name of the country used as a filtering criteria. This field must remain empty when the country is not identified."
          },
          "stateName": {
            "type": "string",
            "description": "Name of the region (district) for the property (required in search if municipality is not specified)."
          },
          "townName": {
            "type": "string",
            "description": "Name of the municipality for the property (required in search if district is not specified)."
          },
          "neighborhoodName": {
            "type": "string",
            "description": "Name or ID of the parish (neighborhood) where the property is located."
          },
          "zoneName": {
            "type": "string",
            "description": "Geographic zone identifier used for filtering in searches."
          },
          "masterCategoryIds": {
            "type": "array",
            "description": "IDs of one or more main property category groups (e.g., apartments, houses, warehouses, land, hotels). At least one is required if a specific property type is not specified."
          },
          "categoryIds": {
            "type": "array",
            "description": "IDs of one or more specific property categories (e.g., apartment, house, warehouse, land, hotel)."
          },
          "condition": {
            "type": "string",
            "description": "Condition status."
          },
          "minPrice": {
            "type": "integer",
            "description": "Minimum price in euros. Fill in when the user specifies a minimum budget or lower price limit.",
            "format": "int32"
          },
          "maxPrice": {
            "type": "integer",
            "description": "Maximum price in euros. Fill in when the user specifies a maximum budget or upper price limit.",
            "format": "int32"
          },
          "minBedrooms": {
            "type": "integer",
            "description": "Minimum number of bedrooms to filter by",
            "format": "int32"
          },
          "maxBedrooms": {
            "type": "integer",
            "description": "Maximum number of bedrooms to filter by",
            "format": "int32"
          },
          "bathrooms": {
            "type": "integer",
            "description": "Minimum number of bathrooms.",
            "format": "int32"
          },
          "listingReference": {
            "type": "string",
            "description": "Internal reference of the property used for identification."
          },
          "developmentName": {
            "type": "string",
            "description": "Development name."
          },
          "developmentFractions": {
            "type": "boolean",
            "description": "Indicates whether the search should consider project units (e.g. apartments or retail units) instead of the project as a whole. When enabled, the results include only units associated with a project."
          },
          "developmentTags": {
            "type": "array",
            "description": "Development tags used to filter the search."
          },
          "withVideos": {
            "type": "boolean",
            "description": "Searches only for properties with available videos. Apply when the user mentions expressions such as 'with video', 'with videos', 'has video', 'has videos', 'view property video', 'watch video online', etc."
          },
          "withBluePrints": {
            "type": "boolean",
            "description": "Searches only for properties that have available floor plans (blueprints). Apply when the user mentions 'with floor plan', 'has plans', 'house plans', 'property map', 'floor layout', 'see plan', etc."
          },
          "withVirtualVisits": {
            "type": "boolean",
            "description": "Searches only for properties with virtual tours available. Apply when the user mentions 'with virtual visit', 'has virtual visit', 'virtual tour', '3D tour', 'interactive tour', 'virtual walkthrough', 'virtual viewing', 'virtual experience', 'view virtual tour online'."
          },
          "with360Photos": {
            "type": "boolean",
            "description": "Searches only for properties with available 360º photos. Apply when the user mentions 'with 360º photos', 'has 360º photos', 'with panoramic photos', 'has panoramic photos', 'view 360º photos online', etc."
          },
          "featuresNames": {
            "type": "array",
            "description": "Property features, including amenities, services, nearby points of interest, and types of views to provide a complete and detailed description of the property"
          },
          "page": {
            "type": "integer",
            "description": "Page number to return in the search results.",
            "format": "int32"
          }
        },
        "description": "Schema that describes the input parameters for the real estate search."
      },
      "searchResponse": {
        "type": "object",
        "properties": {
          "results": {
            "type": "array",
            "description": "List of results for the current page, based on the number of records per page.",
            "items": {
              "$ref": "#/components/schemas/DetailResponse"
            }
          },
          "count": {
            "type": "integer",
            "description": "Total number of results matching the search criteria.",
            "format": "int32"
          },
          "page": {
            "type": "integer",
            "description": "Current page number based on the search criteria.",
            "format": "int32"
          },
          "totalpages": {
            "type": "integer",
            "description": "Total number of pages matching the search criteria.",
            "format": "int32"
          },
          "statetownnameequals": {
            "type": "boolean",
            "description": "Indicates whether the district name is the same as the town name."
          },
          "developmentname": {
            "type": "string",
            "description": "Development name; this field is only populated if the results relate to a specific development with this name."
          }
        },
        "description": "Schema that describes the output parameters of the real estate search."
      },
      "detailRequest": {
        "type": "object",
        "properties": {
          "listingId": {
            "type": "integer",
            "description": "Property ID for contact.",
            "format": "int32"
          },
          "listingReference": {
            "type": "string",
            "description": "Internal reference of the property used for identification."
          },
          "developmentFractions": {
            "type": "boolean",
            "description": "Indicates whether the search should consider project units (e.g. apartments or retail units) instead of the project as a whole. When enabled, the results include only units associated with a project."
          }
        },
        "description": "Schema that describes the input parameters for the property detail."
      },
      "detailResponse": {
        "type": "object",
        "properties": {
          "listingId": {
            "type": "integer",
            "description": "Unique ID of the property listing.",
            "format": "int32"
          },
          "propertyType": {
            "type": "string",
            "description": "Type of property."
          },
          "condition": {
            "type": "string",
            "description": "Condition status of the property."
          },
          "listingReference": {
            "type": "string",
            "description": "Reference of the property shown in the search results."
          },
          "firstPhoto": {
            "type": "string",
            "description": "URL of the thumbnail of the property's first photo."
          },
          "description": {
            "type": "string",
            "description": "Detailed description of the property."
          },
          "title": {
            "type": "string",
            "description": "Title of the listing."
          },
          "price": {
            "type": "string",
            "description": "Price in euros."
          },
          "imiValue": {
            "type": "string",
            "description": "IMI amount to be paid for the property, calculated based on the VPT and applicable tax rules."
          },
          "business": {
            "type": "string",
            "description": "Type of property business."
          },
          "location": {
            "type": "string",
            "description": "Name of the location."
          },
          "bedrooms": {
            "type": "integer",
            "description": "Number of bedrooms in the property.",
            "format": "int32"
          },
          "bathrooms": {
            "type": "integer",
            "description": "Number of bathrooms in the property.",
            "format": "int32"
          },
          "url": {
            "type": "string",
            "description": "Public URL of the listing."
          },
          "hasVideos": {
            "type": "boolean",
            "description": "Indicates whether the property has available videos."
          },
          "hasBluePrints": {
            "type": "boolean",
            "description": "Indicates whether the property has available floor plans or blueprints."
          },
          "has360Photos": {
            "type": "boolean",
            "description": "Indicates whether the property has available 360° photos."
          },
          "hasVirtualVisits": {
            "type": "boolean",
            "description": "Indicates whether the property has available virtual visits or virtual tours."
          },
          "features": {
            "description": "These keys represent the description of specific property features, including physical attributes and relevant locations such as a pool, sea view, proximity to hospitals, schools, and other important facilities. This information helps detail and qualify the property to improve search filtering and results presentation according to user preferences.",
            "$ref": "#/components/schemas/Dictionary`2"
          }
        },
        "description": "Schema that describes the output parameters of the property detail."
      },
      "leadRequest": {
        "type": "object",
        "properties": {
          "listingId": {
            "type": "integer",
            "description": "Property ID for contact.",
            "format": "int32"
          },
          "listingReference": {
            "type": "string",
            "description": "Internal reference of the property used for identification."
          },
          "name": {
            "type": "string",
            "description": "User's name."
          },
          "email": {
            "type": "string",
            "description": "User's email address (required if no phone number is provided)."
          },
          "phone": {
            "type": "string",
            "description": "User's phone number (optional if email address is provided)."
          },
          "phoneCountryCode": {
            "type": "string",
            "description": "Phone country code including the plus sign, e.g., \"+44\" for United Kingdom, \"+33\" for France, \"+49\" for Germany."
          },
          "message": {
            "type": "string",
            "description": "Custom message from the user."
          }
        },
        "description": "Schema that describes the input parameters for sending real estate leads."
      },
      "leadResponse": {
        "type": "object",
        "properties": {
          "status": {
            "type": "string",
            "description": "Status of the contact form submission (e.g., success, error)."
          },
          "message": {
            "type": "string",
            "description": "Message describing the result of the contact form submission."
          },
          "confirmedLead": {
            "type": "boolean",
            "description": ""
          }
        },
        "description": "Schema that describes the output parameters of the real estate lead submission."
      },
      "companyInfoRequest": {
        "type": "object",
        "properties": {
          "companyId": {
            "type": "integer",
            "description": "Identifier of the company/agency to query (optional, defaults to the company’s internal one).",
            "format": "int32"
          }
        },
        "description": "Input schema for company information request"
      },
      "companyInfoWithAgenciesResponse": {
        "type": "object",
        "properties": {
          "headquarters": {
            "description": "Information about the company’s contact details related to the headquarters.",
            "$ref": "#/components/schemas/CompanyInfoResponse"
          },
          "agencies": {
            "type": "array",
            "description": "Information about the contact details of the company’s agencies.",
            "items": {
              "$ref": "#/components/schemas/CompanyInfoResponse"
            }
          }
        },
        "description": "Output schema with company information data"
      },
      "companyInfoResponse": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Name of the company"
          },
          "phone": {
            "type": "string",
            "description": "Company phone number"
          },
          "mobile": {
            "type": "string",
            "description": "Company mobile number"
          },
          "email": {
            "type": "string",
            "description": "Contact email address of the company"
          },
          "address": {
            "type": "string",
            "description": "Company address (without ZIP code)"
          },
          "district": {
            "type": "string",
            "description": "District where the company is located"
          },
          "municipality": {
            "type": "string",
            "description": "Municipality where the company is located"
          },
          "parish": {
            "type": "string",
            "description": "Parish where the company is located"
          },
          "zipCode": {
            "type": "string",
            "description": "ZIP code of the company address"
          },
          "businessHours": {
            "type": "string",
            "description": "Company business hours"
          },
          "googleMapsUrl": {
            "type": "string",
            "description": "Direct Google Maps link to the company's location"
          }
        },
        "description": "Output schema with company information data"
      },
      "rasorInfoRequest": {
        "type": "object",
        "properties": {
          "rasorName": {
            "type": "string",
            "description": "Name of the real estate consultant for whom detailed information is requested."
          },
          "stateName": {
            "type": "string",
            "description": "Allows searching for consultants by district."
          },
          "townName": {
            "type": "string",
            "description": "Allows searching for consultants by municipality."
          }
        },
        "description": "Input schema for requesting detailed information about the real estate consultant"
      },
      "rasorInfoResponse": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Full name of the real estate consultant."
          },
          "phone": {
            "type": "string",
            "description": "Landline number of the real estate consultant."
          },
          "mobile": {
            "type": "string",
            "description": "Mobile phone number of the real estate consultant."
          },
          "observations": {
            "type": "string",
            "description": "Additional observations related to the real estate consultant."
          },
          "email": {
            "type": "string",
            "description": "Email address of the real estate consultant."
          },
          "address": {
            "type": "string",
            "description": "Full address of the real estate consultant or office."
          },
          "city": {
            "type": "string",
            "description": "Municipality where the consultant operates."
          },
          "parish": {
            "type": "string",
            "description": "Parish where the consultant operates."
          },
          "spokenLanguages": {
            "type": "array",
            "description": "List of languages spoken by the consultant."
          },
          "socialProfiles": {
            "type": "array",
            "description": "List of links to the consultant’s social profiles or pages.",
            "items": {
              "$ref": "#/components/schemas/SocialProfile"
            }
          },
          "avatar": {
            "type": "string",
            "description": "Image of the avatar associated with the consultant."
          },
          "listingUrl": {
            "type": "string",
            "description": "URL of the page that displays all properties assigned or related to the consultant, providing direct access to the complete list of the respective properties."
          },
          "detailUrl": {
            "type": "string",
            "description": "Page displaying the agent’s full information, including contact details, professional profile and associated properties."
          }
        },
        "description": "Output schema with detailed information about the real estate consultant"
      },
      "imiRequest": {
        "type": "object",
        "properties": {
          "townName": {
            "type": "string",
            "description": "Name of the municipality where the property is located. This field is required for geographic identification and IMI rate determination. Example: \"Lisbon\", \"Porto\", \"Sintra\", \"Albufeira\"."
          },
          "taxableValue": {
            "type": "number",
            "description": "Taxable patrimonial value of the property (VPT), as registered with the Portuguese Tax Authority. This is the official fiscal value used as the basis for calculating IMI. Must be a positive decimal value expressed in euros. Example: \"185000.00\".",
            "format": "decimal"
          },
          "dependentsNumber": {
            "type": "integer",
            "description": "Number of dependants in the taxpayer’s household for the relevant tax year. This includes children, elderly parents or other legally recognised dependants that may qualify for IMI reductions or exemptions. Valid values: integer ≥ 0. Example: \"2\".",
            "format": "int32"
          },
          "isUrban": {
            "type": "boolean",
            "description": "Indicates whether the property is classified as urban or rural. Urban properties are subject to IMI, while rural properties may be subject to different taxation rules. Example: true/false."
          }
        },
        "description": "Input schema used to request the calculation of the Municipal Property Tax (IMI) for a property."
      },
      "imiResponse": {
        "type": "object",
        "properties": {
          "townName": {
            "type": "string",
            "description": "Name of the municipality considered for the IMI calculation"
          },
          "taxableValue": {
            "type": "string",
            "description": "Taxable Patrimonial Value (VPT) considered for the IMI calculation, expressed in euros"
          },
          "dependentsNumber": {
            "type": "string",
            "description": "Number of dependents considered for benefits applied in the IMI calculation"
          },
          "isUrban": {
            "type": "string",
            "description": "Indication whether the property is urban or rural, considered for the IMI calculation"
          },
          "imiValue": {
            "type": "string",
            "description": "Final IMI (Municipal Property Tax) value calculated based on the provided data."
          },
          "imiTaxValue": {
            "type": "string",
            "description": "Rate used for the calculation of the IMI value."
          },
          "dependentDiscount": {
            "type": "string",
            "description": "Discount value based on the number of dependents."
          },
          "dataYear": {
            "type": "integer",
            "description": "Reference year of the rates used for the IMI calculation.",
            "format": "int32"
          }
        },
        "description": "Output schema providing the result of the IMI calculation, including detailed information about the amount to be paid."
      },
      "servicesInfoRequest": {
        "type": "object",
        "properties": {
          "companyId": {
            "type": "integer",
            "description": "Identifier of the company/agency to query (optional, defaults to the company’s internal one).",
            "format": "int32"
          }
        },
        "description": "Summary of available services, including their purpose and application for customers."
      },
      "servicesInfoResponse": {
        "type": "object",
        "properties": {
          "companyId": {
            "type": "integer",
            "description": "Unique identifier of the company associated with the services catalogue.",
            "format": "int32"
          },
          "companyName": {
            "type": "string",
            "description": "Name of the company that provides the services catalogue."
          },
          "categories": {
            "type": "array",
            "description": "List of available service categories, organised by customer profile.",
            "items": {
              "$ref": "#/components/schemas/ServiceCategory"
            }
          }
        },
        "description": "Summary of the services provided to the customer, including details, scope, and application."
      }
    }
  },
  "paths": {
    "/mcp/search": {
      "get": {
        "summary": "Search real estate listings using filters such as location, price, type, and condition.",
        "description": "Search real estate listings using filters such as location, price, type, and condition.",
        "operationId": "mcpSearch",
        "parameters": [
          {
            "name": "BusinessType",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Defines or returns the identifier of the property's business type (Rent, Sale, Transfer Ownership). If not specified in the search, Sale will be used by default"
          },
          {
            "name": "CountryName",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Name of the country used as a filtering criteria. This field must remain empty when the country is not identified., (is required)"
          },
          {
            "name": "StateName",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Name of the region (district) for the property (required in search if municipality is not specified)., (is required)"
          },
          {
            "name": "TownName",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Name of the municipality for the property (required in search if district is not specified)."
          },
          {
            "name": "NeighborhoodName",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Name or ID of the parish (neighborhood) where the property is located."
          },
          {
            "name": "ZoneName",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Geographic zone identifier used for filtering in searches."
          },
          {
            "name": "MasterCategoryIds",
            "in": "query",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "description": "IDs of one or more main property category groups (e.g., apartments, houses, warehouses, land, hotels). At least one is required if a specific property type is not specified."
          },
          {
            "name": "CategoryIds",
            "in": "query",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "description": "IDs of one or more specific property categories (e.g., apartment, house, warehouse, land, hotel)."
          },
          {
            "name": "Condition",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Condition status. (For refurbishment, For sale, In project, New, Not Applicable, Refurbished, Remodelled, Reserved, To demolish or rebuild, Under construction, Used, With Incentive Program for Rehabilitation)"
          },
          {
            "name": "MinPrice",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "description": "Minimum price in euros. Fill in when the user specifies a minimum budget or lower price limit."
          },
          {
            "name": "MaxPrice",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "description": "Maximum price in euros. Fill in when the user specifies a maximum budget or upper price limit."
          },
          {
            "name": "MinBedrooms",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "description": "Minimum number of bedrooms to filter by"
          },
          {
            "name": "MaxBedrooms",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "description": "Maximum number of bedrooms to filter by"
          },
          {
            "name": "Bathrooms",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "description": "Minimum number of bathrooms."
          },
          {
            "name": "ListingReference",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Internal reference of the property used for identification."
          },
          {
            "name": "DevelopmentName",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Development name."
          },
          {
            "name": "DevelopmentFractions",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Indicates whether the search should consider project units (e.g. apartments or retail units) instead of the project as a whole. When enabled, the results include only units associated with a project."
          },
          {
            "name": "DevelopmentTags",
            "in": "query",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "description": "Development tags used to filter the search. (Algarve - Destaque Home Empreendimento, Alojamento local - licença, Atlantic Villas, Atualização_2, Casa Sapo Sim, Cascais - Destaque Home Empreendimento, CE (not), Co Exclusivo , Com notas, comissao 3%, comissão 4%, comissão 5%, comissão 6%, Comporta - Destaque Home Empreendimento, Concl 2019, Concl 2020, Concl 2021, Concl 2022, Concl 2023, Concl 2024, concl 2025, Concl 2026, Concl 2027, concl 2028, concl 2029, Concluido, Condomínio Fechado, Destaque-Carrossel, Dils Porto Foz, ego teste, Empreendimento Algarve, Empreendimento Cascais, Empreendimento Comporta, Empreendimento Lisboa, Empreendimento Porto, Empreendimento Setúbal, EQUIPA RETAIL DILS, Exclusivo, Exportar_Habiihub, Highlight, Idealista - Emp. Destacado, Idealista - Tarifa Plana, Idealista Sim, Imovirtual Sim, Isenção de IMT, Lisboa - Destaque Home Empreendimento, Lojas_Site, LU - já tem, Nâo Casa Sapo, Não Exportar, Não Idealista, Não Imovirtual, Não Olx, Não Portais Generalistas, Não Portais Internacionais, Não Portais Nacionais, Não Redes Sociais, não super casa, Oeiras - Destaque Home Empreendimento, PH ok, Placa Castelhana, Placa Dils, Porto - Destaque Home Empreendimento, Preço sob consulta, Properstar Sim, Rendimento Garantido, Site, Site - Empreend. Comercialização, Site - Empreend. Portfolio, Site Destaque-Luxo, Site Destaque-Rendimento, Site Destaque-Terraços e Jardins, Site Empreendimentos - Imóveis, Site HP - empreendimento grande, Site HP - Empreendimentos, Site HP - Top Choice, Site Pág. Empreend. Grande, Supercasa Emp. Destacado, Supercasa sim, Visita virtual, vista, vista cidade, vista mar, vista rio, x 1 de Maio, x 141 Gomes, x 1965 Cidade Jardim, x Afonso Cordeiro 85, x Aires Gouveia, x Ajuda Riverview, x Alagoa, x ALBA100, x Alcântara Gardens, x Alcântara Riverside, x Alea, x Alecrim 53, x Alegria 284, x Alfama 83, x Alfândega 80, x Alfarroba Condominium, x Aliados 9, x Alive Riverside, x Alma Gardens, x Alma Hills, x Alma Living, x Alma Luz, x Almada 109, x Almada 170, x Almar Bridge, x Almirante Reis 67A, x Althea, x Alto do Tejo, x Alure, x Alva, x Alvares Cabral 127, x Alvôr: The Breeze, x Amoreiras Villas, x AMR39, x Antas Atrium, x Antas Atrium II, x Antas Prime, x Antiga Fábrica do Prado, X Anza Boa Hora Living, x Arco d'Olide, x Areeiro Select, x Aroeira Collections: Apartamentos, x Aroeira Collections: Hotel, x Aroeira Collections: Moradias, x Aroeira Collections: Villas, x Arriaga 41, x Atelier, x Atlante, x Atlantic Villas, x Atrium - Faro, x Attico, X Aura, x Aurificia, x Aurios, x Avant Garden, x Avenidas Novas 15 (DS15), x Azo, x Azuaga 68, x AZUYA, x B779, x Bahuto, x Baía Residence, x Barroca 8, x Beach Walk Residences, x Beato Quarter, x Bloom Living, x Bloomia, x Blue House, x Boavista 255, x Boavista 5205, x Boavista 7, x Boavista Garden, x Boavista II, x Bom Jardim Complex, X Bom Sucesso, x Bonjardim, x Bonsant, x Bosk, x Boss Garden, x Botanica, x BOW, x Braancamp Downtown Apartments, x Brito Capelo 1023, x Brito Capelo e Roberto Ivens, x Cacilhas Bay, x Campo Alegre 1024, x Campo Grande 200, x Campo Grande 264, x Campo Novo, x Carmim Porto, x Carofini, x Casa da Música, x Casas de Sal, x Casas de Santo Amaro, x Casas do Mar, x Casas do Sol, x Casas do Troncal, x Casas Garcia de Orta, x Caulinos Residences, x Caxias Heights, x Cedofeita 289, x Cedofeita 497, x Colina do Outeiro, x Conde da Ribeira, x Conde Redondo Residences, x Copa Cool Living, x Coral, x Costa Cabral & Dr. António Coelho, x Costa Cabral 1014, x Costa Cabral Flats, x Covelo Park, x CR80, x Cuckoo's Villas, x Damasceno 85, x Del Mar Waterfront Living, x DISTRIKT, x Docks, x Domus, x Douradores 6 (SixGild), x Douro Atlântico, X Douro Atlântico II, x Douro Nobilis, x Duke Residences, x Duque D'Ávila 139, X DUUO, x DUUO Skyline Collection, x Edificio Alvares Cabral, x Edifício ASF, x Edifício Boavista, x Edifício Molhe da Montevideu, x Edifício Santiago, x Egas Moniz 209, x Eleven, x Eleven Gaia, x ÉLou, x Élou Jardins, x Ernesto 65, x Esperança 82, x Essence New Tradition, x Estória, x Estoril Prime, x Estoril Woods, x Fábrica 40, x Faria Guimarães 406, X Fernandes Thomaz 797, X Fernão Magalhães 127, x Ferreira de Castro Flats, X Fervença Palace, x Filipe Folque 43, x FiniSal, x Fiori Cascais, x Floratta Cascais, x Flower Tower Camelia, x Foco, x Foliage, x Fontinha Apartments, x Foz Elements, x Foz Nature, x Foz Villas, x Freedom, x Future Mirear, x Gaia Hills Ágora, x Gaia Hills Douro, x Gaia Hills Parque, X Garcia 38, x Garrett 53, x Glória, x Glória Studios, x Golden View Metropolitan, x Gondarém 691, x Grace 858, x Granja Living, x Green Avenue, x Green Plaza Carcavelos, x Greenstone, x Grid 2891, x Guimaflats Residence, x Herdade do meio, x Hilton Cascais, x House Factory, x Infante Residences, x Janelas Verdes, x Jardim da Glória, x Jardim de Matosinhos, x Jardim de Ourique, x Jardim Miraflores, x Jardins Efanor - Factory, x Jardins Efanor - Natura, x José Falcão 124, x Juso Prime, x Juzzo Apartments, x Juzzo Design Villas, x KORI, x Laguna Resort, x Lake, x Land Roots River Apartments, x Lapa 93, x Laranjeira Residence, x Legacy, x Legacy by the Sea, x Legacy Living, x Les Terrasses, x Light  Houses, x Lindo Vale, x Linea Residences, x Lisboa Garden, x Lisboa Residence (Hyatt), x Lisbon Heights, x LIV Matosinhos, x Living Sardoal, x Living Sea, x Lumare, x LUMINA, x L'Urbain, x Lurion Residences, x Lux Garden, x LX Living, x Madalena 88, x Marina Douro, x Marquesa Palace, x Mártires da Liberdade Porto, x Matsu, x Mauritânia II, x MIMA Living, X Miradouro 68, x MobNature, x Moinho de Vento Flats, x Monsanto Residences, x Monte Bello, x Monte Cativo, x Monte Da Virgem Flats, x Monte Rei Golf – Clubhouse Residences, x Monte Rei Golf – Linked Villas, x Montebelo, x Monview, x Monville, x Nama, x Nature Condo Villas, x Nau, x Nine One, x Nobel 41-85, x NoLiPa, x Nomad Bay, x Nomad Eden, x Noor, x Noor II, x Novel Park, x Nuance, x OAK, x OAK 35, x OCEAM, x Oceanic Reserve, x Odeon, x Oeiras Golf - Eagle 4, x Olive Green, x O'Living II, x Ombria Algarve, x ON.Living Boavista, x Oporto Luxury Residences, x Oporto Metropolitano, x Oporto Plaza, x Oriental Park, X Outubro 77, x Pac man, x Paço de Moreira, x Padre António Vieira 155, x Padre Cruz 64, x Palacete Douro, x Palácio BR Avenida, x Palácio do Infantado, x Palácio Santa Clara, x Palazzo, x Palm Residence, x Palmares Signature II, x Parque das Nações Residences (Martinhal), x Passadiço, X Passos Manuel 182, x Pátios do Monte, x Paulo Dias Novais 45, x Pearls Vilamoura, x Penha Longa Edition, x Pescaria, x Pestana Porto Covo Beach Residences, x Pharma Village, x Pilar, x Plaza View, x Portas do Sol - Lote 8, x Post Scriptum 70, x Pousio, X Praça do Chile 16, x Praia Mar Residence, x Prata Riverside Village, x Prateato, x Prelada Gardens, x Prestige V, x Print House, x Prisma, x Prisma Douro, x Privato, x Promenade, x Pulse Lisboa, x Pulse Townhouses Lisboa, x Quinta do Alverde, x Quinta Marquês Gomes, x Quintinha 56, x Raiz, x Rasa 503, x RCC Alvalade, x Real Calçada, x Real Serenity, x Red in Blue, x República 5, x Ria Terraces, x Rialto, x Ribamar, x River Quarter, x Riverside III, x RM Villas, x Rocio, X Royal Cabanas Beach II, x Rua Cinco, x Rua Dezanove, x Rua Trinta e Seis, x Ruínas do Malhadal, x Sá da Bandeira, x Sá da Bandeira 39, x Sabóia 1257, x Sabóia 876, x Sal D'ouro Coast, x Sal D'ouro Horizon, x Sal D'ouro Park, x Sal D'ouro Reserve, x Sal D'ouro Sea Pearl, x Salgados Beach Villas, x Salgueiros Flats, x Santa Catarina Unique, x Santa Luzia Ria, x São João da Mata 151, x São João da Praça, x Sapphirus, x Saramago Condomínio, x Scala Mare, x SeaHaus, x Secret Garden Villas, X Seixal Baía, x Selva, x Senhora do Porto 249, x Senhora do Porto Residence, x Serenity, x Serpa 687, x Serralves 239, x Splendid Beloura, x Splendouro, x Sta. Maria 2, x Stephens, x SUL482, x SUL560, x Taborda 1, x Terceira 22, x Terra Condomínio, x TESTE, x The Avenue, x The Breeze, x The Corner, x The Frame, x The GreenPeak, x The Hill, x The Principado, x The Twelve, x The View II, x The Vines, x ToLive, x Tribute 170, x True Living, x Unico, x Unique Belem, x Unique Porto, x Urban Living, x Urban Terrazza, x Vale Pisão, x Valmonte Caxias, x Varandas de Cabanas, x Varandas de Cabanas II, x Vertice, x Vieira da Silva, x Vila Graça, x Vila Nova Parque, x Vila Tijolo, x Vilabranca 32, x Vilamoura Parque, x Vilas da Madalena, x Vilas Mar e Sol, x Villa Citrina, x Villa dos Coches, x Villa Infante, x Villas do Campo, x Villas do Goulão, x Vinhas, x Vintage 18, x Vista Mar, x Vista Mar Residences, x Vista Mar Residences 2, x Vistabella, x Vivva+Setúbal)"
          },
          {
            "name": "WithVideos",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Searches only for properties with available videos. Apply when the user mentions expressions such as 'with video', 'with videos', 'has video', 'has videos', 'view property video', 'watch video online', etc."
          },
          {
            "name": "WithBluePrints",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Searches only for properties that have available floor plans (blueprints). Apply when the user mentions 'with floor plan', 'has plans', 'house plans', 'property map', 'floor layout', 'see plan', etc."
          },
          {
            "name": "WithVirtualVisits",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Searches only for properties with virtual tours available. Apply when the user mentions 'with virtual visit', 'has virtual visit', 'virtual tour', '3D tour', 'interactive tour', 'virtual walkthrough', 'virtual viewing', 'virtual experience', 'view virtual tour online'."
          },
          {
            "name": "With360Photos",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Searches only for properties with available 360º photos. Apply when the user mentions 'with 360º photos', 'has 360º photos', 'with panoramic photos', 'has panoramic photos', 'view 360º photos online', etc."
          },
          {
            "name": "FeaturesNames",
            "in": "query",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "description": "Property features, including amenities, services, nearby points of interest, and types of views to provide a complete and detailed description of the property (24 hours security, 3 phase electicity, Access to land, Acustic isolation, Admin area, Air Conditioning, Airport, Alarm, Ambience music, Annexes, Attic, Bank, Bar, Barbecue, Barn, Basement, Beach, Bike rack, Blast door, Boiler, Bottled gas, Building, Bus station, Cable TV, Canteen, CCTV, Central Heating, Central Vacuum Cleaning System, City, City center, Cleaning service, Closet, Conference room, Corner, Country, Countryside, Co-working, Dam, Dark glass, Dinning room, Dishwasher, Display, Domotics, Double glass, Drainage, Dressing room, Dryer, Ejendommen har kontor, Electric blinds, Electric gate, Electric hob, Electric hot water, Electric stove, Electricity, Eletric fence, Elevator, Equiped kitchen, Esplanade, Excellent access, Fence, Fire detection, Fire station, Fireplace, Flood detection, Fruit trees, Furnished, Garage, Garden, Garden service, Gas, Gas detectors, Gas hob, Gas hot water, Generator, Golf, Golf course, Green roof, Green spaces, Guest room, Gym, Gymnasium, Heat recovery unit, Heated towel racks, High Security Door, Highway, Historic area, Hospital, Induction hob, Internet, Internet Pre-Installation, Intruder detector, Ironing board, Jacuzzi, Jetty, Kitchen, Kitchen hood, Kitchenette, Lake, Laundry, Library, Living room, Loading docks, Maintenance service, Manouver area, Market, Meeting room, Microwave, Mirrored glass, Modular cabinets, mountain, Natural gas, Natural light, Near the sea, Open space, Oven, Pantry, Parking, Party room, Petrol station, Pharmacy, Phone, Piped gas, Playground, Playroom, Plot, Police, Porch, Pre-installation air conditioning, Pre-installation alarm, Pre-installation background music, Pre-installation of cable TV, Pre-installation of central vacuum, Pre-installation of fireplace, Pre-installation of solar panels, Private bathroom, Public Library, Public lighting, Public parking, Public sewage, Public Transportation, Quay, Radiant floors, Ramp, Reception, Refrigerated zone, Refrigerator, River, River port, Safe box, Satellite dish, Sauna, School, Sea, Sea port, Sealed complex, Security Service, Service bathroom, Shared bathroom, Shared pool, Shed, Shielded door, Shopping Center, Shower, Smoke Detector, Smoke extraction, Solar hot water, Solar orientation, Solar panels, Solarium, Sports Complex, Staff changing room, Storage house, Stove, Subway, Suite, Supermarket, Swimming Pool, Swimming pools, Taxi rank, Tennis Court, Termic isolation, Terrace, Terrain Type (Slope), Trade Zone, Truck parking, Tub, Turkish bath, Vaccum, Video entry, Video surveillance, Vineyard, Wall, Washer machine, Water, Water treatment, Whirlpool tub, Wide range of services, Wi-fi, Wine cellar, Wine press, Winter garden)"
          },
          {
            "name": "Page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "description": "Page number to return in the search results."
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SearchResponse"
                }
              }
            }
          }
        }
      }
    },
    "/mcp/detail": {
      "get": {
        "summary": "Retrieves detailed information about a real estate property.",
        "description": "Retrieves detailed information about a real estate property.",
        "operationId": "mcpDetail",
        "parameters": [
          {
            "name": "ListingId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "description": "Property ID for contact."
          },
          {
            "name": "ListingReference",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Internal reference of the property used for identification."
          },
          {
            "name": "DevelopmentFractions",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Indicates whether the search should consider project units (e.g. apartments or retail units) instead of the project as a whole. When enabled, the results include only units associated with a project."
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DetailResponse"
                }
              }
            }
          }
        }
      }
    },
    "/mcp/lead": {
      "get": {
        "summary": "Submit a contact form for a specific listing.",
        "description": "Submit a contact form for a specific listing.",
        "operationId": "mcpLead",
        "parameters": [
          {
            "name": "ListingId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "description": "Property ID for contact."
          },
          {
            "name": "ListingReference",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Internal reference of the property used for identification."
          },
          {
            "name": "Name",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "User's name., (is required)"
          },
          {
            "name": "Email",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "User's email address (required if no phone number is provided)., (is required)"
          },
          {
            "name": "Phone",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "User's phone number (optional if email address is provided)."
          },
          {
            "name": "PhoneCountryCode",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Phone country code including the plus sign, e.g., \"+44\" for United Kingdom, \"+33\" for France, \"+49\" for Germany."
          },
          {
            "name": "Message",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Custom message from the user."
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LeadResponse"
                }
              }
            }
          }
        }
      }
    },
    "/mcp/companyinfo": {
      "get": {
        "summary": "Allows retrieving the company's contact details, including agency name, address, phone number, and email. Ideal for displaying institutional information or enabling the user to contact the agency.",
        "description": "Allows retrieving the company's contact details, including agency name, address, phone number, and email. Ideal for displaying institutional information or enabling the user to contact the agency.",
        "operationId": "mcpCompanyInfo",
        "parameters": [
          {
            "name": "CompanyId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "description": "Identifier of the company/agency to query (optional, defaults to the company’s internal one)."
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CompanyInfoWithAgenciesResponse"
                }
              }
            }
          }
        }
      }
    },
    "/mcp/rasorinfo": {
      "get": {
        "summary": "Allows retrieving the real estate consultant's contact details, including name, phone, email, and address. Ideal for displaying the consultant's contact information or enabling the user to contact them.",
        "description": "Allows retrieving the real estate consultant's contact details, including name, phone, email, and address. Ideal for displaying the consultant's contact information or enabling the user to contact them.",
        "operationId": "mcpRasorInfo",
        "parameters": [
          {
            "name": "RasorName",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Name of the real estate consultant for whom detailed information is requested."
          },
          {
            "name": "StateName",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Allows searching for consultants by district."
          },
          {
            "name": "TownName",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Allows searching for consultants by municipality."
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RasorInfoResponse"
                }
              }
            }
          }
        }
      }
    },
    "/mcp/imicalculator": {
      "get": {
        "summary": "Allows determining the value of the Municipal Property Tax (IMI) based on data provided by the user. This service validates the indicated municipality, identifies the applicable coefficient, processes the Taxable Patrimonial Value (VPT), number of dependents, and the nature of the property (urban or rural), returning the final IMI amount to be paid according to current fiscal rules in Portugal.",
        "description": "Allows determining the value of the Municipal Property Tax (IMI) based on data provided by the user. This service validates the indicated municipality, identifies the applicable coefficient, processes the Taxable Patrimonial Value (VPT), number of dependents, and the nature of the property (urban or rural), returning the final IMI amount to be paid according to current fiscal rules in Portugal.",
        "operationId": "mcpImiCalculator",
        "parameters": [
          {
            "name": "TownName",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Name of the municipality where the property is located. This field is required for geographic identification and IMI rate determination. Example: \"Lisbon\", \"Porto\", \"Sintra\", \"Albufeira\"."
          },
          {
            "name": "TaxableValue",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number",
              "format": "decimal"
            },
            "description": "Taxable patrimonial value of the property (VPT), as registered with the Portuguese Tax Authority. This is the official fiscal value used as the basis for calculating IMI. Must be a positive decimal value expressed in euros. Example: \"185000.00\"."
          },
          {
            "name": "DependentsNumber",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "description": "Number of dependants in the taxpayer’s household for the relevant tax year. This includes children, elderly parents or other legally recognised dependants that may qualify for IMI reductions or exemptions. Valid values: integer ≥ 0. Example: \"2\"."
          },
          {
            "name": "IsUrban",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Indicates whether the property is classified as urban or rural. Urban properties are subject to IMI, while rural properties may be subject to different taxation rules. Example: true/false."
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IMIResponse"
                }
              }
            }
          }
        }
      }
    },
    "/mcp/servicesinfo": {
      "get": {
        "summary": "Description of the endpoint providing complete information about the services available for a customer profile.",
        "description": "Description of the endpoint providing complete information about the services available for a customer profile.",
        "operationId": "mcpServicesInfo",
        "parameters": [
          {
            "name": "CompanyId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "description": "Identifier of the company/agency to query (optional, defaults to the company’s internal one)."
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServicesInfoResponse"
                }
              }
            }
          }
        }
      }
    }
  }
}