API ВЕГА

Airbnb MCP Server

Размещённый сервер Model Context Protocol (MCP), который предоставляет Claude, Cursor, Windsurf и любому другому MCP-клиенту два инструмента Airbnb только для чтения. Ищите варианты проживания по названию места или области на карте, а также получайте полную информацию об отдельном объявлении в формате структурированного JSON. Аккаунт разработчика Airbnb и одобрение партнёрской программы не требуются.

Сервер получает данные с общедоступных страниц объявлений, которые видны пользователям без входа в систему.

Каждый месяц предоставляется 1 000 бесплатных кредитов без привязки карты — этого хватит на 200 запросов к Airbnb.

https://mcp.hasdata.com/mcp?apis=airbnb

Содержание

  • Что потребуется

  • Быстрый старт

  • Примеры запросов

  • Инструменты

  • Ошибки и варианты сбоев

  • Стоимость, бесплатный тариф и ограничения

  • Выбор инструмента

  • Сравнение с аналогами

  • Часто задаваемые вопросы

  • Ссылки HasData

  • Разработка

  • Участие в проекте

  • Лицензия

Что потребуется

Вам понадобится MCP-клиент и API-ключ HasData из панели управления. Ключ можно получить бесплатно, без привязки карты; бесплатного тарифа хватит примерно на 200 запросов в месяц при стоимости 5 кредитов за запрос. Это удалённый сервер, поэтому для подключения достаточно URL и заголовка x-api-key: запускать контейнер и регистрировать аккаунт разработчика Airbnb не нужно. Клиентам, которые поддерживают только stdio, поможет небольшой лаунчер: он опубликован в npm как @hasdata/airbnb-mcp, а в PyPI — как hasdata-airbnb-mcp. Примеры приведены ниже.

Быстрый старт

URL сервера одинаков для всех клиентов. Мы проверили настройку в Claude Code и Claude Desktop. Примеры для остальных клиентов соответствуют их официальному формату подключения удалённых серверов.

ПолеЗначение
URLhttps://mcp.hasdata.com/mcp?apis=airbnb
ТранспортHTTP, с передачей потока
Заголовок авторизацииx-api-key: HASDATA_API_KEY

Клиенты с поддержкой OAuth можно подключить по тому же URL и выполнить вход, не добавляя ключ в файл конфигурации.

Claude Code

claude mcp add --transport http airbnb "https://mcp.hasdata.com/mcp?apis=airbnb" \
  --header "x-api-key: HASDATA_API_KEY"

Claude Desktop

Откройте Settings, затем Connectors, выберите Add custom connector, вставьте https://mcp.hasdata.com/mcp?apis=airbnb и выполните вход.

Если вы настраиваете подключение через файл конфигурации, учтите: Claude Desktop загружает только локальные серверы (stdio), поэтому для доступа к удалённому серверу используется stdio-лаунчер. Таким лаунчером служит пакет @hasdata/airbnb-mcp; он получает ключ из переменной среды. Добавьте в claude_desktop_config.json:

{
  "mcpServers": {
    "airbnb": {
      "command": "npx",
      "args": ["-y", "@hasdata/airbnb-mcp"],
      "env": { "HASDATA_API_KEY": "YOUR_KEY" }
    }
  }
}

Если вместо Node вы используете Python, замените лаунчер на пакет из PyPI. uvx запустит его без ручной установки:

{
  "mcpServers": {
    "airbnb": {
      "command": "uvx",
      "args": ["hasdata-airbnb-mcp"],
      "env": { "HASDATA_API_KEY": "YOUR_KEY" }
    }
  }
}

Cursor

Используйте ~/.cursor/mcp.json, чтобы настроить подключение для всех проектов, или .cursor/mcp.json — для одного проекта:

{
  "mcpServers": {
    "airbnb": {
      "url": "https://mcp.hasdata.com/mcp?apis=airbnb",
      "headers": { "x-api-key": "HASDATA_API_KEY" }
    }
  }
}

