# Quintela + Penalva | Knight Frank - Complete MCP & API Documentation

**Version:** 1.1
**Generated:** 2026-09-08 13:12:16

## Table of Contents

1. [System Overview](#system-overview)
2. [MCP Server Information](#mcp-server-information)
3. [Getting Started](#getting-started)
4. [Available Endpoints](#available-endpoints)
5. [OpenAPI Specification](#openapi-specification)
6. [System Prompts & AI Guidance](#system-prompts)
7. [Contact Information](#contact-information)

## MCP Server Information {#mcp-server-information}

- **Name:** Quintela + Penalva | Knight Frank
- **Email:** lisboa@quintelaepenalva.pt
- **Phone:** 212454059
- **Address:** 
- **License (AMI):** 6182
- **MCP Server URL:** https://www.quintelaepenalva.pt/
- **Public Website:** https://www.quintelaepenalva.pt/

## Getting Started {#getting-started}

### MCP transport

The MCP endpoint is JSON-RPC 2.0 over HTTP. Send `POST` requests to `/mcp` or `/mcp/rpc` with `Content-Type: application/json`.
Supported protocol methods are `initialize`, `ping`, `tools/list`, and `tools/call`; the server advertises MCP protocol version `2024-11-05`.

Client credentials are not validated by this public proxy. Requests forwarded to the internal API are protected with a binding-scoped signed assertion generated by the proxy.

### Discovery and metadata endpoints

- `GET /llms.txt` or `GET /.well-known/llm/llms.txt` - discovery summary
- `GET /llms-full.txt` or `GET /.well-known/llm/llms-full.txt` - this complete documentation
- `GET /llms-data.json` or `GET /.well-known/llm/llms-data.json` - structured server metadata
- `GET /openapi.json` - generated OpenAPI 3.0.1 document for the REST-oriented API schema
- `GET /.well-known/llm/openai.yaml` or `GET /.well-known/llm/openai.json` - OpenAI context document
- `GET /.well-known/server-card.json` or `GET /mcp/server-card` - MCP server card
- `GET /.well-known/ai-plugin.json` and `GET /.well-known/logo.png` - legacy AI plugin metadata

## Available Endpoints {#available-endpoints}

### MCP tools

Use `tools/list` to retrieve the authoritative, localized descriptions and input schemas. The currently registered tools are:

- `search` - search property listings
- `detail` - retrieve a listing or development detail
- `lead` and `leadexclusive` - register property enquiries
- `companyinfo` and `rasorinfo` - retrieve company and RASOR information
- `imicalculator` - calculate Portuguese IMI tax
- `servicesinfo` - retrieve available services
- `loancalculator` and `creditcontact` - mortgage simulation and credit contact
- `chat`, `history`, and `clear` - assistant conversation operations
- `registerevent` - register an AI-chat interaction event

#### tools/call example

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "search",
    "arguments": {
      "CountryName": "Portugal",
      "StateName": "Lisboa",
      "BusinessType": "Sale",
      "MinPrice": 100000,
      "MaxPrice": 500000
    }
  }
}
```

### REST-compatible routes

For existing integrations, the proxy also routes `/mcp/search`, `/mcp/mcpSearch`, `/mcp/detail`, `/mcp/mcpDetail`, `/mcp/lead`, `/mcp/mcpLead`, `/mcp/companyinfo`, `/mcp/mcpCompanyInfo`, `/mcp/rasorinfo`, `/mcp/mcpRasorInfo`, `/mcp/imicalculator`, `/mcp/mcpImiCalculator`, `/mcp/servicesinfo`, `/mcp/mcpServicesInfo`, `/mcp/loancalculator`, `/mcp/mcpLoanCalculator`, `/mcp/creditcontact`, `/mcp/mcpCreditContact`, `/mcp/chat`, `/mcp/history`, `/mcp/clear`, `/mcp/registerevent`, and `/mcp/leadexclusive`. These are compatibility routes; new MCP clients should use JSON-RPC.

## OpenAPI Specification {#openapi-specification}

Complete OpenAPI 3.0.1 specification for this MCP server:

```yaml
openapi: 3.0.1
info:
  title: Real Estate MCP API - Quintela + Penalva | Knight Frank
  version: 1.1
  description: MCP Real Estate context for searching properties and submitting contact requests. - Quintela + Penalva | Knight Frank
  termsOfService: https://www.quintelaepenalva.pt/termos-e-condicoes
  contact:
    name: Quintela + Penalva | Knight Frank
    url: https://www.quintelaepenalva.pt/
    email: lisboa@quintelaepenalva.pt
  companyInfo:
    name: Quintela + Penalva | Knight Frank
    nif: 
    aMI: 6182
    address: ''
servers:
- url: https://www.quintelaepenalva.pt/
  description: MCP server identifier
components:
  securitySchemes: 
  schemas:
    SearchToMatchRequest:
      type: object
      properties:
        BusinessType:
          type: string
          example: 
          description: Defines or returns the identifier of the property's business type
          format: 
          items: 
          enum: 
          ref: 
        CountryName:
          type: string
          example: 
          description: Name of the country used as a filtering criteria. This field must remain empty when the country is not identified.
          format: 
          items: 
          enum: 
          ref: 
        StateName:
          type: string
          example: 
          description: Name of the region (district) for the property (required in search if municipality is not specified).
          format: 
          items: 
          enum: 
          ref: 
        TownName:
          type: string
          example: 
          description: Name of the municipality for the property (required in search if district is not specified).
          format: 
          items: 
          enum: 
          ref: 
        NeighborhoodName:
          type: string
          example: 
          description: Name or ID of the parish (neighborhood) where the property is located.
          format: 
          items: 
          enum: 
          ref: 
        ZoneName:
          type: string
          example: 
          description: Geographic zone identifier used for filtering in searches.
          format: 
          items: 
          enum: 
          ref: 
        MasterCategoryIds:
          type: array
          example: 
          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.
          format: 
          items: 
          enum: 
          ref: 
        CategoryIds:
          type: array
          example: 
          description: IDs of one or more specific property categories (e.g., apartment, house, warehouse, land, hotel).
          format: 
          items: 
          enum: 
          ref: 
        Condition:
          type: string
          example: 
          description: Condition status.
          format: 
          items: 
          enum: 
          ref: 
        MinPrice:
          type: integer
          example: 
          description: Minimum price in euros. Fill in when the user specifies a minimum budget or lower price limit.
          format: int32
          items: 
          enum: 
          ref: 
        MaxPrice:
          type: integer
          example: 
          description: Maximum price in euros. Fill in when the user specifies a maximum budget or upper price limit.
          format: int32
          items: 
          enum: 
          ref: 
        MinBedrooms:
          type: integer
          example: 
          description: Minimum number of bedrooms to filter by
          format: int32
          items: 
          enum: 
          ref: 
        MaxBedrooms:
          type: integer
          example: 
          description: Maximum number of bedrooms to filter by
          format: int32
          items: 
          enum: 
          ref: 
        Bathrooms:
          type: integer
          example: 
          description: Minimum number of bathrooms.
          format: int32
          items: 
          enum: 
          ref: 
        ListingReference:
          type: string
          example: 
          description: Internal reference of the property used for identification.
          format: 
          items: 
          enum: 
          ref: 
        DevelopmentName:
          type: string
          example: 
          description: Development name.
          format: 
          items: 
          enum: 
          ref: 
        DevelopmentFractions:
          type: boolean
          example: 
          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.
          format: 
          items: 
          enum: 
          ref: 
        DevelopmentTags:
          type: array
          example: 
          description: Development tags used to filter the search.
          format: 
          items: 
          enum: 
          ref: 
        WithVideos:
          type: boolean
          example: 
          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.
          format: 
          items: 
          enum: 
          ref: 
        WithBluePrints:
          type: boolean
          example: 
          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.
          format: 
          items: 
          enum: 
          ref: 
        WithVirtualVisits:
          type: boolean
          example: 
          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'.
          format: 
          items: 
          enum: 
          ref: 
        With360Photos:
          type: boolean
          example: 
          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.
          format: 
          items: 
          enum: 
          ref: 
        FeaturesNames:
          type: array
          example: 
          description: Property features, including amenities, services, nearby points of interest, and types of views to provide a complete and detailed description of the property
          format: 
          items: 
          enum: 
          ref: 
        Page:
          type: integer
          example: 
          description: Page number to return in the search results.
          format: int32
          items: 
          enum: 
          ref: 
      description: Schema that describes the input parameters for the real estate search.
    SearchResponse:
      type: object
      properties:
        results:
          type: array
          example: 
          description: List of results for the current page, based on the number of records per page.
          format: 
          items:
            type: 
            example: 
            description: 
            format: 
            items: 
            enum: 
            ref: '#/components/schemas/DetailResponse'
          enum: 
          ref: 
        count:
          type: integer
          example: 
          description: Total number of results matching the search criteria.
          format: int32
          items: 
          enum: 
          ref: 
        page:
          type: integer
          example: 
          description: Current page number based on the search criteria.
          format: int32
          items: 
          enum: 
          ref: 
        totalpages:
          type: integer
          example: 
          description: Total number of pages matching the search criteria.
          format: int32
          items: 
          enum: 
          ref: 
        statetownnameequals:
          type: boolean
          example: 
          description: Indicates whether the district name is the same as the town name.
          format: 
          items: 
          enum: 
          ref: 
        developmentname:
          type: string
          example: 
          description: Development name; this field is only populated if the results relate to a specific development with this name.
          format: 
          items: 
          enum: 
          ref: 
      description: Schema that describes the output parameters of the real estate search.
    DetailRequest:
      type: object
      properties:
        ListingId:
          type: integer
          example: 
          description: Property ID for contact.
          format: int32
          items: 
          enum: 
          ref: 
        ListingReference:
          type: string
          example: 
          description: Internal reference of the property used for identification.
          format: 
          items: 
          enum: 
          ref: 
        DevelopmentFractions:
          type: boolean
          example: 
          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.
          format: 
          items: 
          enum: 
          ref: 
      description: Schema that describes the input parameters for the property detail.
    DetailResponse:
      type: object
      properties:
        ListingId:
          type: integer
          example: 
          description: Unique ID of the property listing.
          format: int32
          items: 
          enum: 
          ref: 
        PropertyType:
          type: string
          example: 
          description: Type of property.
          format: 
          items: 
          enum: 
          ref: 
        Condition:
          type: string
          example: 
          description: Condition status of the property.
          format: 
          items: 
          enum: 
          ref: 
        ListingReference:
          type: string
          example: 
          description: Reference of the property shown in the search results.
          format: 
          items: 
          enum: 
          ref: 
        FirstPhoto:
          type: string
          example: 
          description: URL of the thumbnail of the property's first photo.
          format: 
          items: 
          enum: 
          ref: 
        Description:
          type: string
          example: 
          description: Detailed description of the property.
          format: 
          items: 
          enum: 
          ref: 
        Title:
          type: string
          example: 
          description: Title of the listing.
          format: 
          items: 
          enum: 
          ref: 
        Price:
          type: string
          example: 
          description: Price in euros.
          format: 
          items: 
          enum: 
          ref: 
        IMIValue:
          type: string
          example: 
          description: IMI amount to be paid for the property, calculated based on the VPT and applicable tax rules.
          format: 
          items: 
          enum: 
          ref: 
        Business:
          type: string
          example: 
          description: Type of property business.
          format: 
          items: 
          enum: 
          ref: 
        Location:
          type: string
          example: 
          description: Name of the location.
          format: 
          items: 
          enum: 
          ref: 
        Bedrooms:
          type: integer
          example: 
          description: Number of bedrooms in the property.
          format: int32
          items: 
          enum: 
          ref: 
        Bathrooms:
          type: integer
          example: 
          description: Number of bathrooms in the property.
          format: int32
          items: 
          enum: 
          ref: 
        Url:
          type: string
          example: 
          description: Public URL of the listing.
          format: 
          items: 
          enum: 
          ref: 
        HasVideos:
          type: boolean
          example: 
          description: Indicates whether the property has available videos.
          format: 
          items: 
          enum: 
          ref: 
        HasBluePrints:
          type: boolean
          example: 
          description: Indicates whether the property has available floor plans or blueprints.
          format: 
          items: 
          enum: 
          ref: 
        Has360Photos:
          type: boolean
          example: 
          description: Indicates whether the property has available 360° photos.
          format: 
          items: 
          enum: 
          ref: 
        HasVirtualVisits:
          type: boolean
          example: 
          description: Indicates whether the property has available virtual visits or virtual tours.
          format: 
          items: 
          enum: 
          ref: 
        Features:
          type: 
          example: 
          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.
          format: 
          items: 
          enum: 
          ref: '#/components/schemas/Dictionary`2'
      description: Schema that describes the output parameters of the property detail.
    LeadRequest:
      type: object
      properties:
        ListingId:
          type: integer
          example: 
          description: Property ID for contact.
          format: int32
          items: 
          enum: 
          ref: 
        ListingReference:
          type: string
          example: 
          description: Internal reference of the property used for identification.
          format: 
          items: 
          enum: 
          ref: 
        Name:
          type: string
          example: 
          description: User's name.
          format: 
          items: 
          enum: 
          ref: 
        Email:
          type: string
          example: 
          description: User's email address (required if no phone number is provided).
          format: 
          items: 
          enum: 
          ref: 
        Phone:
          type: string
          example: 
          description: User's phone number (optional if email address is provided).
          format: 
          items: 
          enum: 
          ref: 
        PhoneCountryCode:
          type: string
          example: 
          description: Phone country code including the plus sign, e.g., "+44" for United Kingdom, "+33" for France, "+49" for Germany.
          format: 
          items: 
          enum: 
          ref: 
        Message:
          type: string
          example: 
          description: Custom message from the user.
          format: 
          items: 
          enum: 
          ref: 
      description: Schema that describes the input parameters for sending real estate leads.
    LeadResponse:
      type: object
      properties:
        Status:
          type: string
          example: 
          description: Status of the contact form submission (e.g., success, error).
          format: 
          items: 
          enum: 
          ref: 
        Message:
          type: string
          example: 
          description: Message describing the result of the contact form submission.
          format: 
          items: 
          enum: 
          ref: 
        ConfirmedLead:
          type: boolean
          example: 
          description: ''
          format: 
          items: 
          enum: 
          ref: 
      description: Schema that describes the output parameters of the real estate lead submission.
    CompanyInfoRequest:
      type: object
      properties:
        CompanyId:
          type: integer
          example: 
          description: Identifier of the company/agency to query (optional, defaults to the company’s internal one).
          format: int32
          items: 
          enum: 
          ref: 
      description: Input schema for company information request
    CompanyInfoWithAgenciesResponse:
      type: object
      properties:
        Headquarters:
          type: 
          example: 
          description: Information about the company’s contact details related to the headquarters.
          format: 
          items: 
          enum: 
          ref: '#/components/schemas/CompanyInfoResponse'
        Agencies:
          type: array
          example: 
          description: Information about the contact details of the company’s agencies.
          format: 
          items:
            type: 
            example: 
            description: 
            format: 
            items: 
            enum: 
            ref: '#/components/schemas/CompanyInfoResponse'
          enum: 
          ref: 
      description: Output schema with company information data
    CompanyInfoResponse:
      type: object
      properties:
        Name:
          type: string
          example: 
          description: Name of the company
          format: 
          items: 
          enum: 
          ref: 
        Phone:
          type: string
          example: 
          description: Company phone number
          format: 
          items: 
          enum: 
          ref: 
        Mobile:
          type: string
          example: 
          description: Company mobile number
          format: 
          items: 
          enum: 
          ref: 
        Email:
          type: string
          example: 
          description: Contact email address of the company
          format: 
          items: 
          enum: 
          ref: 
        Address:
          type: string
          example: 
          description: Company address (without ZIP code)
          format: 
          items: 
          enum: 
          ref: 
        District:
          type: string
          example: 
          description: District where the company is located
          format: 
          items: 
          enum: 
          ref: 
        Municipality:
          type: string
          example: 
          description: Municipality where the company is located
          format: 
          items: 
          enum: 
          ref: 
        Parish:
          type: string
          example: 
          description: Parish where the company is located
          format: 
          items: 
          enum: 
          ref: 
        ZipCode:
          type: string
          example: 
          description: ZIP code of the company address
          format: 
          items: 
          enum: 
          ref: 
        BusinessHours:
          type: string
          example: 
          description: Company business hours
          format: 
          items: 
          enum: 
          ref: 
        GoogleMapsUrl:
          type: string
          example: 
          description: Direct Google Maps link to the company's location
          format: 
          items: 
          enum: 
          ref: 
      description: Output schema with company information data
    RasorInfoRequest:
      type: object
      properties:
        RasorName:
          type: string
          example: 
          description: Name of the real estate consultant for whom detailed information is requested.
          format: 
          items: 
          enum: 
          ref: 
        StateName:
          type: string
          example: 
          description: Allows searching for consultants by district.
          format: 
          items: 
          enum: 
          ref: 
        TownName:
          type: string
          example: 
          description: Allows searching for consultants by municipality.
          format: 
          items: 
          enum: 
          ref: 
      description: Input schema for requesting detailed information about the real estate consultant
    RasorInfoResponse:
      type: object
      properties:
        Name:
          type: string
          example: 
          description: Full name of the real estate consultant.
          format: 
          items: 
          enum: 
          ref: 
        Phone:
          type: string
          example: 
          description: Landline number of the real estate consultant.
          format: 
          items: 
          enum: 
          ref: 
        Mobile:
          type: string
          example: 
          description: Mobile phone number of the real estate consultant.
          format: 
          items: 
          enum: 
          ref: 
        Observations:
          type: string
          example: 
          description: Additional observations related to the real estate consultant.
          format: 
          items: 
          enum: 
          ref: 
        Email:
          type: string
          example: 
          description: Email address of the real estate consultant.
          format: 
          items: 
          enum: 
          ref: 
        Address:
          type: string
          example: 
          description: Full address of the real estate consultant or office.
          format: 
          items: 
          enum: 
          ref: 
        City:
          type: string
          example: 
          description: Municipality where the consultant operates.
          format: 
          items: 
          enum: 
          ref: 
        Parish:
          type: string
          example: 
          description: Parish where the consultant operates.
          format: 
          items: 
          enum: 
          ref: 
        SpokenLanguages:
          type: array
          example: 
          description: List of languages spoken by the consultant.
          format: 
          items: 
          enum: 
          ref: 
        SocialProfiles:
          type: array
          example: 
          description: List of links to the consultant’s social profiles or pages.
          format: 
          items:
            type: 
            example: 
            description: 
            format: 
            items: 
            enum: 
            ref: '#/components/schemas/SocialProfile'
          enum: 
          ref: 
        Avatar:
          type: string
          example: 
          description: Image of the avatar associated with the consultant.
          format: 
          items: 
          enum: 
          ref: 
        ListingUrl:
          type: string
          example: 
          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.
          format: 
          items: 
          enum: 
          ref: 
        DetailUrl:
          type: string
          example: 
          description: Page displaying the agent’s full information, including contact details, professional profile and associated properties.
          format: 
          items: 
          enum: 
          ref: 
      description: Output schema with detailed information about the real estate consultant
    IMIRequest:
      type: object
      properties:
        TownName:
          type: string
          example: 
          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".'
          format: 
          items: 
          enum: 
          ref: 
        TaxableValue:
          type: number
          example: 
          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
          items: 
          enum: 
          ref: 
        DependentsNumber:
          type: integer
          example: 
          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
          items: 
          enum: 
          ref: 
        IsUrban:
          type: boolean
          example: 
          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.'
          format: 
          items: 
          enum: 
          ref: 
      description: Input schema used to request the calculation of the Municipal Property Tax (IMI) for a property.
    IMIResponse:
      type: object
      properties:
        TownName:
          type: string
          example: 
          description: Name of the municipality considered for the IMI calculation
          format: 
          items: 
          enum: 
          ref: 
        TaxableValue:
          type: string
          example: 
          description: Taxable Patrimonial Value (VPT) considered for the IMI calculation, expressed in euros
          format: 
          items: 
          enum: 
          ref: 
        DependentsNumber:
          type: string
          example: 
          description: Number of dependents considered for benefits applied in the IMI calculation
          format: 
          items: 
          enum: 
          ref: 
        IsUrban:
          type: string
          example: 
          description: Indication whether the property is urban or rural, considered for the IMI calculation
          format: 
          items: 
          enum: 
          ref: 
        IMIValue:
          type: string
          example: 
          description: Final IMI (Municipal Property Tax) value calculated based on the provided data.
          format: 
          items: 
          enum: 
          ref: 
        IMITaxValue:
          type: string
          example: 
          description: Rate used for the calculation of the IMI value.
          format: 
          items: 
          enum: 
          ref: 
        DependentDiscount:
          type: string
          example: 
          description: Discount value based on the number of dependents.
          format: 
          items: 
          enum: 
          ref: 
        DataYear:
          type: integer
          example: 
          description: Reference year of the rates used for the IMI calculation.
          format: int32
          items: 
          enum: 
          ref: 
      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
          example: 
          description: Identifier of the company/agency to query (optional, defaults to the company’s internal one).
          format: int32
          items: 
          enum: 
          ref: 
      description: Summary of available services, including their purpose and application for customers.
    ServicesInfoResponse:
      type: object
      properties:
        companyId:
          type: integer
          example: 
          description: Unique identifier of the company associated with the services catalogue.
          format: int32
          items: 
          enum: 
          ref: 
        companyName:
          type: string
          example: 
          description: Name of the company that provides the services catalogue.
          format: 
          items: 
          enum: 
          ref: 
        categories:
          type: array
          example: 
          description: List of available service categories, organised by customer profile.
          format: 
          items:
            type: 
            example: 
            description: 
            format: 
            items: 
            enum: 
            ref: '#/components/schemas/ServiceCategory'
          enum: 
          ref: 
      description: Summary of the services provided to the customer, including details, scope, and application.
security: 
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.
      security: 
      operationId: mcpSearch
      parameters:
      - name: BusinessType
        in: query
        required: false
        schema:
          type: string
          example: 
          description: 
          format: 
          items: 
          enum: 
          ref: 
        description: Defines or returns the identifier of the property's business type (Rent, Sale, Transfer of Contractual Position, Transfer Ownership). If not specified in the search, Sale will be used by default
      - name: CountryName
        in: query
        required: true
        schema:
          type: string
          example: 
          description: 
          format: 
          items: 
          enum: 
          ref: 
        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
          example: 
          description: 
          format: 
          items: 
          enum: 
          ref: 
        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
          example: 
          description: 
          format: 
          items: 
          enum: 
          ref: 
        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
          example: 
          description: 
          format: 
          items: 
          enum: 
          ref: 
        description: Name or ID of the parish (neighborhood) where the property is located.
      - name: ZoneName
        in: query
        required: false
        schema:
          type: string
          example: 
          description: 
          format: 
          items: 
          enum: 
          ref: 
        description: Geographic zone identifier used for filtering in searches.
      - name: MasterCategoryIds
        in: query
        required: false
        schema:
          type: array
          example: 
          description: 
          format: 
          items:
            type: string
            example: 
            description: 
            format: 
            items: 
            enum: 
            ref: 
          enum: 
          ref: 
        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
          example: 
          description: 
          format: 
          items:
            type: string
            example: 
            description: 
            format: 
            items: 
            enum: 
            ref: 
          enum: 
          ref: 
        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
          example: 
          description: 
          format: 
          items: 
          enum: 
          ref: 
        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
          example: 
          description: 
          format: int32
          items: 
          enum: 
          ref: 
        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
          example: 
          description: 
          format: int32
          items: 
          enum: 
          ref: 
        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
          example: 
          description: 
          format: int32
          items: 
          enum: 
          ref: 
        description: Minimum number of bedrooms to filter by
      - name: MaxBedrooms
        in: query
        required: false
        schema:
          type: integer
          example: 
          description: 
          format: int32
          items: 
          enum: 
          ref: 
        description: Maximum number of bedrooms to filter by
      - name: Bathrooms
        in: query
        required: false
        schema:
          type: integer
          example: 
          description: 
          format: int32
          items: 
          enum: 
          ref: 
        description: Minimum number of bathrooms.
      - name: ListingReference
        in: query
        required: false
        schema:
          type: string
          example: 
          description: 
          format: 
          items: 
          enum: 
          ref: 
        description: Internal reference of the property used for identification.
      - name: DevelopmentName
        in: query
        required: false
        schema:
          type: string
          example: 
          description: 
          format: 
          items: 
          enum: 
          ref: 
        description: Development name.
      - name: DevelopmentFractions
        in: query
        required: false
        schema:
          type: boolean
          example: 
          description: 
          format: 
          items: 
          enum: 
          ref: 
        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
          example: 
          description: 
          format: 
          items:
            type: string
            example: 
            description: 
            format: 
            items: 
            enum: 
            ref: 
          enum: 
          ref: 
        description: Development tags used to filter the search. (Bom Sucesso, DEMP - Empreendimentos Lisboa, Fervença Palace, DEMP - Empreendimentos Porto, Aura Residences, Prata Riverside Village, Alure, Empreendimentos Construção Terminada, Odeon Theatre, Sixgild, Estrela 75, Authentic Bicas, DEMP - Empreendimentos Comporta, Setúbal e outros, Terceira 22, Secret Gardens Villas, Vistabella, DEMP - Empreendimentos Cascais e Oeiras, Alfândega 80, Green Plaza, Sousa Martins Premium Apartments, Copa Cool Living, ToLive Cascais, Porto Art Square, Quinta Marques Gomes, LIV Santa Catarina, The Yard, WestHouse, Quinta do Cedro, River Line, Empreendimentos Novos Lançamentos, Empreendimentos capa, Camaleão Castro Marim, Pestana Porto Covo Beach Residences, Andaluz 11, Urban Living, Caxias Heights, Monte Castiço, Nama House Carcavelos, Valbom, Floratta Cascais, Villas do Goulão, Empreendimentos loop, Comporta Beach and Golf Resort, Paulo Dias Novais 45, Infante Residences, Savoy D'Avila, Oceanic Reserve, Caparica Hills Villas, Bouça Ribas, Varino 15, Pharma Village, Fiori Cascais, Egas Moniz 209, Casas de Santo Amaro, Conde da Ribeira, Raiz, Foliage, Campo Alegre 1024, Arbo Homes, Priore XXI, Home digest, Páteo da Cordoaria, Porto Gardens, Condes de Caria, Jau 19, Formoso, Freedom, Melides Villas, Rocio Salema Courtyard, Alagoa Living Flats, Alea, Jardim Emídia, Vila Graça)
      - name: WithVideos
        in: query
        required: false
        schema:
          type: boolean
          example: 
          description: 
          format: 
          items: 
          enum: 
          ref: 
        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
          example: 
          description: 
          format: 
          items: 
          enum: 
          ref: 
        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
          example: 
          description: 
          format: 
          items: 
          enum: 
          ref: 
        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
          example: 
          description: 
          format: 
          items: 
          enum: 
          ref: 
        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
          example: 
          description: 
          format: 
          items:
            type: string
            example: 
            description: 
            format: 
            items: 
            enum: 
            ref: 
          enum: 
          ref: 
        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, Access to land, Acustic isolation, Air Conditioning, Airport, Alarm, Ambience music, Annexes, Attic, Bank, Barbecue, Barn, Basement, Beach, Bike rack, Blast door, Boiler, Bottled gas, Building, Bus station, Cable TV, CCTV, Central Heating, Central Vacuum Cleaning System, City, City center, Cleaning service, Closet, Common study room, Corner, Country, Countryside, Creek, Dam, Dinning room, Dishwasher, Display, Domotics, Double glass, Dryer, Ejendommen har kontor, Electric blinds, Electric gate, Electric hob, Electric hot water, Electric stove, Electricity, 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, Kitchen, Kitchen hood, Kitchen service, Kitchenette, Lake, Laundry, Library, Living room, Manual gate, Market, Meeting room, Microwave, Mirrored glass, 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 of cable TV, Pre-installation of central vacuum, Pre-installation of fireplace, Private bathroom, Public Library, Public lighting, Public parking, Public sewage, Public Transportation, Radiant floors, Ramp, Reception, Refrigerator, River, 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 microgeneration, Solar orientation, Solar panels, Solarium, Sports Complex, Storage house, Stove, Subway, Suite, Supermarket, Swimming Pool, Swimming pools, Taxi rank, Tennis Court, Termic isolation, Terrace, Terrain Type (Slope), Trade Zone, Tub, Turkish bath, Vaccum, Video entry, Video surveillance, Vineyard, Wall, Washer machine, Water, Whirlpool tub, Wide range of services, Wi-fi, Wine cellar, Wine press, Winter garden)
      - name: Page
        in: query
        required: false
        schema:
          type: integer
          example: 
          description: 
          format: int32
          items: 
          enum: 
          ref: 
        description: Page number to return in the search results.
      required: 
      responses:
        200:
          description: Success
          content:
            application/json:
              schema:
                ref: '#/components/schemas/SearchResponse'
      requestBody: 
      servers: 
    post: 
  /mcp/detail:
    get:
      summary: Retrieves detailed information about a real estate property.
      description: Retrieves detailed information about a real estate property.
      security: 
      operationId: mcpDetail
      parameters:
      - name: ListingId
        in: query
        required: false
        schema:
          type: integer
          example: 
          description: 
          format: int32
          items: 
          enum: 
          ref: 
        description: Property ID for contact.
      - name: ListingReference
        in: query
        required: false
        schema:
          type: string
          example: 
          description: 
          format: 
          items: 
          enum: 
          ref: 
        description: Internal reference of the property used for identification.
      - name: DevelopmentFractions
        in: query
        required: false
        schema:
          type: boolean
          example: 
          description: 
          format: 
          items: 
          enum: 
          ref: 
        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.
      required: 
      responses:
        200:
          description: Success
          content:
            application/json:
              schema:
                ref: '#/components/schemas/DetailResponse'
      requestBody: 
      servers: 
    post: 
  /mcp/lead:
    get:
      summary: Submit a contact form for a specific listing.
      description: Submit a contact form for a specific listing.
      security: 
      operationId: mcpLead
      parameters:
      - name: ListingId
        in: query
        required: false
        schema:
          type: integer
          example: 
          description: 
          format: int32
          items: 
          enum: 
          ref: 
        description: Property ID for contact.
      - name: ListingReference
        in: query
        required: false
        schema:
          type: string
          example: 
          description: 
          format: 
          items: 
          enum: 
          ref: 
        description: Internal reference of the property used for identification.
      - name: Name
        in: query
        required: true
        schema:
          type: string
          example: 
          description: 
          format: 
          items: 
          enum: 
          ref: 
        description: User's name., (is required)
      - name: Email
        in: query
        required: true
        schema:
          type: string
          example: 
          description: 
          format: 
          items: 
          enum: 
          ref: 
        description: User's email address (required if no phone number is provided)., (is required)
      - name: Phone
        in: query
        required: false
        schema:
          type: string
          example: 
          description: 
          format: 
          items: 
          enum: 
          ref: 
        description: User's phone number (optional if email address is provided).
      - name: PhoneCountryCode
        in: query
        required: false
        schema:
          type: string
          example: 
          description: 
          format: 
          items: 
          enum: 
          ref: 
        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
          example: 
          description: 
          format: 
          items: 
          enum: 
          ref: 
        description: Custom message from the user.
      required: 
      responses:
        200:
          description: Success
          content:
            application/json:
              schema:
                ref: '#/components/schemas/LeadResponse'
      requestBody: 
      servers: 
    post: 
  /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.
      security: 
      operationId: mcpCompanyInfo
      parameters:
      - name: CompanyId
        in: query
        required: false
        schema:
          type: integer
          example: 
          description: 
          format: int32
          items: 
          enum: 
          ref: 
        description: Identifier of the company/agency to query (optional, defaults to the company’s internal one).
      required: 
      responses:
        200:
          description: Success
          content:
            application/json:
              schema:
                ref: '#/components/schemas/CompanyInfoWithAgenciesResponse'
      requestBody: 
      servers: 
    post: 
  /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.
      security: 
      operationId: mcpRasorInfo
      parameters:
      - name: RasorName
        in: query
        required: false
        schema:
          type: string
          example: 
          description: 
          format: 
          items: 
          enum: 
          ref: 
        description: Name of the real estate consultant for whom detailed information is requested.
      - name: StateName
        in: query
        required: false
        schema:
          type: string
          example: 
          description: 
          format: 
          items: 
          enum: 
          ref: 
        description: Allows searching for consultants by district.
      - name: TownName
        in: query
        required: false
        schema:
          type: string
          example: 
          description: 
          format: 
          items: 
          enum: 
          ref: 
        description: Allows searching for consultants by municipality.
      required: 
      responses:
        200:
          description: Success
          content:
            application/json:
              schema:
                ref: '#/components/schemas/RasorInfoResponse'
      requestBody: 
      servers: 
    post: 
  /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.
      security: 
      operationId: mcpImiCalculator
      parameters:
      - name: TownName
        in: query
        required: false
        schema:
          type: string
          example: 
          description: 
          format: 
          items: 
          enum: 
          ref: 
        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
          example: 
          description: 
          format: decimal
          items: 
          enum: 
          ref: 
        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
          example: 
          description: 
          format: int32
          items: 
          enum: 
          ref: 
        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
          example: 
          description: 
          format: 
          items: 
          enum: 
          ref: 
        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.'
      required: 
      responses:
        200:
          description: Success
          content:
            application/json:
              schema:
                ref: '#/components/schemas/IMIResponse'
      requestBody: 
      servers: 
    post: 
  /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.
      security: 
      operationId: mcpServicesInfo
      parameters:
      - name: CompanyId
        in: query
        required: false
        schema:
          type: integer
          example: 
          description: 
          format: int32
          items: 
          enum: 
          ref: 
        description: Identifier of the company/agency to query (optional, defaults to the company’s internal one).
      required: 
      responses:
        200:
          description: Success
          content:
            application/json:
              schema:
                ref: '#/components/schemas/ServicesInfoResponse'
      requestBody: 
      servers: 
    post: 

```

## System Prompts & AI Guidance {#system-prompts}

The following system prompts guide AI behavior for different operation modes:

## Contact Information {#contact-information}

**Agency Name:** Quintela + Penalva | Knight Frank
**Email:** lisboa@quintelaepenalva.pt
**Phone:** 212454059
**Address:** 

### Additional Contact Numbers

- 212454059
- 211972056
- 220999220

### Support & Legal

- **Website:** https://www.quintelaepenalva.pt/
- **Privacy Policy:** https://www.quintelaepenalva.pt/politica-de-privacidade
- **Terms of Service:** https://www.quintelaepenalva.pt/termos-e-condicoes
- **Cookie Policy:** https://www.quintelaepenalva.pt/politica-de-cookies
- **Dispute Resolution:** https://www.quintelaepenalva.pt/resolucao-alternativa-de-litigios

---

*This documentation was automatically generated for Quintela + Penalva | Knight Frank MCP Server.*
*For updates, visit: https://www.quintelaepenalva.pt/llms-full.txt*

