PriceWin

Live hotel and flight prices compared across Booking.com, Agoda, Trip.com and Traveloka, in USD.

¿Debería usar esto?

Calidad y seguridad

A
Calidad de la descripción
100%
Integridad del esquema
98%
Calidad de los nombres
93%
Riesgo de envenenamiento
100%
Coincidencia de permisos
100%
Cumplimiento del protocolo
100%

Basado en el análisis automatizado de las definiciones de herramientas y el cumplimiento del protocolo.

Costo de contexto

~8,557Tokens (definiciones de herramientas)
~7.1 KBTamaño de respuesta típico
Impacto significativo en la atención (6.69% del contexto de 128k)

Este es el número aproximado de tokens que se consumen cada vez que las herramientas del servidor se cargan en el contexto de un modelo. Los recuentos más altos reducen la atención disponible para otras tareas.

Instalar

Instalación con un clic

Agrega esto a tu archivo `claude_desktop_config.json`:

{
  "mcpServers": {
    "pricewin": {
      "url": "https://mcp.price.win/mcp"
    }
  }
}

Puntos de conexión remotos

https://mcp.price.win/mcpstreamable-http

Qué puede hacer

Inventario de herramientas

Herramientas (12)

🟢 Solo lectura🟡 Escritura🔴 Eliminación⚪ Desconocido
🟢search_hotels_live(city, checkIn, checkOut, adults, rooms, ...)

Starts a live hotel search for a city and date range. Prices come from Agoda, Booking.com and Traveloka, plus direct rates from OpenTravel partner hotels. Returns a session ID; poll_search_results returns the results as they arrive. Optional filters narrow the results by hotel name, area or total price for the stay. Prices depend on the party: it defaults to 2 adults in 1 room, and the result states the party searched and flags when it was defaulted. When the city or dates are missing, the result is a question for the user instead of a search; the stay dates searched are echoed back for confirmation.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "city": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100,
      "description": "City or broad destination, e.g. 'Da Nang'. When omitted, the result asks the user for it."
    },
    "checkIn": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      "description": "Check-in date (YYYY-MM-DD), today or later. When omitted, the result asks the user for it."
    },
    "checkOut": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      "description": "Check-out date (YYYY-MM-DD), after checkIn. When omitted, the result asks the user for it."
    },
    "adults": {
      "type": "integer",
      "minimum": 1,
      "maximum": 20,
      "default": 2,
      "description": "Number of adults (default 2). Prices depend on it."
    },
    "rooms": {
      "type": "integer",
      "minimum": 1,
      "maximum": 20,
      "default": 1,
      "description": "Number of rooms (default 1)."
    },
    "children": {
      "type": "integer",
      "minimum": 0,
      "maximum": 20,
      "default": 0,
      "description": "Number of children sharing the room (default 0). OTA prices cannot include children; the result says so when children are given."
    },
    "hotelName": {
      "type": "string",
      "maxLength": 200,
      "description": "Optional hotel-name filter when the user names a specific property"
    },
    "area": {
      "type": "string",
      "maxLength": 120,
      "description": "Optional district, ward, or neighborhood filter within the city"
    },
    "priceMin": {
      "type": "number",
      "minimum": 0,
      "maximum": 1000000000,
      "description": "Minimum total price for the whole stay (not per night), in priceCurrency."
    },
    "priceMax": {
      "type": "number",
      "minimum": 0,
      "maximum": 1000000000,
      "description": "Maximum total price for the whole stay (not per night), in priceCurrency."
    },
    "priceCurrency": {
      "type": "string",
      "pattern": "^[A-Za-z]{3}$",
      "description": "ISO 4217 code of priceMin/priceMax (USD, EUR, VND, …); defaults to the currency of the UI language."
    },
    "queryText": {
      "type": "string",
      "maxLength": 500,
      "description": "Optional short excerpt of the current request, used only to detect the UI language; it is not stored or forwarded."
    },
    "language": {
      "type": "string",
      "enum": [
        "en",
        "vi",
        "de",
        "ja",
        "ko",
        "zh",
        "fr",
        "es",
        "ru",
        "th",
        "id"
      ],
      "description": "Preferred UI language (en/vi/de/ja/ko/zh/fr/es/ru/th/id)."
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Esquema de salida

{
  "type": "object",
  "properties": {
    "sessionId": {
      "type": "string"
    },
    "city": {
      "type": "string"
    },
    "checkIn": {
      "type": "string"
    },
    "checkOut": {
      "type": "string"
    },
    "nights": {
      "type": "number"
    },
    "cached": {
      "type": "boolean"
    },
    "language": {
      "type": "string",
      "enum": [
        "en",
        "vi",
        "de",
        "ja",
        "ko",
        "zh",
        "fr",
        "es",
        "ru",
        "th",
        "id"
      ]
    },
    "status": {
      "type": "string"
    },
    "progress": {
      "type": "number"
    },
    "bookingStatus": {
      "type": "string"
    },
    "agodaStatus": {
      "type": "string"
    },
    "travelokaStatus": {
      "type": "string"
    },
    "totalHotels": {
      "type": "number"
    },
    "hotels": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "stars": {
            "type": "number"
          },
          "rating": {
            "type": "number"
          },
          "reviewCount": {
            "type": "number"
          },
          "imageUrl": {
            "type": "string"
          },
          "location": {
            "type": "string"
          },
          "prices": {
            "type": "object",
            "properties": {
              "agoda": {
                "type": "object",
                "properties": {
                  "price": {
                    "type": "number"
                  },
                  "currency": {
                    "type": "string"
                  },
                  "url": {
                    "type": "string"
                  }
                },
                "required": [
                  "price",
                  "currency",
                  "url"
                ],
                "additionalProperties": true
              },
              "booking": {
                "$ref": "#/properties/hotels/items/properties/prices/properties/agoda"
              },
              "traveloka": {
                "$ref": "#/properties/hotels/items/properties/prices/properties/agoda"
              }
            },
            "additionalProperties": true
          }
        },
        "required": [
          "name",
          "stars",
          "rating",
          "reviewCount",
          "imageUrl",
          "location",
          "prices"
        ],
        "additionalProperties": true
      }
    },
    "offset": {
      "type": "number"
    },
    "limit": {
      "type": "number"
    },
    "hasMore": {
      "type": "boolean"
    },
    "tier": {
      "type": "string"
    },
    "tier2AgodaStatus": {
      "type": [
        "string",
        "null"
      ]
    },
    "tier2BookingStatus": {
      "type": [
        "string",
        "null"
      ]
    },
    "tier2TravelokaStatus": {
      "type": [
        "string",
        "null"
      ]
    },
    "opentravelStatus": {
      "type": "string"
    },
    "opentravelResults": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "propertyId": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "address": {
            "type": [
              "string",
              "null"
            ]
          },
          "city": {
            "type": [
              "string",
              "null"
            ]
          },
          "country": {
            "type": [
              "string",
              "null"
            ]
          },
          "countryCode": {
            "type": [
              "string",
              "null"
            ]
          },
          "mainImageUrl": {
            "type": [
              "string",
              "null"
            ]
          },
          "cheapestPrice": {
            "type": "number"
          },
          "totalForStay": {
            "type": "number"
          },
          "currency": {
            "type": "string"
          },
          "nights": {
            "type": "number"
          },
          "source": {
            "type": "string",
            "const": "OPENTRAVEL_DIRECT"
          },
          "priceType": {
            "type": "string",
            "enum": [
              "available",
              "indicative"
            ]
          },
          "indicativeNote": {
            "type": "string"
          },
          "availableRoomTypes": {
            "type": "number"
          }
        },
        "required": [
          "propertyId",
          "name",
          "address",
          "city",
          "mainImageUrl",
          "cheapestPrice",
          "totalForStay",
          "currency",
          "nights",
          "source",
          "priceType"
        ],
        "additionalProperties": true
      }
    },
    "opentravelIndicativeResults": {
      "type": "array",
      "items": {
        "$ref": "#/properties/opentravelResults/items"
      }
    },
    "fxRates": {
      "type": "object",
      "additionalProperties": {
        "type": "number"
      }
    },
    "longStayNotice": {
      "type": [
        "string",
        "null"
      ]
    }
  },
  "required": [
    "city",
    "checkIn",
    "checkOut",
    "nights",
    "status",
    "progress",
    "bookingStatus",
    "agodaStatus",
    "travelokaStatus",
    "totalHotels",
    "hotels",
    "offset",
    "limit",
    "hasMore",
    "tier",
    "tier2AgodaStatus",
    "tier2BookingStatus",
    "tier2TravelokaStatus",
    "opentravelStatus",
    "opentravelResults",
    "opentravelIndicativeResults",
    "fxRates"
  ],
  "additionalProperties": true,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢poll_search_results(sessionId, nights, offset, limit, hotelName, ...)

