Booking.com MCP Server
Размещённый сервер Model Context Protocol (MCP), который предоставляет Claude, Cursor, Windsurf и любому другому MCP-клиенту два инструмента Booking.com только для чтения. Ищите варианты проживания по месту назначения и датам с подробными фильтрами или просматривайте полную информацию об отдельном объекте — всё в виде структурированного JSON, без необходимости размещать сервер самостоятельно.
Сервер считывает общедоступные страницы объектов Booking.com, доступные посетителям без входа в аккаунт.
1 000 бесплатных кредитов в месяц, банковская карта не нужна — этого хватит на 100 запросов Booking.com.
https://mcp.hasdata.com/mcp?apis=booking
Содержание
-
Что понадобится
-
Быстрый старт
-
Примеры запросов
-
Инструменты
-
Ошибки и сценарии сбоев
-
Цены, бесплатный тариф и ограничения
-
Выбор инструмента
-
Сравнение с аналогами
-
Часто задаваемые вопросы
-
Ссылки HasData
-
Разработка
-
Участие в проекте
-
Лицензия
Что понадобится
MCP-клиент и API-ключ HasData. Его можно бесплатно создать в личном кабинете, банковская карта не требуется. Бесплатный тариф включает 100 вызовов в месяц по 10 кредитов за вызов. Это удалённый сервер, поэтому для подключения достаточно URL и заголовка x-api-key — запускать контейнер не нужно. Клиенты, поддерживающие только stdio, подключаются к серверу через лёгкий лаунчер, опубликованный в npm как @hasdata/booking-mcp, а в PyPI — как hasdata-booking-mcp. Настройка приведена ниже.
Быстрый старт
URL сервера одинаков для всех клиентов. Мы лично проверили подключение через Claude Code и Claude Desktop. Остальные примеры соответствуют документированному формату настройки удалённых серверов в каждом клиенте.
| Поле | Значение |
|---|---|
| URL | https://mcp.hasdata.com/mcp?apis=booking |
| Транспорт | HTTP, потоковый |
| Заголовок авторизации | x-api-key: HASDATA_API_KEY |
Клиенты с поддержкой OAuth можно подключить по тому же URL и выполнить вход без добавления ключа в файл конфигурации.
Claude Code
claude mcp add --transport http booking "https://mcp.hasdata.com/mcp?apis=booking" \
--header "x-api-key: HASDATA_API_KEY"
Claude Desktop
Откройте Settings, затем Connectors, выберите Add custom connector, вставьте https://mcp.hasdata.com/mcp?apis=booking и выполните вход.
Если вы настраиваете подключение через файл конфигурации, учтите, что Claude Desktop загружает только локальные серверы (stdio). Поэтому для подключения к удалённому серверу используется лаунчер stdio. Эту роль выполняет пакет @hasdata/booking-mcp; он считывает ключ из переменной окружения. Добавьте этот фрагмент в claude_desktop_config.json:
{
"mcpServers": {
"booking": {
"command": "npx",
"args": ["-y", "@hasdata/booking-mcp"],
"env": { "HASDATA_API_KEY": "YOUR_KEY" }
}
}
}
Если вместо Node вы используете Python, замените лаунчер на пакет из PyPI. Его можно запустить через uvx без ручной установки:
{
"mcpServers": {
"booking": {
"command": "uvx",
"args": ["hasdata-booking-mcp"],
"env": { "HASDATA_API_KEY": "YOUR_KEY" }
}
}
}
Cursor
Файл ~/.cursor/mcp.json — для всех проектов, а .cursor/mcp.json — для одного проекта:
{
"mcpServers": {
"booking": {
"url": "https://mcp.hasdata.com/mcp?apis=booking",
"headers": { "x-api-key": "HASDATA_API_KEY" }
}
}
}
Windsurf
Файл ~/.codeium/windsurf/mcp_config.json. В Windsurf поле называется serverUrl, а не url:
{
"mcpServers": {
"booking": {
"serverUrl": "https://mcp.hasdata.com/mcp?apis=booking",
"headers": { "x-api-key": "HASDATA_API_KEY" }
}
}
}
VS Code
Файл .vscode/mcp.json в рабочей области:
{
"servers": {
"booking": {
"type": "http",
"url": "https://mcp.hasdata.com/mcp?apis=booking",
"headers": { "x-api-key": "HASDATA_API_KEY" }
}
}
}
Примеры запросов
Это запросы на естественном языке, а не код. Вставьте любой из них, и агент сам выберет нужный инструмент. Для каждого указано количество вызовов: каждый успешный вызов стоит 10 кредитов.
Найди на Booking.com отели в Париже с 15 по 18 сентября для двух взрослых и покажи десять вариантов с лучшими отзывами, стоимость проживания в которых не превышает 700 долларов.
Один вызов, 10 кредитов. Цена, оценка отзывов и местоположение указаны в результатах поиска.
Открой первый вариант и покажи всю информацию о нём: удобства, правила проживания, варианты номеров и оценки по категориям.
Один вызов, 10 кредитов. Эти сведения находятся на странице объекта; инструмент получения подробной информации считывает их по URL и датам.
Найди в Париже четырёхзвёздочные отели с бесплатной отменой бронирования недалеко от центра и укажи цену и оценку отзывов.
Один вызов, 10 кредитов. Звёздность, условия отмены и расстояние задаются фильтрами в одном запросе.
Сравни самый дешёвый вариант проживания в Париже с самым дешёвым вариантом в Риме на те же даты.
Два вызова, 20 кредитов: по одному поиску на каждый город.
Для инструмента получения подробной информации об объекте нужно указать те же даты и число гостей, что и при поиске: доступность и цена зависят от периода проживания. Чтобы отобрать подходящие варианты, выполните один поиск, а затем вызовите инструмент получения информации для трёх объектов — всего получится один вызов поиска и три вызова для объектов.
Инструменты
| Инструмент | Что возвращает |
|---|---|
hasdata_booking_place_getBookingPlaceDetails | Данные об объекте (hotelId, название, адрес, координаты), правила (бесплатная отмена, отсутствие предоплаты, условия проживания с детьми и питомцами), цену, рейтинг и сводку отзывов, фотографии и…. 10 кредитов за вызов |
hasdata_booking_search_getBookingSearchResults | Данные по каждому отелю: hotelId, название и URL на Booking, сведения о местоположении (город, адрес, координаты, расстояние до центра / ближайшего пляжа), правила (бесплатная отмена, отсутствие…. 10 кредитов за вызов |
Доступны два инструмента только для чтения. Примеры ниже сокращены и основаны на реальных вызовах; цены постоянно меняются. Используйте их как примеры структуры данных. Название каждого инструмента ведёт к описанию соответствующего endpoint со списком всех полей.
В примерах показаны данные, а не полный ответ. Результат tools/call содержит один текстовый блок, в котором находится JSON с полями url, status, text и json; собранные данные находятся в json. В необработанном ответе JSON-RPC путь к данным такой: result.content[0].text; сначала разберите это значение, затем обратитесь к .json. Чат-клиент выполняет эту обработку автоматически, а при прямом обращении к endpoint её нужно делать самостоятельно.
Получение результатов поиска на Booking.com
hasdata_booking_search_getBookingSearchResults
Список вариантов проживания по месту назначения и датам.
| Параметр | Тип | Обязательный | Примечания |
|---|---|---|---|
keyword | string | да | Место назначения, например Paris, или название конкретного объекта |
checkInDate / checkOutDate | string | да | Формат YYYY-MM-DD; дата заезда должна быть в будущем и предшествовать дате выезда |
rooms / adults / children | number | да | Состав гостей. Если детей нет, передайте children: 0 |
childrenAges | string | Возраст детей через запятую; обязателен, если children > 0 | |
sort | string | priceLowestFirst, ratingHighToLow, bestReviewedAndLowestPrice, distanceFromDowntown и другие варианты | |
propertyType__ / rating__ / reviewScore__ | array | Тип объекта, количество звёзд и диапазон оценки гостей | |
facilities__ / roomFacilities__ / reservationPolicy__ | array | Фильтры по удобствам, оснащению номера и условиям отмены | |
price_min_ / price_max_ | number | Диапазон общей стоимости проживания | |
page | number | Около 25 результатов на странице; укажите 2, чтобы перейти к следующей |
В документации приведён полный список фильтров, включая расстояние, питание, доступность, предпочтения по типу кровати и состав группы путешественников.
Инструмент возвращает searchInformation, массив results и объект pagination с полями page, totalResults и totalPages. Для каждого результата указаны hotelId, title, url, предлагаемые room и bedTypes, объект location, объект policies, объект price, звёздный рейтинг rating, объект reviews с полями score, count и текстовой оценкой, а также фотография photo.
Поле скидки в
priceназываетсяdicsount(dicsountRawиdicsountParsed) — это исходное название ключа. Используйте именно такое написание, а неdiscount. Также учтите, чтоrating— это официальный рейтинг в звёздах, аreviews.score— оценка гостей по десятибалльной шкале. Это разные показатели.
{
"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" }
}
Получение подробной информации об объекте размещения на Booking.com
hasdata_booking_place_getBookingPlaceDetails
Полная информация об одном объекте размещения по его URL и датам проживания.
| Параметр | Тип | Обязательный | Примечания |
|---|---|---|---|
url | string | да | URL объекта размещения на Booking.com — поле url из результата поиска |
checkInDate / checkOutDate | string | да | Формат YYYY-MM-DD; период, для которого нужно проверить цены и доступность |
rooms / adults / children | number | да | Состав гостей; значения соответствуют инструменту поиска |
childrenAges | string | Возраст детей через запятую; параметр обязателен, если children > 0 |
Страница возвращается в виде отдельных разделов, а не одного плоского объекта: overview (id, title, propertyType, структурированный объект address, описание description, разделы highlights, mostPopularFacilities и photos), bookingDetails (период и валюта, к которым относятся цены), массив rooms с доступными номерами, каждый из которых содержит name, beds, facilities и варианты variants с ценами, список facilities, правила проживания houseRules, массив оценок по категориям ratings, отзывы reviews и вопросы с ответами 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 }
]
}
Ошибки и сценарии сбоев
При вызове инструмента клиент почти никогда не получает HTTP-код ошибки. Уровень MCP отвечает кодом 200 и передаёт сведения о сбое внутри результата: isError получает значение true, а причина возвращается в виде текста. Вместо ожидаемой строки со статусом агент получает сообщение.
Неверный ключ отображается в результате работы инструмента, а не как ошибка соединения. Метод tools/list принимает любой непустой ключ и возвращает оба инструмента, поэтому клиент успешно завершает рукопожатие и показывает зелёный статус. При первом вызове инструмента возвращается isError: true и текст HasData API error: 401 Unauthorized. Обращайте внимание на эту строку: на более ранних этапах ошибка никак не проявляется.
Отсутствующий ключ — единственный случай настоящей HTTP-ошибки. Авторизация выполняется до вызова любого инструмента, поэтому само соединение завершается ошибкой 401. Заголовки CORS присутствуют, и браузерный клиент видит код ответа, а не непрозрачную сетевую ошибку.
Аргумент, не соответствующий схеме инструмента, отклоняется до начала парсинга. Сервер возвращает isError: true и текст MCP error -32602: Input validation error, указывая поле с некорректным значением. Например, на этом этапе обнаруживаются количество детей children без соответствующих значений childrenAges или дата выезда, совпадающая с датой заезда либо предшествующая ей.
Если доступных вариантов нет, поиск возвращает успешный результат с пустым массивом results, а не ошибку. Даже если в указанном месте и в выбранный период нет свободных вариантов, в requestMetadata.status будет указано значение ok. Перед обработкой результатов проверяйте длину массива.
Если URL объекта размещения больше не открывается, сервер возвращает код 400, а в requestMetadata.status указывает значение error.
Результаты с данными также содержат requestMetadata.id — его полезно указывать при обращении в поддержку.
Стоимость, бесплатный тариф и ограничения
Каждый успешный вызов инструмента Booking.com стоит 10 кредитов. Размер ответа на стоимость не влияет: страница поиска с 25 вариантами проживания стоит столько же, сколько страница с двумя.
Бесплатный тариф включает 1 000 кредитов в месяц без привязки карты — этого хватит на 100 вызовов Booking.com. Кредиты обновляются с началом расчётного периода, поэтому агент с небольшим объёмом запросов может пользоваться бесплатным тарифом постоянно.
Платные тарифы начинаются от $59 в месяц за 200 000 кредитов, то есть за 20 000 вызовов. При увеличении объёма цена за единицу снижается: с $2.95 за 1 000 вызовов на начальном тарифе до $1.19 на тарифе Basic и $0.83 на тарифах Growth. Актуальные цены указаны на странице с тарифами.
Тариф также определяет количество одновременных запросов. Бесплатный тариф позволяет выполнять 1 запрос за раз, Startup — 5, Basic — 15, а тарифы Growth — от 50 до 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, а в теле ответа перечисляются нераспознанные значения и все допустимые варианты. Если не указывать параметр, тот же endpoint предоставит доступ ко всем 57 инструментам HasData.
Сравнение
Собственные программы Booking.com — Demand API и сеть партнёров-аффилиатов — предназначены для одобренных партнёров, которые оформляют бронирования и получают комиссию. Они не предоставляют самостоятельный способ изучать общедоступные данные. Чтобы искать варианты проживания и получать информацию о любых объектах, можно парсить общедоступные страницы. Этот сервер делает это, возвращая данные по стабильной схеме.
| Партнёрские программы Booking.com | Этот сервер | |
|---|---|---|
| Назначение | Оформление бронирований в качестве одобренного партнёра | Просмотр общедоступных данных |
| Доступ | Одобрение партнёра | Один ключ и один URL |
| Поиск по всему рынку | В рамках условий партнёрской программы | Да, с расширенными фильтрами |
| Настройка | Подключение для бизнеса | Не требуется |
| Результат | Партнёрские фиды | Структурированный JSON с заранее обработанными ценами и оценками |
Что этот сервер не делает. Он не оформляет бронирования, не принимает платежи, не начисляет партнёрскую комиссию и не предоставляет данные аккаунта. Сервер получает только информацию, доступную незалогиненному посетителю Booking.com.
Часто задаваемые вопросы
Есть ли у Booking.com официальный MCP-сервер?
Booking.com не выпускает собственный MCP-сервер. Этот сервер поддерживается HasData и получает данные с общедоступных страниц Booking.com.
Что такое MCP-сервер Booking.com?
Это сервер, который предоставляет данные Booking.com в виде инструментов, вызываемых AI-клиентом. Клиент отправляет вызов инструмента по протоколу Model Context Protocol, сервер получает данные и возвращает структурированный JSON, а модель обрабатывает результат. Этот сервер предоставляет два инструмента и работает удалённо.
Нужны ли мне аккаунт Booking.com или одобрение партнёра?
Нет. Единственные необходимые учётные данные — ваш ключ HasData. Подключаться к партнёрской программе не нужно, поскольку инструменты получают данные с общедоступных страниц Booking.com.
Зачем инструменту для получения информации об объекте нужны даты?
Доступность, варианты номеров и цены зависят от периода проживания. Передайте те же значения checkInDate, checkOutDate и количества гостей, которые использовали при поиске, — подробная информация будет соответствовать указанному периоду.
Чем рейтинг отличается от оценки по отзывам?
rating — это официальный рейтинг объекта размещения по звёздам. reviews.score — оценка гостей по шкале от 1 до 10. Например, у трёхзвёздочного отеля оценка гостей может составлять 9.0. Выбирайте показатель в зависимости от того, что именно хотите узнать.
Можно ли использовать этот сервер вместе с другими API HasData?
Да. Параметр apis принимает список значений, поэтому ?apis=booking,airbnb предоставит агенту доступ к Booking.com и Airbnb. Если не указывать параметр, будут доступны все инструменты.
Связана ли HasData с Booking.com?
Нет. HasData — независимый сервис, не связанный с Booking.com, не одобренный и не спонсируемый этой компанией. Booking.com — товарный знак соответствующего владельца.
Соблюдение требований и персональные данные
HasData получает только общедоступные данные. Условия платформы могут ограничивать автоматизированный доступ, поэтому вы самостоятельно отвечаете за соблюдение применимых требований. Если собранные данные содержат персональную информацию, убедитесь, что у вас есть законное основание для её обработки в соответствии с GDPR, CCPA или аналогичными правилами вашей юрисдикции.
Ссылки HasData
| Страница продукта и конструктор запросов | Booking.com Scraper API |
| Документация сервера | Документация MCP-сервера |
| Все 57 инструментов на одном сервере | HasData/hasdata-mcp |
| Руководства по клиентам | Клиенты MCP и интеграции |
| Все остальные источники, данные из которых мы собираем | Booking.com Scraper API и ещё 54 |
| Тарифы и стоимость в кредитах | Тарифы и стоимость в кредитах |
| Ключи и статистика использования | Панель HasData |
| Запуск Node через npm | @hasdata/booking-mcp |
| Запуск Python через PyPI | hasdata-booking-mcp |
Разработка
В этом репозитории находятся конфигурация и документация удалённого сервера. Сборка не требуется, как и контейнеризация.
Тесты в test/ проверяют контракт инструментов — ту часть, которая может измениться без коммитов в этот репозиторий. Они проверяют, что ?apis=booking возвращает ровно два инструмента, у каждого инструмента по-прежнему указаны обязательные параметры, имена не изменились, а используемый ключ действительно принимается. Последняя проверка вызывает инструмент и расходует 10 кредитов — такова цена контрольного вызова, который должен завершиться ошибкой, если обнаружит проблему.
# macOS and Linux
HASDATA_API_KEY=your_key_here npm test
# Windows PowerShell
$env:HASDATA_API_KEY="your_key_here"; npm test
Тот же набор тестов запускается в CI при каждом отправленном изменении, а также раз в неделю по расписанию: список инструментов upstream может измениться, даже если никто не вносит изменений в этот репозиторий. Сбой означает, что изменился список инструментов, ключ перестал работать или endpoint оказался недоступен. Сообщение проверки указывает, что именно произошло.
Вклад в проект
Самую большую пользу принесут исправления таблиц инструментов и примеров ответов — именно эти разделы чаще всего устаревают. Укажите вызов, который вы выполнили, и полученный ответ. Для pull request из форков набор тестов запускается без ключа, а проверки реальных вызовов пропускаются, поэтому сборка не завершается ошибкой.
Лицензия
MIT. См. LICENSE.