Windsurf

Файл конфигурации: ~/.codeium/windsurf/mcp_config.json. В Windsurf поле называется serverUrl, а не url:

{
  "mcpServers": {
    "airbnb": {
      "serverUrl": "https://mcp.hasdata.com/mcp?apis=airbnb",
      "headers": { "x-api-key": "HASDATA_API_KEY" }
    }
  }
}

VS Code

Добавьте файл .vscode/mcp.json в рабочую область:

{
  "servers": {
    "airbnb": {
      "type": "http",
      "url": "https://mcp.hasdata.com/mcp?apis=airbnb",
      "headers": { "x-api-key": "HASDATA_API_KEY" }
    }
  }
}

Примеры запросов

Это запросы на обычном языке, а не код. Вставьте любой из них — агент сам выберет подходящий инструмент. Для каждого примера указано количество вызовов: успешный вызов стоит 5 кредитов.

Найди варианты проживания в Остине для двух взрослых с 15 по 18 сентября и покажи десять вариантов с наивысшей оценкой стоимостью до 200 долларов за ночь.

Один вызов — 5 кредитов. Оценка и цена за ночь указаны в результатах поиска.

Открой первый вариант и покажи все удобства, количество гостей и спален, а также информацию о хозяине.

Один вызов — 5 кредитов. Эти сведения доступны на странице жилья, которую инструмент получения информации об объекте открывает по URL.

Сравни стоимость проживания на три ночи для двух гостей в Остине и Нэшвилле.

Два вызова — 10 кредитов, по одному поиску на город.

Для этого URL объявления укажи количество кроватей и ванных комнат, а также сообщи, является ли хозяин Superhost.

Один вызов — 5 кредитов.

Результаты поиска намеренно содержат только основную информацию, достаточную для ранжирования и предварительного отбора. Удобства, кровати, сведения о хозяине и полное описание доступны при запросе данных об объекте. Поэтому, чтобы сначала отобрать варианты, а затем изучить три жилья, потребуется один поисковый вызов и три вызова для получения информации об объектах.

Инструменты

ИнструментЧто возвращает
hasdata_airbnb_listing_getAirbnbListingsИдентификатор и URL объявления, название, описание, координаты, фотографии, оценку и количество отзывов, отметки, а также объект price с общей стоимостью проживания, ценой за ночь в виде текста и скидочной ценой, если Airbnb её указывает. 5 кредитов за вызов
hasdata_airbnb_property_getAirbnbPropertyDetailsНазвание, сводную информацию с количеством гостей, спален, кроватей и ванных комнат в виде текста, описание, адрес и координаты, оценку и количество отзывов, фотографии, вместимость, профиль хозяина, удобства с указанием доступности каждого, а также сведения о безопасности и объекте. Без цены. 5 кредитов за вызов

Доступны два инструмента, оба работают только на чтение. Ниже приведены сокращённые примеры реальных вызовов; значения меняются по мере обновления Airbnb. Примеры показывают структуру данных. Название каждого инструмента ведёт к справочнику по соответствующему конечному адресу, где перечислены все поля.

Примеры показывают полезную нагрузку, а не полный ответ. В результате tools/call содержится один текстовый блок, который сам представляет собой JSON с полями url, status, text и json; собранные данные находятся в json. В исходном ответе JSON-RPC путь к ним выглядит так: result.content[0].text; сначала разберите это значение, затем обратитесь к .json. В чате клиент извлекает данные автоматически, а при прямом обращении к конечному адресу это нужно сделать самостоятельно.

Получение объявлений Airbnb

hasdata_airbnb_listing_getAirbnbListings

Страница результатов поиска по названию места и датам либо по области на карте.