Returns the current results of a hotel search session started by search_hotels_live: hotels with their price from each source, and OpenTravel direct listings with the propertyId that get_hotel_detail and get_hotel_info take. Results can be partial while the search runs; status reads 'completed' once every source has answered.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "sessionId": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{1,64}(\\.[A-Za-z0-9_-]{1,16})?$",
      "description": "Session ID from search_hotels_live"
    },
    "nights": {
      "type": "integer",
      "minimum": 1,
      "maximum": 365,
      "description": "Number of nights"
    },
    "offset": {
      "type": "integer",
      "minimum": 0,
      "default": 0,
      "description": "Skip first N hotels for pagination (default 0)"
    },
    "limit": {
      "type": "integer",
      "minimum": 0,
      "maximum": 100,
      "default": 50,
      "description": "Max hotels to return; 0 = all (default 50)"
    },
    "hotelName": {
      "type": "string",
      "maxLength": 200,
      "description": "Optional override for the hotel-name filter captured at search time"
    },
    "area": {
      "type": "string",
      "maxLength": 120,
      "description": "Optional override for the area filter captured at search time"
    },
    "priceMin": {
      "type": "number",
      "minimum": 0,
      "maximum": 1000000000,
      "description": "Optional override for the minimum-price filter"
    },
    "priceMax": {
      "type": "number",
      "minimum": 0,
      "maximum": 1000000000,
      "description": "Optional override for the maximum-price filter"
    },
    "priceCurrency": {
      "type": "string",
      "pattern": "^[A-Za-z]{3}$",
      "description": "ISO 4217 code of priceMin/priceMax; defaults to the UI language's currency"
    }
  },
  "required": [
    "sessionId",
    "nights"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Esquema de salida

{
  "type": "object",
  "properties": {
    "sessionId": {
      "type": "string"
    },
    "city": {
      "type": "string"
    },
    "checkIn": {
      "type": "string"
    },
    "checkOut": {
      "type": "string"
    },
    "nights": {
      "type": "number"
    },
    "cached": {
      "type": "boolean"
    },
    "language": {
      "type": "string",
      "enum": [
        "en",
        "vi",
        "de",
        "ja",
        "ko",
        "zh",
        "fr",
        "es",
        "ru",
        "th",
        "id"
      ]
    },
    "status": {
      "type": "string"
    },
    "progress": {
      "type": "number"
    },
    "bookingStatus": {
      "type": "string"
    },
    "agodaStatus": {
      "type": "string"
    },
    "travelokaStatus": {
      "type": "string"
    },
    "totalHotels": {
      "type": "number"
    },
    "hotels": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "stars": {
            "type": "number"
          },
          "rating": {
            "type": "number"
          },
          "reviewCount": {
            "type": "number"
          },
          "imageUrl": {
            "type": "string"
          },
          "location": {
            "type": "string"
          },
          "prices": {
            "type": "object",
            "properties": {
              "agoda": {
                "type": "object",
                "properties": {
                  "price": {
                    "type": "number"
                  },
                  "currency": {
                    "type": "string"
                  },
                  "url": {
                    "type": "string"
                  }
                },
                "required": [
                  "price",
                  "currency",
                  "url"
                ],
                "additionalProperties": true
              },
              "booking": {
                "$ref": "#/properties/hotels/items/properties/prices/properties/agoda"
              },
              "traveloka": {
                "$ref": "#/properties/hotels/items/properties/prices/properties/agoda"
              }
            },
            "additionalProperties": true
          }
        },
        "required": [
          "name",
          "stars",
          "rating",
          "reviewCount",
          "imageUrl",
          "location",
          "prices"
        ],
        "additionalProperties": true
      }
    },
    "offset": {
      "type": "number"
    },
    "limit": {
      "type": "number"
    },
    "hasMore": {
      "type": "boolean"
    },
    "tier": {
      "type": "string"
    },
    "tier2AgodaStatus": {
      "type": [
        "string",
        "null"
      ]
    },
    "tier2BookingStatus": {
      "type": [
        "string",
        "null"
      ]
    },
    "tier2TravelokaStatus": {
      "type": [
        "string",
        "null"
      ]
    },
    "opentravelStatus": {
      "type": "string"
    },
    "opentravelResults": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "propertyId": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "address": {
            "type": [
              "string",
              "null"
            ]
          },
          "city": {
            "type": [
              "string",
              "null"
            ]
          },
          "country": {
            "type": [
              "string",
              "null"
            ]
          },
          "countryCode": {
            "type": [
              "string",
              "null"
            ]
          },
          "mainImageUrl": {
            "type": [
              "string",
              "null"
            ]
          },
          "cheapestPrice": {
            "type": "number"
          },
          "totalForStay": {
            "type": "number"
          },
          "currency": {
            "type": "string"
          },
          "nights": {
            "type": "number"
          },
          "source": {
            "type": "string",
            "const": "OPENTRAVEL_DIRECT"
          },
          "priceType": {
            "type": "string",
            "enum": [
              "available",
              "indicative"
            ]
          },
          "indicativeNote": {
            "type": "string"
          },
          "availableRoomTypes": {
            "type": "number"
          }
        },
        "required": [
          "propertyId",
          "name",
          "address",
          "city",
          "mainImageUrl",
          "cheapestPrice",
          "totalForStay",
          "currency",
          "nights",
          "source",
          "priceType"
        ],
        "additionalProperties": true
      }
    },
    "opentravelIndicativeResults": {
      "type": "array",
      "items": {
        "$ref": "#/properties/opentravelResults/items"
      }
    },
    "fxRates": {
      "type": "object",
      "additionalProperties": {
        "type": "number"
      }
    },
    "longStayNotice": {
      "type": [
        "string",
        "null"
      ]
    }
  },
  "required": [
    "city",
    "checkIn",
    "checkOut",
    "nights",
    "status",
    "progress",
    "bookingStatus",
    "agodaStatus",
    "travelokaStatus",
    "totalHotels",
    "hotels",
    "offset",
    "limit",
    "hasMore",
    "tier",
    "tier2AgodaStatus",
    "tier2BookingStatus",
    "tier2TravelokaStatus",
    "opentravelStatus",
    "opentravelResults",
    "opentravelIndicativeResults",
    "fxRates"
  ],
  "additionalProperties": true,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢search_flights_live(origin, destination, departureDate, returnDate, adults, ...)

