用途
Airbnb MCP Server 是一个托管式 Model Context Protocol(MCP)服务器,让 Claude、Cursor、Windsurf 以及其他 MCP 客户端能够调用两个只读的 Airbnb 工具:按地点名称或地图区域搜索住宿,以及按 URL 读取单个房源的完整信息。所有返回结果均为结构化 JSON。它读取的是未登录访客可见的公开房源页面,因此无需 Airbnb 开发者账号,也无需合作伙伴审批。
主要能力
服务器提供两个工具:
-
hasdata_airbnb_listing_getAirbnbListings:按地点名称和日期,或按地图区域返回一页搜索结果。checkIn 为必填项;除此之外可传入 location 或完整的地图边界框(四个角必须全部提供,缺少任意一个会报 requiredIfExistsAny 错误)。返回 properties 数组和 pagination(含 nextPageToken 和 pageTokens)。每个 property 包含 id、url、title、latitude、longitude、简短描述 tagline、photos 数组、rating、reviews、badges 数组(如 Guest favorite 或 Superhost)以及 price 对象。price 包含 originalPrice、可选的 discountedPrice、类似 for 3 nights 的 qualifier 和 breakdown。搜索结果刻意保持轻量,不包含床位数、浴室数、设施、房东和完整描述,这些需通过房源详情工具获取。
-
hasdata_airbnb_property_getAirbnbPropertyDetails:按 URL 返回单个房源的完整信息。返回 title、overview 数组(如 ["4 guests", "2 bedrooms", "2 beds", "2 baths"])、完整描述、rating、reviews、address、latitude、longitude、photos 数组、guestCapacity、host 对象、amenities 数组和 safetyAndPropertyInfo。host 对象包含 name、isSuperhost、isVerified、房东自身的 reviews、rating 和 yearsHosting。每个 amenity 包含 title、type、可选 description 和 available 标志,因此筛选时应读取 available,而不是假定所有列出的设施都存在。
使用方式
需要一个 MCP 客户端和一个从 HasData 仪表板获取的 API key(免费创建,无需信用卡)。这是远程服务器,最简单的方式是使用 URL 和 x-api-key 请求头,无需运行容器,流程中也不涉及 Airbnb 开发者账号。仅支持 stdio 的客户端可通过轻量启动器访问,该启动器已发布为 npm 上的 @hasdata/airbnb-mcp 和 PyPI 上的 hasdata-airbnb-mcp。
服务器 URL 对所有客户端相同:https://mcp.hasdata.com/mcp?apis=airbnb
支持 OAuth 的客户端可将同一 URL 添加为连接器并登录,无需在配置文件中放置密钥。在 Claude 中:Settings → Connectors → Add custom connector,粘贴上述 URL 并登录。
对于配置文件方式,Claude Desktop 仅加载本地(stdio)服务器,因此需通过 stdio 启动器访问远程服务器。@hasdata/airbnb-mcp 包即为该启动器,它从环境变量读取密钥。将其添加到 claude_desktop_config.json。若使用 Python 而非 Node,可换用 PyPI 包,uvx 无需手动安装即可运行。
Cursor 使用 ~/.cursor/mcp.json(所有项目)或 .cursor/mcp.json(单个项目)。Windsurf 使用 ~/.codeium/windsurf/mcp_config.json,注意 Windsurf 的字段名为 serverUrl 而非 url。VS Code 使用工作区中的 .vscode/mcp.json。
使用提示词而非代码。粘贴提示词后,智能体会自行选择工具。每次成功调用消耗 10 额度。示例提示词包括:搜索奥斯汀 9 月 15 日至 18 日两名成人的住宿并给出每晚 200 美元以下评分最高的十个(一次调用,10 额度);取排名第一的结果并拉取其完整设施、客人和卧室数量及房东详情(一次调用,10 额度);比较奥斯汀和纳什维尔两晚三名客人的每晚价格(两次调用,20 额度);针对某房源 URL 告知床和浴室数量以及房东是否为 Superhost(一次调用,10 额度)。
适用场景
适用于需要让 AI 客户端搜索 Airbnb 住宿、读取房源详情、比较不同城市价格、检查床位数和房东资质等场景。搜索结果用于排名和初筛,设施、床位、房东和完整描述来自房源详情调用,因此“初筛后检查三个房源”的提示词对应一次搜索加三次房源调用。
限制
- 两个工具均为只读。不提供预订、消息、房东仪表板或客人数据,仅读取未登录访客可见的内容。
- Airbnb 没有公开搜索 API,其 API 项目是用于管理自有房源的合作伙伴和共同房东集成,因此搜索住宿和读取任意房源只能通过抓取公开页面实现。
- 错误处理:客户端几乎不会看到 HTTP 错误码,MCP 层返回 200 并将失败放在结果内,isError 设为 true,原因以文本形式给出。错误的密钥表现为工具输出而非连接失败:tools/list 接受任何非空密钥并返回两个工具,客户端握手成功并显示绿色,首次工具调用才返回 isError: true 和文本 HasData API error: 401 Unauthorized。缺少密钥是唯一真正的 HTTP 错误,授权在任何工具之前运行,连接本身以 401 失败。参数不符合工具 schema 会在抓取前被拒绝,返回 isError: true 和 MCP error -32602: Input validation error,并指出问题字段,不会抓取也不会计费。无可用房源的搜索返回成功结果和空 properties 数组,而非错误。已下架的房源返回 400,requestMetadata.status 为 error。
- 计费:每个 Airbnb 工具每次成功调用消耗 10 额度,响应大小不影响价格。免费层每月 1,000 额度(无需信用卡),即 100 次 Airbnb 调用,随计费周期续期。付费计划起价每月 59 美元,含 200,000 额度(20,000 次调用),单价随用量下降。计划还决定并发数:免费层允许 1 个并发请求,Startup 为 5,Basic 为 15,Growth 层为 50 至 500。非 200 响应不计费,成功但无结果的调用仍计费。
- apis 查询参数决定智能体可见的工具。参数接受提供商名称(如 airbnb)和单个 API 名称(如 airbnb_listing)。拼写错误的名称会被忽略;若所有名称都错误,请求以 400 失败,响应体会列出未识别的名称和所有有效值。省略该参数则同一端点暴露全部 57 个 HasData 工具。
- 合规与个人数据:HasData 仅访问公开可用数据。平台条款可能限制自动访问,用户需自行负责合规。若收集的数据包含个人信息,需确保在 GDPR、CCPA 或当地同等规则下有合法依据。
- 该仓库是远程服务器的配置和文档,没有构建步骤,无需容器化。
常见问题
- Airbnb 有官方 MCP 服务器吗?Airbnb 未发布官方版本。此服务器由 HasData 维护,读取公开页面,因此无需 Airbnb 开发者账号。
- 需要 Airbnb API 密钥或合作伙伴账号吗?不需要。唯一凭证是 HasData 密钥,无需合作伙伴入驻。
- 为什么搜索结果不显示床位或设施?因为 Airbnb 不把它们放在搜索卡片上,它们位于房源页面,由详情工具按 URL 读取。
- 可以按客人、宠物或日期筛选吗?可以。listing 工具接受 checkIn、checkOut 以及 adults、children、infants 和 pets 数量,并返回该团体和窗口的可用性与价格。
- 可以与其他 HasData API 一起使用吗?可以。apis 参数接受列表,?apis=airbnb,booking 可同时提供 Airbnb 和 Booking.com。省略参数则获得全部。
许可
MIT,详见 LICENSE。