API ВЕГА

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. Остальные примеры соответствуют документированному формату настройки удалённых серверов в каждом клиенте.

ПолеЗначение
URLhttps://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

Список вариантов проживания по месту назначения и датам.

ПараметрТипОбязательныйПримечания
keywordstringдаМесто назначения, например Paris, или название конкретного объекта
checkInDate / checkOutDatestringдаФормат YYYY-MM-DD; дата заезда должна быть в будущем и предшествовать дате выезда
rooms / adults / childrennumberдаСостав гостей. Если детей нет, передайте children: 0
childrenAgesstringВозраст детей через запятую; обязателен, если children > 0
sortstringpriceLowestFirst, ratingHighToLow, bestReviewedAndLowestPrice, distanceFromDowntown и другие варианты
propertyType__ / rating__ / reviewScore__arrayТип объекта, количество звёзд и диапазон оценки гостей
facilities__ / roomFacilities__ / reservationPolicy__arrayФильтры по удобствам, оснащению номера и условиям отмены
price_min_ / price_max_numberДиапазон общей стоимости проживания
pagenumberОколо 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 и датам проживания.

ПараметрТипОбязательныйПримечания
urlstringдаURL объекта размещения на Booking.com — поле url из результата поиска
checkInDate / checkOutDatestringдаФормат YYYY-MM-DD; период, для которого нужно проверить цены и доступность
rooms / adults / childrennumberдаСостав гостей; значения соответствуют инструменту поиска
childrenAgesstringВозраст детей через запятую; параметр обязателен, если 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 через PyPIhasdata-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.