Starts a live flight search for a route and date, one-way or return. Fares come from Agoda, Trip.com, Traveloka and Google Flights. Origin and destination are 3-letter IATA airport codes (for example SGN, HAN, DAD). Returns a session ID; poll_flight_results returns the results. When the route or date is missing, the result is a question for the user instead of a search.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "origin": {
      "type": "string",
      "pattern": "^[A-Za-z]{3}$",
      "description": "Departure airport IATA code, e.g. 'SGN'. When omitted, the result asks the user for it."
    },
    "destination": {
      "type": "string",
      "pattern": "^[A-Za-z]{3}$",
      "description": "Arrival airport IATA code, e.g. 'HAN'. When omitted, the result asks the user for it."
    },
    "departureDate": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      "description": "Departure date YYYY-MM-DD, today or later. When omitted, the result asks the user for it."
    },
    "returnDate": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      "description": "Return date YYYY-MM-DD (omit for one-way). Must be on or after departureDate."
    },
    "adults": {
      "type": "integer",
      "minimum": 1,
      "maximum": 20,
      "default": 1,
      "description": "Number of adults (default 1)"
    },
    "cabin": {
      "type": "string",
      "enum": [
        "economy",
        "premium_economy",
        "business",
        "first"
      ],
      "default": "economy",
      "description": "Cabin class (default economy)"
    },
    "queryText": {
      "type": "string",
      "maxLength": 500,
      "description": "Optional short excerpt of the current request, used only to detect the UI language; it is not stored or forwarded."
    },
    "language": {
      "type": "string",
      "enum": [
        "en",
        "vi",
        "de",
        "ja",
        "ko",
        "zh",
        "fr",
        "es",
        "ru",
        "th",
        "id"
      ],
      "description": "Preferred UI language (en/vi/de/ja/ko/zh/fr/es/ru/th/id)."
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Esquema de salida

{
  "type": "object",
  "properties": {
    "sessionId": {
      "type": "string"
    },
    "status": {
      "type": "string"
    },
    "cached": {
      "type": "boolean"
    },
    "origin": {
      "type": "string"
    },
    "destination": {
      "type": "string"
    },
    "departureDate": {
      "type": "string"
    },
    "returnDate": {
      "type": "string"
    },
    "adults": {
      "type": "number"
    },
    "cabin": {
      "type": "string"
    },
    "tripType": {
      "type": "string"
    },
    "language": {
      "type": "string",
      "enum": [
        "en",
        "vi",
        "de",
        "ja",
        "ko",
        "zh",
        "fr",
        "es",
        "ru",
        "th",
        "id"
      ]
    },
    "outboundFlights": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "airline": {
            "type": "string"
          },
          "airlineCode": {
            "type": "string"
          },
          "flightNumber": {
            "type": "string"
          },
          "departure": {
            "type": "object",
            "properties": {
              "airport": {
                "type": "string"
              },
              "city": {
                "type": "string"
              },
              "time": {
                "type": "string"
              },
              "date": {
                "type": "string"
              }
            },
            "required": [
              "airport",
              "city",
              "time",
              "date"
            ],
            "additionalProperties": true
          },
          "arrival": {
            "type": "object",
            "properties": {
              "airport": {
                "type": "string"
              },
              "city": {
                "type": "string"
              },
              "time": {
                "type": "string"
              },
              "date": {
                "type": "string"
              }
            },
            "required": [
              "airport",
              "city",
              "time",
              "date"
            ],
            "additionalProperties": true
          },
          "duration": {
            "type": "number"
          },
          "stops": {
            "type": "number"
          },
          "stopCities": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "price": {
            "type": "number"
          },
          "currency": {
            "type": "string"
          },
          "cabin": {
            "type": "string"
          },
          "bookingUrl": {
            "type": "string"
          },
          "legs": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "departureAirport": {
                  "type": "string"
                },
                "arrivalAirport": {
                  "type": "string"
                },
                "departureTime": {
                  "type": "string"
                },
                "arrivalTime": {
                  "type": "string"
                },
                "departureDate": {
                  "type": "string"
                },
                "arrivalDate": {
                  "type": "string"
                },
                "airline": {
                  "type": "string"
                },
                "flightNumber": {
                  "type": "string"
                },
                "duration": {
                  "type": "number"
                }
              },
              "required": [
                "departureAirport",
                "arrivalAirport",
                "departureTime",
                "arrivalTime",
                "departureDate",
                "arrivalDate",
                "airline",
                "flightNumber",
                "duration"
              ],
              "additionalProperties": true
            }
          }
        },
        "required": [
          "airline",
          "airlineCode",
          "flightNumber",
          "departure",
          "arrival",
          "duration",
          "stops",
          "stopCities",
          "price",
          "currency",
          "cabin",
          "bookingUrl"
        ],
        "additionalProperties": true
      }
    },
    "returnFlights": {
      "type": "array",
      "items": {
        "$ref": "#/properties/outboundFlights/items"
      }
    },
    "totalOutbound": {
      "type": "number"
    },
    "totalReturn": {
      "type": "number"
    }
  },
  "required": [
    "sessionId",
    "status",
    "cached",
    "origin",
    "destination",
    "departureDate",
    "adults",
    "cabin",
    "tripType",
    "outboundFlights",
    "returnFlights",
    "totalOutbound",
    "totalReturn"
  ],
  "additionalProperties": true,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢poll_flight_results(sessionId)