ПараметрТипОбязательныйПримечания
checkInstringдаДата заезда, YYYY-MM-DD
locationstringсм. нижеМесто поиска, например Austin, Texas
neLat / neLng / swLat / swLngnumberсм. нижеСеверо-восточный и юго-западный углы ограничивающего прямоугольника на карте
checkOutstringДата выезда, YYYY-MM-DD
adults / children / infants / petsnumberСостав гостей: количество взрослых, детей, младенцев и питомцев
nextPageTokenstringЗначение pagination.nextPageToken из предыдущего ответа

Параметр checkIn обязателен всегда. Кроме него, инструмент принимает либо location, либо полный набор координат ограничивающего прямоугольника на карте. Для поиска по карте должны быть указаны все четыре угла. Если передать только три, для отсутствующей координаты будет возвращена ошибка requiredIfExistsAny. Поиск по области позволяет находить места, для которых у Airbnb нет названия, — описать такую область с помощью названия места нельзя.

Результат содержит массив properties и объект pagination с полями nextPageToken и pageTokens для перехода по страницам результатов. Для каждого объекта возвращаются id, url, title, latitude, longitude, краткое описание description, массив photos, оценка rating, число отзывов reviews, массив отметок badges, например Guest favorite или Superhost, и объект price. В объекте price указаны originalPrice, необязательный параметр discountedPrice при наличии скидки на проживание, qualifier, например for 3 nights, и детализация breakdown.

Результат поиска намеренно содержит только основную информацию. Количество кроватей и ванных комнат, удобства, сведения о хозяине и полное описание доступны через инструмент получения информации об объекте, приведённый ниже. Не ожидайте увидеть количество спален в результатах поиска.

{
  "id": "17545365",
  "url": "https://www.airbnb.com/rooms/17545365",
  "title": "Home in East Austin",
  "latitude": 30.25741,
  "longitude": -97.73366,
  "description": "Downtown Casa - neighborhood feel, close to it all",
  "rating": 4.87,
  "reviews": 601,
  "badges": ["Guest favorite"],
  "price": {
    "originalPrice": "$607",
    "discountedPrice": "$447",
    "qualifier": "for 3 nights",
    "breakdown": [{ "description": "3 nights x $149.00", "price": "$447.00" }]
  }
}

Получение сведений об объекте Airbnb

hasdata_airbnb_property_getAirbnbPropertyDetails

Полная информация об одном объекте по его URL.

ПараметрТипОбязательныйПримечания
urlstringдаURL объекта Airbnb — значение поля url в результатах поиска

Возвращает title, массив overview, например ["4 guests", "2 bedrooms", "2 beds", "2 baths"], полное описание description, рейтинг rating, количество отзывов reviews, адрес address, координаты latitude и longitude, массив фотографий photos, вместимость guestCapacity, объект host, массив удобств amenities и сведения о безопасности и объекте safetyAndPropertyInfo. Объект host содержит имя name, признаки статуса Superhost isSuperhost и верификации isVerified, а также собственные данные хозяина: количество отзывов reviews, рейтинг rating и стаж yearsHosting. Для каждого удобства указаны название title, тип type, необязательное описание description и признак доступности available. Поэтому при фильтрации проверяйте значение available, а не считайте, что все перечисленные удобства доступны.

{
  "id": "17545365",
  "title": "Downtown Casa - neighborhood feel, close to it all",
  "overview": ["4 guests", "2 bedrooms", "2 beds", "2 baths"],
  "rating": 4.87,
  "reviews": 601,
  "address": "Austin, Texas, United States",
  "guestCapacity": 4,
  "host": { "name": "Deanna", "isSuperhost": true, "isVerified": true, "reviews": 1273, "rating": 4.86, "yearsHosting": 11 },
  "amenities": [
    { "title": "Wifi", "type": "SYSTEM_WI_FI", "available": true },
    { "title": "Free washer – In unit", "type": "SYSTEM_WASHER", "available": true }
  ]
}

Ошибки и сбои

При вызове инструмента клиент почти никогда не получает 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, в котором указано поле с ошибкой. Данные не запрашиваются, списание средств не производится.

