Skip to main content
Glama

Booking.com MCP Server

一个托管式 Model Context Protocol (MCP) 服务器,可让 Claude、Cursor、Windsurf 以及任何其他 MCP 客户端使用两个只读的 Booking.com 工具。可按目的地和日期搜索住宿,并附带丰富的筛选条件;也可完整读取单个住宿信息,全部以结构化 JSON 返回,无需 Booking.com 账号,也不需要自托管任何内容。

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

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

Glama score tool contract MCP Tools License

目录

你需要什么

一个 MCP 客户端,以及从控制台获取的 HasData API 密钥。创建免费且无需信用卡,试用版按 10 积分/次费率覆盖 100 次调用。这是一个远程服务器,因此最简单的路径是 URL 加上 x-api-key 请求头,无需运行任何容器,流程中也不需要 Booking.com 账号。只支持 stdio 的客户端可通过一个轻量启动器访问它,该启动器以 @hasdata/booking-mcp 发布在 npm 上,以 hasdata-booking-mcp 发布在 PyPI 上,如下所示。

快速上手

服务器 URL 对所有客户端通用。我们在 Claude Code 和 Claude Desktop 中实际运行过。其他区块遵循各客户端自己的远程服务器文档格式。

字段

URL

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

传输方式

HTTP,流式

认证头

x-api-key: HASDATA_API_KEY

支持 OAuth 的客户端可以将同一个 URL 添加为连接器并直接登录,无需在配置文件中放置密钥。

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

打开 Settings,然后选择 Connectors,再选择 Add custom connector,粘贴 https://mcp.hasdata.com/api/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/mcp.json 适用于每个项目,或者 .cursor/mcp.json 适用于单个项目:

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

~/.codeium/windsurf/mcp_config.json。Windsurf 将此字段称为 serverUrl,而不是 url

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

在工作区中使用 .vscode/mcp.json

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

示例提示

这些是提示,不是代码。复制一条粘贴进去,代理会自行选择工具。每条提示都标注了需要多少次调用,因为每次成功调用都会消耗 10 积分。

在 Booking.com 上搜索巴黎 9 月 15 日至 18 日入住两位成人的酒店,并给我总住宿费低于 700 美元、评价最好的十家。

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

选择置顶结果,并拉取完整详情:设施、房屋守则、房型选项和分类评分。

一次调用,10 积分。这些信息在住宿页面中,而详情工具会通过 URL 和日期读取该页。

寻找巴黎市中心免费四星酒店的取消政策,搜索位于中心且可以免费取消的四星级酒店,并列出价格和评分。

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

比较巴黎最低价住宿与罗马同日期段的最低价格。

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

住宿工具需要与搜索工具相同的日期和入住人数,因为可用性和价格取决于该时间窗。进行短名单搜索,再对三个住宿调用详情,总共是一次搜索加三次住宿详情调用。

工具

两个工具,均为只读。下面的示例来自真实调用,价格会不断变动。请把它们视为数据结构。每个工具名称都链接到对应的接口参考文档,其中包含完整字段列。

这些示例是请求负载,不是完整响应。一次 tools/call 返回包含一个文本块,而且该文本本身是一个 JSON,其中包含 urlstatustextjson,抓取到的数据位于 json。在原始 JSON-RPC 响应中,路径为 result.content[0].text,解析后再取 .json。聊天客户端会为你解包,而直接与端点交互的代码则不会。

获取 Booking.com 搜索结果

hasdata_booking_search_getBookingSearchResults

通过目的地和日期获取一页住宿信息。

参数

类型

必填

说明

keyword

string

目的地,例如 Paris 或具体的住宿名称错误

checkInDate / checkOutDate

string

格式 YYYY-MM-DD,入住日期需晚于当前日期且早于退房日期

rooms / adults / children

number

入住人数。如果没有儿童,请传入 children: 0

childrenAges

string

以逗号分隔的年龄;当 children > 0 时为必填

sort

string

priceLowestFirstratingHighToLowbestReviewedAndLowestPricedistanceFromDowntown

propertyType__ / rating__ / reviewScore__

array

住宿类型、星级和评分桶

facilities__ / roomFacilities__ / reservationPolicy__

array

设施、房间设施和取消预订的筛选条件

price_min_ / price_max_

number

总住宿时间段的价格区间

page

number

每页约25条结果,2表示下一页

参考文档中列出了完整的筛选器集合,包括距离、餐食、无障碍设施和床铺偏好,以及出行人数。

