mcpField
H
HasData Booking.com

HasData Booking.com

远程服务
hasdata.com地图与出行11今天更新

关于 HasData Booking.com

HasData Booking.com 是托管的只读 MCP 服务,面向需要查询住宿信息的 MCP 客户端。它按目的地和日期搜索住宿,并可读取单个房源的详细信息,结果以结构化 JSON 返回。

主要功能

  1. 01按目的地和日期搜索住宿
  2. 02筛选价格、评分和设施
  3. 03读取房源完整详情
  4. 04返回房间、政策和评分信息

适用场景

  1. 01比较不同城市的住宿价格
  2. 02按取消政策筛选酒店
  3. 03查看房源设施和入住规则

MCP 相关

通过托管远程服务向 MCP 客户端提供两个只读工具:住宿搜索和房源详情查询。另提供提示词和参数取值资源。

配置

远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。

服务地址https://mcp.hasdata.com/mcp?apis=booking
一键复制安装命令
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。

全部服务地址
Streamable HTTPhttps://mcp.hasdata.com/mcp?apis=booking需要授权
安装包
npm@hasdata/booking-mcp1.0.8
pypihasdata-booking-mcp1.0.8

工具

2
参数类型必填说明
petsnumber否宠物数量。
neLatnumber否地图边界框东北角的纬度。提供全部四个边界框坐标后,将在框内搜索房源,而不是按位置搜索。
neLngnumber否地图边界框东北角的经度。
swLatnumber否地图边界框西南角的纬度。
swLngnumber否地图边界框西南角的经度。
adultsnumber否成人数量。
checkInstring是房源的入住日期。
infantsnumber否婴幼儿数量。
checkOutstring否房源的退房日期。
childrennumber否子女数量。
locationstring否用于搜索房源的地点。除非提供完整地图边界框(neLat、neLng、swLat、swLng),否则必填。
nextPageTokenstring否用于获取下一页结果的令牌。

详细介绍

Booking.com MCP 服务器

一个托管的模型上下文协议(MCP)服务器,为 Claude、Cursor、Windsurf 和任何其他 MCP 客户端提供两个只读的 Booking.com 工具。可按目的地和日期搜索住宿,并使用丰富的筛选条件;还可读取单个住宿的完整信息,所有数据均以结构化 JSON 格式返回,无需自行托管。

它会读取 Booking.com 上已退出登录的访客也能查看的公开住宿页面。

每月免费获得 1,000 个点数,无需信用卡,可用于 100 次 Booking。

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

Glama score tool contract MCP Tools

目录

所需条件

一个 MCP 客户端,以及一个从 dashboard 获取的 HasData API 密钥。创建密钥免费且无需信用卡;免费套餐按每次调用 10 个点数计算,每月可调用 100 次。这是一个远程服务,因此最简单的接入方式是使用 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" }
    }
  }
}

如果使用 Python 而不是 Node,请将启动器替换为 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" }
    }
  }
}

示例提示词

这是提示词,不是代码。粘贴一条,Agent 就会自行选择工具。每条都标注了所需的调用次数,因为每次成功调用需要 10 个积分。

在 Booking.com 上搜索 9 月 15 日至 18 日巴黎的酒店,入住人数为两位成人,并列出住宿总价低于 $700 且评价最高的 10 家。

一次调用,10 个积分。搜索结果会返回价格、评分和位置。

获取排名第一的结果的完整详情:设施、住宿规定、房型选项和各项类别评分。

一次调用,10 个积分。这些信息位于住宿页面,详情工具会根据 URL 和日期读取。

查找巴黎市中心附近、可免费取消的四星级酒店,并列出价格和评分。

一次调用,10 个积分。星级、取消政策和距离都是同一请求中的筛选条件。

对比同一日期下巴黎和罗马最便宜的住宿。

两次调用,20 个积分,每个城市搜索一次。

住宿工具需要与搜索相同的日期和宾客人数,因为空房情况和价格取决于入住时段。先搜索以筛选候选住宿,再对 3 家住宿调用详情工具,共需一次搜索和 3 次住宿调用。

工具

