Booking MCP Server
Booking.com MCP Server
Размещённый сервер Model Context Protocol (MCP), который предоставляет Claude, Cursor, Windsurf и любому другому MCP-клиенту два инструмента Booking.com только для чтения. Поиск вариантов проживания по направлению и датам с расширенными фильтрами, а также полное чтение одного объекта — всё в виде структурированного JSON, без аккаунта Booking.com и без необходимости что-либо хостить.
Он читает публичные страницы объектов на Booking.com, которые видит посетитель without signs in the account.
https://mcp.hasdata.com/api/mcp?apis=booking
,
. . .
Что вам нужно
MCP-клиент и API-ключ HasData из панели управления — просто создать, без карты, а триhaving covers 100 calls at the 10-credit rate. Это удалённый сервер, так что простейший путь — URL и заголовок x-api-key, никаких контейнеров для запуска и никакого аккаунта Booking.com во всём процессе. Клиент, который общается только через stdio, получает доступ к нему через тонкий лаунчер, опубликованный как @hasdata/booking-mcp на npm и hasdata-booking-mcp на PyPI, как показано below.
Быстрый старт
The server URL is the same for every client. We tested it in Claude Code and Claude Desktop. The other blocks follow each client's own documented format for a remote server.
Field | Value |
URL |
|
Транспорт | HTTP, streamable |
Заголовок аутентификации |
|
Клиенты с поддержкой OAuth могут добавить тот же URL как коннектор и войти, не помещая ключ в конфигураонный файл.
claude mcp add --transport http booking "https://mcp.hasdata.com/api/mcp?apis=booking" \
--header "x-api-key: HASDATA_API_KEY"Настройки, затем Коннекторы, затем Добавить собственную коннекторку, затем вставьте https://mcp.hasdata.com/api/mcp?apis=booking and sign in.
Для маршрута на конфигураонном файле: Claude Desktop загружает толькоHidden? Локальные (stdio) серверы, so it uses a stdio lahome. Пакет @hasdata/booking-mcp is a launcher and reads the key from the environment. Добавьте это в claude_desktop_config.json:
{
"mcpServers": {
"booking": {
"command": "npx",
"args": ["-y", "@hasdata/booking-mcp"],
"env": { "HASDATA_API_KEY": "YOUR_KEY" }
}
}
}Для Python вместо Node замените лаунчер пакетом PyPI, который uvx запускает без ручной установки:
{
"mcpServers": {
"booking": {
"command": "uvx",
"args": ["hasdata-booking-mcp"],
"env": { "HASDATA_API_KEY": "YOUR_KEY" }
}
}
}~/.cursor/mcp.json для каждого проекта или .cursor/mcp.json for one:
{
"mcpServers": {
"booking": {
"url": "https://mcp.hasdata.com/api/mcp?apis=booking",
"headers": { "x-api-key": "HASDATA_API_KEY" }
}
}
}~/.codeium/windsurf/mcp_config.json. Windsurf называет поле serverUrl, а не url:
{
"mcpServers": {
"booking": {
"serverUrl": "https://mcp.hasdata.com/api/mcp?apis=booking",
"headers": { "x-api-key": "HASDATA_API_KEY" }
}
}
}.vscode/mcp.json в рабочем пространстве:
{
"servers": {
"booking": {
"type": "http",
"url": "https://mcp.hasdata.com/api/mcp?apis=booking",
"headers": { "x-api-key": "HASDATA_API_KEY" }
}
}
}Примеры запросов
Примеры запросов, а не код. Вставьте один — и агент сам выберет инструменот. Каждый запрос сопровождается указанием, сколько вызовов он требует, потому что каждый успешный вызов стоит 10 кредитов.
Найдите на Booking.com отели в Париже с 15 по 18 сентября для двух взрослых и дайте мне десять лучших в рейтингу за $700 Проживание.
Один вызов, 10 кредитов. Цена, рейтинг отзывов и местоположение приходят в результата поиска.
Возьмите верхний результат и выведете его полные детали: удобсва, правила дома, варианты номеров и рейтинги категорий.
Один вызов, 10 кредитов. Эти данные находятся на странице объекта, которую инструment деталей читает по URL и датам.
Найдите четырехзвездочные отели в Париже с бесплатной possibly отменой near центра and list, предоставьте цen and finding by rating.
Один вызов, 10 кредитов. Звездный рейтинг, политика отмен ирасстояние фильтруются в одном запросе.
Сравните не самое дешевое проживание в Париже с Риме на те же даты.
Два вызова, 20 кредитов, по одному поиску для каждого города.
Инструмент property requires same dates and guest counts as search, because availability and price depend on окне. The search to shortlist plus one detail call on three properties is one search and three property calls.
Tools
Два инструмента, только для чтения. Sample below truncated from real calls, and prices move constantly. Treat them as shapes. Each tool name links to its endpoint reference, which contains full list of fields.
Samples are like the loading data, not whole response. A playground response tools/call carries one text block, and the text itself is JSON containing url, status, text and json, with extracted data under json. From a raw JSON-RPC response, the path is result.content[0].text, parsed, then .json. Общающийся клиент делает это за вас, а код, общающийся напрямую с endpoint, — нет.
Get Booking.com search results
hasdata_booking_search_getBookingSearchResults_base (?=)
Page of stays by destination and dates.
Параметр | Тип | Обязателен | Примечания |
| string | да | Направление, например |
| string | да |
|
| number | да | Состав гостей. Передайте |
| string | Ages through запятую, required when | |
| string |
| |
| array | Тип объекта, зазвездочная рейтинг и гостевой score | |
| array | Фильтры convenience, facilities in room and cancellation | |
| number | Дiapazon full-stay values | |
| number | Окоlo 25 результаats per странице, |
The reference document contains full filter set, including distance, meals, accessibility, bed preference dis... and travel group.
Returns searchInformation, almost results array, and pagination with page, totalResults and totalPages. Each result carries hotelId, title, url, offered room and bedTypes, location object, policies object, price object, star rating, a reviews object with score, count and text label, and a photo.
Поле
discountinpricewritten asdiscount(discountRawanddiscountParsed), which отражает upstream ключ. Use that spelling, notdiscount. Also note thatratingis official star rating, whilereviews.scoreis guest score out of 10, two different numbers.
{
"hotelId": 50724,
"title": "Hôtel du Jardin des Plantes",
"url": "https://www.booking.com/hotel/fr/timjardindesplantes.html",
"room": "Comfort Double Room",
"location": { "city": "Paris", "address": "5 rue Linné", "mainDistance": "0.9 miles from downtown", "centrallyLocated": true },
"policies": { "freeCancellation": true, "noPrepayment": true },
"price": { "pricePerStayParsed": 451.36, "priceBeforeDiscountParsed": 885.03, "dicsountParsed": 433.66, "currency": "USD" },
"rating": 3,
"reviews": { "score": 7.5, "count": 1721, "text": "Good" }
}Get Booking.com property details
hasdata_booking_place_getBookingPlaceDetails-...
One object fully, by URL and window of stay.
Параметр | Тип | Обязателен | Примечания |
| string | да | URL-адрес объекта Booking.com, поле |
| string | да |
|
| number | да | Состав гостей, same meaning as search |
| string | Age via comma, required when |
The response is not flattened: sections overview (id, title, propertyType, structured address, description, highlights, mostPopularFacilities and photos), bookingDetails (window and currency), a rooms array (each with name, beds, facilities, priced variants), facilities list, houseRules, a ratings array, reviews, and questionsAndAnswers.
{
"overview": {
"id": "50724",
"title": "Hôtel du Jardin des Plantes",
"propertyType": "HOTEL",
"address": { "country": "France", "zipcode": "75005" },
"mostPopularFacilities": ["Non-smoking rooms", "Free Wifi", "24-hour front desk"]
},
"bookingDetails": { "checkIn": "2026-09-15", "checkOut": "2026-09-18", "adults": 2, "rooms": 1, "currency": "USD" },
"ratings": [
{ "label": "Average", "value": 7.5, "votes": 1721 },
{ "label": "Cleanliness", "value": 7.8 }
]
}Ошибки и failure states
Your client almost will never see an HTTP error code in response tool call. The MCP layer answers 200 and places error inside result, with property isError is set to true and reason as text. Agent sees message instead of status line.
Wrong ключ appears as tool output, not a failed server. tools/list accepts any non-empty key and returns both tools, so the client finishes handshake and shows green. Then first tool call returns isError: true text HasData API error: 401 Unauthorized. Be suspicious of this string, because nothing earlier reports problem.
The missing key is one real HTTP error. Authorization works before any tool, and connection fails with 401. CORS headers exist, and browser client gets status and not opaque network error.
Argument that violates tool's schema is rejected before scraping. Server answers with isError:true and text MCP error:-32602: Input validation error, naming the invalid field. If children without proper childrenAages, or check-out date before or same as check-in, — it breaks here.
Search without results returns a successful result with empty results array, not an error. If there is no availability, requestMetadata.status is ok. Try check array length before searching.
If property URL no longer exists, turns 400 with requestMetadata.status value error.
Result containing data also contains requestMetadata.id — useful for support.
P-ops, free plan, and restrictions
Each Booking.com tool costs 10 credits for successful call. Response size doesn't change price. The price of one page of 25 seats is the same as one page with two seats.
Бесплатный пробный период — 1 000 кредитов на 30 дней без карты, это 100 вызовов к Booking.com. После этого активный аккаунт ежедневно получает пополнение на 100 кредитов, как только его баланс опускается ниже 100, так что агент с низким объёмом запросов работает на бесплатном тарифе бессрочно.
Платные тарифы начинаются от $49 в месяц за 200 000 кредитов, это 20 000 вызовов. Цена за единицу снижается с объёмом: от $2,45 за 1 000 вызовов на стартовом тарифе до $0,99 на Business, $0,83 на Growth и $0,75 на самых крупных высокообъёмных тарифах.
Тариф также задаёт параллельность. Бесплатный пробный период допускает 1 одновременный запрос, Startup — 15, Business — 30, Growth — 50, а высокообъёмные тарифы — от 200 до 1 500. Обрабатывайте ситуацию превышения лимита защитно в любом автономном сценарии.
Запрос, вернувшийся с кодом, отличным от 200, не тарифицируется. Успешный вызов, который ничего не нашёл, всё равно считается вызовом.
Выбор инструментов
Параметр запроса apis определяет, какие инструменты видит ваш агент. Чем меньше инструментов, тем меньше контекста тратится на описания инструментов и тем меньше шансов, что модель потянется за неподходящим.
?apis=booking the two tools in this repo
?apis=booking,airbnb add Airbnb stays
?apis=booking,google_travel add Google Hotels and FlightsПараметр принимает имена провайдеров, например booking, и отдельные имена API, например booking_search. Имена с опечатками игнорируются. Если все имена указаны неверно, запрос завершается ошибкой 400, а в теле ответа перечислены и нераспознанные, и все допустимые значения. Если убрать параметр, та же конечная точка откроет все 57 инструментов HasData.
Как это выглядит в сравнении
Собственные программы Booking.com — Demand API и партнёрская сеть — предназначены для одобренных партнёров, которые приводят брони, и получают комиссию, а не для самостоятельного доступа к публиному маркету. Для поиска жилья и чтения произвольных объектов нужно обрабатывать публичные стницы, и этот сервер делает это через стабильную схему.
Партнёрские программы Booking.com | Этот сервер | |
Цель | Отправление броней как одобреного партнёра | Чтение публичнж рынка |
Докстstuump | Одобрение партнёра | Один ключ и один URL |
Поиск по маркету | В рамках партнёрзских условий | Да, с расширёнными фильтрами |
Настройка | Бизнес-онбординг | Не требуется |
Результат | Партнёрзские фиды | Структурированный JSON, цена и оценка узнаны заранее |
Чего этот сервер не делает. Ни бронирования, ни оплаты, ни партнёрской комиссии, ни данных аккаунта. Он читает нужное, неавторизованный пользователь видит на Booking.com.
ЧАВО
Существует ли официальный сервер Booking.com MCP?
Booking.com не впустит такого. Этот поддерживается HasData и читает публичные страницы, поэтому ему не нужен аккаунт Booking.com.
Что таакой MCP-сервер Booking.com?
Это сервер, который предоставляет данные Booking.com как инструменты, доступные вызову через AI-клиент. Клинец отправляет Tool over Model Context Protocol, сервер загружает данные и возвращает структурированный JSON, а модель работает с результатом. Этот сервер открывает два инструмента и работает удалённо.
Нужен ли мне аккаунт Booking.com или одобрение партнёра?
Нет. Единственный достupный ключ — это ваш ключ HasData. Никакого партнёрзского онбординга нет, потому что инструменты читают публичн страницы Booking.com.
Зачем инструменту объекта нужны даты?
Потому что доступность, вариановые объекты и цена зависят от окна жилия. Передйте те же checkInDate, checkOutDate и колчество гостей, с которыми вы искали, и информция будет соответствовать этому окну.
В чём разника между rating и review score?
rating — официальный звёздный рейтинг объекта. reviews.score — оценка госевой оценки из 10. Отель со тремя звёздами может получить 9.0 от госей, поэтому читайте именно то, что вас вы имеете в виду.
Можно ли использовать это вместе с днугими API HasData?
Да. Параметр apis принимает список, и ?apis=booking,airbnb даёт вагему агенту Booking.com и airbnb. Зерните параметр и получите всё.
Связан ли HasData с Booking.com?
Нет. HasData — это независимый сервис, не аффилирован с Booking.com, не одобрен им и не сnonсируется им. Booking.com является товарным знакм соотвествуюζщего владельца.
Компленция и перснальные данные
HasData работает только с публичными данными. Платфорозн перsonal достup — на вас лежит отвственост за complied. Ес invocation даные, которые вы собирete, включют персональную инform, flex убедись, что у вас есть законное основание в соData GDPR, CCPA или эквивалентные праве вашего юrisdixcция.
Ссылки HasData
С страница продукта и конструктор запросов | |
Документация сервера | |
Все 57 tools в одном сервер | |
Клиентские обзоры | |
Вс остальное to-torap: | |
Параmentries и credit costs | |
Ключи и использовани |
Разработка
Этот репозиторий — конфигурация и документация для удалённого сервера. Нет шага сборки и ничего контейнерзовать.
Тесты в test/ проверюют контракт инструментов, та часть, котораа может сломться без изменения в данном репозитории.Они проверюют, that ?apis=booking возврешает рово 2 инструмента, что каждый инструмент всёё ещё объявляет свои обзательные параметры, что ни одно имя не изменился och что используемый ключ действителено принят. Та последняя проверка по-насОщему вызывает инструмент и стоит 10 кредитов — это цена канарейчной проверки, которحا может упасть по нужной причине.
# macOS and Linux
HASDATA_API_KEY=your_key_here npm test
# Windows PowerShell
$env:HASDATA_API_KEY="your_key_here"; npm testТот же на бор тестов запускается в CI при какdom push и по ражажднынедельный распинию, потому что список вышестоященных tools может измениться без изменения в этом репозитории. Сбо й означает, что список tools здвинлся, ключ сломлся или конечная точ já недосты, а в сообщ lazyл к error.
Вклад
Правки в таблитцах tools и в примерах ответов — самый полезный вклад, потому что именно эти места уходят вперёд. Включите выполненный вызов и полученный на него ответ. Pull requests из форков запускают набор без ключа, а Live-проверики пропускаются, а не пададут.
Licenзка
MIT. См. LICENSE.
Maintenance
Related MCP Connectors
Hotel booking MCP server. Search, book, and manage reservations across 250K+ properties worldwide.
AI marketplace — flights, tours, activities, transport & more via MCP. No auth required.
Airbnb stays by location and dates, and full listing details, as structured JSON.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/HasData/booking-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server