Skip to main content
Glama

MCP-сервер Airbnb

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

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

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

Glama score tool contract MCP Tools npm PyPI License

Содержание

Related MCP server: lilo-vacation-rentals

Что нужно

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

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

URL сервера одинаков для всех клиентов. Мы запускаем его вручную в Claude Code и Claude Desktop. Остальные блоки следуют собственному задокументированному формату каждого клиента для удалённого сервера.

Поле

Значение

URL

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

Транспорт

HTTP, streamable

Заголовок авторизации

x-api-key: HASDATA_API_KEY

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

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

Настройки, затем Connectors, затем Add custom connector, затем вставьте https://mcp.hasdata.com/api/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/mcp.json для всех проектов или .cursor/mcp.json для одного:

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

~/.codeium/windsurf/mcp_config.json. Windsurf называет поле serverUrl, а не url:

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

.vscode/mcp.json в рабочей области:

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

Примеры промптов

Промпты, а не код. Вставьте один — и агент сам выберет нужный инструмент. Каждый помечен вызовами, которые он выполняет, потому что каждый успешный вызов стоит 5 кредитов.

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

Один вызов, 5 кредитов. Рейтинг и цена за ночь возвращаются в результате поиска.

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

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

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

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

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

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

Результат поиска намеренно лёгкий: достаточно, чтобы ранжировать и составить шорт-лист. Удобства, кровати, хозяин и полное описание приходят из вызова property, поэтому промпт, который составляет шорт-лист, а затем изучает три жилья, — это один поиск плюс три вызова property.

Инструменты

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

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

Поиск объявлений Airbnb

hasdata_airbnb_listing_getAirbnbListings

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

Параметр

Тип

Обязательный

Примечания

location

string

да

Место для поиска, например Austin, Texas

checkIn

string

да

Дата заезда, YYYY-MM-DD

checkOut

string

Дата выезда, YYYY-MM-DD

adults / children / infants / pets

number

Состав гостей, каждое значение — количество

nextPageToken

string

pagination.nextPageToken из предыдущего ответа

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

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