工具返回内容
hasdata_booking_place_getBookingPlaceDetails住宿信息(hotelId、标题、地址、坐标)、政策(免费取消、无需预付、儿童/宠物入住)、价格、评分和评价摘要、照片,以及……每次调用需 10 个积分
hasdata_booking_search_getBookingSearchResults每家酒店的 hotelId、标题和 Booking URL、位置信息(城市、地址、坐标、到市中心/最近海滩的距离)、政策(免费取消、无……每次调用需 10 个积分

这两个工具均为只读。以下示例摘自真实调用,但经过了删减,而且价格不断变化。请将它们视为数据结构示例。每个工具名称都链接到对应的端点参考文档,其中包含完整字段列表。

这些示例展示的是有效载荷,而不是完整响应。tools/call 的结果包含一个文本块,该文本本身是一个 JSON,包含 url、status、text 和 json,抓取的数据位于 json 下。从原始 JSON-RPC 响应中读取时,路径是 result.content[0].text,解析后再取 .json。聊天客户端会为你拆解这些内容;直接调用端点的代码则不会。

获取 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 数组,以及包含 page、totalResults 和 totalPages 的 pagination。每条结果包含 hotelId、title、url、提供的 room 和 bedTypes、location 对象、policies 对象、price 对象、星级 rating、包含 score、count 和文字标签的 reviews 对象,以及 photo。

price 中的折扣字段为 discountRaw 和 discountParsed。早期版本将它们误拼为 dicsountRaw 和 dicsountParsed,现已弃用这种拼法,因此使用这些字段编写的代码将无法读取任何内容。另请注意,rating 是官方星级,而 reviews.score 是满分 10 分的住客评分,两者并不相同。

{
  "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, "discountParsed": 433.66, "currency": "USD" },
  "rating": 3,
  "reviews": { "score": 7.5, "count": 1721, "text": "Good" }
}
获取 Booking.com 住宿详情

hasdata_booking_place_getBookingPlaceDetails

根据住宿 URL 和入住日期范围,获取单个住宿的完整信息。

参数类型必填备注
urlstring是Booking.com 住宿 URL,即搜索结果中的 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 }
  ]
}

提示词和资源

服务器公开了 16 个资源,每个资源对应一个接受值为固定列表的参数。读取资源比从被拒绝的调用中摸索词汇更省事,而且不消耗额度。每个 URI 的格式为 hasdata://booking/<parameter>。

参数值数量选择内容
language45Booking.com 界面的语言,以及响应中的本地化字段。
currency52响应中返回的价格所用的货币。使用 hotelCurrency 可保留每家住宿的本地货币。
sort10Booking.com 应用于结果页的排序顺序。
propertyType__8按住宿类型筛选。多个值之间采用 OR 逻辑。
rating__5按官方星级筛选。多个值之间采用 OR 逻辑。
reviewScore__4按住客评分最低分数档筛选。多个值之间采用 OR 逻辑。
distanceFromCenter__3按与目的地中心的距离筛选。多个值之间采用 OR 逻辑。
propertyAccessibility__7按住宿级无障碍设施筛选。多个值之间采用 OR 逻辑。
meals__2按可选餐食计划筛选。多个值之间采用 OR 逻辑。
facilities__13按住宿级设施筛选。多个值之间采用 OR 逻辑。
roomFacilities__25按客房内设施筛选。多个值之间采用 OR 逻辑。
roomAccessibility__11按客房内无障碍设施筛选。多个值之间采用 OR 逻辑。
bedPreference__2按床型配置筛选。多个值之间采用 OR 逻辑。
reservationPolicy__2按预订灵活性筛选。多个值之间采用 OR 逻辑。
onlinePayment__1按在线支付选项筛选。
travelGroup__2按适合旅行团体的住宿选项筛选。多个值之间采用 OR 逻辑。

该列表无需 API 密钥即可获取,因此客户端可以在用户注册前读取它。

错误和故障路径

客户端几乎不会从工具调用中收到 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,并指出有问题的字段。未提供匹配 childrenAges 的 children 数量,或退房日期不晚于入住日期,都会在此处被捕获。

搜索无可用房源时会成功返回空的 results 数组,而不是报错。即使目的地和日期范围内没有开放房源,返回的 requestMetadata.status 仍会是 ok。遍历数组前,请先检查其长度。

无法再解析的住宿 URL 会返回 400,且 requestMetadata.status 为 error。

包含数据的结果也会包含 requestMetadata.id,联系支持时值得引用此 ID。

定价、免费额度和限制

每次成功调用 Booking.com 工具需 10 个额度。响应大小不会影响价格。包含 25 家住宿的搜索页面和只包含两家的页面,费用相同。

免费额度为每月 1,000 个额度,无需绑定银行卡,相当于 100 次 Booking.com 调用。额度会随计费周期续期,因此低调用量的 Agent 可以一直使用免费额度。

付费计划起价为每月 $59,包含 200,000 个额度,相当于 20,000 次调用。随着用量增加,单价会降低:入门计划为每 1,000 次调用 $2.95,Basic 计划为 $1.19,Growth 各档为 $0.83。最新价格请查看定价页面。

