이 MCP로 할 수 있는 일
Searches and compares live hotel and flight prices and supports hotel booking requests, status checks, cancellation policies, and cancellations.
도구
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['confirmationCode', 'cancelToken', 'reason'], 'properties': {'reason': {'type': 'string', 'minLength': 3, 'description': 'Guest-provided cancellation reason (at least 3 characters)'}, 'cancelToken': {'type': 'string', 'minLength': 1, 'description': 'Single-use cancellation token from the email request_cancel_token sent to the guest.'}, 'confirmationCode': {'type': 'string', 'minLength': 1, 'description': '8-char booking confirmation code, e.g. K7X9M2P4'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['status', 'refundAmount', 'refundStatus', 'gatewaySettlementEta'], 'properties': {'status': {'type': 'string'}, 'refundAmount': {'type': 'number'}, 'refundStatus': {'type': ['string', 'null']}, 'gatewaySettlementEta': {'type': ['string', 'null']}}, 'additionalProperties': True}
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['confirmationCode'], 'properties': {'language': {'enum': ['en', 'vi'], 'type': 'string', 'default': 'en', 'description': 'Response language'}, 'confirmationCode': {'type': 'string', 'description': "confirmationCode from request_booking structuredContent (e.g. 'K7X9M2P4')"}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['bookingId', 'confirmationCode', 'status', 'paymentStatus', 'paymentMethod', 'paymentLinkUrl', 'paidAt', 'checkIn', 'checkOut', 'roomNumber', 'guestName', 'guestEmail', 'propertyName'], 'properties': {'paidAt': {'type': ['string', 'null']}, 'status': {'type': 'string'}, 'checkIn': {'type': 'string'}, 'checkOut': {'type': 'string'}, 'bookingId': {'type': 'string'}, 'guestName': {'type': 'string'}, 'guestEmail': {'type': 'string'}, 'roomNumber': {'type': ['string', 'null']}, 'propertyName': {'type': 'string'}, 'paymentMethod': {'type': ['string', 'null']}, 'paymentStatus': {'type': 'string'}, 'paymentLinkUrl': {'type': ['string', 'null']}, 'confirmationCode': {'type': ['string', 'null']}}, 'additionalProperties': False}
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['propertyId', 'ratePlanId', 'checkInDate'], 'properties': {'language': {'enum': ['en', 'vi'], 'type': 'string', 'description': 'Reply language. Falls back to queryText, then English.'}, 'queryText': {'type': 'string', 'maxLength': 500, 'description': "Short excerpt of the guest's request, used only to pick the reply language."}, '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 â\x80\x94 required to compute the exact free-cancel deadline'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['ratePlanId', 'nonRefundable', 'freeCancelUntilHours', 'refundPercentAfterWindow', 'policyText', 'computedDeadline'], 'properties': {'policyText': {'type': 'string'}, 'ratePlanId': {'type': 'string'}, 'nonRefundable': {'type': 'boolean'}, 'computedDeadline': {'type': ['string', 'null']}, 'freeCancelUntilHours': {'type': ['number', 'null']}, 'refundPercentAfterWindow': {'type': ['number', 'null']}}, 'additionalProperties': True}
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['checkIn', 'checkOut'], 'properties': {'city': {'type': 'string', 'maxLength': 100, 'description': 'City of the hotel â\x80\x94 required when resolving by hotelName.'}, 'adults': {'type': 'integer', 'default': 2, 'maximum': 20, 'minimum': 1, 'description': 'Number of adults (default 2)'}, '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.'}, 'children': {'type': 'integer', 'default': 0, 'maximum': 20, 'minimum': 0, 'description': 'Number of children (default 0)'}, 'language': {'enum': ['en', 'vi', 'de', 'ja', 'ko', 'zh', 'fr', 'es', 'ru', 'th', 'id'], 'type': 'string', 'description': 'Preferred UI language (en/vi/de/ja/ko/zh/fr/es/ru/th/id).'}, 'hotelName': {'type': 'string', 'maxLength': 200, 'minLength': 1, 'description': 'Fallback name for a confirmed OpenTravel direct listing when propertyId is unavailable'}, '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.'}, 'propertyId': {'type': 'string', 'maxLength': 200, 'description': 'OpenTravel propertyId UUID from search results (opentravelResults[].propertyId).'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['property', 'roomTypes', 'nights', 'checkIn', 'checkOut', 'adults', 'language'], 'properties': {'adults': {'type': 'number'}, 'nights': {'type': 'number'}, 'checkIn': {'type': 'string'}, 'checkOut': {'type': 'string'}, 'language': {'enum': ['en', 'vi', 'de', 'ja', 'ko', 'zh', 'fr', 'es', 'ru', 'th', 'id'], 'type': 'string'}, 'property': {'type': 'object', 'required': ['propertyId', 'title', 'address', 'city', 'country', 'checkInTime', 'checkOutTime', 'photos', 'facilities'], 'properties': {'id': {'type': 'string'}, 'city': {'type': 'string'}, 'title': {'type': 'string'}, 'photos': {'type': 'array', 'items': {'type': 'string'}}, 'address': {'type': 'string'}, 'country': {'type': 'string'}, 'facilities': {'type': 'array', 'items': {'type': 'string'}}, 'propertyId': {'type': 'string'}, 'checkInTime': {'type': 'string'}, 'description': {'type': ['string', 'null']}, 'checkOutTime': {'type': 'string'}}, 'additionalProperties': True}, 'discovery': {'type': 'boolean'}, 'roomTypes': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'title', 'adultsMax', 'childrenMax', 'photos', 'facilities', 'availableCount', 'totalPrice', 'currency', 'perNightRates'], 'properties': {'id': {'type': 'string'}, 'size': {'type': ['number', 'null']}, 'title': {'type': 'string'}, 'photos': {'type': 'array', 'items': {'type': 'string'}}, 'currency': {'type': 'string'}, 'adultsMax': {'type': 'number'}, 'facilities': {'type': 'array', 'items': {'type': 'string'}}, 'ratePlanId': {'type': ['string', 'null']}, 'totalPrice': {'type': 'number'}, 'childrenMax': {'type': 'number'}, 'description': {'type': ['string', 'null']}, 'perNightRates': {'type': 'array', 'items': {'type': 'object', 'required': ['date', 'amount'], 'properties': {'date': {'type': 'string'}, 'amount': {'type': 'number'}}, 'additionalProperties': True}}, 'availableCount': {'type': 'number'}}, 'additionalProperties': True}}, 'bookingUrl': {'type': 'string'}}, 'additionalProperties': True}
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['propertyId'], 'properties': {'language': {'enum': ['en', 'vi', 'de', 'ja', 'ko', 'zh', 'fr', 'es', 'ru', 'th', 'id'], 'type': 'string', 'description': 'Preferred reply language (en/vi/de/ja/ko/zh).'}, '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.'}, 'propertyId': {'type': 'string', 'format': 'uuid', 'description': 'OpenTravel propertyId UUID from search results (opentravelResults[].propertyId).'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['property', 'roomTypes'], 'properties': {'property': {'type': 'object', 'required': ['id', 'title', 'description', 'address', 'city', 'country', 'checkInTime', 'checkOutTime', 'photos', 'facilities'], 'properties': {'id': {'type': 'string'}, 'city': {'type': 'string'}, 'title': {'type': 'string'}, 'photos': {'type': 'array', 'items': {'type': 'string'}}, 'address': {'type': 'string'}, 'country': {'type': 'string'}, 'facilities': {'type': 'array', 'items': {'type': 'string'}}, 'checkInTime': {'type': 'string'}, 'description': {'type': ['string', 'null']}, 'checkOutTime': {'type': 'string'}}, 'additionalProperties': True}, 'roomTypes': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'title', 'description', 'size', 'adultsMax', 'childrenMax', 'photos', 'facilities'], 'properties': {'id': {'type': 'string'}, 'size': {'type': ['number', 'null']}, 'title': {'type': 'string'}, 'photos': {'type': 'array', 'items': {'type': 'string'}}, 'adultsMax': {'type': 'number'}, 'facilities': {'type': 'array', 'items': {'type': 'string'}}, 'childrenMax': {'type': 'number'}, 'description': {'type': ['string', 'null']}}, 'additionalProperties': True}}, 'cancellationPolicy': {'type': 'object', 'required': ['nonRefundable', 'freeCancelUntilHours', 'refundPercentAfterWindow', 'policyText'], 'properties': {'source': {'type': 'string'}, 'policyText': {'type': 'string'}, 'nonRefundable': {'type': 'boolean'}, 'freeCancelUntilHours': {'type': ['number', 'null']}, 'refundPercentAfterWindow': {'type': ['number', 'null']}}, 'additionalProperties': True}}, 'additionalProperties': True}
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['checkIn', 'checkOut'], 'properties': {'city': {'type': 'string', 'description': "City of the hotel, used to resolve the name, e.g. 'Da Nang'. Required with hotelName."}, 'rooms': {'type': 'integer', 'default': 1, 'minimum': 1, 'description': 'Number of rooms (default 1)'}, 'adults': {'type': 'integer', 'default': 2, 'minimum': 1, 'description': 'Number of adults (default 2)'}, '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.'}, 'language': {'enum': ['en', 'vi', 'de', 'ja', 'ko', 'zh', 'fr', 'es', 'ru', 'th', 'id'], 'type': 'string', 'description': 'Optional UI language. Indonesian (id) cannot be detected from text, so for Indonesian this is how the language is set.'}, 'hotelName': {'type': 'string', 'description': "Name of the hotel, e.g. 'Mercure Danang French Village Bana Hills'. Required unless propertyUrl is given."}, '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."}, 'propertyUrl': {'type': 'string', 'description': 'Booking.com property URL from an earlier result (hotel.prices.booking.url); skips the name lookup.'}}, 'additionalProperties': False}
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['sessionId'], 'properties': {'sessionId': {'type': 'string', 'format': 'uuid', 'description': 'Session ID from search_flights_live'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['sessionId', 'status', 'cached', 'origin', 'destination', 'departureDate', 'adults', 'cabin', 'tripType', 'outboundFlights', 'returnFlights', 'totalOutbound', 'totalReturn'], 'properties': {'cabin': {'type': 'string'}, 'adults': {'type': 'number'}, 'cached': {'type': 'boolean'}, 'origin': {'type': 'string'}, 'status': {'type': 'string'}, 'language': {'enum': ['en', 'vi', 'de', 'ja', 'ko', 'zh', 'fr', 'es', 'ru', 'th', 'id'], 'type': 'string'}, 'tripType': {'type': 'string'}, 'sessionId': {'type': 'string'}, 'returnDate': {'type': 'string'}, 'destination': {'type': 'string'}, 'totalReturn': {'type': 'number'}, 'departureDate': {'type': 'string'}, 'returnFlights': {'type': 'array', 'items': {'$ref': '#/properties/outboundFlights/items'}}, 'totalOutbound': {'type': 'number'}, 'outboundFlights': {'type': 'array', 'items': {'type': 'object', 'required': ['airline', 'airlineCode', 'flightNumber', 'departure', 'arrival', 'duration', 'stops', 'stopCities', 'price', 'currency', 'cabin', 'bookingUrl'], 'properties': {'legs': {'type': 'array', 'items': {'type': 'object', 'required': ['departureAirport', 'arrivalAirport', 'departureTime', 'arrivalTime', 'departureDate', 'arrivalDate', 'airline', 'flightNumber', 'duration'], 'properties': {'airline': {'type': 'string'}, 'duration': {'type': 'number'}, 'arrivalDate': {'type': 'string'}, 'arrivalTime': {'type': 'string'}, 'flightNumber': {'type': 'string'}, 'departureDate': {'type': 'string'}, 'departureTime': {'type': 'string'}, 'arrivalAirport': {'type': 'string'}, 'departureAirport': {'type': 'string'}}, 'additionalProperties': True}}, 'cabin': {'type': 'string'}, 'price': {'type': 'number'}, 'stops': {'type': 'number'}, 'airline': {'type': 'string'}, 'arrival': {'type': 'object', 'required': ['airport', 'city', 'time', 'date'], 'properties': {'city': {'type': 'string'}, 'date': {'type': 'string'}, 'time': {'type': 'string'}, 'airport': {'type': 'string'}}, 'additionalProperties': True}, 'currency': {'type': 'string'}, 'duration': {'type': 'number'}, 'departure': {'type': 'object', 'required': ['airport', 'city', 'time', 'date'], 'properties': {'city': {'type': 'string'}, 'date': {'type': 'string'}, 'time': {'type': 'string'}, 'airport': {'type': 'string'}}, 'additionalProperties': True}, 'bookingUrl': {'type': 'string'}, 'stopCities': {'type': 'array', 'items': {'type': 'string'}}, 'airlineCode': {'type': 'string'}, 'flightNumber': {'type': 'string'}}, 'additionalProperties': True}}}, 'additionalProperties': True}
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['sessionId', 'nights'], 'properties': {'area': {'type': 'string', 'maxLength': 120, 'description': 'Optional override for the area filter captured at search time'}, 'limit': {'type': 'integer', 'default': 50, 'maximum': 100, 'minimum': 0, 'description': 'Max hotels to return; 0 = all (default 50)'}, 'nights': {'type': 'integer', 'maximum': 365, 'minimum': 1, 'description': 'Number of nights'}, 'offset': {'type': 'integer', 'default': 0, 'minimum': 0, 'description': 'Skip first N hotels for pagination (default 0)'}, 'priceMax': {'type': 'number', 'maximum': 1000000000, 'minimum': 0, 'description': 'Optional override for the maximum-price filter'}, 'priceMin': {'type': 'number', 'maximum': 1000000000, 'minimum': 0, 'description': 'Optional override for the minimum-price filter'}, 'hotelName': {'type': 'string', 'maxLength': 200, 'description': 'Optional override for the hotel-name filter captured at search time'}, 'sessionId': {'type': 'string', 'maxLength': 128, 'minLength': 1, 'description': 'Session ID from search_hotels_live'}, 'priceCurrency': {'type': 'string', 'pattern': '^[A-Za-z]{3}$', 'description': "ISO 4217 code of priceMin/priceMax; defaults to the UI language's currency"}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['city', 'checkIn', 'checkOut', 'nights', 'status', 'progress', 'bookingStatus', 'agodaStatus', 'travelokaStatus', 'totalHotels', 'hotels', 'offset', 'limit', 'hasMore', 'tier', 'tier2AgodaStatus', 'tier2BookingStatus', 'tier2TravelokaStatus', 'opentravelStatus', 'opentravelResults', 'opentravelIndicativeResults', 'fxRates'], 'properties': {'city': {'type': 'string'}, 'tier': {'type': 'string'}, 'limit': {'type': 'number'}, 'cached': {'type': 'boolean'}, 'hotels': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'stars', 'rating', 'reviewCount', 'imageUrl', 'location', 'prices'], 'properties': {'name': {'type': 'string'}, 'stars': {'type': 'number'}, 'prices': {'type': 'object', 'properties': {'agoda': {'type': 'object', 'required': ['price', 'currency', 'url'], 'properties': {'url': {'type': 'string'}, 'price': {'type': 'number'}, 'currency': {'type': 'string'}}, 'additionalProperties': True}, 'booking': {'$ref': '#/properties/hotels/items/properties/prices/properties/agoda'}, 'traveloka': {'$ref': '#/properties/hotels/items/properties/prices/properties/agoda'}}, 'additionalProperties': True}, 'rating': {'type': 'number'}, 'imageUrl': {'type': 'string'}, 'location': {'type': 'string'}, 'reviewCount': {'type': 'number'}}, 'additionalProperties': True}}, 'nights': {'type': 'number'}, 'offset': {'type': 'number'}, 'status': {'type': 'string'}, 'checkIn': {'type': 'string'}, 'fxRates': {'type': 'object', 'additionalProperties': {'type': 'number'}}, 'hasMore': {'type': 'boolean'}, 'checkOut': {'type': 'string'}, 'language': {'enum': ['en', 'vi', 'de', 'ja', 'ko', 'zh', 'fr', 'es', 'ru', 'th', 'id'], 'type': 'string'}, 'progress': {'type': 'number'}, 'sessionId': {'type': 'string'}, 'agodaStatus': {'type': 'string'}, 'totalHotels': {'type': 'number'}, 'bookingStatus': {'type': 'string'}, 'longStayNotice': {'type': ['string', 'null']}, 'travelokaStatus': {'type': 'string'}, 'opentravelStatus': {'type': 'string'}, 'tier2AgodaStatus': {'type': ['string', 'null']}, 'opentravelResults': {'type': 'array', 'items': {'type': 'object', 'required': ['propertyId', 'name', 'address', 'city', 'mainImageUrl', 'cheapestPrice', 'totalForStay', 'currency', 'nights', 'source', 'priceType'], 'properties': {'city': {'type': ['string', 'null']}, 'name': {'type': 'string'}, 'nights': {'type': 'number'}, 'source': {'type': 'string', 'const': 'OPENTRAVEL_DIRECT'}, 'address': {'type': ['string', 'null']}, 'country': {'type': ['string', 'null']}, 'currency': {'type': 'string'}, 'priceType': {'enum': ['available', 'indicative'], 'type': 'string'}, 'propertyId': {'type': 'string'}, 'countryCode': {'type': ['string', 'null']}, 'mainImageUrl': {'type': ['string', 'null']}, 'totalForStay': {'type': 'number'}, 'cheapestPrice': {'type': 'number'}, 'indicativeNote': {'type': 'string'}, 'availableRoomTypes': {'type': 'number'}}, 'additionalProperties': True}}, 'tier2BookingStatus': {'type': ['string', 'null']}, 'tier2TravelokaStatus': {'type': ['string', 'null']}, 'opentravelIndicativeResults': {'type': 'array', 'items': {'$ref': '#/properties/opentravelResults/items'}}}, 'additionalProperties': True}
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['propertyId', 'checkIn', 'checkOut', 'roomTypeId', 'adults', 'totalAmount', 'currency'], 'properties': {'adults': {'type': 'integer', 'minimum': 1, 'description': 'Number of adults'}, '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.'}, 'children': {'type': 'integer', 'default': 0, 'minimum': 0, 'description': 'Number of children (default 0)'}, 'currency': {'enum': ['VND', 'USD', 'EUR'], 'type': 'string', 'description': 'Currency of totalAmount, as quoted by get_hotel_detail for the chosen room.'}, 'language': {'enum': ['en', 'vi', 'de', 'ja', 'ko', 'zh', 'fr', 'es', 'ru', 'th', 'id'], 'type': 'string', 'description': 'Optional response language hint. Only used when queryText gives no signal.'}, 'guestName': {'type': 'string', 'minLength': 1, 'description': 'Full name of the primary guest. When omitted, the result asks the user for it.'}, '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."}, '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.'}, '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.'}, 'propertyId': {'type': 'string', 'description': 'OpenTravel propertyId from get_hotel_detail'}, 'roomTypeId': {'type': 'string', 'description': 'roomTypeId from get_hotel_detail roomTypes array'}, 'totalAmount': {'type': 'number', 'description': "Total amount in the property's base currency"}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['bookingId', 'confirmationCode', 'status', 'paymentRequired', 'nextStep', 'assignedRoomId', 'quotedAmount', 'quotedCurrency'], 'properties': {'status': {'type': 'string'}, 'nextStep': {'type': 'string'}, 'bookingId': {'type': 'string'}, 'quotedAmount': {'type': 'number'}, 'assignedRoomId': {'type': ['string', 'null']}, 'quotedCurrency': {'type': 'string'}, 'paymentRequired': {'type': 'boolean'}, 'confirmationCode': {'type': 'string'}}, 'additionalProperties': False}
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['confirmationCode', 'guestEmail'], 'properties': {'guestEmail': {'type': 'string', 'format': 'email', 'description': 'Guest email address â\x80\x94 must match the booking primary guest email'}, 'confirmationCode': {'type': 'string', 'minLength': 1, 'description': '8-char booking confirmation code, e.g. K7X9M2P4'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['success', 'message'], 'properties': {'message': {'type': 'string'}, 'success': {'type': 'boolean'}}, 'additionalProperties': True}
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'cabin': {'enum': ['economy', 'premium_economy', 'business', 'first'], 'type': 'string', 'default': 'economy', 'description': 'Cabin class (default economy)'}, 'adults': {'type': 'integer', 'default': 1, 'maximum': 20, 'minimum': 1, 'description': 'Number of adults (default 1)'}, '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."}, 'language': {'enum': ['en', 'vi', 'de', 'ja', 'ko', 'zh', 'fr', 'es', 'ru', 'th', 'id'], 'type': 'string', 'description': 'Preferred UI language (en/vi/de/ja/ko/zh/fr/es/ru/th/id).'}, '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.'}, '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.'}, '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.'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['sessionId', 'status', 'cached', 'origin', 'destination', 'departureDate', 'adults', 'cabin', 'tripType', 'outboundFlights', 'returnFlights', 'totalOutbound', 'totalReturn'], 'properties': {'cabin': {'type': 'string'}, 'adults': {'type': 'number'}, 'cached': {'type': 'boolean'}, 'origin': {'type': 'string'}, 'status': {'type': 'string'}, 'language': {'enum': ['en', 'vi', 'de', 'ja', 'ko', 'zh', 'fr', 'es', 'ru', 'th', 'id'], 'type': 'string'}, 'tripType': {'type': 'string'}, 'sessionId': {'type': 'string'}, 'returnDate': {'type': 'string'}, 'destination': {'type': 'string'}, 'totalReturn': {'type': 'number'}, 'departureDate': {'type': 'string'}, 'returnFlights': {'type': 'array', 'items': {'$ref': '#/properties/outboundFlights/items'}}, 'totalOutbound': {'type': 'number'}, 'outboundFlights': {'type': 'array', 'items': {'type': 'object', 'required': ['airline', 'airlineCode', 'flightNumber', 'departure', 'arrival', 'duration', 'stops', 'stopCities', 'price', 'currency', 'cabin', 'bookingUrl'], 'properties': {'legs': {'type': 'array', 'items': {'type': 'object', 'required': ['departureAirport', 'arrivalAirport', 'departureTime', 'arrivalTime', 'departureDate', 'arrivalDate', 'airline', 'flightNumber', 'duration'], 'properties': {'airline': {'type': 'string'}, 'duration': {'type': 'number'}, 'arrivalDate': {'type': 'string'}, 'arrivalTime': {'type': 'string'}, 'flightNumber': {'type': 'string'}, 'departureDate': {'type': 'string'}, 'departureTime': {'type': 'string'}, 'arrivalAirport': {'type': 'string'}, 'departureAirport': {'type': 'string'}}, 'additionalProperties': True}}, 'cabin': {'type': 'string'}, 'price': {'type': 'number'}, 'stops': {'type': 'number'}, 'airline': {'type': 'string'}, 'arrival': {'type': 'object', 'required': ['airport', 'city', 'time', 'date'], 'properties': {'city': {'type': 'string'}, 'date': {'type': 'string'}, 'time': {'type': 'string'}, 'airport': {'type': 'string'}}, 'additionalProperties': True}, 'currency': {'type': 'string'}, 'duration': {'type': 'number'}, 'departure': {'type': 'object', 'required': ['airport', 'city', 'time', 'date'], 'properties': {'city': {'type': 'string'}, 'date': {'type': 'string'}, 'time': {'type': 'string'}, 'airport': {'type': 'string'}}, 'additionalProperties': True}, 'bookingUrl': {'type': 'string'}, 'stopCities': {'type': 'array', 'items': {'type': 'string'}}, 'airlineCode': {'type': 'string'}, 'flightNumber': {'type': 'string'}}, 'additionalProperties': True}}}, 'additionalProperties': True}
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'area': {'type': 'string', 'maxLength': 120, 'description': 'Optional district, ward, or neighborhood filter within the city'}, 'city': {'type': 'string', 'maxLength': 100, 'minLength': 1, 'description': "City or broad destination, e.g. 'Da Nang'. When omitted, the result asks the user for it."}, 'rooms': {'type': 'integer', 'default': 1, 'maximum': 20, 'minimum': 1, 'description': 'Number of rooms (default 1).'}, 'adults': {'type': 'integer', 'default': 2, 'maximum': 20, 'minimum': 1, 'description': 'Number of adults (default 2). Prices depend on 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.'}, 'children': {'type': 'integer', 'default': 0, 'maximum': 20, 'minimum': 0, 'description': 'Number of children sharing the room (default 0). OTA prices cannot include children; the result says so when children are given.'}, 'language': {'enum': ['en', 'vi', 'de', 'ja', 'ko', 'zh', 'fr', 'es', 'ru', 'th', 'id'], 'type': 'string', 'description': 'Preferred UI language (en/vi/de/ja/ko/zh/fr/es/ru/th/id).'}, 'priceMax': {'type': 'number', 'maximum': 1000000000, 'minimum': 0, 'description': 'Maximum total price for the whole stay (not per night), in priceCurrency.'}, 'priceMin': {'type': 'number', 'maximum': 1000000000, 'minimum': 0, 'description': 'Minimum total price for the whole stay (not per night), in priceCurrency.'}, 'hotelName': {'type': 'string', 'maxLength': 200, 'description': 'Optional hotel-name filter when the user names a specific property'}, '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.'}, 'priceCurrency': {'type': 'string', 'pattern': '^[A-Za-z]{3}$', 'description': 'ISO 4217 code of priceMin/priceMax (USD, EUR, VND, â\x80¦); defaults to the currency of the UI language.'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['city', 'checkIn', 'checkOut', 'nights', 'status', 'progress', 'bookingStatus', 'agodaStatus', 'travelokaStatus', 'totalHotels', 'hotels', 'offset', 'limit', 'hasMore', 'tier', 'tier2AgodaStatus', 'tier2BookingStatus', 'tier2TravelokaStatus', 'opentravelStatus', 'opentravelResults', 'opentravelIndicativeResults', 'fxRates'], 'properties': {'city': {'type': 'string'}, 'tier': {'type': 'string'}, 'limit': {'type': 'number'}, 'cached': {'type': 'boolean'}, 'hotels': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'stars', 'rating', 'reviewCount', 'imageUrl', 'location', 'prices'], 'properties': {'name': {'type': 'string'}, 'stars': {'type': 'number'}, 'prices': {'type': 'object', 'properties': {'agoda': {'type': 'object', 'required': ['price', 'currency', 'url'], 'properties': {'url': {'type': 'string'}, 'price': {'type': 'number'}, 'currency': {'type': 'string'}}, 'additionalProperties': True}, 'booking': {'$ref': '#/properties/hotels/items/properties/prices/properties/agoda'}, 'traveloka': {'$ref': '#/properties/hotels/items/properties/prices/properties/agoda'}}, 'additionalProperties': True}, 'rating': {'type': 'number'}, 'imageUrl': {'type': 'string'}, 'location': {'type': 'string'}, 'reviewCount': {'type': 'number'}}, 'additionalProperties': True}}, 'nights': {'type': 'number'}, 'offset': {'type': 'number'}, 'status': {'type': 'string'}, 'checkIn': {'type': 'string'}, 'fxRates': {'type': 'object', 'additionalProperties': {'type': 'number'}}, 'hasMore': {'type': 'boolean'}, 'checkOut': {'type': 'string'}, 'language': {'enum': ['en', 'vi', 'de', 'ja', 'ko', 'zh', 'fr', 'es', 'ru', 'th', 'id'], 'type': 'string'}, 'progress': {'type': 'number'}, 'sessionId': {'type': 'string'}, 'agodaStatus': {'type': 'string'}, 'totalHotels': {'type': 'number'}, 'bookingStatus': {'type': 'string'}, 'longStayNotice': {'type': ['string', 'null']}, 'travelokaStatus': {'type': 'string'}, 'opentravelStatus': {'type': 'string'}, 'tier2AgodaStatus': {'type': ['string', 'null']}, 'opentravelResults': {'type': 'array', 'items': {'type': 'object', 'required': ['propertyId', 'name', 'address', 'city', 'mainImageUrl', 'cheapestPrice', 'totalForStay', 'currency', 'nights', 'source', 'priceType'], 'properties': {'city': {'type': ['string', 'null']}, 'name': {'type': 'string'}, 'nights': {'type': 'number'}, 'source': {'type': 'string', 'const': 'OPENTRAVEL_DIRECT'}, 'address': {'type': ['string', 'null']}, 'country': {'type': ['string', 'null']}, 'currency': {'type': 'string'}, 'priceType': {'enum': ['available', 'indicative'], 'type': 'string'}, 'propertyId': {'type': 'string'}, 'countryCode': {'type': ['string', 'null']}, 'mainImageUrl': {'type': ['string', 'null']}, 'totalForStay': {'type': 'number'}, 'cheapestPrice': {'type': 'number'}, 'indicativeNote': {'type': 'string'}, 'availableRoomTypes': {'type': 'number'}}, 'additionalProperties': True}}, 'tier2BookingStatus': {'type': ['string', 'null']}, 'tier2TravelokaStatus': {'type': ['string', 'null']}, 'opentravelIndicativeResults': {'type': 'array', 'items': {'$ref': '#/properties/opentravelResults/items'}}}, 'additionalProperties': True}
최근 도구 변경
유사한 MCP 서버
Award Travel Finder
Searches award flights and hotels, tracks bookings and loyalty balances, evaluates points and credit cards, and monitors travel r…
Good Turn Studio (all tools)
Offers consumer utilities for insurance claim appeals, subscription cancellation, flight fare research, financial recovery resour…
AI 代理人任務中樞
Aggregates Taiwan-focused tools for AI service comparisons, cryptocurrency data, game information, health guidance, and other con…
Gover MCP
Searches and manages corporate travel requests, flights, hotels, rental vehicles, passengers, carts, approvals, reservations, and…
DC Member API
Provides access to Dynamite Circle membership data, community profiles, chapters, events, trips, calendars, alerts, follows, agen…
Nomad Stays
Searches and books remote-work accommodations while supporting host listing management, rooms, packages, availability, and hospit…
lilo Vacation Rentals
Supports vacation-rental discovery, availability and direct booking, property operations, short-term-rental compliance, guest and…
mcp-server
Provides immigration, citizenship and residency programme research alongside tax, wealth structuring, banking, visa, treaty and c…