{"name":"com.flightpowers/booking","slug":"flightpowers-booking","title":"Booking.com Hotel Search (Live Prices)","description":"Live Booking.com hotel prices, plus per-country pricing for rate-parity monitoring.","url":"https://mcp.market/server/flightpowers-booking","rating":null,"grade":"B","score":84,"certified":false,"status":"active","category":"search","tags":["search","maps"],"presence":{"score":26,"stars":1,"forks":1,"downloads_week":null,"last_push_at":"2026-09-17T11:56:55.000Z","license":"MIT"},"uptime":{"percent":100,"checks":2,"ok":2,"last_checked_at":"2026-09-19T21:21:08.558Z","last_ok_at":"2026-09-19T21:21:08.558Z","latency_ms":161},"claimed":false,"transport":"remote","callable_via_gateway":true,"default_price_micros":0,"repository":"https://github.com/mtnrabi/google-flights-mcp","website":"https://hotels.flightpowers.com","version":"1.2.0","remotes":[{"type":"streamable-http","url":"https://hotels.flightpowers.com/mcp","headers":[{"description":"Your own RapidAPI key for the Booking Live API. Free tier at https://rapidapi.com/mtnrabi/api/booking-live-api","format":"string","isSecret":true,"name":"x-rapidapi-key"}]}],"packages":[],"tools":[{"name":"compare_hotel_rates","description":"FlightPowers cross-source comparison: prices one stay on every source you have a key for. Input: a free-text destination the way a person would say it (\"Rome\", \"Tokyo Shibuya\"), check-in and check-out dates, and how many adults. Returns one row per source: the cheapest and the median stay total, how many places were found, the currency and when it was read.\n\nRead the caveats on every row before you say one source is cheaper. rating_scale is 10 on Booking and 5 on Airbnb. taxes_included is true on Booking, where excluded taxes are folded into the price, and null on Airbnb, where we have not established the tax treatment of the display total; a null is not a no. A source you have no key for is listed in providers_skipped with a subscribe link and is not counted anywhere in the comparison.\n\nRates go stale within minutes: never reuse an earlier result, compare again.\n\nRequires the caller's own RapidAPI key for the Booking Live API. Get one (free tier available) at https://rapidapi.com/mtnrabi/api/booking-live-api, then pass it as an `x-rapidapi-key` header (preferred), a `?rapidapi_key=` query parameter on the server URL, or your client's own API key field -- first non-empty wins. Usage counts against the caller's own RapidAPI plan, not ours; every response reports what it spent and what is left in `api_usage`. No key? Sign in with Google and the first 10 searches each day are free on this server -- ad-free, nothing to paste. Connect your own RapidAPI key at https://hotels.flightpowers.com/connect to remove the cap.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"destination":{"description":"Where to stay, in free text the way a person would say it, e.g. \"Rome\" or \"Tokyo Shibuya\". A city, district, landmark or region all work; no internal location ID is needed.","type":"string"},"checkin_date":{"description":"First night of the stay, \"YYYY-MM-DD\".","type":"string"},"checkout_date":{"description":"Departure morning, \"YYYY-MM-DD\". Must be after checkin_date.","type":"string"},"adults":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"Number of adult guests. Defaults to the upstream default when omitted."},"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 every row, e.g. \"usd\". Sources are asked for the same currency so the totals are comparable; a row that came back in a different one says so in its own currency field and is not converted."},"providers":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"default":null,"description":"Which sources to price, e.g. [\"booking\", \"airbnb\"]. Defaults to both. A source you have no RapidAPI key for is not called and appears in providers_skipped."}},"required":["destination","checkin_date","checkout_date"],"additionalProperties":false}},{"name":"find_hotel_by_name","description":"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 resolution is done for you. Returns the property's price, review score, room type and a booking link. Use it to check one specific hotel, or to track a single property's price over time.\n\nA date range and a nights value price several stays in one call, like the flights tools: pass checkin_date_from, checkin_date_to and nights (a number, or a list like [2, 3, 7]) instead of 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 request billed to your plan; max_searches caps it, and a range that expands past the cap is sampled evenly across the calendar and says so in search_coverage.\n\nprice_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 call each country a few times on this same property before reporting a gap.\n\nRates go stale within minutes: never reuse an earlier result.\n\nRequires the caller's own RapidAPI key for the Booking Live API. Get one (free tier available) at https://rapidapi.com/mtnrabi/api/booking-live-api, then pass it as an `x-rapidapi-key` header (preferred), a `?rapidapi_key=` query parameter on the server URL, or your client's own API key field -- first non-empty wins. Usage counts against the caller's own RapidAPI plan, not ours; every response reports what it spent and what is left in `api_usage`. No key? Sign in with Google and the first 10 searches each day are free on this server -- ad-free, nothing to paste. Connect your own RapidAPI key at https://hotels.flightpowers.com/connect to remove the cap.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"hotel_name":{"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.","type":"string"},"checkin_date":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"First night of the stay, \"YYYY-MM-DD\". Give this with checkout_date for one stay, or use checkin_date_from plus checkin_date_to for a rate calendar."},"checkout_date":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Departure morning, \"YYYY-MM-DD\". Must be after checkin_date. Give either this or nights, not both."},"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."},"checkin_date_to":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Last check-in date of the range, \"YYYY-MM-DD\"."},"nights":{"anyOf":[{"type":"integer"},{"items":{"type":"integer"},"type":"array"},{"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."},"max_searches":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"Cap the billed requests this call may make. One stay is one request; lower it and the range is sampled evenly across the calendar rather than cut short at the front."},"adults":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"Number of adult guests."},"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\"."},"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. Call each country a few times on this same property before reporting a gap, because rates move between calls and gaps are usually modest and property-dependent."}},"required":["hotel_name"],"additionalProperties":false}},{"name":"search_hotels","description":"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 say it (\"Rome\", \"Tokyo Shibuya\"), plus check-in and check-out dates. Returns each property's price, review score, room type, location and a booking link.\n\nSet price_as_seen_from to a two-letter country code to price the same stay the way a shopper resident in that country would see it, which no other travel tool here can do. Gaps are real but usually modest and property-dependent, and rates move between calls, so hold one named property fixed, call each country a few times, and never read one call per country as a gap.\n\nA date range and a nights value price several stays in one call, like the flights tools: pass checkin_date_from, checkin_date_to and nights (a number, or a list like [2, 3, 7]) instead of 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 request billed to your plan; max_searches caps it, and a request that expands past the cap is sampled evenly across the range and says so in search_coverage.\n\nSet providers to price the same stay on more than one source in one call: [\"booking\"] (the default), [\"airbnb\"], or both. Booking rows rate out of 10 and Airbnb rows out of 5, so read rating_scale on every row before comparing two of them. A source you have no RapidAPI key for is not called and is named in providers_skipped with a subscribe link, never quietly dropped.\n\nRates go stale within minutes: never reuse an earlier result, search again.\n\nRequires the caller's own RapidAPI key for the Booking Live API. Get one (free tier available) at https://rapidapi.com/mtnrabi/api/booking-live-api, then pass it as an `x-rapidapi-key` header (preferred), a `?rapidapi_key=` query parameter on the server URL, or your client's own API key field -- first non-empty wins. Usage counts against the caller's own RapidAPI plan, not ours; every response reports what it spent and what is left in `api_usage`. No key? Sign in with Google and the first 10 searches each day are free on this server -- ad-free, nothing to paste. Connect your own RapidAPI key at https://hotels.flightpowers.com/connect to remove the cap.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"destination":{"description":"Where to stay, in free text the way a person would say it, e.g. \"Rome\" or \"Tokyo Shibuya\". A city, district, landmark or region all work; no internal location ID is needed.","type":"string"},"checkin_date":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"First night of the stay, \"YYYY-MM-DD\". Give this with checkout_date for one stay, or use checkin_date_from plus checkin_date_to for a range of check-in dates."},"checkout_date":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Departure morning, \"YYYY-MM-DD\". Must be after checkin_date. Give either this or nights, not both."},"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 -- the hotel equivalent of the flights date range."},"checkin_date_to":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Last check-in date of the range, \"YYYY-MM-DD\"."},"nights":{"anyOf":[{"type":"integer"},{"items":{"type":"integer"},"type":"array"},{"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."},"max_searches":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"Cap the billed requests this call may make. One stay is one request, so a 30-day range at two lengths is 60; lower this to spend less and the range is sampled evenly across the calendar rather than cut short at the front."},"adults":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"Number of adult guests. Defaults to the upstream default when omitted."},"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\"."},"budget_per_night":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"Only return properties at or below this nightly price, in `currency`."},"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. For a rate-parity check hold one named property fixed and call each country a few times, because rates move between calls and one call per country can show a gap that is not there. Omit it for a neutral price."},"filters":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"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."},"providers":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"default":null,"description":"Which sources to price this stay on, e.g. [\"booking\"], [\"airbnb\"] or [\"booking\", \"airbnb\"]. Defaults to [\"booking\"]. Each source is a separate RapidAPI subscription, so a source you have no key for is not called; it comes back named in providers_skipped with the reason and where to subscribe, rather than silently missing. filters and price_as_seen_from apply to booking only; airbnb takes price_min, price_max and room_types instead, and rows from it carry rating_scale 5 where booking's carry 10."}},"required":["destination"],"additionalProperties":false}}],"scan":{"score":84,"grade":"B","scanned_at":"2026-09-19T19:17:43.908Z","report":{"scannerVersion":"0.1.5","scannedAt":"2026-09-19T19:17:43.936Z","components":{"code":{"score":-1,"max":25,"notes":["remote-only server, no package to scan"]},"reliability":{"score":20,"max":20,"notes":["remote reachable in 303ms"]},"poisoning":{"score":13,"max":15,"notes":["3 tool descriptions checked"]},"auth":{"score":8,"max":15,"notes":["API key sent as a header"]},"maintenance":{"score":15,"max":15,"notes":["last push 2 days ago"]},"identity":{"score":7,"max":10,"notes":["namespace and repository owner differ","GitHub account older than a year","website matches verified namespace"]}},"findings":[{"id":"poison.long-description","severity":"low","component":"poisoning","title":"Unusually long tool description (over 2,000 characters)","evidence":"tool search_hotels: …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 say it (\"Rome\", \"Tokyo Shibuya\"), plus check-in and check-out dates. Returns each property's price, review score, room type, location and a booking link. Set price_as_seen_from to a two-letter country code to price the same stay the way a shopper resident in that country would see it, which no other travel tool here can do. Gaps are real but usually modest and property-dependent, and rates move between calls, so hold one named property fixed, call each country a few times, and never read one call per country as a gap. A date range and a nights value price several stays in one call, like the flights tools: pass checkin_date_from, checkin_date_to and nights (a number, or a list like [2, 3, 7]) instead of 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 request billed to your plan; max_searches caps it, and a request that expands past the cap is sampled evenly across the range and says so in search_coverage. Set providers to price the same stay on more than one source in one call: [\"booking\"] (the default), [\"airbnb\"], or both. Booking rows rate out of 10 and Airbnb rows out of 5, so read rating_scale on every row before comparing two of them. A source you have no RapidAPI key for is not called and is named in providers_skipped with a subscribe link, never quietly dropped. Rates go stale within minutes: never reuse an earlier result, search again. Requires the caller's own RapidAPI key for the Booking Live API. Get one (free tier available) at https://rapidapi.com/mtnrabi/api/booking-live-api, then pass it as an `x-rapidapi-key` header (preferred), a `?rapidapi_key=` query parameter on the server URL, or your client's own API key field -- first non-empty wins. Usage counts against the caller's own RapidAPI plan, not ours; every response reports what it spent and what is left in `api_usage`. No key? Sign in with Google and the first 10 searches each day are free on this server -- ad-free, nothing to paste. Connect your own RapidAPI key at https://hotels.flightpowers.com/connect to remove the cap.…"}],"inputs":{"probes":[{"url":"https://hotels.flightpowers.com/mcp","reachable":true,"authRequired":false,"latencyMs":303,"serverInfo":{"name":"booking-hotels-mcp","version":"1.0.0"}}],"packages":[],"repo":{"found":true,"owner":"mtnrabi","repo":"google-flights-mcp","archived":false,"pushedAt":"2026-09-17T11:56:55Z","stars":1,"forks":1,"openIssues":2,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/46162004?v=4","ownerCreatedAt":"2018-12-26T12:59:10Z","license":"MIT"},"icon":{"url":"https://hotels.flightpowers.com/favicon.svg","source":"site"},"presence":{"stars":1,"forks":1,"downloadsWeek":null,"license":"MIT","lastPushAt":"2026-09-17T11:56:55.000Z","score":26}}}},"grade_history":[],"reviews":[]}