{
  "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.

Параметр

Тип

Обязательный

Примечания

url

string

да

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, 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 кредитов на 30 дней без карты, это 200 вызовов Airbnb. После этого активный аккаунт продолжает получать 100 кредитов ежедневно, когда его баланс опускается ниже 100, так что агент с низким объёмом работает на бесплатном тарифе бессрочно.

Платные тарифы начинаются с $49 в месяц за 200 000 кредитов, то есть 40 000 вызовов. Цена за единицу падает с объёмом: от $1.23 за 1 000 вызовов на начальном тарифе до $0.50 на Business, $0.42 на Growth и $0.37 на крупнейших тарифах для высоких объёмов.

Ваш тариф также задаёт уровень параллелизма. Бесплатный пробный период разрешает 1 запрос за раз, Startup — 15, Business — 30, Growth — 50, а тарифы для высоких объёмов — от 200 до 1 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 поиска. Его API-программа — это интеграция для партнёров и совладельцев объявлений, предназначенная для управления собственными объявлениями, а не для чтения рынка. Для поиска жилья и чтения произвольных объявлений единственный путь — парсинг публичных страниц, и этот сервер делает это за стабильной схемой.

Партнёрский API Airbnb

Этот сервер

Назначение

Управление собственными объявлениями

Чтение публичного рынка

Доступ

Одобрение партнёра

Один ключ и один URL

Поиск по всему рынку

Нет

Да

Настройка

Бизнес-онбординг

Не требуется

Результат

Партнёрские данные

Структурированный JSON, цена и рейтинг заранее разобраны

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

FAQ

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

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

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

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

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

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

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

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

Можно ли фильтровать по гостям, животным или датам?

Да. Инструмент listings принимает checkIn, checkOut и количества adults, children, infants и pets, и возвращает наличие и цены для этой компании и периода.

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

Да. Параметр apis принимает список, и ?apis=airbnb,booking даёт вашему агенту Airbnb плюс Booking.com. Уберите параметр — и вы получите всё.

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

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

Ссылки HasData

Страница продукта и конструктор запросов

Airbnb Scraper API

Документация сервера

MCP server docs

Все 57 инструментов в одном сервере

HasData/hasdata-mcp

Инструкции для клиентов

MCP clients and integrations

Всё остальное, что мы парсим

Airbnb Scraper API и ещё 54

Тарифы и стоимость кредитов

Plans and credit costs

Ключи и использование

HasData dashboard

Node-запускатель на npm

@hasdata/airbnb-mcp

Python-запускатель на PyPI

hasdata-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.

Available Tools

2 tools
hasdata_airbnb_listing_getAirbnbListingsairbnb_listing: GET /AInspect

Get Airbnb Listings

Searches Airbnb for available stays by location and date range (check-in/check-out) with guest composition (adults, children, infants, pets) and nextPageToken pagination. Returns listing id/url, title, price per night and total, rating, review count, coordinates, photos, host info, room/bed/bath counts, and amenities summary. Use for travel planning agents, short-term rental market analysis, pricing/occupancy research, and lead lists for property management.

ParametersJSON Schema
NameRequiredDescriptionDefault
petsNoNumber of pets.
adultsNoNumber of adults.
checkInYesThe check-in date for the listings.
infantsNoNumber of infants.
checkOutNoThe check-out date for the listings.
childrenNoNumber of children.
locationYesThe location to search for listings.
nextPageTokenNoThe token used to retrieve the next page of results.

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden; it explains that the tool searches Airbnb and returns a broad set of listing fields, including pagination via nextPageToken. However, it does not disclose behavioral limits such as page size, data freshness, errors, or any hidden constraints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is mostly compact and front-loaded, listing the purpose, inputs, return attributes, and use cases. The opening 'Get Airbnb Listings' is slightly redundant with the tool name/title, but not enough to hurt the overall presentation seriously.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-style tool with no output schema and no annotations, the description covers all essential aspects: what triggers it, what it returns, and examples of appropriate usage. Limitations such as default page size, location/date formats, and error handling are missing, but not critical for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the description only paraphrases already-documented inputs (location, date range, guests, pets, pagination). It adds no real additional syntax, formats, or nuances beyond schema descriptions for the 8 parameters, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states how to search for listings and what it returns. It is specific about the resource (Airbnb listings) and verbs (searches/listings), but it does not explicitly distinguish itself from the sibling tool 'property details', leaving the boundary slightly implicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It names several concrete use cases including travel planning, rental market analysis, pricing/occupancy research, and property management. It does not give exclusion criteria or explicitly compare with the property details sibling, so it receives a 4 rather than 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

hasdata_airbnb_property_getAirbnbPropertyDetailsairbnb_property: GET /AInspect

Get Airbnb Property Details

Fetches the full Airbnb property page by listing URL. Returns title, description, location, coordinates, price breakdown, cleaning/service fees, rating and review distribution, host profile, room/bed/bath counts, photos, amenities list, house rules, cancellation policy, and availability calendar hints. Use for travel-planning agents, deep-dive rate research, photo/amenity enrichment of listings discovered via the listing-search endpoint, and LSTR compliance or market-quality audits.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesThe URL of the Airbnb listing. Must be a valid Airbnb listing URL.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations available, the description itself communicates read-only fetch behavior: 'Fetches the full Airbnb property page' and the title 'GET /' reinforce that no state change occurs. It also documents the expected response scope, though it does not cover optional caveats such as rate limits, stale data, or invalid URL handling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is efficient and front-loaded with the primary behavior, followed by a compact but useful list of returned fields and use cases. The long return-value list earned to be somewhat dense, but it is made of specific useful information rather than filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter fetch tool without output schema, this description supplies strong coverage of what the tool returns and why it should be used. It could be even more complete with an explicit 'if you need richer listing search, use getAirbnbListings' condition, but overall it gives the agent nearly everything needed to route and invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single `url` parameter is already fully described in the schema. The description adds meaning by connecting the URL to the action ('fetches by listing URL'), but it does not provide example formats, normalization rules, or other parameter-level insight beyond what the schema already exposes.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states what the tool does: it fetches a complete Airbnb property details by listing URL and gives a concrete list of returned fields. It also contrasts itself with the listing-search sibling by framing the request as an enrichment of listings found via the listing-search endpoint.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description identifies concrete use cases: travel planning, deep-dive rate research, listing enrichment, and compliance/audit checks. It also hints at the relationship to the listing-search endpoint, but it does not give an explicit 'do not use this when...' instruction or name the sibling alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 2 tool updatesv1.0.0
    • First observedhasdata_airbnb_listing_getAirbnbListings
    • First observedhasdata_airbnb_property_getAirbnbPropertyDetails

TDQS

A3.9/5.0
Disambiguation5/5

The two tools have clearly distinct purposes: one searches for available listings based on location/date/guests, while the other fetches complete details for a specific property URL. An agent would not struggle to choose between them.

Naming Consistency5/5

Both tools follow the same structured pattern: hasdata_airbnb_<resource>_get<Resource>Details/Listings. The naming convention is consistent and predictable.

Tool Count3/5

Two tools is thin for an Airbnb MCP server, but the pair forms a coherent, minimal workflow: search for listings then get more detail on a specific property. The count feels acceptable but smaller than ideal.

Completeness4/5

The core read-only Airbnb use cases are covered: discovering stays by search filters and retrieving a full property detail view. Missing operations like availability calendar lookups or review breakdowns are minor gaps, not dead ends.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

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/airbnb-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server