关于 HasData Airbnb
HasData Airbnb 是托管式 MCP 服务,可搜索 Airbnb 住宿并获取单个房源的详细信息。它从公开房源页面返回只读结构化数据,无需 Airbnb 开发者账户或合作伙伴审批。
主要功能
- 01按地点或地图区域搜索住宿
- 02按日期和住客人数筛选
- 03通过 URL 获取完整房源详情
- 04返回价格、评分、设施和房东信息
适用场景
- 01为行程筛选可订住宿
- 02比较不同地点的搜索结果
- 03查看房源设施和房东详情
MCP 相关
远程 MCP 服务提供两个只读 Airbnb 工具:房源搜索和房源详情。MCP 客户端可使用带 HasData API 密钥的流式 HTTP 连接,也可使用提供的 stdio 启动器。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://mcp.hasdata.com/mcp?apis=airbnbclaude mcp add --transport http com-hasdata-airbnb https://mcp.hasdata.com/mcp?apis=airbnb{"mcpServers":{"com-hasdata-airbnb":{"type":"http","url":"https://mcp.hasdata.com/mcp?apis=airbnb"}}}在 Cursor 中打开{"servers":{"com-hasdata-airbnb":{"type":"http","url":"https://mcp.hasdata.com/mcp?apis=airbnb"}}}在 VS Code 中打开{"mcpServers":{"com-hasdata-airbnb":{"type":"http","url":"https://mcp.hasdata.com/mcp?apis=airbnb"}}}{"mcpServers":{"com-hasdata-airbnb":{"serverUrl":"https://mcp.hasdata.com/mcp?apis=airbnb"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
https://mcp.hasdata.com/mcp?apis=airbnb需要授权工具
2| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| pets | number | 否 | 宠物数量。 |
| neLat | number | 否 | 地图边界框东北角的纬度。提供全部四个边界框坐标后,将在框内搜索房源,而不是按位置搜索。 |
| neLng | number | 否 | 地图边界框东北角的经度。 |
| swLat | number | 否 | 地图边界框西南角的纬度。 |
| swLng | number | 否 | 地图边界框西南角的经度。 |
| adults | number | 否 | 成人数量。 |
| checkIn | string | 是 | 房源的入住日期。 |
| infants | number | 否 | 婴幼儿数量。 |
| checkOut | string | 否 | 房源的退房日期。 |
| children | number | 否 | 子女数量。 |
| location | string | 否 | 用于搜索房源的地点。除非提供完整地图边界框(neLat、neLng、swLat、swLng),否则必填。 |
| nextPageToken | string | 否 | 用于获取下一页结果的令牌。 |
详细介绍
Airbnb MCP 服务器
这是一个托管的模型上下文协议(MCP)服务器,为 Claude、Cursor、Windsurf 和任何其他 MCP 客户端提供两个只读 Airbnb 工具。按地点名称或地图区域搜索住宿,并完整读取单个房源的详细信息,全部以结构化 JSON 返回,无需 Airbnb 开发者账户,也无需合作伙伴审批。
它读取已退出登录的访客可以看到的公开房源页面。
每月 1,000 个免费额度,无需绑定银行卡,可调用 Airbnb 100 次。
https://mcp.hasdata.com/mcp?apis=airbnb
目录
所需条件
一个 MCP 客户端,以及从 控制面板 获取的 HasData API 密钥。创建密钥免费且无需绑定银行卡;按每次调用 10 个额度计算,免费套餐每月可满足约 100 次调用。这是一个远程服务,因此最简单的接入方式是使用 URL 和 x-api-key 请求头,无需运行容器,整个流程也无需 Airbnb 开发者账户。仅支持 stdio 的客户端可通过一个轻量启动器连接该服务;启动器已发布到 npm,包名为 @hasdata/airbnb-mcp,也已发布到 PyPI,包名为 hasdata-airbnb-mcp,如下所示。
快速开始
所有客户端使用相同的服务 URL。我们会手动在 Claude Code 和 Claude Desktop 中运行。其他代码块遵循各客户端为远程服务记录的格式。
| 字段 | 值 |
|---|---|
| URL | https://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" }
}
}
}
如果使用 Python 而不是 Node,请将启动器替换为 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" }
}
}
}
示例提示词
这是提示词,不是代码。粘贴一条提示词,Agent 就会自行选择工具。每条提示词都标注了调用次数,因为每次成功调用会消耗 10 个 credits。
搜索 Austin 9 月 15 日至 18 日适合两位成人入住的房源,并列出每晚低于 200 美元且评分最高的 10 个房源。
一次调用,10 个 credits。评分和每晚价格会在搜索结果中返回。
获取排名第一的结果,提取其完整的便利设施、房客人数和卧室数量,以及房东详情。
一次调用,10 个 credits。这些信息位于房源页面,详情工具会根据 URL 读取。
比较两位房客在 Austin 和 Nashville 入住三晚的每晚价格。
两次调用,20 个 credits,每个城市搜索一次。
对于这个房源 URL,告诉我它有多少张床和几个卫生间,以及房东是否为超赞房东。
一次调用,10 个 credits。
搜索结果有意保持精简,只提供足够的信息来排序和筛选。便利设施、床位、房东和完整描述由房源工具调用返回,因此,先筛选再查看三套房源的提示词会执行一次搜索和三次房源调用。
工具
| 工具 | 返回内容 |
|---|---|
hasdata_airbnb_listing_getAirbnbListings | 房源 ID 和 URL、标题、描述、坐标、照片、评分和评论数量、徽章,以及一个价格对象,其中包含整个入住期间的总价、以文本形式表示的每晚价格,以及 Airbnb 显示的折扣价。每次调用消耗 10 个 credits |
hasdata_airbnb_property_getAirbnbPropertyDetails | 标题、概览(以文本形式包含房客人数、卧室数、床位数和卫生间数)、描述、地址和坐标、评分和评论数量、照片、房客容量、房东资料、每项都带有可用性标记的便利设施,以及安全和房源备注。不含价格。每次调用消耗 10 个 credits |
这两个工具均为只读。以下示例经过删减,取自实际调用,数值会随 Airbnb 更新而变化。请将它们视为数据结构示例。每个工具名称都链接到相应的端点参考,其中列出了完整字段。
这些示例展示的是负载,而非完整响应。tools/call 结果包含一个文本块,而该文本本身是包含 url、status、text 和 json 的 JSON;抓取的数据位于 json 下。在原始 JSON-RPC 响应中,路径是 result.content[0].text,解析后再取 .json。聊天客户端会为你解包,而直接与端点通信的代码则不会。
获取 Airbnb 房源列表
hasdata_airbnb_listing_getAirbnbListings
根据地点名称和日期,或地图区域获取一页搜索结果。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
checkIn | string | 是 | 入住日期,YYYY-MM-DD |
location | string | 见下文 | 要搜索的地点,例如 Austin, Texas |
neLat / neLng / swLat / swLng | number | 见下文 | 地图边界框的东北角和西南角 |
checkOut | string | 退房日期,YYYY-MM-DD | |
adults / children / infants / pets | number | 宾客构成,各项均为人数 | |
nextPageToken | string | 上一响应中的 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、类似 for 3 nights 的 qualifier,以及 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 获取单个房源的完整信息。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
url | string | 是 | Airbnb 房源 URL,即搜索结果中的 url 字段 |
返回 title、类似 ["4 guests", "2 bedrooms", "2 beds", "2 baths"] 的 overview 数组、完整的 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,原因以文本形式给出。Agent 读取的是一条消息,而不是你可能预期的状态行。
密钥错误会显示为工具输出,而不是连接失败。 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 工具的费用为 10 个积分。响应大小不会影响价格。包含几十个住宿选项的搜索页面,费用与只有两个选项的页面相同。
免费套餐每月提供 1,000 个积分,无需信用卡,可调用 Airbnb 工具 100 次。积分会在每个计费周期续期,因此低调用量的 Agent 可以无限期使用免费套餐。
付费套餐起价为每月 $59,包含 200,000 个积分,可调用 20,000 次。调用量越大,单价越低:入门套餐每 1,000 次调用 $1.48,Basic 套餐为 $0.60,Growth 各档套餐为 $0.41。最新价格请查看定价页面。
套餐还会决定并发数。免费套餐允许同时处理 1 个请求,Startup 为 5 个,Basic 为 15 个,Growth 各档套餐则为 50 到 500 个。在任何无人值守的场景中,都应妥善处理超出限制的情况。
返回非 200 的请求不会计费。即使成功调用没有找到任何内容,也仍然计为一次调用。
工具选择
apis 查询参数决定 Agent 能看到哪些工具。工具越少,用于工具定义的上下文就越少,模型选错工具的机会也越少。
?apis=airbnb the two tools in this repo
?apis=airbnb,booking add Booking.com stays
?apis=airbnb,google_maps add Google Maps places
该参数接受 airbnb 这类提供方名称,以及 airbnb_listing 这类单独的 API 名称。拼写错误的名称会被忽略。如果所有名称都错误,请求会以 400 失败,响应正文会列出无法识别的名称以及所有有效值。移除该参数后,同一端点会公开全部 57 个 HasData 工具。
对比
Airbnb 没有公开的搜索 API。其 API 计划面向合作伙伴和房东,用于管理自己的房源,而不是了解市场。要搜索住宿并查看任意房源,只能抓取公开页面;本服务通过稳定的架构来实现这一点。
| Airbnb 合作伙伴 API | 本服务 | |
|---|---|---|
| 用途 | 管理自己的房源 | 查看公开市场 |
| 访问权限 | 需获得合作伙伴批准 | 一个密钥和一个 URL |
| 搜索整个市场 | 否 | 是 |
| 设置 | 商务入驻 | 无 |
| 输出 | 合作伙伴专用数据 | 结构化 JSON,已预先解析价格和评分 |
本服务不提供的功能。 不提供预订、消息、房东控制面板或房客数据。它只读取未登录访客可以看到的内容。
常见问题
有官方的 Airbnb MCP 服务吗?
Airbnb 没有发布官方服务。此服务由 HasData 维护,读取公开页面,因此无需 Airbnb 开发者账号。
什么是 Airbnb MCP 服务?
它是一种将 Airbnb 数据作为工具提供给 AI 客户端调用的服务。客户端通过 Model Context Protocol 发送工具调用,服务获取数据并返回结构化 JSON,模型再处理结果。此服务提供两个工具,并以远程方式运行。
我需要 Airbnb API 密钥或合作伙伴账号吗?
不需要。唯一需要的凭据是 HasData 密钥。由于这些工具读取的是 Airbnb 公开页面,因此无需申请合作伙伴资格。
为什么搜索结果没有显示床位数或便利设施?
因为 Airbnb 不会在搜索卡片上显示这些信息。它们位于房源页面中,详情工具会根据 URL 读取这些信息。先搜索并筛选候选房源,再调用房源工具获取详细信息。
我可以按房客人数、宠物或日期筛选吗?
可以。房源工具接受 checkIn、checkOut 以及 adults、children、infants 和 pets 人数,并返回相应人数和日期范围的可订状态及价格。
我可以将此服务与其他 HasData API 一起使用吗?
可以。apis 参数接受列表,使用 ?apis=airbnb,booking 即可让你的 Agent 同时访问 Airbnb 和 Booking.com。移除该参数即可获取所有内容。
合规与个人数据
HasData 仅访问公开可用的数据。平台条款可能限制自动化访问,你有责任确保自己的使用符合规定。如果收集的数据包含个人信息,请确保根据 GDPR、CCPA 或所在司法辖区的同等法规,拥有处理这些数据的合法依据。
HasData 链接
| 产品页面和请求生成器 | Airbnb Scraper API |
| 服务文档 | MCP 服务文档 |
| 一个服务中的全部 57 个工具 | HasData/hasdata-mcp |
| 客户端指南 | MCP 客户端和集成 |
| 我们抓取的其他所有内容 | Airbnb Scraper API 和另外 54 项服务 |
| 方案和额度费用 | 方案和额度费用 |
| 密钥和用量 | HasData 控制面板 |
| npm 上的 Node 启动器 | @hasdata/airbnb-mcp |
| PyPI 上的 Python 启动器 | hasdata-airbnb-mcp |
开发
此仓库包含远程服务的配置和文档。没有构建步骤,也无需容器化。
test/ 中的测试用于验证工具契约,也就是可能在此处未提交变更时发生问题的部分。测试会检查 ?apis=airbnb 是否准确返回两个工具、每个工具是否仍声明必需参数、名称是否有变化,以及正在使用的密钥是否确实可用。最后一项会实际调用工具,耗费 10 个额度,这是为了获得一个可能因正确原因而失败的金丝雀检查。
# macOS and Linux
HASDATA_API_KEY=your_key_here npm test
# Windows PowerShell
$env:HASDATA_API_KEY="your_key_here"; npm test
同一套测试会在每次推送时于 CI 中运行,并按计划每周运行一次,因为上游工具列表可能在无人改动此仓库的情况下发生变化。测试失败意味着工具列表发生了变动、密钥已失效,或端点无法访问;断言消息会指出具体原因。
贡献
修正工具表格和响应示例是最有价值的贡献,因为这些内容最容易过时。请附上你执行的调用和收到的响应。来自 fork 的拉取请求会在不使用密钥的情况下运行测试套件,实时检查会跳过,而不会导致 CI 失败。
许可证
MIT。请参阅 LICENSE。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。