返回 searchInformation,一个 results 数组,以及包含 pagetotalResultstotalPagespagination。每个结果都包含 hotelIdtitleurl,所提供的 roombedTypes,一个 location 对象,一个 policies 对象,一个 price 对象,星级 rating,一个 reviews 对象(包含 scorecount 和文本标签),以及 photo

price 中折扣字段的拼写是 dicsountdicsountRawdicsountParsed),与上游的字段名相同。请使用这个拼写,而不要用 discount。另请注意,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, "dicsountParsed": 433.66, "currency": "USD" },
  "rating": 3,
  "reviews": { "score": 7.5, "count": 1721, "text": "Good" }
}

获取 Booking.com 住宿详情

has_booking_place_getBookingPlaceDetails

根据 URL 和住宿时间窗口获取单个住宿的完整信息。

参数

类型

必填

说明

url

string

搜索结果的 url 字段表示的 Booking.com 住宿页面 URL

checkInDate / checkOutDate

string

格式 YYYY-MM-DD,用于价格和可用性计算的时间窗口

rooms / adults / children

number

入住人数,含义与搜索工具相同

childrenAges

string

以逗号分隔的年龄;当 children > 0 时为必填

返回时不是单个扁平对象,而是将页面拆分为多个区块:overview(包含 idtitlepropertyType、结构化 addressdescriptionhighlightsmostPopularFacilitiesphotos)、bookingDetails(价格所对应的日期和币种)、一个 rooms 数组,每个可用房型都带有 namebedsfacilities 和定价的是 variants、一个 facilities 列表、houseRulesratings 数组(分类评分)以及 reviewsquestionsAndAnswers

{
  "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 }
  ]
}

错误与失败路径

你在工具调用中几乎不会遇到真正的 HTTP 错误码。MCP 层返回 200,并把失败信息放进返回结果,isError 设为 true,原因会以文本形式给出。智能体会读取一条消息,而不是状态行。

密钥错误会以工具输出的形式暴露,而不是连接失败。 tools/list 会接受任何非空密钥并返回这两个工具,因此客户端可以顺利完成握手并显示绿色状态。随后第一次工具调用会返回 isError: true,文本为 HasData API error: 401 Unauthorized。请注意查找这个字符串,因为在此之前流程中没有任何环节会报错。

缺少密钥是唯一真实的 HTTP 错误。 授权发生在任何工具之前,连接本身就会以 401 失败。由于已配置 CORS 头,浏览器客户端可以看到该状态码,而不是看不到网络错误。

违反工具模式 schema 的参数会在抓取之前就被拒绝。 服务器返回 isError: true 和文本 MCP error -32602: Input validation error,并指明出错的字段。children 数量与 childrenAges 不匹配,或退房日期不晚于入住日期,都会被这里拦截。

没有可用性的搜索会返回一个成功结果,其中 results 数组为空,而不是错误。 即使目的地在相应时间窗内没有任何可选住宿,仍会返回 requestMetadata.statusok 的结果。在遍历数组之前,请先检查其长度。

无效的住宿 URL 会返回 400, requestMetadata.statuserror

包含数据的返回结果中也会包含 requestMetadata.id,在联系客服时提供该 ID 会很有帮助。

定价、免费额度和限制

每个 Booking.com 工具在每次成功调用时消耗 10 积分。响应大小不会改变价格。一页有 25 个住宿的搜索,其费用与只有两条的结果相同。

免费试用是 30 天内 1,000 积分,无需信用卡,相当于 100 次 Booking.com 调用。之后,活跃账户只要积分余额低于 100,每天都会补足 100 积分,所以一个低调用量的 agent 可以无限期地运行在免费层。

付费套餐起价为 每月 $49,包含 200,000 积分,即 20,000 次调用。单价随用量下降:入门套餐为 每 1,000 次调用 $2.45,Business 为 $0.99,Growth 为 $0.83,最大的 高用量套餐$0.75

你的套餐还决定并发上限。免费试用只允许 1 个请求同时进行,Startup 为 15,Business 为 30,Growth 为 50,高用量套餐则从 200 到 1,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 这样的 provider 名称,也接受 booking_search 这样的单个 API 名称。拼写错误的名称会被忽略。如果所有名称都错误,请求会返回 400,响应体中既会列出无法识别的内容,也会列出所有有效值。不传该参数,同一个端点会暴露全部 57 个 HasData 工具。

对比