你的计划也会决定并发数。免费额度允许同时发送 1 个请求,Startup 为 5 个,Basic 为 15 个,Growth 各档则为 50 到 500 个。对于无人值守的应用,请妥善处理超出并发限制的情况。

未返回 200 状态码的请求不会计费。成功调用但没有找到结果,仍然会计为一次调用。

工具选择

apis 查询参数决定 Agent 能看到哪些工具。工具越少,工具定义占用的上下文就越少,模型选错工具的机会也越少。

?apis=booking                    the two tools in this repo
?apis=booking,airbnb             add Airbnb stays
?apis=booking,google_travel      add Google Hotels and Flights

该参数接受 booking 这样的提供方名称,也接受 booking_search 这样的 API 名称。拼写错误的名称会被忽略。如果所有名称都无效,请求会失败并返回 400,响应正文会列出无法识别的名称和所有有效值。省略该参数,同一端点就会公开全部 57 个 HasData 工具。

对比

Booking.com 自己的合作项目,包括 Demand API 和联盟合作伙伴网络,面向经批准、能带来预订并赚取佣金的合作伙伴,并非自助式的公开市场数据读取方式。要搜索住宿并读取任意住宿的信息,需要抓取公开页面;本服务通过稳定的架构实现了这一点。

Booking.com 合作项目本服务
用途作为获批的联盟合作伙伴促成预订读取公开市场数据
访问方式合作伙伴审批一个密钥和一个 URL
搜索整个市场受合作伙伴条款限制可以,并支持丰富的筛选条件
设置企业入驻流程无
输出合作伙伴数据源结构化 JSON,价格和评分已预解析

本服务不提供的功能。 不支持预订、付款、合作伙伴佣金或账户数据。它读取的是未登录访客在 Booking.com 上可以看到的内容。

常见问题

是否有官方的 Booking.com MCP 服务?

Booking.com 没有发布官方 MCP 服务。本服务由 HasData 维护,读取 Booking.com 公开页面。

什么是 Booking.com MCP 服务?

这是一种将 Booking.com 数据作为工具公开、供 AI 客户端调用的服务。客户端通过 Model Context Protocol 发送工具调用,服务获取数据并返回结构化 JSON,模型再处理结果。本服务提供两个工具,并通过远程方式运行。

我需要 Booking.com 账户或合作伙伴审批吗?

不需要。你只需提供 HasData 密钥。由于这些工具读取的是 Booking.com 公开页面,因此无需办理合作伙伴入驻手续。

为什么住宿工具需要日期?

因为空房情况、房型选项和价格都取决于入住时段。请传入搜索时使用的相同 checkInDate、checkOutDate 和宾客人数,详情才会反映该时段的信息。

评分和评论分数有什么区别?

rating 是住宿的官方星级。reviews.score 是满分 10 分的宾客评论分数。三星级酒店的宾客评分可能达到 9.0,因此请根据需要选择相应的字段。

我可以将此服务与其他 HasData API 一起使用吗?

可以。apis 参数接受一个列表,?apis=booking,airbnb 会让 Agent 同时使用 Booking.com 和 Airbnb。省略该参数即可使用全部工具。

HasData 与 Booking.com 有关联吗?

没有。HasData 是一项独立服务,与 Booking.com 无关联,也未获得 Booking.com 的认可或赞助。Booking.com 是其各自所有者的商标。

合规与个人数据

HasData 仅访问公开数据。平台的条款可能会限制自动访问,您需自行负责遵守相关规定。如果您收集的数据包含个人信息,请确保根据 GDPR、CCPA 或您所在司法管辖区的同等规定,具备合法处理依据。

HasData 链接

产品页面和请求构建器Booking.com Scraper API
服务文档MCP server docs
单个服务包含全部 57 个工具HasData/hasdata-mcp
客户端使用指南MCP clients and integrations
我们抓取的其他所有内容Booking.com Scraper API and 54 more
套餐和积分费用Plans and credit costs
密钥和用量HasData dashboard
npm 上的 Node 启动器@hasdata/booking-mcp
PyPI 上的 Python 启动器hasdata-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 中运行,并按计划每周运行一次,因为上游工具列表可能会在无人修改此仓库的情况下发生变化。失败意味着工具列表发生变动、密钥停止工作或端点无法访问,断言消息会指出具体原因。

贡献

修正工具表格和响应示例是最有价值的贡献,因为这些内容最容易过时。请附上您发出的调用和收到的响应。来自 fork 的拉取请求会在没有密钥的情况下运行测试套件,实时检查会跳过,而不会导致 CI 失败。

许可证

MIT。请参阅 LICENSE。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。