Install
openclaw skills install @cotghw/pricewin-price-comparisonCompare live hotel room rates across Booking.com, Agoda, Traveloka, and OpenTravel for specific dates — which OTA is cheapest for the same property, per-room prices, and free-cancellation terms. Use when comparing hotel prices, checking room rates for a named hotel, asking which site is cheaper, or finding the best rate for given check-in/check-out dates.
openclaw skills install @cotghw/pricewin-price-comparisonRequires the
pricewinMCP server. This skill issues no network calls of its own.
MCP server: pricewin. Compares live rates across Booking.com, Agoda, Traveloka (crawled) plus OpenTravel (direct API).
Comparison is something you do over the returned sources — there is no server-side compare call. Pick the entry point by what the user gave you:
| User gave you | Tool |
|---|---|
| A city — "compare hotel prices in Da Nang" | search_hotels_live → poll_search_results |
| A named hotel — "is Mercure Danang cheaper on Agoda or Booking?" | get_ota_hotel_detail |
A hotel already known to be OpenTravel direct (source: "OPENTRAVEL_DIRECT", has propertyId) | get_hotel_detail |
search_hotels_live returns IMMEDIATELY with a sessionId — it does not return hotels.
search_hotels_live — required: city, checkIn, checkOut (YYYY-MM-DD). Optional: adults (default 2), rooms, area, hotelName, priceMin, priceMax, languagepoll_search_results(sessionId, nights)status is pending or partial: wait 5s and poll again — up to 18 times (90s)status == "partial" with hotels; keep polling silently and refineThen compare per hotel across its sources. See pricewin-hotel-search
for the full dedupe + presentation contract — do not restate it differently here.
get_ota_hotel_detail — for one specific Booking.com/Agoda hotel the user named.
checkIn, checkOut. Pass hotelName + city + queryText (verbatim user text) whenever knownsearch_hotels_live for a named hotel — that returns a whole-city listprices.booking.url, pass it as propertyUrl to skip name resolutionReturns rooms, prices, facilities, photos, reviews for that property.
get_hotel_detail — only for results with source: "OPENTRAVEL_DIRECT".
propertyId (UUID from opentravelResults[].propertyId) when availablehotelName + city is a fallback only for a property already confirmed as OpenTravel directcheckIn, checkOut. Optional: adults, children, languageroomTypeId and ratePlanId — these are what make a property bookable⚠️ Router rule: have a propertyId → get_hotel_detail. Name only → get_ota_hotel_detail.
For OpenTravel rate plans only: get_cancellation_policy(propertyId, ratePlanId, checkInDate)
→ non-refundable flag, free-cancellation window, refund %, and the computed deadline.
ratePlanId comes from get_hotel_detail → roomTypes[].ratePlanId. Pass checkInDate
or you get no deadline. OTA hotels have no structured policy — quote whatever the crawl returned.
Agoda $X · Booking $Y · OpenTravel $Z(next - cheapest) / next * 100 → "Save Z%"Tool inputs and response fields: reference.md.