Booking.com 合作伙伴计划

本服务器

目的

作为一个已获批准的合作伙伴提交预订

读取公开市场数据

获取方式

需要拿到合作伙伴批准

一个 key 和 一个 URL

跨市场搜索

只能在符合合作伙伴条款的范围内

支持,并具备丰富的筛选条件

接入时间

有商务接入流程

输出

合作关系数据源

结构化 JSON,价格和评分已预解析

本服务器不做什么。 不涉及预订、支付、合作伙伴佣金,也不提供账户数据。它读取的是未登录访客在 Booking.com 上看到的内容。

常见问题

有据可查的官方 Booking.com MCP server 吗?

Booking.com 并未发布这样的服务。这个 MCP server 由 HasData 维护,只读取公开页面,因此不需要 Booking.com 账户。

什么是 Booking.com MCP server?

就是一个把 Booking.com 数据封装成工具、供 AI 客户端调用的服务器。客户端通过 Model Context Protocol 发出工具调用,服务器获取数据并返回结构化 JSON,模型再基于结果继续工作。这个 MCP server 暴露两个工具,并且运行在远端。

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

不需要。唯一的凭证就是你的 HasData key。没有合作伙伴接入流程,因为所有工具读取的都是 Booking.com 的公开页面。

为什么房源详情工具需要日期?

因为可预订状态、房型选项和价格都取决于入住窗口。请传与搜索时相同的 checkInDatecheckOutDate 和人数,详情才会准确反映那个时间窗口。

rating 和 review score 有什么区别?

rating 是房源官方的星级评定标准。reviews.score 是 10 分制的住客评分。一家三星酒店可以有 9.0 的住客评分,所以要清楚你取的是哪个。

能否与其他 HasData API 一起使用?

可以。apis 参数接受一个列表,例如 ?apis=booking,airbnb 可以让你的 agent 同时使用 Booking.com 和 Airbnb。省略该参数 的时候,则会返回全部工具。

HasData 与 Booking.com 有任何关系吗?

没有关系。HasData 是一独立服务,与 Booking.com 没有关联、也没有被其支持或资助。Booking.com 是其各自所有者的评论商标。

合规与个人数据

HasData 只访问公开数据。具体平台的条款可能限制自动化访问,你需要对自己的合规负责。如果收集的数据包含个人信息,请确保你在自己的司法管辖区,符合 GDPR、CCPA 或同类规则下的合法依据。

HasData 链接

产品页面与请求构建器

Booking.com 抓取 API

服务端文档ae

MCP server 文档

全部 57 个工具,放在一个服务里

HasData/hasdata-mcp

客户端教程

MCP 客户端和集成

我们抓取的其他所有数据

Booking.com 抓取 API 以及其他 54 个数据接口

套餐与积分成本

套餐和积分成本

密钥与用量查看

HasData 控制台

本地开发

这个仓库只是远程 server 的配置和文档。没有构建步骤,也不需要容器化构建成 Docker 镜像。

test/ 中的测试用于确定性和工具契约,这部分即使没有在这个仓库提交任何代码也可能出现问题。它们会检查:?apis=booking 返回恰好两个工具、每个工具仍然声明其必要的参数、任何工具的字段名都未改动,以及当前使用的 key 确实能被接受。最后一项检查会真实调用一个工具,并花费 10 积分——这相当于一只预兆金债,可以因正确的原因而失败。

# macOS and Linux
HASDATA_API_KEY=your_key_here npm test

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

同一套测试会在每次 push 时在 CI 中运行,并会按照计划在做了一次安排。因为上流工具列表可能在你没有改动这个仓库的情况下发生变化。失败可能意味着工具列表变了、key 失效或者 endpoint 无法连接,断言消息会指明具体是哪种。

参与贡献

最有价值的贡献是对工具表和响应示例的修正,因为这些部分容易发生偏差。请在提交时附上你发起的调用和收到的响应。来自 fork 的 pull request 会在没有 key 的情况下运行测试套件,在线检查会跳过,而不是直接失败。

许可证

MIT。参见 LICENSE

Install Server
-
license - not tested
A
quality
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
1Releases (12mo)
Commit activity

Related MCP Connectors

  • Hotel booking MCP server. Search, book, and manage reservations across 250K+ properties worldwide.

  • AI marketplace — flights, tours, activities, transport & more via MCP. No auth required.

  • Airbnb stays by location and dates, and full listing details, as structured JSON.

View all MCP Connectors

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

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