Если в результатах поиска нет доступных объектов, запрос завершается успешно и возвращает пустой массив properties, а не ошибку. Даже если для указанного местоположения и периода ничего не доступно, в ответе requestMetadata.status будет иметь значение ok. Перед обработкой результатов проверьте длину массива.

Если объект удалён, сервер возвращает 400 и указывает в requestMetadata.status значение error. URL из старых результатов поиска может вести на уже недоступное жильё.

В результатах с данными также содержится requestMetadata.id. Укажите этот идентификатор при обращении в службу поддержки.

Стоимость, бесплатный тариф и ограничения

Каждый успешный вызов инструмента Airbnb стоит 5 кредитов. Размер ответа на стоимость не влияет: поиск с десятками вариантов стоит столько же, сколько поиск с двумя.

Бесплатный тариф включает 1 000 кредитов в месяц без привязки карты — этого хватит на 200 вызовов Airbnb. Кредиты обновляются с началом нового расчётного периода, поэтому агент с небольшим объёмом запросов может пользоваться бесплатным тарифом постоянно.

Платные тарифы начинаются от $59 в месяц за 200 000 кредитов — это 40 000 вызовов. Чем больше объём, тем ниже стоимость единицы: от $1.48 за 1 000 вызовов на начальном тарифе до $0.60 на Basic и $0.41 на тарифах Growth. Актуальные цены указаны на странице тарифов.

Тариф также определяет допустимое число параллельных запросов. На бесплатном тарифе можно выполнять 1 запрос одновременно, на Startup — 5, на Basic — 15, а на тарифах Growth — от 50 до 500. В автоматизированных сценариях обязательно предусмотрите обработку превышения лимита.

Запрос, завершившийся с кодом не 200, не тарифицируется. Успешный вызов, даже если он ничего не нашёл, всё равно считается запросом.

Выбор инструментов

Параметр запроса apis определяет, какие инструменты будут доступны агенту. Чем меньше инструментов, тем меньше контекста требуется для их описания и тем ниже вероятность, что модель выберет неподходящий инструмент.

?apis=airbnb                     the two tools in this repo
?apis=airbnb,booking             add Booking.com stays
?apis=airbnb,google_maps         add Google Maps places

В параметре можно указывать названия провайдеров, например airbnb, и отдельных API, например airbnb_listing. Названия с опечатками игнорируются. Если все указанные названия неверны, запрос завершится ошибкой 400. В теле ответа будут перечислены нераспознанные значения и все допустимые варианты. Если не указывать параметр, та же конечная точка предоставит доступ ко всем 57 инструментам HasData.

Сравнение

У Airbnb нет публичного API для поиска объектов. Программа Airbnb API предназначена для партнёров и совладельцев, которым нужно управлять собственными объектами, а не изучать рынок. Для поиска жилья и просмотра произвольных объявлений остаётся только сбор данных с публичных страниц. Этот сервер выполняет его, используя стабильную схему данных.

Airbnb partner APIЭтот сервер
НазначениеУправление собственными объектамиПросмотр публичных объявлений
ДоступОдобрение партнёрской заявкиОдин ключ и один URL
Поиск по всему рынкуНетДа
НастройкаПодключение для бизнесаНе требуется
РезультатДанные в формате для партнёровСтруктурированный JSON с уже извлечёнными ценой и рейтингом

Чего этот сервер не делает. Он не позволяет бронировать жильё, отправлять сообщения, пользоваться панелью хозяина или получать данные гостей. Сервер читает только ту информацию, которая доступна посетителю без входа в аккаунт.

Часто задаваемые вопросы

Есть ли у Airbnb официальный MCP-сервер?

Airbnb не выпускает собственный MCP-сервер. Этот сервер поддерживает HasData. Он получает данные с публичных страниц, поэтому аккаунт разработчика Airbnb не требуется.

Что такое MCP-сервер Airbnb?