Returns the current results of a flight search session started by search_flights_live: outbound and return options with airline, flight number, times, stops, fare and booking link. Results can be partial while the search runs; status reads 'completed' or 'failed' when it ends.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "sessionId": {
      "type": "string",
      "format": "uuid",
      "description": "Session ID from search_flights_live"
    }
  },
  "required": [
    "sessionId"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Esquema de salida

{
  "type": "object",
  "properties": {
    "sessionId": {
      "type": "string"
    },
    "status": {
      "type": "string"
    },
    "cached": {
      "type": "boolean"
    },
    "origin": {
      "type": "string"
    },
    "destination": {
      "type": "string"
    },
    "departureDate": {
      "type": "string"
    },
    "returnDate": {
      "type": "string"
    },
    "adults": {
      "type": "number"
    },
    "cabin": {
      "type": "string"
    },
    "tripType": {
      "type": "string"
    },
    "language": {
      "type": "string",
      "enum": [
        "en",
        "vi",
        "de",
        "ja",
        "ko",
        "zh",
        "fr",
        "es",
        "ru",
        "th",
        "id"
      ]
    },
    "outboundFlights": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "airline": {
            "type": "string"
          },
          "airlineCode": {
            "type": "string"
          },
          "flightNumber": {
            "type": "string"
          },
          "departure": {
            "type": "object",
            "properties": {
              "airport": {
                "type": "string"
              },
              "city": {
                "type": "string"
              },
              "time": {
                "type": "string"
              },
              "date": {
                "type": "string"
              }
            },
            "required": [
              "airport",
              "city",
              "time",
              "date"
            ],
            "additionalProperties": true
          },
          "arrival": {
            "type": "object",
            "properties": {
              "airport": {
                "type": "string"
              },
              "city": {
                "type": "string"
              },
              "time": {
                "type": "string"
              },
              "date": {
                "type": "string"
              }
            },
            "required": [
              "airport",
              "city",
              "time",
              "date"
            ],
            "additionalProperties": true
          },
          "duration": {
            "type": "number"
          },
          "stops": {
            "type": "number"
          },
          "stopCities": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "price": {
            "type": "number"
          },
          "currency": {
            "type": "string"
          },
          "cabin": {
            "type": "string"
          },
          "bookingUrl": {
            "type": "string"
          },
          "legs": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "departureAirport": {
                  "type": "string"
                },
                "arrivalAirport": {
                  "type": "string"
                },
                "departureTime": {
                  "type": "string"
                },
                "arrivalTime": {
                  "type": "string"
                },
                "departureDate": {
                  "type": "string"
                },
                "arrivalDate": {
                  "type": "string"
                },
                "airline": {
                  "type": "string"
                },
                "flightNumber": {
                  "type": "string"
                },
                "duration": {
                  "type": "number"
                }
              },
              "required": [
                "departureAirport",
                "arrivalAirport",
                "departureTime",
                "arrivalTime",
                "departureDate",
                "arrivalDate",
                "airline",
                "flightNumber",
                "duration"
              ],
              "additionalProperties": true
            }
          }
        },
        "required": [
          "airline",
          "airlineCode",
          "flightNumber",
          "departure",
          "arrival",
          "duration",
          "stops",
          "stopCities",
          "price",
          "currency",
          "cabin",
          "bookingUrl"
        ],
        "additionalProperties": true
      }
    },
    "returnFlights": {
      "type": "array",
      "items": {
        "$ref": "#/properties/outboundFlights/items"
      }
    },
    "totalOutbound": {
      "type": "number"
    },
    "totalReturn": {
      "type": "number"
    }
  },
  "required": [
    "sessionId",
    "status",
    "cached",
    "origin",
    "destination",
    "departureDate",
    "adults",
    "cabin",
    "tripType",
    "outboundFlights",
    "returnFlights",
    "totalOutbound",
    "totalReturn"
  ],
  "additionalProperties": true,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_hotel_detail(propertyId, hotelName, city, checkIn, checkOut, ...)

