{
  "openapi": "3.0.1",
  "info": {
    "title": "Real Estate MCP API - Best Place - Sociedade de Mediação Imobiliária, Lda",
    "version": "1.1",
    "description": "Contexto MCP Imobiliário para pesquisa de imóveis e envio de pedidos de contato. - Best Place - Sociedade de Mediação Imobiliária, Lda",
    "termsOfService": "https://www.bestplace.pt/termos-e-condicoes",
    "contact": {
      "name": "Best Place - Sociedade de Mediação Imobiliária, Lda",
      "url": "https://www.bestplace.pt/",
      "email": "ricardo.reis@bestplace.pt"
    },
    "x-company-info": {
      "name": "Best Place - Sociedade de Mediação Imobiliária, Lda",
      "ami": "7242",
      "address": "Rua Antero de Quental, 40C, Odivelas, 2675-487"
    }
  },
  "servers": [
    {
      "url": "https://www.bestplace.pt/",
      "description": "Identificador do servidor MCP"
    }
  ],
  "components": {
    "schemas": {
      "searchToMatchRequest": {
        "type": "object",
        "properties": {
          "businessType": {
            "type": "string",
            "description": "Define ou devolve o identificador do tipo de negócio do imóvel"
          },
          "countryName": {
            "type": "string",
            "description": "Nome do país utilizado como critério de filtragem. Este campo deve permanecer vazio quando o país não for identificado."
          },
          "stateName": {
            "type": "string",
            "description": "Nome da região (estado) para o imóvel (obrigatório na pesquisa se não mencionar município)."
          },
          "townName": {
            "type": "string",
            "description": "Nome do município para o imóvel (obrigatório na pesquisa se não mencionar estado)."
          },
          "neighborhoodName": {
            "type": "string",
            "description": "Nome ou ID do bairro onde o imóvel está localizado."
          },
          "zoneName": {
            "type": "string",
            "description": "Identificador da zona geográfica para filtragem nas pesquisas."
          },
          "masterCategoryIds": {
            "type": "array",
            "description": "IDs de um ou mais grupos principais de categorias de imóvel (ex.: apartamentos, moradias, armazéns, terrenos, hotéis). É obrigatório indicar pelo menos um se não for indicado um tipo específico de imóvel."
          },
          "categoryIds": {
            "type": "array",
            "description": "IDs de uma ou mais categorias específicas de imóveis (ex.: apartamento, casa, armazém, terreno, hotel)."
          },
          "condition": {
            "type": "string",
            "description": "Estado de conservação."
          },
          "minPrice": {
            "type": "integer",
            "description": "Preço mínimo em euros. Preencher quando o usuário indicar um orçamento mínimo ou limite inferior de preço.",
            "format": "int32"
          },
          "maxPrice": {
            "type": "integer",
            "description": "Preço máximo em euros. Preencher quando o usuário indicar um orçamento máximo ou limite superior de preço.",
            "format": "int32"
          },
          "minBedrooms": {
            "type": "integer",
            "description": "Número mínimo de quartos para filtrar",
            "format": "int32"
          },
          "maxBedrooms": {
            "type": "integer",
            "description": "Número máximo de quartos para filtrar",
            "format": "int32"
          },
          "bathrooms": {
            "type": "integer",
            "description": "Número mínimo de banheiros.",
            "format": "int32"
          },
          "listingReference": {
            "type": "string",
            "description": "Referência interna do imóvel usada para identificação."
          },
          "developmentName": {
            "type": "string",
            "description": "Nome do empreendimento."
          },
          "developmentFractions": {
            "type": "boolean",
            "description": "Indica se a pesquisa deve considerar frações de empreendimentos (por exemplo, apartamentos ou lojas) em vez do empreendimento como um todo. Quando ativado, os resultados incluem apenas frações associadas a um empreendimento."
          },
          "developmentTags": {
            "type": "array",
            "description": "Etiquetas de empreendimentos usadas para filtrar a pesquisa."
          },
          "withVideos": {
            "type": "boolean",
            "description": "Procura apenas imóveis com vídeos disponíveis. Aplicar quando o usuário mencionar 'com vídeo', 'com vídeos', 'tem vídeo', 'tem vídeos', 'vídeo do imóvel', 'ver vídeo online', etc."
          },
          "withBluePrints": {
            "type": "boolean",
            "description": "Procura apenas imóveis que tenham plantas (blueprints) disponíveis. Aplicar quando o usuário mencionar 'com planta', 'tem planta', 'plantas da casa', 'mapa do imóvel', 'planta baixa', 'ver planta', etc."
          },
          "withVirtualVisits": {
            "type": "boolean",
            "description": "Procura apenas imóveis com visitas virtuais disponíveis. Aplicar quando o usuário mencionar 'com visita virtual', 'tem visita virtual', 'tour virtual', 'tour 3D', 'visita 3D', 'tour interativo', 'passeio virtual', 'experiência virtual', 'visualização virtual', 'ver visita virtual online'."
          },
          "with360Photos": {
            "type": "boolean",
            "description": "Procura apenas imóveis com fotos 360º disponíveis. Aplicar quando o usuário mencionar 'com fotos 360º', 'tem fotos 360º', 'com fotos panorâmicas', 'tem fotos panorâmicas', 'ver fotos 360º online', etc."
          },
          "featuresNames": {
            "type": "array",
            "description": "Características do imóvel, incluindo comodidades, serviços, locais de interesse próximos e tipos de vistas para fornecer uma descrição completa e detalhada da propriedade"
          },
          "page": {
            "type": "integer",
            "description": "Número da página nos resultados da pesquisa.",
            "format": "int32"
          }
        },
        "description": "Esquema que descreve os parâmetros de entrada para a pesquisa imobiliária."
      },
      "searchResponse": {
        "type": "object",
        "properties": {
          "results": {
            "type": "array",
            "description": "Lista de resultados da página atual, baseada no número de registros por página.",
            "items": {
              "$ref": "#/components/schemas/DetailResponse"
            }
          },
          "count": {
            "type": "integer",
            "description": "Número total de resultados que correspondem aos critérios de pesquisa.",
            "format": "int32"
          },
          "page": {
            "type": "integer",
            "description": "Número da página atual de acordo com os critérios de pesquisa.",
            "format": "int32"
          },
          "totalpages": {
            "type": "integer",
            "description": "Número total de páginas correspondentes aos critérios de pesquisa.",
            "format": "int32"
          },
          "statetownnameequals": {
            "type": "boolean",
            "description": "Indica se o nome do estado é igual ao nome do município."
          },
          "developmentname": {
            "type": "string",
            "description": "Nome do empreendimento; este campo só será preenchido se os resultados estiverem associados a um empreendimento específico com este nome."
          }
        },
        "description": "Esquema que descreve os parâmetros de saída da pesquisa imobiliária."
      },
      "detailRequest": {
        "type": "object",
        "properties": {
          "listingId": {
            "type": "integer",
            "description": "ID do imóvel para contato.",
            "format": "int32"
          },
          "listingReference": {
            "type": "string",
            "description": "Referência interna do imóvel usada para identificação."
          },
          "developmentFractions": {
            "type": "boolean",
            "description": "Indica se a pesquisa deve considerar frações de empreendimentos (por exemplo, apartamentos ou lojas) em vez do empreendimento como um todo. Quando ativado, os resultados incluem apenas frações associadas a um empreendimento."
          }
        },
        "description": "Esquema que descreve os parâmetros de entrada para o detalhe do imóvel."
      },
      "detailResponse": {
        "type": "object",
        "properties": {
          "listingId": {
            "type": "integer",
            "description": "ID único do anúncio do imóvel.",
            "format": "int32"
          },
          "propertyType": {
            "type": "string",
            "description": "Tipo de imóvel."
          },
          "condition": {
            "type": "string",
            "description": "Estado de conservação do imóvel."
          },
          "listingReference": {
            "type": "string",
            "description": "Referência do imóvel apresentada nos resultados de pesquisa."
          },
          "firstPhoto": {
            "type": "string",
            "description": "URL da miniatura da primeira foto do imóvel."
          },
          "description": {
            "type": "string",
            "description": "Descrição detalhada do imóvel."
          },
          "title": {
            "type": "string",
            "description": "Título do anúncio."
          },
          "price": {
            "type": "string",
            "description": "Preço em euros."
          },
          "imiValue": {
            "type": "string",
            "description": "Valor do IMI a pagar pelo imóvel, calculado com base no VPT e nas regras fiscais aplicáveis."
          },
          "business": {
            "type": "string",
            "description": "Tipo de negócio do imóvel."
          },
          "location": {
            "type": "string",
            "description": "Nome da localização."
          },
          "bedrooms": {
            "type": "integer",
            "description": "Número de quartos do imóvel.",
            "format": "int32"
          },
          "bathrooms": {
            "type": "integer",
            "description": "Número de banheiros do imóvel.",
            "format": "int32"
          },
          "url": {
            "type": "string",
            "description": "URL público do anúncio."
          },
          "hasVideos": {
            "type": "boolean",
            "description": "Indica se o imóvel possui vídeos disponíveis."
          },
          "hasBluePrints": {
            "type": "boolean",
            "description": "Indica se o imóvel possui plantas ou blueprints disponíveis."
          },
          "has360Photos": {
            "type": "boolean",
            "description": "Indica se o imóvel possui fotos 360° disponíveis."
          },
          "hasVirtualVisits": {
            "type": "boolean",
            "description": "Indica se o imóvel possui visitas virtuais ou tours virtuais disponíveis."
          },
          "features": {
            "description": "Essas chaves representam a descrição das características específicas de um imóvel, incluindo atributos físicos e localizações relevantes como piscina, vista para o mar, proximidade de hospitais, escolas e outras facilidades importantes. Essas informações ajudam a detalhar e qualificar o imóvel para facilitar a busca e apresentação de resultados conforme as preferências do usuário.",
            "$ref": "#/components/schemas/Dictionary`2"
          }
        },
        "description": "Esquema que descreve os parâmetros de saída do detalhe do imóvel."
      },
      "leadRequest": {
        "type": "object",
        "properties": {
          "listingId": {
            "type": "integer",
            "description": "ID do imóvel para contato.",
            "format": "int32"
          },
          "listingReference": {
            "type": "string",
            "description": "Referência interna do imóvel usada para identificação."
          },
          "name": {
            "type": "string",
            "description": "Nome do usuário."
          },
          "email": {
            "type": "string",
            "description": "Endereço de email do utilizador (obrigatório se não fornecer telefone)."
          },
          "phone": {
            "type": "string",
            "description": "Número de telefone do usuário (opcional se fornecer email)."
          },
          "phoneCountryCode": {
            "type": "string",
            "description": "Código do país do telefone incluindo o sinal de mais, por exemplo, \"+55\" para Brasil, \"+351\" para Portugal."
          },
          "message": {
            "type": "string",
            "description": "Mensagem personalizada do usuário."
          }
        },
        "description": "Esquema que descreve os parâmetros de entrada para o envio de leads imobiliárias."
      },
      "leadResponse": {
        "type": "object",
        "properties": {
          "status": {
            "type": "string",
            "description": "Estado do envio do formulário de contato (ex.: sucesso, erro)."
          },
          "message": {
            "type": "string",
            "description": "Mensagem que descreve o resultado do envio do formulário de contato."
          },
          "confirmedLead": {
            "type": "boolean",
            "description": ""
          }
        },
        "description": "Esquema que descreve os parâmetros de saída do envio de leads imobiliárias."
      },
      "companyInfoRequest": {
        "type": "object",
        "properties": {
          "companyId": {
            "type": "integer",
            "description": "Identificador da empresa/agência a ser consultada (opcional, por padrão usa o interno da empresa).",
            "format": "int32"
          }
        },
        "description": "Esquema de entrada para pedido de informação da empresa"
      },
      "companyInfoWithAgenciesResponse": {
        "type": "object",
        "properties": {
          "headquarters": {
            "description": "Informações dos dados de contato da empresa referentes à sede.",
            "$ref": "#/components/schemas/CompanyInfoResponse"
          },
          "agencies": {
            "type": "array",
            "description": "Informações dos dados de contato das agências da empresa.",
            "items": {
              "$ref": "#/components/schemas/CompanyInfoResponse"
            }
          }
        },
        "description": "Esquema de saída com os dados de informação da empresa"
      },
      "companyInfoResponse": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Nome da empresa"
          },
          "phone": {
            "type": "string",
            "description": "Telefone da empresa"
          },
          "mobile": {
            "type": "string",
            "description": "Telefone móvel da empresa"
          },
          "email": {
            "type": "string",
            "description": "Email de contato da empresa"
          },
          "address": {
            "type": "string",
            "description": "Endereço da empresa (sem CEP)"
          },
          "district": {
            "type": "string",
            "description": "Distrito onde se localiza a empresa"
          },
          "municipality": {
            "type": "string",
            "description": "Município onde a empresa está localizada"
          },
          "parish": {
            "type": "string",
            "description": "Freguesia onde se localiza a empresa"
          },
          "zipCode": {
            "type": "string",
            "description": "CEP do endereço da empresa"
          },
          "businessHours": {
            "type": "string",
            "description": "Horário de funcionamento da empresa"
          },
          "googleMapsUrl": {
            "type": "string",
            "description": "Link direto para a localização da empresa no Google Maps"
          }
        },
        "description": "Esquema de saída com os dados de informação da empresa"
      },
      "rasorInfoRequest": {
        "type": "object",
        "properties": {
          "rasorName": {
            "type": "string",
            "description": "Nome do consultor imobiliário sobre o qual se deseja obter informações detalhadas."
          },
          "stateName": {
            "type": "string",
            "description": "Permite pesquisar consultores por distrito."
          },
          "townName": {
            "type": "string",
            "description": "Permite pesquisar consultores por município."
          }
        },
        "description": "Esquema de entrada para solicitar informações detalhadas sobre o consultor imobiliário"
      },
      "rasorInfoResponse": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Nome completo do consultor imobiliário."
          },
          "phone": {
            "type": "string",
            "description": "Telefone fixo do consultor imobiliário."
          },
          "mobile": {
            "type": "string",
            "description": "Celular do consultor imobiliário."
          },
          "observations": {
            "type": "string",
            "description": "Observações adicionais relacionadas ao consultor."
          },
          "email": {
            "type": "string",
            "description": "Endereço de email do consultor imobiliário."
          },
          "address": {
            "type": "string",
            "description": "Endereço completo do consultor imobiliário ou escritório."
          },
          "city": {
            "type": "string",
            "description": "Município onde o consultor exerce atividade."
          },
          "parish": {
            "type": "string",
            "description": "Freguesia onde o consultor exerce atividade."
          },
          "spokenLanguages": {
            "type": "array",
            "description": "Lista de idiomas falados pelo consultor."
          },
          "socialProfiles": {
            "type": "array",
            "description": "Lista de links para perfis ou páginas sociais do consultor.",
            "items": {
              "$ref": "#/components/schemas/SocialProfile"
            }
          },
          "avatar": {
            "type": "string",
            "description": "Imagem do avatar associado ao consultor."
          },
          "listingUrl": {
            "type": "string",
            "description": "URL da página que apresenta todos os imóveis atribuídos ou relacionados com o consultor, permitindo o acesso direto à listagem completa dos respetivos imóveis."
          },
          "detailUrl": {
            "type": "string",
            "description": "Página que apresenta a informação completa do agente, incluindo dados de contacto, perfil profissional e imóveis associados."
          }
        },
        "description": "Esquema de saída com informações detalhadas sobre o consultor imobiliário"
      },
      "imiRequest": {
        "type": "object",
        "properties": {
          "townName": {
            "type": "string",
            "description": "Nome do município onde o imóvel está localizado. Este campo é obrigatório para a identificação geográfica e determinação da taxa de IMI. Exemplo: \"Lisboa\", \"Porto\", \"Sintra\", \"Albufeira\"."
          },
          "taxableValue": {
            "type": "number",
            "description": "Valor Patrimonial Tributário (VPT) do imóvel, conforme registrado na Autoridade Tributária de Portugal. É o valor fiscal oficial utilizado no cálculo do IMI. Deve ser um valor decimal positivo expresso em euros. Exemplo: \"185000.00\".",
            "format": "decimal"
          },
          "dependentsNumber": {
            "type": "integer",
            "description": "Número de dependentes na família do contribuinte para o ano fiscal de referência. Inclui crianças, pais idosos ou outros dependentes reconhecidos por lei que podem gerar redução ou isenção de IMI. Valores válidos: inteiro ≥ 0. Exemplo: \"2\".",
            "format": "int32"
          },
          "isUrban": {
            "type": "boolean",
            "description": "Indica se o imóvel está classificado como urbano ou rústico. Os imóveis urbanos estão sujeitos a IMI, enquanto os imóveis rústicos podem estar sujeitos a regras de tributação distintas. Exemplo: true/false."
          }
        },
        "description": "Esquema de dados de entrada utilizado para solicitar o cálculo do Imposto Predial Municipal (IMI) de um imóvel."
      },
      "imiResponse": {
        "type": "object",
        "properties": {
          "townName": {
            "type": "string",
            "description": "Nome do município considerado para o cálculo do IMI"
          },
          "taxableValue": {
            "type": "string",
            "description": "Valor Patrimonial Tributário (VPT) considerado para o cálculo do IMI, expresso em euros"
          },
          "dependentsNumber": {
            "type": "string",
            "description": "Número de dependentes contabilizados para efeitos de benefícios aplicados no cálculo do IMI"
          },
          "isUrban": {
            "type": "string",
            "description": "Indicação se o imóvel é urbano ou rústico, considerado para o cálculo do IMI"
          },
          "imiValue": {
            "type": "string",
            "description": "Valor final do IMI (Imposto Municipal sobre Imóveis) calculado com base nos dados fornecidos."
          },
          "imiTaxValue": {
            "type": "string",
            "description": "Taxa usada para cálculo do valor de IMI."
          },
          "dependentDiscount": {
            "type": "string",
            "description": "Valor de desconto baseado no número de dependentes."
          },
          "dataYear": {
            "type": "integer",
            "description": "Ano de referência das taxas utilizadas no cálculo do IMI.",
            "format": "int32"
          }
        },
        "description": "Esquema de dados de saída que fornece o resultado do cálculo do IMI, incluindo informações detalhadas sobre o valor a pagar."
      },
      "servicesInfoRequest": {
        "type": "object",
        "properties": {
          "companyId": {
            "type": "integer",
            "description": "Identificador da empresa/agência a ser consultada (opcional, por padrão usa o interno da empresa).",
            "format": "int32"
          }
        },
        "description": "Resumo dos serviços disponíveis, incluindo a sua finalidade e aplicação para os clientes."
      },
      "servicesInfoResponse": {
        "type": "object",
        "properties": {
          "companyId": {
            "type": "integer",
            "description": "Identificador único da empresa associada ao catálogo de serviços.",
            "format": "int32"
          },
          "companyName": {
            "type": "string",
            "description": "Nome da empresa que disponibiliza o catálogo de serviços."
          },
          "categories": {
            "type": "array",
            "description": "Lista de categorias de serviços disponíveis, organizadas por perfil de cliente.",
            "items": {
              "$ref": "#/components/schemas/ServiceCategory"
            }
          }
        },
        "description": "Resumo dos serviços prestados ao cliente, incluindo detalhes, âmbito e aplicação."
      }
    }
  },
  "paths": {
    "/mcp/search": {
      "get": {
        "summary": "Pesquisar anúncios imobiliários usando filtros como localização, preço, tipo e condição.",
        "description": "Pesquisar anúncios imobiliários usando filtros como localização, preço, tipo e condição.",
        "operationId": "mcpSearch",
        "parameters": [
          {
            "name": "BusinessType",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Define ou devolve o identificador do tipo de negócio do imóvel (Locação, Venda). Caso não seja indicado na pesquisa, será utilizado Venda por padrão"
          },
          {
            "name": "CountryName",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Nome do país utilizado como critério de filtragem. Este campo deve permanecer vazio quando o país não for identificado., (é obrigatório)"
          },
          {
            "name": "StateName",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Nome da região (estado) para o imóvel (obrigatório na pesquisa se não mencionar município)., (é obrigatório)"
          },
          {
            "name": "TownName",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Nome do município para o imóvel (obrigatório na pesquisa se não mencionar estado)."
          },
          {
            "name": "NeighborhoodName",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Nome ou ID do bairro onde o imóvel está localizado."
          },
          {
            "name": "ZoneName",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Identificador da zona geográfica para filtragem nas pesquisas."
          },
          {
            "name": "MasterCategoryIds",
            "in": "query",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "description": "IDs de um ou mais grupos principais de categorias de imóvel (ex.: apartamentos, moradias, armazéns, terrenos, hotéis). É obrigatório indicar pelo menos um se não for indicado um tipo específico de imóvel."
          },
          {
            "name": "CategoryIds",
            "in": "query",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "description": "IDs de uma ou mais categorias específicas de imóveis (ex.: apartamento, casa, armazém, terreno, hotel)."
          },
          {
            "name": "Condition",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Estado de conservação. (Com Programa de Incentivos à Reabilitação, Em construção, Em projeto, Não Aplicável, Novo, Para Demolir ou Reconstruir, Para venda, Por reformar, Reformado, Renovado, Reservado, Usado)"
          },
          {
            "name": "MinPrice",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "description": "Preço mínimo em euros. Preencher quando o usuário indicar um orçamento mínimo ou limite inferior de preço."
          },
          {
            "name": "MaxPrice",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "description": "Preço máximo em euros. Preencher quando o usuário indicar um orçamento máximo ou limite superior de preço."
          },
          {
            "name": "MinBedrooms",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "description": "Número mínimo de quartos para filtrar"
          },
          {
            "name": "MaxBedrooms",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "description": "Número máximo de quartos para filtrar"
          },
          {
            "name": "Bathrooms",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "description": "Número mínimo de banheiros."
          },
          {
            "name": "ListingReference",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Referência interna do imóvel usada para identificação."
          },
          {
            "name": "DevelopmentName",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Nome do empreendimento."
          },
          {
            "name": "DevelopmentFractions",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Indica se a pesquisa deve considerar frações de empreendimentos (por exemplo, apartamentos ou lojas) em vez do empreendimento como um todo. Quando ativado, os resultados incluem apenas frações associadas a um empreendimento."
          },
          {
            "name": "DevelopmentTags",
            "in": "query",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "description": "Etiquetas de empreendimentos usadas para filtrar a pesquisa. (Rede EgoRealestate)"
          },
          {
            "name": "WithVideos",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Procura apenas imóveis com vídeos disponíveis. Aplicar quando o usuário mencionar 'com vídeo', 'com vídeos', 'tem vídeo', 'tem vídeos', 'vídeo do imóvel', 'ver vídeo online', etc."
          },
          {
            "name": "WithBluePrints",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Procura apenas imóveis que tenham plantas (blueprints) disponíveis. Aplicar quando o usuário mencionar 'com planta', 'tem planta', 'plantas da casa', 'mapa do imóvel', 'planta baixa', 'ver planta', etc."
          },
          {
            "name": "WithVirtualVisits",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Procura apenas imóveis com visitas virtuais disponíveis. Aplicar quando o usuário mencionar 'com visita virtual', 'tem visita virtual', 'tour virtual', 'tour 3D', 'visita 3D', 'tour interativo', 'passeio virtual', 'experiência virtual', 'visualização virtual', 'ver visita virtual online'."
          },
          {
            "name": "With360Photos",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Procura apenas imóveis com fotos 360º disponíveis. Aplicar quando o usuário mencionar 'com fotos 360º', 'tem fotos 360º', 'com fotos panorâmicas', 'tem fotos panorâmicas', 'ver fotos 360º online', etc."
          },
          {
            "name": "FeaturesNames",
            "in": "query",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "description": "Características do imóvel, incluindo comodidades, serviços, locais de interesse próximos e tipos de vistas para fornecer uma descrição completa e detalhada da propriedade (Aeroporto, Ar Condicionado, Aspiração Central, Auto-estrada, Banco, Banheira, Banheira de hidromassagem, Banheiro de serviço, Caldeira, Centro Comercial, Centro da Cidade, Cidade, Closet, Cozinha, Elevador, Escola, Escritório, Espaço aberto, Espaços Verdes, Esquentador, Exaustor, Farmácia, Forno, Frigorífico, Garagem, Gás natural, Ginásio, Hipermercado, Hospital, Isolamento acústico, Isolamento térmico, Lareira, Máquina de lavar louça, Orientação solar, Parque Infantil, Persianas elétricas, Placa Vitrocerâmica, Polícia, Porta blindada, Posto de Combustível, Praça de táxi, Recepção, Recuperador de calor, Rio, Sala de estar, Sala de reunião, Segurança 24 horas, Serviço de segurança, Suite, Transportes Públicos, Vidro duplo, Zona Comercial)"
          },
          {
            "name": "Page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "description": "Número da página nos resultados da pesquisa."
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SearchResponse"
                }
              }
            }
          }
        }
      }
    },
    "/mcp/detail": {
      "get": {
        "summary": "Retorna informações detalhadas sobre um imóvel.",
        "description": "Retorna informações detalhadas sobre um imóvel.",
        "operationId": "mcpDetail",
        "parameters": [
          {
            "name": "ListingId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "description": "ID do imóvel para contato."
          },
          {
            "name": "ListingReference",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Referência interna do imóvel usada para identificação."
          },
          {
            "name": "DevelopmentFractions",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Indica se a pesquisa deve considerar frações de empreendimentos (por exemplo, apartamentos ou lojas) em vez do empreendimento como um todo. Quando ativado, os resultados incluem apenas frações associadas a um empreendimento."
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DetailResponse"
                }
              }
            }
          }
        }
      }
    },
    "/mcp/lead": {
      "get": {
        "summary": "Enviar um formulário de contato para um anúncio específico.",
        "description": "Enviar um formulário de contato para um anúncio específico.",
        "operationId": "mcpLead",
        "parameters": [
          {
            "name": "ListingId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "description": "ID do imóvel para contato."
          },
          {
            "name": "ListingReference",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Referência interna do imóvel usada para identificação."
          },
          {
            "name": "Name",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Nome do usuário., (é obrigatório)"
          },
          {
            "name": "Email",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Endereço de email do utilizador (obrigatório se não fornecer telefone)., (é obrigatório)"
          },
          {
            "name": "Phone",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Número de telefone do usuário (opcional se fornecer email)."
          },
          {
            "name": "PhoneCountryCode",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Código do país do telefone incluindo o sinal de mais, por exemplo, \"+55\" para Brasil, \"+351\" para Portugal."
          },
          {
            "name": "Message",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Mensagem personalizada do usuário."
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LeadResponse"
                }
              }
            }
          }
        }
      }
    },
    "/mcp/companyinfo": {
      "get": {
        "summary": "Permite obter os dados de contacto da empresa, incluindo o nome da agência, morada, telefone e email. Ideal para apresentar informações institucionais ou permitir que o utilizador entre em contacto com a agência.",
        "description": "Permite obter os dados de contacto da empresa, incluindo o nome da agência, morada, telefone e email. Ideal para apresentar informações institucionais ou permitir que o utilizador entre em contacto com a agência.",
        "operationId": "mcpCompanyInfo",
        "parameters": [
          {
            "name": "CompanyId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "description": "Identificador da empresa/agência a ser consultada (opcional, por padrão usa o interno da empresa)."
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CompanyInfoWithAgenciesResponse"
                }
              }
            }
          }
        }
      }
    },
    "/mcp/rasorinfo": {
      "get": {
        "summary": "Permite obter os dados de contacto do consultor imobiliário, incluindo nome, telefone, email e morada. Ideal para apresentar informações de contacto do consultor ou permitir que o utilizador entre em contacto com ele.",
        "description": "Permite obter os dados de contacto do consultor imobiliário, incluindo nome, telefone, email e morada. Ideal para apresentar informações de contacto do consultor ou permitir que o utilizador entre em contacto com ele.",
        "operationId": "mcpRasorInfo",
        "parameters": [
          {
            "name": "RasorName",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Nome do consultor imobiliário sobre o qual se deseja obter informações detalhadas."
          },
          {
            "name": "StateName",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Permite pesquisar consultores por distrito."
          },
          {
            "name": "TownName",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Permite pesquisar consultores por município."
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RasorInfoResponse"
                }
              }
            }
          }
        }
      }
    },
    "/mcp/imicalculator": {
      "get": {
        "summary": "Permite determinar o valor do Imposto Municipal sobre Imóveis (IMI) com base nos dados fornecidos pelo usuário. Este serviço valida o município indicado, identifica o coeficiente aplicável, processa o Valor Patrimonial Tributário (VPT), número de dependentes e a natureza do imóvel (urbano ou rústico), retornando o valor final de IMI a pagar de acordo com as normas fiscais vigentes em Portugal.",
        "description": "Permite determinar o valor do Imposto Municipal sobre Imóveis (IMI) com base nos dados fornecidos pelo usuário. Este serviço valida o município indicado, identifica o coeficiente aplicável, processa o Valor Patrimonial Tributário (VPT), número de dependentes e a natureza do imóvel (urbano ou rústico), retornando o valor final de IMI a pagar de acordo com as normas fiscais vigentes em Portugal.",
        "operationId": "mcpImiCalculator",
        "parameters": [
          {
            "name": "TownName",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Nome do município onde o imóvel está localizado. Este campo é obrigatório para a identificação geográfica e determinação da taxa de IMI. Exemplo: \"Lisboa\", \"Porto\", \"Sintra\", \"Albufeira\"."
          },
          {
            "name": "TaxableValue",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number",
              "format": "decimal"
            },
            "description": "Valor Patrimonial Tributário (VPT) do imóvel, conforme registrado na Autoridade Tributária de Portugal. É o valor fiscal oficial utilizado no cálculo do IMI. Deve ser um valor decimal positivo expresso em euros. Exemplo: \"185000.00\"."
          },
          {
            "name": "DependentsNumber",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "description": "Número de dependentes na família do contribuinte para o ano fiscal de referência. Inclui crianças, pais idosos ou outros dependentes reconhecidos por lei que podem gerar redução ou isenção de IMI. Valores válidos: inteiro ≥ 0. Exemplo: \"2\"."
          },
          {
            "name": "IsUrban",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Indica se o imóvel está classificado como urbano ou rústico. Os imóveis urbanos estão sujeitos a IMI, enquanto os imóveis rústicos podem estar sujeitos a regras de tributação distintas. Exemplo: true/false."
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IMIResponse"
                }
              }
            }
          }
        }
      }
    },
    "/mcp/servicesinfo": {
      "get": {
        "summary": "Descrição do endpoint que fornece informações completas sobre os serviços disponíveis para um perfil de cliente.",
        "description": "Descrição do endpoint que fornece informações completas sobre os serviços disponíveis para um perfil de cliente.",
        "operationId": "mcpServicesInfo",
        "parameters": [
          {
            "name": "CompanyId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "description": "Identificador da empresa/agência a ser consultada (opcional, por padrão usa o interno da empresa)."
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServicesInfoResponse"
                }
              }
            }
          }
        }
      }
    }
  }
}