Live Booking.com hotel prices, plus per-country pricing for rate-parity monitoring.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Your own RapidAPI key for the Booking Live API. Free tier at https://rapidapi.com/mtnrabi/api/booking-live-api
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
FlightPowers single-property lookup: live Booking.com availability and pricing for one named property. Input: the hotel name a person would type (adding the city helps when a chain has many properties) plus check-in and check-out dates -- no internal property ID needed, the server resolves the name. Returns the property's price, review score, room type, latitude/longitude and a booking link. It checks one specific hotel, or tracks a single property's price over time. A date range and a nights value price several stays in one call, checkin_date_from, checkin_date_to and nights (a number, or a list like [2, 3, 7]) replace a fixed checkin_date/checkout_date, and this property is priced for every check-in date -- a rate calendar for one hotel. The answer is stays, one entry per date with that date's price and per-night rate, plus cheapest_overall. Each stay is one search; max_searches caps it, and a range that expands past the cap is sampled evenly across the calendar and says so in search_coverage. With the caller's own key the cap rises by itself to cover a month-sized range. On the free sign-in allowance (10 searches a day, one per stay) a range larger than what is left today is refused before anything runs; a range within what is left runs, and a wider range needs the caller's own key. price_as_seen_from prices the stay as a shopper resident in that country would see it. Gaps are real but usually modest and property-dependent, and rates move between calls, so a gap holds only when it repeats over a few calls per country on this same property. Rates go stale within minutes: a current price comes from a new search, not from an earlier result.
The property name a person would type, e.g. "Hotel Artemide". Adding the city ("Hotel Artemide Rome") disambiguates a chain with many properties. No internal property ID is needed.
Number of adult guests.
How many nights to stay, as a number (3) or a list ([2, 3, 7]) to price several lengths. Derives the check-out date from each check-in date, so it replaces checkout_date rather than joining it.
Returns the property exactly as the source sent it, image URL and the full tracking link included. Off by default: the row leaves out the image URL, the booking link keeps only its stay parameters, and price_per_night is added.
Number of children sharing the room.
ISO currency code for the prices returned, e.g. "usd".
First night of the stay, "YYYY-MM-DD". With checkout_date it prices one stay; checkin_date_from plus checkin_date_to give a rate calendar instead.
The searches this call may make, up or down. One stay is one request; with the caller's own key the cap rises by itself to cover a month-sized request, and anything past the cap in force is sampled evenly across the calendar rather than cut short at the front.
Departure morning, "YYYY-MM-DD". Must be after checkin_date. Mutually exclusive with `nights`.
Last check-in date of the range, "YYYY-MM-DD".
First check-in date of a range, "YYYY-MM-DD". Needs checkin_date_to and nights, and prices this property on every check-in date in the range -- one call, a rate calendar.
Two-letter country code, e.g. "de". Prices the stay as a shopper resident in that country would see it. Rates move between calls and gaps are usually modest and property-dependent, so a gap holds only when it repeats over a few calls per country on this same property.
FlightPowers single-property lookup: live Booking.com availability and pricing for one named property. Input: the hotel name a person would type (adding the city helps when a chain has many properties) plus check-in and check-out dates -- no internal property ID needed, the server resolves the name. Returns the property's price, review score, room type, latitude/longitude and a booking link. It checks one specific hotel, or tracks a single property's price over time. A date range and a nights value price several stays in one call, checkin_date_from, checkin_date_to and nights (a number, or a list like [2, 3, 7]) replace a fixed checkin_date/checkout_date, and this property is priced for every check-in date -- a rate calendar for one hotel. The answer is stays, one entry per date with that date's price and per-night rate, plus cheapest_overall. Each stay is one search; max_searches caps it, and a range that expands past the cap is sampled evenly across the calendar and says so in search_coverage. With the caller's own key the cap rises by itself to cover a month-sized range. On the free sign-in allowance (10 searches a day, one per stay) a range larger than what is left today is refused before anything runs; a range within what is left runs, and a wider range needs the caller's own key. price_as_seen_from prices the stay as a shopper resident in that country would see it. Gaps are real but usually modest and property-dependent, and rates move between calls, so a gap holds only when it repeats over a few calls per country on this same property. Rates go stale within minutes: a current price comes from a new search, not from an earlier result.
| Argument | Type | Description |
|---|---|---|
| adults | any | Number of adult guests. |
| nights | any | How many nights to stay, as a number (3) or a list ([2, 3, 7]) to price several lengths. Derives the check-out date from each check-in date, so it replaces checkout_date rather than joining it. |
| verbose | boolean | Returns the property exactly as the source sent it, image URL and the full tracking link included. Off by default: the row leaves out the image URL, the booking link keeps only its stay parameters, and price_per_night is added. |
| children | any | Number of children sharing the room. |
| currency | any | ISO currency code for the prices returned, e.g. "usd". |
| hotel_name* | string | The property name a person would type, e.g. "Hotel Artemide". Adding the city ("Hotel Artemide Rome") disambiguates a chain with many properties. No internal property ID is needed. |
| checkin_date | any | First night of the stay, "YYYY-MM-DD". With checkout_date it prices one stay; checkin_date_from plus checkin_date_to give a rate calendar instead. |
| max_searches | any | The searches this call may make, up or down. One stay is one request; with the caller's own key the cap rises by itself to cover a month-sized request, and anything past the cap in force is sampled evenly across the calendar rather than cut short at the front. |
| checkout_date | any | Departure morning, "YYYY-MM-DD". Must be after checkin_date. Mutually exclusive with `nights`. |
| checkin_date_to | any | Last check-in date of the range, "YYYY-MM-DD". |
| checkin_date_from | any | First check-in date of a range, "YYYY-MM-DD". Needs checkin_date_to and nights, and prices this property on every check-in date in the range -- one call, a rate calendar. |
| price_as_seen_from | any | Two-letter country code, e.g. "de". Prices the stay as a shopper resident in that country would see it. Rates move between calls and gaps are usually modest and property-dependent, so a gap holds only when it repeats over a few calls per country on this same property. |
{
"type": "object",
"required": [
"hotel_name"
],
"properties": {
"adults": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Number of adult guests."
},
"nights": {
"anyOf": [
{
"type": "integer"
},
{
"type": "array",
"items": {
"type": "integer"
}
},
{
"type": "null"
}
],
"default": null,
"description": "How many nights to stay, as a number (3) or a list ([2, 3, 7]) to price several lengths. Derives the check-out date from each check-in date, so it replaces checkout_date rather than joining it."
},
"verbose": {
"type": "boolean",
"default": false,
"description": "Returns the property exactly as the source sent it, image URL and the full tracking link included. Off by default: the row leaves out the image URL, the booking link keeps only its stay parameters, and price_per_night is added."
},
"children": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Number of children sharing the room."
},
"currency": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "ISO currency code for the prices returned, e.g. \"usd\"."
},
"hotel_name": {
"type": "string",
"description": "The property name a person would type, e.g. \"Hotel Artemide\". Adding the city (\"Hotel Artemide Rome\") disambiguates a chain with many properties. No internal property ID is needed."
},
"checkin_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "First night of the stay, \"YYYY-MM-DD\". With checkout_date it prices one stay; checkin_date_from plus checkin_date_to give a rate calendar instead."
},
"max_searches": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "The searches this call may make, up or down. One stay is one request; with the caller's own key the cap rises by itself to cover a month-sized request, and anything past the cap in force is sampled evenly across the calendar rather than cut short at the front."
},
"checkout_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Departure morning, \"YYYY-MM-DD\". Must be after checkin_date. Mutually exclusive with `nights`."
},
"checkin_date_to": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Last check-in date of the range, \"YYYY-MM-DD\"."
},
"checkin_date_from": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "First check-in date of a range, \"YYYY-MM-DD\". Needs checkin_date_to and nights, and prices this property on every check-in date in the range -- one call, a rate calendar."
},
"price_as_seen_from": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Two-letter country code, e.g. \"de\". Prices the stay as a shopper resident in that country would see it. Rates move between calls and gaps are usually modest and property-dependent, so a gap holds only when it repeats over a few calls per country on this same property."
}
},
"additionalProperties": false
}FlightPowers hotel search: live Booking.com availability and nightly prices for a destination and date range. Input: a free-text destination the way a person would write it ("Rome", "Tokyo Shibuya"), plus check-in and check-out dates. Returns each property's price, review score, room type, location, latitude/longitude and a booking link: 10 properties by default, the cheapest always among them; limit asks for more or fewer, and verbose: true returns the source's full rows. price_as_seen_from, a two-letter country code, prices the same stay the way a shopper resident in that country would see it. Gaps are real but usually modest and property-dependent, and rates move between calls, so one call per country is not evidence of a gap; a parity check holds one named property fixed and calls each country a few times. A date range and a nights value price several stays in one call: checkin_date_from, checkin_date_to and nights (a number, or a list like [2, 3, 7]) replace a fixed checkin_date/checkout_date, and every check-in date is priced separately. The answer is stays -- one entry per stay with its cheapest property, per-night price and median -- plus cheapest_overall, and the full property list for the cheapest stay only. Each stay is one search; max_searches caps it, and a request that expands past the cap is sampled evenly across the range and says so in search_coverage. With the caller's own key the cap rises by itself to cover a month-sized range. On the free sign-in allowance (10 searches a day, one per stay) a range larger than what is left today is refused before anything runs; a range within what is left runs, and a wider range needs the caller's own key. Rates go stale within minutes: a current price comes from a new search, not from an earlier result.
| Argument | Type | Description |
|---|---|---|
| limit | any | How many properties to return (default 10; a stay has about 25). They come in the order Booking.com returned them, and the cheapest is always included. results_total says how many there were. |
| adults |
| any |
| Number of adult guests. Defaults to the upstream default when omitted. |
| nights | any | How many nights to stay, as a number (3) or a list ([2, 3, 7]) to price several lengths. Derives the check-out date from each check-in date, so it replaces checkout_date rather than joining it. |
| filters | any | Property filters to apply, e.g. ["free_cancellation", "breakfast_included"]. An unknown name is rejected with the list of valid ones rather than being ignored. |
| verbose | boolean | Returns each property exactly as the source sent it, image URLs and the full tracking link included, and every property unless limit is set. Off by default: rows leave out image URLs, the booking link keeps only its stay parameters, and price_per_night is added. |
| children | any | Number of children sharing the room. |
| currency | any | ISO currency code for the prices returned, e.g. "usd". |
| destination* | string | Where to stay, in free text the way a person would write it, e.g. "Rome" or "Tokyo Shibuya". A city, district, landmark or region all work; no internal location ID is needed. |
| checkin_date | any | First night of the stay, "YYYY-MM-DD". With checkout_date it prices one stay; checkin_date_from plus checkin_date_to price a range of check-in dates instead. |
| max_searches | any | The searches this call may make, up or down. One stay is one request, so a 30-day range at two lengths is 60 and a month at three is 93 -- with the caller's own key the cap rises to cover a request that size by itself. A lower value spends less and a higher one (hard maximum 200) covers a wider grid; either way the range is sampled evenly across the calendar rather than cut short at the front. |
| checkout_date | any | Departure morning, "YYYY-MM-DD". Must be after checkin_date. Mutually exclusive with `nights`. |
| checkin_date_to | any | Last check-in date of the range, "YYYY-MM-DD". |
| budget_per_night | any | Only properties at or below this nightly price, in `currency`, are returned. |
| checkin_date_from | any | First check-in date of a range, "YYYY-MM-DD". Needs checkin_date_to and nights, and prices one stay per check-in date in the range. |
| price_as_seen_from | any | Two-letter country code, e.g. "de". Prices the stay through a residential connection in that country, so the result is what a shopper resident there would be quoted. A rate-parity check holds one named property fixed and calls each country a few times, because rates move between calls and one call per country can show a gap that is not there. Without it the price is neutral. |
{
"type": "object",
"required": [
"destination"
],
"properties": {
"limit": {
"anyOf": [
{
"type": "integer",
"minimum": 1
},
{
"type": "null"
}
],
"default": null,
"description": "How many properties to return (default 10; a stay has about 25). They come in the order Booking.com returned them, and the cheapest is always included. results_total says how many there were."
},
"adults": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Number of adult guests. Defaults to the upstream default when omitted."
},
"nights": {
"anyOf": [
{
"type": "integer"
},
{
"type": "array",
"items": {
"type": "integer"
}
},
{
"type": "null"
}
],
"default": null,
"description": "How many nights to stay, as a number (3) or a list ([2, 3, 7]) to price several lengths. Derives the check-out date from each check-in date, so it replaces checkout_date rather than joining it."
},
"filters": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"default": null,
"description": "Property filters to apply, e.g. [\"free_cancellation\", \"breakfast_included\"]. An unknown name is rejected with the list of valid ones rather than being ignored."
},
"verbose": {
"type": "boolean",
"default": false,
"description": "Returns each property exactly as the source sent it, image URLs and the full tracking link included, and every property unless limit is set. Off by default: rows leave out image URLs, the booking link keeps only its stay parameters, and price_per_night is added."
},
"children": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Number of children sharing the room."
},
"currency": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "ISO currency code for the prices returned, e.g. \"usd\"."
},
"destination": {
"type": "string",
"description": "Where to stay, in free text the way a person would write it, e.g. \"Rome\" or \"Tokyo Shibuya\". A city, district, landmark or region all work; no internal location ID is needed."
},
"checkin_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "First night of the stay, \"YYYY-MM-DD\". With checkout_date it prices one stay; checkin_date_from plus checkin_date_to price a range of check-in dates instead."
},
"max_searches": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "The searches this call may make, up or down. One stay is one request, so a 30-day range at two lengths is 60 and a month at three is 93 -- with the caller's own key the cap rises to cover a request that size by itself. A lower value spends less and a higher one (hard maximum 200) covers a wider grid; either way the range is sampled evenly across the calendar rather than cut short at the front."
},
"checkout_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Departure morning, \"YYYY-MM-DD\". Must be after checkin_date. Mutually exclusive with `nights`."
},
"checkin_date_to": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Last check-in date of the range, \"YYYY-MM-DD\"."
},
"budget_per_night": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Only properties at or below this nightly price, in `currency`, are returned."
},
"checkin_date_from": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "First check-in date of a range, \"YYYY-MM-DD\". Needs checkin_date_to and nights, and prices one stay per check-in date in the range."
},
"price_as_seen_from": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Two-letter country code, e.g. \"de\". Prices the stay through a residential connection in that country, so the result is what a shopper resident there would be quoted. A rate-parity check holds one named property fixed and calls each country a few times, because rates move between calls and one call per country can show a gap that is not there. Without it the price is neutral."
}
},
"additionalProperties": false
}