Prices and availability for one OpenTravel direct-listed hotel over a date range, with its photos, amenities and room types, each room with its rate plan and total price. Takes the propertyId from search results (source 'OPENTRAVEL_DIRECT'), or a hotel name plus city for a known direct listing. get_hotel_info returns the same hotel's static facts without dates.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "propertyId": {
      "type": "string",
      "maxLength": 200,
      "description": "OpenTravel propertyId UUID from search results (opentravelResults[].propertyId)."
    },
    "hotelName": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Fallback name for a confirmed OpenTravel direct listing when propertyId is unavailable"
    },
    "city": {
      "type": "string",
      "maxLength": 100,
      "description": "City of the hotel — required when resolving by hotelName."
    },
    "checkIn": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      "description": "Check-in date YYYY-MM-DD. Must be today or later."
    },
    "checkOut": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      "description": "Check-out date YYYY-MM-DD. Must be after checkIn."
    },
    "adults": {
      "type": "integer",
      "minimum": 1,
      "maximum": 20,
      "default": 2,
      "description": "Number of adults (default 2)"
    },
    "children": {
      "type": "integer",
      "minimum": 0,
      "maximum": 20,
      "default": 0,
      "description": "Number of children (default 0)"
    },
    "queryText": {
      "type": "string",
      "maxLength": 500,
      "description": "Optional short excerpt of the current request, used only to detect the UI language; it is not stored or forwarded."
    },
    "language": {
      "type": "string",
      "enum": [
        "en",
        "vi",
        "de",
        "ja",
        "ko",
        "zh",
        "fr",
        "es",
        "ru",
        "th",
        "id"
      ],
      "description": "Preferred UI language (en/vi/de/ja/ko/zh/fr/es/ru/th/id)."
    }
  },
  "required": [
    "checkIn",
    "checkOut"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Esquema de salida

{
  "type": "object",
  "properties": {
    "property": {
      "type": "object",
      "properties": {
        "propertyId": {
          "type": "string"
        },
        "id": {
          "type": "string"
        },
        "title": {
          "type": "string"
        },
        "description": {
          "type": [
            "string",
            "null"
          ]
        },
        "address": {
          "type": "string"
        },
        "city": {
          "type": "string"
        },
        "country": {
          "type": "string"
        },
        "checkInTime": {
          "type": "string"
        },
        "checkOutTime": {
          "type": "string"
        },
        "photos": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "facilities": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "required": [
        "propertyId",
        "title",
        "address",
        "city",
        "country",
        "checkInTime",
        "checkOutTime",
        "photos",
        "facilities"
      ],
      "additionalProperties": true
    },
    "roomTypes": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "description": {
            "type": [
              "string",
              "null"
            ]
          },
          "size": {
            "type": [
              "number",
              "null"
            ]
          },
          "adultsMax": {
            "type": "number"
          },
          "childrenMax": {
            "type": "number"
          },
          "photos": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "facilities": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "availableCount": {
            "type": "number"
          },
          "totalPrice": {
            "type": "number"
          },
          "currency": {
            "type": "string"
          },
          "perNightRates": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "date": {
                  "type": "string"
                },
                "amount": {
                  "type": "number"
                }
              },
              "required": [
                "date",
                "amount"
              ],
              "additionalProperties": true
            }
          },
          "ratePlanId": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "id",
          "title",
          "adultsMax",
          "childrenMax",
          "photos",
          "facilities",
          "availableCount",
          "totalPrice",
          "currency",
          "perNightRates"
        ],
        "additionalProperties": true
      }
    },
    "nights": {
      "type": "number"
    },
    "checkIn": {
      "type": "string"
    },
    "checkOut": {
      "type": "string"
    },
    "adults": {
      "type": "number"
    },
    "language": {
      "type": "string",
      "enum": [
        "en",
        "vi",
        "de",
        "ja",
        "ko",
        "zh",
        "fr",
        "es",
        "ru",
        "th",
        "id"
      ]
    },
    "discovery": {
      "type": "boolean"
    },
    "bookingUrl": {
      "type": "string"
    }
  },
  "required": [
    "property",
    "roomTypes",
    "nights",
    "checkIn",
    "checkOut",
    "adults",
    "language"
  ],
  "additionalProperties": true,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_ota_hotel_detail(hotelName, city, propertyUrl, checkIn, checkOut, ...)

