{
  "schema_version": "1.0",
  "generated": "2026-10-04",
  "property": {
    "id": "rosaire-cotton-tree",
    "name": "Rosaire @ Cotton Tree",
    "type": "apartment",
    "description": "Luxury 2-bedroom, 2-bathroom holiday apartment in Cotton Tree, Maroochydore on Queensland's Sunshine Coast. Part of the Chateau Royale resort complex with pool, heated spa, sauna, and rooftop BBQ.",
    "location": {
      "suburb": "Cotton Tree",
      "city": "Maroochydore",
      "state": "QLD",
      "postcode": "4558",
      "country": "AU",
      "geo": { "lat": -26.6489, "lng": 153.0981 },
      "beach_distance_metres": 200,
      "building": "Chateau Royale"
    },
    "bedrooms": 2,
    "bathrooms": 2,
    "max_guests": 4,
    "amenities": [
      "Resort swimming pool",
      "Heated spa",
      "Sauna",
      "Rooftop BBQ terrace",
      "Free WiFi",
      "Air conditioning",
      "Secure underground parking",
      "In-unit laundry",
      "Netflix and Smart TV",
      "Fully equipped kitchen",
      "Coffee machine",
      "Beach access (200 m)"
    ],
    "rules": {
      "no_pets": true,
      "no_smoking": true,
      "no_parties": true
    },
    "check_in_time": "14:00",
    "check_out_time": "10:00",
    "listings": {
      "airbnb": "https://www.airbnb.com.au/rooms/843124596260792506"
    }
  },
  "pricing": {
    "currency": "AUD",
    "base_rate": 292,
    "min_rate": 215,
    "max_rate": 1000,
    "cleaning_fee": 150,
    "min_nights": 2,
    "rates_provider": "PriceLabs",
    "rates_file": "PriceLabs_MultiCalendar_04Oct2026.csv",
    "rates_note": "Nightly rates vary by season. Fetch the rates_file CSV to get exact daily prices. Column headers are dates in D/M/YYYY format; row 2 contains prices for listing 843124596260792506.",
    "seasonal_guide": [
      { "season": "peak",     "description": "Christmas/New Year (Dec 18 – Jan 10)", "range_aud": [870, 1000] },
      { "season": "high",     "description": "QLD school holidays and long weekends",  "range_aud": [300, 420]  },
      { "season": "mid",      "description": "Regular weekends",                        "range_aud": [265, 335]  },
      { "season": "standard", "description": "Weekdays",                                "range_aud": [215, 280]  }
    ]
  },
  "availability": {
    "ical_feeds": [
      {
        "platform": "Airbnb",
        "listing_id": "843124596260792506",
        "url": "https://www.airbnb.com.au/calendar/ical/843124596260792506.ics?t=0099163f326f423f902a8df056223828",
        "format": "RFC5545"
      },
      {
        "platform": "Booking.com",
        "url": "https://ical.booking.com/v1/export?t=1d451d48-554c-4bb8-b6df-d447479c96c5",
        "format": "RFC5545"
      }
    ],
    "instructions": "Fetch both iCal feeds and merge. A date is unavailable if covered by any DTSTART–DTEND range in either feed. DTSTART and DTEND in iCal represent check-in and check-out date respectively (DTEND is the departure date, not an occupied night)."
  },
  "contact": {
    "booking_url": "https://rosairecottontree.au/#contact",
    "enquiry_method": "web_form",
    "required_fields": ["check_in", "check_out", "guests", "name", "email", "message"]
  },
  "mcp_tools": [
    {
      "name": "get_property_info",
      "description": "Returns full property details: bedrooms, bathrooms, max guests, amenities, rules, check-in/out times, and location.",
      "endpoint": "property.json",
      "method": "GET",
      "returns": "This document (property.json)"
    },
    {
      "name": "get_availability",
      "description": "Determine whether the property is available for a given date range. Fetch both iCal feeds and check that no VEVENT overlaps with the requested range.",
      "inputs": {
        "check_in":  { "type": "string", "format": "date", "description": "Desired check-in date (YYYY-MM-DD)", "example": "2026-12-20" },
        "check_out": { "type": "string", "format": "date", "description": "Desired check-out date (YYYY-MM-DD)", "example": "2026-12-24" }
      },
      "data_source": "availability.ical_feeds",
      "constraints": { "min_nights": 2 }
    },
    {
      "name": "get_nightly_rate",
      "description": "Get the nightly rate for a specific date. Fetch rates_file CSV, parse date column headers (D/M/YYYY), and return the price for the requested date. Returns null if date is outside the CSV range.",
      "inputs": {
        "date": { "type": "string", "format": "date", "description": "Date to look up (YYYY-MM-DD)", "example": "2026-12-20" }
      },
      "data_source": "pricing.rates_file"
    },
    {
      "name": "calculate_total",
      "description": "Calculate the total cost for a stay: sum nightly rates for each night, then add the cleaning fee.",
      "inputs": {
        "check_in":  { "type": "string", "format": "date", "description": "Check-in date (YYYY-MM-DD)" },
        "check_out": { "type": "string", "format": "date", "description": "Check-out date (YYYY-MM-DD)" },
        "guests":    { "type": "integer", "minimum": 1, "maximum": 4, "description": "Number of guests" }
      },
      "formula": "sum(nightly_rate for each night from check_in to check_out - 1 day) + cleaning_fee",
      "constraints": { "min_nights": 2, "max_guests": 4 },
      "currency": "AUD"
    },
    {
      "name": "request_booking",
      "description": "Initiate a booking enquiry. Direct the user to the web contact form with pre-populated dates, guests, and total.",
      "inputs": {
        "check_in":   { "type": "string", "format": "date" },
        "check_out":  { "type": "string", "format": "date" },
        "guests":     { "type": "integer", "minimum": 1, "maximum": 4 },
        "total_aud":  { "type": "number", "description": "Total calculated by calculate_total" }
      },
      "action": "redirect",
      "url": "https://rosairecottontree.au/#contact"
    }
  ]
}