Это сервер, который предоставляет данные Airbnb в виде инструментов, доступных AI-клиенту. Клиент отправляет вызов инструмента по протоколу Model Context Protocol, сервер получает данные и возвращает структурированный JSON, а модель обрабатывает результат. Этот сервер удалённый и предоставляет два инструмента.

Нужны ли ключ API Airbnb или партнёрский аккаунт?

Нет. Единственный необходимый ключ — ключ HasData. Подключаться к партнёрской программе не нужно, поскольку инструменты работают с публичными страницами Airbnb.

Почему в результатах поиска нет информации о кроватях и удобствах?

Airbnb не показывает эти сведения в карточке результатов поиска. Они доступны на странице объекта, которую инструмент получения подробной информации открывает по URL. Используйте поиск, чтобы составить короткий список вариантов, а затем вызывайте инструмент получения сведений об объекте, чтобы изучить их подробнее.

Можно ли фильтровать результаты по числу гостей, наличию домашних животных или датам?

Да. Инструмент получения сведений об объекте принимает параметры checkIn, checkOut, а также количество adults, children, infants и pets. В ответе указаны доступность и стоимость для заданного состава гостей и периода.

Можно ли использовать этот сервер вместе с другими API HasData?

Да. Параметр apis принимает список значений. Например, ?apis=airbnb,booking предоставит агенту доступ к Airbnb и Booking.com. Если не указывать параметр, будут доступны все инструменты.

Соответствие требованиям и персональные данные

HasData получает только общедоступные данные. Условия платформы могут ограничивать автоматизированный доступ, поэтому вы несёте ответственность за соблюдение применимых требований. Если собираемые вами данные включают персональную информацию, убедитесь, что у вас есть законное основание для её обработки в соответствии с GDPR, CCPA или аналогичными правилами в вашей юрисдикции.

Ссылки HasData

Страница продукта и конструктор запросовAirbnb Scraper API
Документация сервераДокументация MCP-сервера
Все 57 инструментов на одном сервереHasData/hasdata-mcp
Руководства по клиентамMCP-клиенты и интеграции
Другие источники данныхAirbnb Scraper API и ещё 54 источника
Тарифы и стоимость кредитовТарифы и стоимость кредитов
Ключи и статистика использованияПанель HasData
Запуск Node через npm@hasdata/airbnb-mcp
Запуск Python через PyPIhasdata-airbnb-mcp

Разработка

В этом репозитории содержатся конфигурация и документация для удалённого сервера. Сборка не требуется, и контейнеризировать здесь нечего.

Тесты в test/ проверяют контракт инструментов — единственную часть, которая может измениться без коммита в этом репозитории. Они проверяют, что ?apis=airbnb возвращает ровно два инструмента, каждый инструмент по-прежнему указывает обязательные параметры, названия инструментов не изменились, а используемый ключ действительно принимается. Последняя проверка вызывает инструмент в реальном режиме и расходует 5 кредитов — такова цена пробного теста, который должен завершиться ошибкой, если обнаружит проблему.

# macOS and Linux
HASDATA_API_KEY=your_key_here npm test

# Windows PowerShell
$env:HASDATA_API_KEY="your_key_here"; npm test

Этот набор тестов также запускается в CI при каждом отправленном изменении и раз в неделю по расписанию: список инструментов на стороне сервиса может измениться, даже если в этом репозитории никто ничего не менял. Ошибка означает, что список инструментов изменился, ключ перестал работать или конечная точка недоступна. Сообщение проверки указывает, что именно произошло.

Участие в разработке

Полезнее всего исправления таблиц инструментов и примеров ответов, поскольку именно эти данные чаще всего устаревают. Укажите выполненный вызов и полученный ответ. Для pull request из форков набор тестов запускается без ключа, а проверки в реальном режиме пропускаются, поэтому тесты не завершаются ошибкой.

Лицензия

MIT. См. LICENSE.