Full detail (rooms, live prices, facilities, photos, reviews) from Booking.com for one named hotel over a date range, for requests about a single hotel rather than a whole city (search_hotels_live lists a city). The name is resolved through the city's listings, so it takes the hotel name together with its city; a Booking.com URL from an earlier result skips that lookup. OpenTravel direct listings are covered by get_hotel_detail. The fetch is live and takes up to about two minutes; under heavy load it can return not-found.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "hotelName": {
      "type": "string",
      "description": "Name of the hotel, e.g. 'Mercure Danang French Village Bana Hills'. Required unless propertyUrl is given."
    },
    "city": {
      "type": "string",
      "description": "City of the hotel, used to resolve the name, e.g. 'Da Nang'. Required with hotelName."
    },
    "propertyUrl": {
      "type": "string",
      "description": "Booking.com property URL from an earlier result (hotel.prices.booking.url); skips the name lookup."
    },
    "checkIn": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      "description": "Check-in date YYYY-MM-DD. Must be today or later."
    },
    "checkOut": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      "description": "Check-out date YYYY-MM-DD. Must be after checkIn."
    },
    "adults": {
      "type": "integer",
      "minimum": 1,
      "default": 2,
      "description": "Number of adults (default 2)"
    },
    "rooms": {
      "type": "integer",
      "minimum": 1,
      "default": 1,
      "description": "Number of rooms (default 1)"
    },
    "queryText": {
      "type": "string",
      "maxLength": 500,
      "description": "Short excerpt (one sentence at most) of the guest's latest message in their own words, used only to detect the reply language; it is not stored or forwarded. It carries no names, contact details or other parts of the conversation."
    },
    "language": {
      "type": "string",
      "enum": [
        "en",
        "vi",
        "de",
        "ja",
        "ko",
        "zh",
        "fr",
        "es",
        "ru",
        "th",
        "id"
      ],
      "description": "Optional UI language. Indonesian (id) cannot be detected from text, so for Indonesian this is how the language is set."
    }
  },
  "required": [
    "checkIn",
    "checkOut"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢check_booking_status(confirmationCode, language)

Returns the current status of a booking request (waiting for the hotel, confirmed or cancelled) by the confirmation code request_booking returned.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "confirmationCode": {
      "type": "string",
      "pattern": "^[A-Za-z0-9]{4,32}$",
      "description": "confirmationCode from request_booking structuredContent (e.g. 'K7X9M2P4')"
    },
    "language": {
      "type": "string",
      "enum": [
        "en",
        "vi"
      ],
      "default": "en",
      "description": "Response language"
    }
  },
  "required": [
    "confirmationCode"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Esquema de salida

{
  "type": "object",
  "properties": {
    "bookingId": {
      "type": "string"
    },
    "confirmationCode": {
      "type": [
        "string",
        "null"
      ]
    },
    "status": {
      "type": "string"
    },
    "paymentStatus": {
      "type": "string"
    },
    "paymentMethod": {
      "type": [
        "string",
        "null"
      ]
    },
    "paymentLinkUrl": {
      "type": [
        "string",
        "null"
      ]
    },
    "paidAt": {
      "type": [
        "string",
        "null"
      ]
    },
    "checkIn": {
      "type": "string"
    },
    "checkOut": {
      "type": "string"
    },
    "roomNumber": {
      "type": [
        "string",
        "null"
      ]
    },
    "guestName": {
      "type": "string"
    },
    "guestEmail": {
      "type": "string"
    },
    "propertyName": {
      "type": "string"
    }
  },
  "required": [
    "bookingId",
    "confirmationCode",
    "status",
    "paymentStatus",
    "paymentMethod",
    "paymentLinkUrl",
    "paidAt",
    "checkIn",
    "checkOut",
    "roomNumber",
    "guestName",
    "guestEmail",
    "propertyName"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢request_booking(propertyId, checkIn, checkOut, roomTypeId, adults, ...)

Sends a booking request for a room at an OpenTravel partner hotel. Nothing is charged and no room is held: the hotel confirms the request by email, and the guest pays at the property on arrival. There is no payment step, now or later. Takes the room and rate from get_hotel_detail and the guest's name, phone number and email; when any of these is missing, the result asks for it and, in clients that show widgets, opens a form for it. A few properties require payment at booking time, and the result says so for those. Returns a confirmation code.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "propertyId": {
      "type": "string",
      "format": "uuid",
      "description": "OpenTravel propertyId from get_hotel_detail"
    },
    "checkIn": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      "description": "Check-in date YYYY-MM-DD. Must be today or later."
    },
    "checkOut": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      "description": "Check-out date YYYY-MM-DD. Must be after checkIn."
    },
    "roomTypeId": {
      "type": "string",
      "description": "roomTypeId from get_hotel_detail roomTypes array"
    },
    "adults": {
      "type": "integer",
      "minimum": 1,
      "description": "Number of adults"
    },
    "children": {
      "type": "integer",
      "minimum": 0,
      "default": 0,
      "description": "Number of children (default 0)"
    },
    "guestName": {
      "type": "string",
      "minLength": 1,
      "description": "Full name of the primary guest. When omitted, the result asks the user for it."
    },
    "guestPhone": {
      "type": "string",
      "minLength": 1,
      "description": "Guest phone number; the hotel calls it to confirm the request. When omitted, the result asks the user for it."
    },
    "guestEmail": {
      "type": "string",
      "format": "email",
      "description": "Email address the confirmation is sent to, as the guest gave it; it cannot be changed after the request is sent. When omitted, the result asks the user for it."
    },
    "totalAmount": {
      "type": "number",
      "description": "Total amount in the property's base currency"
    },
    "currency": {
      "type": "string",
      "enum": [
        "VND",
        "USD",
        "EUR"
      ],
      "description": "Currency of totalAmount, as quoted by get_hotel_detail for the chosen room."
    },
    "queryText": {
      "type": "string",
      "maxLength": 500,
      "description": "Short excerpt (one sentence at most) of the guest's latest message in their own words, used only to detect the reply language; it is not stored or forwarded. It carries no names, contact details or other parts of the conversation."
    },
    "language": {
      "type": "string",
      "enum": [
        "en",
        "vi",
        "de",
        "ja",
        "ko",
        "zh",
        "fr",
        "es",
        "ru",
        "th",
        "id"
      ],
      "description": "Optional response language hint. Only used when queryText gives no signal."
    }
  },
  "required": [
    "propertyId",
    "checkIn",
    "checkOut",
    "roomTypeId",
    "adults",
    "totalAmount",
    "currency"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Esquema de salida

{
  "type": "object",
  "properties": {
    "bookingId": {
      "type": "string"
    },
    "confirmationCode": {
      "type": "string"
    },
    "status": {
      "type": "string"
    },
    "paymentRequired": {
      "type": "boolean"
    },
    "nextStep": {
      "type": "string"
    },
    "assignedRoomId": {
      "type": [
        "string",
        "null"
      ]
    },
    "quotedAmount": {
      "type": "number"
    },
    "quotedCurrency": {
      "type": "string"
    }
  },
  "required": [
    "bookingId",
    "confirmationCode",
    "status",
    "paymentRequired",
    "nextStep",
    "assignedRoomId",
    "quotedAmount",
    "quotedCurrency"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_hotel_info(propertyId, queryText, language)

Static facts about an OpenTravel direct-listed hotel, with no check-in or check-out date required: photo gallery, property description, address, facilities (parking, pool, pets and so on), check-in and check-out times, the house cancellation policy, and each room type's description, floor area, capacity, photos and in-room facilities. Carries no prices and no availability — get_hotel_detail covers those for a specific date range. Takes the propertyId UUID from search results.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "propertyId": {
      "type": "string",
      "format": "uuid",
      "description": "OpenTravel propertyId UUID from search results (opentravelResults[].propertyId)."
    },
    "queryText": {
      "type": "string",
      "maxLength": 500,
      "description": "Optional short excerpt of the current request, used only to detect the reply language; it is not stored or forwarded."
    },
    "language": {
      "type": "string",
      "enum": [
        "en",
        "vi",
        "de",
        "ja",
        "ko",
        "zh",
        "fr",
        "es",
        "ru",
        "th",
        "id"
      ],
      "description": "Preferred reply language (en/vi/de/ja/ko/zh)."
    }
  },
  "required": [
    "propertyId"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Esquema de salida

{
  "type": "object",
  "properties": {
    "property": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "title": {
          "type": "string"
        },
        "description": {
          "type": [
            "string",
            "null"
          ]
        },
        "address": {
          "type": "string"
        },
        "city": {
          "type": "string"
        },
        "country": {
          "type": "string"
        },
        "checkInTime": {
          "type": "string"
        },
        "checkOutTime": {
          "type": "string"
        },
        "photos": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "facilities": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "required": [
        "id",
        "title",
        "description",
        "address",
        "city",
        "country",
        "checkInTime",
        "checkOutTime",
        "photos",
        "facilities"
      ],
      "additionalProperties": true
    },
    "roomTypes": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "description": {
            "type": [
              "string",
              "null"
            ]
          },
          "size": {
            "type": [
              "number",
              "null"
            ]
          },
          "adultsMax": {
            "type": "number"
          },
          "childrenMax": {
            "type": "number"
          },
          "photos": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "facilities": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "id",
          "title",
          "description",
          "size",
          "adultsMax",
          "childrenMax",
          "photos",
          "facilities"
        ],
        "additionalProperties": true
      }
    },
    "cancellationPolicy": {
      "type": "object",
      "properties": {
        "source": {
          "type": "string"
        },
        "nonRefundable": {
          "type": "boolean"
        },
        "freeCancelUntilHours": {
          "type": [
            "number",
            "null"
          ]
        },
        "refundPercentAfterWindow": {
          "type": [
            "number",
            "null"
          ]
        },
        "policyText": {
          "type": "string"
        }
      },
      "required": [
        "nonRefundable",
        "freeCancelUntilHours",
        "refundPercentAfterWindow",
        "policyText"
      ],
      "additionalProperties": true
    }
  },
  "required": [
    "property",
    "roomTypes"
  ],
  "additionalProperties": true,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_cancellation_policy(propertyId, ratePlanId, checkInDate, queryText, language)

