BookHotels.direct
Is a hotel cheaper on its own website than on Booking.com? An honest, like-for-like check.
我該用這個嗎
品質與安全性
根據工具定義與協定合規性的自動化分析。
上下文成本
這是每次將伺服器的工具載入模型上下文時所消耗的約略 token 數量。數量越高,可用於其他工作的注意力就越少。
安裝
一鍵安裝
將以下內容加入你的 `claude_desktop_config.json` 檔案:
{
"mcpServers": {
"hotel-price-check": {
"url": "https://bookhotels.direct/mcp"
}
}
}遠端端點
https://bookhotels.direct/mcpstreamable-http它能做什麼
工具清單
工具(3)
🟢check_direct_price(hotel, city, booking_url, checkin, checkout, ...)
Checks whether a hotel is cheaper on its own website than on Booking.com, for one stay. Give the hotel, the dates, the guests and, when you have it, the total Booking.com shows for the whole stay with its meal plan and cancellation terms. BookHotels.direct reads the hotel's own booking site live, applying the public promo codes and free-club prices it knows for that hotel, or uses a traveller's read of the same stay from the last 24 hours, and compares like for like: same hotel, dates and guests, with every difference in room, meal plan or cancellation stated. The answer is honest either way: when Booking.com is cheaper, it says so. When the hotel's site cannot be read automatically, the answer gives the link to the hotel's own site for these dates and asks you to report the prices shown there with report_hotel_price. Without a Booking.com total, the answer gives the hotel's own price and, when the evidence allows, an estimated saving, always labelled as an estimate with its basis. Only Booking.com prices can be compared. One room per check.
輸入結構描述
{
"type": "object",
"properties": {
"hotel": {
"type": "string",
"description": "The hotel's name as the traveller sees it, e.g. \"Hotel Calipolis\"."
},
"city": {
"type": "string",
"description": "The town or city the hotel is in, e.g. \"Sitges\". Helps find hotels we have not checked before."
},
"booking_url": {
"type": "string",
"description": "Optional: the Booking.com address of the hotel's page (https://www.booking.com/hotel/…). Only the address is read, to recognise the hotel and the dates; the page is never opened."
},
"checkin": {
"type": "string",
"description": "Check-in date, YYYY-MM-DD."
},
"checkout": {
"type": "string",
"description": "Check-out date, YYYY-MM-DD."
},
"adults": {
"type": "integer",
"minimum": 1,
"maximum": 8,
"description": "Number of adults (default 2)."
},
"children_ages": {
"type": "array",
"items": {
"type": "integer",
"minimum": 0,
"maximum": 17
},
"maxItems": 6,
"description": "Each child's age on the day of check-out, one number per child. Leave out when no children travel. Hotels price children by age, so ages are needed for families."
},
"booking_total": {
"type": "number",
"exclusiveMinimum": 0,
"description": "The total Booking.com shows for the whole stay, in euros, when known. Without it you get the hotel's own price and, when the evidence allows, an estimated saving."
},
"booking_meal_plan": {
"type": "string",
"enum": [
"room_only",
"breakfast",
"half_board",
"full_board",
"all_inclusive"
],
"description": "The meal plan of the Booking.com offer, when Booking.com shows it."
},
"booking_cancellation": {
"type": "string",
"enum": [
"free",
"non_refundable",
"partial"
],
"description": "The cancellation terms of the Booking.com offer, when Booking.com shows them: free cancellation, non-refundable, or partly refundable."
},
"booking_room": {
"type": "string",
"description": "The room name of the Booking.com offer, when shown."
},
"booking_taxes_included": {
"type": "boolean",
"description": "true when Booking.com says its total includes taxes and charges; false when it lists taxes on top."
},
"booking_taxes_extra": {
"type": "number",
"minimum": 0,
"description": "Taxes Booking.com lists on top of its total, in euros (e.g. a city tax), when shown."
},
"language": {
"type": "string",
"enum": [
"en",
"es"
],
"description": "Language of the check page for the traveller (default en)."
}
},
"required": [
"hotel",
"checkin",
"checkout"
],
"additionalProperties": false
}🟢report_hotel_price(check_id, offers, page_url, hotel, city, ...)
After check_direct_price asked you to open the hotel's own website for a stay, report the prices that site showed for the same dates and guests, and get the honest comparison with Booking.com. Give the check_id from check_direct_price and one entry per room or rate you saw, each with its total for the whole stay in euros and, when shown, its meal plan and cancellation terms. Report only what the hotel's own site showed; leave a field out when the site did not say it. The report is kept anonymously so the next traveller asking about the same stay gets an answer at once.
輸入結構描述
{
"type": "object",
"properties": {
"check_id": {
"type": "string",
"description": "The check_id returned by check_direct_price."
},
"offers": {
"type": "array",
"minItems": 1,
"maxItems": 12,
"description": "The rooms and rates the hotel's own site showed for the stay.",
"items": {
"type": "object",
"properties": {
"room": {
"type": "string",
"description": "Room name as the hotel's site shows it."
},
"rate": {
"type": "string",
"description": "Rate name, when shown (e.g. \"Non refundable\", \"Web offer\")."
},
"total": {
"type": "number",
"exclusiveMinimum": 0,
"description": "Total for the whole stay, in euros."
},
"meal_plan": {
"type": "string",
"enum": [
"room_only",
"breakfast",
"half_board",
"full_board",
"all_inclusive"
]
},
"cancellation": {
"type": "string",
"enum": [
"free",
"non_refundable",
"partial"
]
},
"tourist_tax_included": {
"type": "boolean",
"description": "true when the site says the total includes the local tourist tax; false when it says the tax comes on top or is paid at the hotel."
},
"tourist_tax": {
"type": "number",
"minimum": 0,
"description": "The tourist tax amount for the stay, when the site states it."
},
"member_price": {
"type": "boolean",
"description": "true when this is a price for members of the hotel's free club."
},
"code": {
"type": "string",
"description": "A promo code the hotel's site shows publicly and that this price uses, if any."
}
},
"required": [
"total"
],
"additionalProperties": false
}
},
"page_url": {
"type": "string",
"description": "The address of the hotel's page where you saw the prices (only its host is kept)."
},
"hotel": {
"type": "string",
"description": "The hotel's name as the traveller sees it, e.g. \"Hotel Calipolis\"."
},
"city": {
"type": "string",
"description": "The town or city the hotel is in, e.g. \"Sitges\". Helps find hotels we have not checked before."
},
"booking_url": {
"type": "string",
"description": "Optional: the Booking.com address of the hotel's page (https://www.booking.com/hotel/…). Only the address is read, to recognise the hotel and the dates; the page is never opened."
},
"checkin": {
"type": "string",
"description": "Check-in date, YYYY-MM-DD."
},
"checkout": {
"type": "string",
"description": "Check-out date, YYYY-MM-DD."
},
"adults": {
"type": "integer",
"minimum": 1,
"maximum": 8,
"description": "Number of adults (default 2)."
},
"children_ages": {
"type": "array",
"items": {
"type": "integer",
"minimum": 0,
"maximum": 17
},
"maxItems": 6,
"description": "Each child's age on the day of check-out, one number per child. Leave out when no children travel. Hotels price children by age, so ages are needed for families."
},
"booking_total": {
"type": "number",
"exclusiveMinimum": 0,
"description": "The total Booking.com shows for the whole stay, in euros, when known. Without it you get the hotel's own price and, when the evidence allows, an estimated saving."
},
"booking_meal_plan": {
"type": "string",
"enum": [
"room_only",
"breakfast",
"half_board",
"full_board",
"all_inclusive"
],
"description": "The meal plan of the Booking.com offer, when Booking.com shows it."
},
"booking_cancellation": {
"type": "string",
"enum": [
"free",
"non_refundable",
"partial"
],
"description": "The cancellation terms of the Booking.com offer, when Booking.com shows them: free cancellation, non-refundable, or partly refundable."
},
"booking_room": {
"type": "string",
"description": "The room name of the Booking.com offer, when shown."
},
"booking_taxes_included": {
"type": "boolean",
"description": "true when Booking.com says its total includes taxes and charges; false when it lists taxes on top."
},
"booking_taxes_extra": {
"type": "number",
"minimum": 0,
"description": "Taxes Booking.com lists on top of its total, in euros (e.g. a city tax), when shown."
}
},
"required": [
"offers"
],
"additionalProperties": false
}🟢report_booking(check_id, booked_direct, total_paid)
When the traveller tells you they booked a hotel after a check_direct_price answer, report whether they booked it on the hotel's own website, with the check_id. Only report what the traveller told you. Nothing about the traveller is sent or kept: only that the check led to a booking, and its total when given.
輸入結構描述
{
"type": "object",
"properties": {
"check_id": {
"type": "string",
"description": "The check_id returned by check_direct_price."
},
"booked_direct": {
"type": "boolean",
"description": "true when the traveller booked on the hotel's own website; false when they booked elsewhere or not at all."
},
"total_paid": {
"type": "number",
"exclusiveMinimum": 0,
"description": "The total the traveller says they paid, in euros, when they say it."
}
},
"required": [
"check_id",
"booked_direct"
],
"additionalProperties": false
}社群
證據