Returns the cancellation terms for one rate plan at an OpenTravel partner hotel: whether it is refundable, the free-cancellation window, the refund percentage, a plain-language summary and, given the check-in date, the exact free-cancellation deadline. Takes the propertyId and the ratePlanId from get_hotel_detail.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "propertyId": {
      "type": "string",
      "format": "uuid",
      "description": "OpenTravel propertyId UUID from search results"
    },
    "ratePlanId": {
      "type": "string",
      "format": "uuid",
      "description": "ratePlanId from get_hotel_detail roomTypes[].ratePlanId"
    },
    "checkInDate": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      "description": "Check-in date YYYY-MM-DD — required to compute the exact free-cancel deadline"
    },
    "queryText": {
      "type": "string",
      "maxLength": 500,
      "description": "Short excerpt of the guest's request, used only to pick the reply language."
    },
    "language": {
      "type": "string",
      "enum": [
        "en",
        "vi"
      ],
      "description": "Reply language. Falls back to queryText, then English."
    }
  },
  "required": [
    "propertyId",
    "ratePlanId",
    "checkInDate"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Esquema de salida

{
  "type": "object",
  "properties": {
    "ratePlanId": {
      "type": "string"
    },
    "nonRefundable": {
      "type": "boolean"
    },
    "freeCancelUntilHours": {
      "type": [
        "number",
        "null"
      ]
    },
    "refundPercentAfterWindow": {
      "type": [
        "number",
        "null"
      ]
    },
    "policyText": {
      "type": "string"
    },
    "computedDeadline": {
      "type": [
        "string",
        "null"
      ]
    }
  },
  "required": [
    "ratePlanId",
    "nonRefundable",
    "freeCancelUntilHours",
    "refundPercentAfterWindow",
    "policyText",
    "computedDeadline"
  ],
  "additionalProperties": true,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🔴request_cancel_token(confirmationCode, guestEmail)

First of two steps to cancel a booking. Emails a single-use cancellation token to the address on the booking, given its confirmation code and that same email address. Nothing is cancelled, charged or refunded by this step. The token expires after 24 hours and works once; cancel_booking completes the cancellation with it.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "confirmationCode": {
      "type": "string",
      "pattern": "^[A-Za-z0-9]{4,32}$",
      "description": "8-char booking confirmation code, e.g. K7X9M2P4"
    },
    "guestEmail": {
      "type": "string",
      "format": "email",
      "description": "Guest email address — must match the booking primary guest email"
    }
  },
  "required": [
    "confirmationCode",
    "guestEmail"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Esquema de salida

{
  "type": "object",
  "properties": {
    "success": {
      "type": "boolean"
    },
    "message": {
      "type": "string"
    }
  },
  "required": [
    "success",
    "message"
  ],
  "additionalProperties": true,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🔴cancel_booking(confirmationCode, cancelToken, reason)

Second of two steps to cancel a booking: cancels it and starts any refund due. Irreversible. Requires the confirmation code and the single-use token that request_cancel_token emailed to the guest; a missing, expired or already-used token is rejected. get_cancellation_policy shows the refund terms that apply.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "confirmationCode": {
      "type": "string",
      "pattern": "^[A-Za-z0-9]{4,32}$",
      "description": "8-char booking confirmation code, e.g. K7X9M2P4"
    },
    "cancelToken": {
      "type": "string",
      "minLength": 1,
      "description": "Single-use cancellation token from the email request_cancel_token sent to the guest."
    },
    "reason": {
      "type": "string",
      "minLength": 3,
      "description": "Guest-provided cancellation reason (at least 3 characters)"
    }
  },
  "required": [
    "confirmationCode",
    "cancelToken",
    "reason"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Esquema de salida

{
  "type": "object",
  "properties": {
    "status": {
      "type": "string"
    },
    "refundAmount": {
      "type": "number"
    },
    "refundStatus": {
      "type": [
        "string",
        "null"
      ]
    },
    "gatewaySettlementEta": {
      "type": [
        "string",
        "null"
      ]
    }
  },
  "required": [
    "status",
    "refundAmount",
    "refundStatus",
    "gatewaySettlementEta"
  ],
  "additionalProperties": true,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Comunidad

Califica este servidor

Evidencia

Observaciones recientes

verificadoversión no registrada12 herramientas