mcpField
H
HasData Google Hotels

HasData Google Hotels

远程服务
hasdata.com地图与出行22 周前更新

关于 HasData Google Hotels

HasData Google Hotels 是托管式 MCP 服务,可按目的地和日期搜索酒店及度假租赁。它返回价格、评分、评论、设施和照片,并可查询单个住宿在各预订网站的报价。

主要功能

  1. 01搜索酒店和度假租赁
  2. 02按日期、价格、评分和设施筛选
  3. 03查看各预订网站的报价
  4. 04获取评论、照片和坐标
  5. 05通过资源查询可用筛选值

适用场景

  1. 01查找指定目的地和日期的住宿
  2. 02按价格或设施缩小酒店结果范围
  3. 03比较某住宿在各预订网站的报价
  4. 04查看住客反馈以辅助选择

MCP 相关

通过托管式 Streamable HTTP 向 MCP 客户端提供只读 Google Hotels 搜索工具。对于无法直接连接远程服务的客户端,也提供 stdio 启动器。

配置

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

服务地址https://mcp.hasdata.com/mcp?apis=google_travel_hotels
一键复制安装命令
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=google_travel_hotels需要授权
安装包
npm@hasdata/google-hotels-mcp1.0.2
pypihasdata-google-hotels-mcp1.0.2

工具

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

详细介绍

Google Hotels MCP 服务

一个托管的模型上下文协议(MCP)服务,为 Claude、Cursor、Windsurf 及其他 MCP 客户端提供一个 Google Hotels 工具。按目的地和一组日期搜索酒店和度假租赁房源,然后查看任意房源的完整信息,包括所有预订网站的报价、评分、按主题划分的评论明细、设施、照片和坐标,全部以结构化 JSON 格式呈现,无需 Google 账号,也不受 Places API 配额限制。

每月 1,000 个免费额度,无需绑定银行卡,约可搜索 100 次酒店。

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

Glama 评分 工具契约 MCP 工具

目录

所需条件

一个 MCP 客户端,以及一个从控制面板获取的 HasData API 密钥;注册免费,无需绑定银行卡,免费套餐按每次调用 10 个额度计算,每月约可调用 100 次。这是一个远程服务,因此最简单的接入方式是使用 URL 和 x-api-key 请求头,无需运行容器,整个流程也不需要 Google Cloud 项目。仅支持 stdio 的客户端可通过一个轻量启动器连接该服务;启动器已发布到 npm,包名为 @hasdata/google-hotels-mcp,也发布到 PyPI,包名为 hasdata-google-hotels-mcp,如下所示。

快速开始

所有客户端使用相同的服务 URL。我们已在 Claude Code 和 Claude Desktop 中实际运行验证。其他配置块遵循各客户端为远程服务记录的格式。

字段值
URLhttps://mcp.hasdata.com/mcp?apis=google_travel_hotels
传输方式HTTP,可流式传输
身份验证标头x-api-key: HASDATA_API_KEY

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

Claude Code
claude mcp add --transport http google-hotels "https://mcp.hasdata.com/mcp?apis=google_travel_hotels" \
  --header "x-api-key: HASDATA_API_KEY"
Claude Desktop

依次进入 Settings、Connectors、Add custom connector,然后粘贴 https://mcp.hasdata.com/mcp?apis=google_travel_hotels 并登录。

如果使用配置文件方式,Claude Desktop 只加载本地(stdio)服务,因此需通过 stdio 启动器访问远程服务。@hasdata/google-hotels-mcp 包就是这个启动器,它会从环境变量中读取密钥。将以下内容添加到 claude_desktop_config.json:

{
  "mcpServers": {
    "google-hotels": {
      "command": "npx",
      "args": ["-y", "@hasdata/google-hotels-mcp"],
      "env": { "HASDATA_API_KEY": "YOUR_KEY" }
    }
  }
}

如果要使用 Python 而非 Node,可将启动器替换为 PyPI 包,uvx 无需手动安装即可运行它:

{
  "mcpServers": {
    "google-hotels": {
      "command": "uvx",
      "args": ["hasdata-google-hotels-mcp"],
      "env": { "HASDATA_API_KEY": "YOUR_KEY" }
    }
  }
}
Cursor

适用于所有项目的 ~/.cursor/mcp.json,或仅适用于一个项目的 .cursor/mcp.json:

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

~/.codeium/windsurf/mcp_config.json。Windsurf 将该字段称为 serverUrl,而非 url:

{
  "mcpServers": {
    "google-hotels": {
      "serverUrl": "https://mcp.hasdata.com/mcp?apis=google_travel_hotels",
      "headers": { "x-api-key": "HASDATA_API_KEY" }
    }
  }
}
VS Code

工作区中的 .vscode/mcp.json:

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

提示词示例

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

查找 11 月 12 日至 15 日在巴塞罗那入住的酒店,入住 2 位成人,并列出价格最低的 5 家,包含每晚价格、评分和等级。

一次调用,10 个积分。价格、评分和设施信息会一并返回。

同一行程,筛选四星及以上酒店,仅限免费取消,并按评分排序。

一次调用,10 个积分。等级、取消政策和排序方式都是同一请求中的筛选条件。

查看排名第一的结果,列出各预订网站对此酒店的报价,并判断价格是否划算。

两次调用,20 个积分。搜索结果会为每家酒店返回一个 propertyToken,传入该令牌即可打开对应酒店,查看 Google 对比的所有来源、典型价格范围以及 Google 对这笔交易的评价。

查找那一周在里斯本的度假租赁房源,至少有 2 间卧室和一个泳池。

一次调用,10 个积分,启用 vacationRentals,将 bedrooms 设为 2,并在 amenity__ 中设置泳池。

按你平时说话的方式写出目的地名称。单独的 Barcelona 会被理解为相对于 Google 认为搜索发起地的位置,因此位于加利福尼亚州的服务会返回加利福尼亚州的酒店。写成 hotels in Barcelona,或将 gl 设为 es,即可锁定这座城市。

工具

工具返回内容
hasdata_google_travel_hotels_getGoogleHotels返回酒店及其每晚价格和总价、等级、评分、评论数量及主题分类、设施、图片、坐标和附近交通信息,同时包含分页信息和品牌树。若提供 propertyToken,则返回该酒店的详细信息,包括 Google 对比的各来源报价、地址、电话和典型价格范围。每次调用需 10 个积分

此工具为只读工具,涵盖网站的两个部分。不提供 propertyToken 时,它会执行搜索;提供时,它会打开单个酒店。

以下示例摘自真实调用,并经过精简。酒店价格每天都会变动,请将示例视为数据结构参考。

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

搜索酒店和度假租赁

hasdata_google_travel_hotels_getGoogleHotels

查询目的地和住宿日期对应的房源,包括价格、评分、设施和图片。

参数类型必填说明
qstring是目的地、街区或酒店名称。建议写成 hotels in Barcelona,而非 Barcelona;也可以通过 gl 指定国家/地区
checkInDatestring是YYYY-MM-DD
checkOutDatestring是YYYY-MM-DD
adults / childrennumber客人组合:1 至 6 位成人,最多 5 位儿童,总人数不超过 6 位
childrenAgesstring以逗号分隔的年龄,每位儿童一个,例如 5,8
sortBystringlowestPrice、highestRating 或 mostReviewed。未指定时采用 Google 默认排序
minPrice / maxPricenumber每晚价格,使用所选货币
ratingstringthreePointFivePlus、fourPlus 或 fourPointFivePlus
hotelClassstring要保留的星级,以逗号分隔,例如 4,5
propertyType__array房源类型,例如 hotelResort;酒店类型以 hotel* 为前缀,租赁类型以 vacation* 为前缀
amenity__array设施,例如 hotelFreeWifi 或 hotelPool,前缀规则相同
brandsstring要保留的品牌 ID。搜索结果会提供包含 ID 的完整品牌树
freeCancellation / specialOffers / ecoCertifiedboolean仅保留带有相应标记的房源
vacationRentalsboolean搜索租赁房源,而非酒店
bedrooms / bathroomsnumber最低数量,仅适用于租赁房源
currency / gl / hlstring货币,以及搜索所用的国家/地区和语言
nextPageTokenstring下一页标记,取自 pagination
propertyTokenstring将调用从搜索切换为获取单个房源的完整信息

结果位于 properties 下,每页大约 20 条。每个房源包含 name、type、description、link、gpsCoordinates、ratePerNight 和 totalRate(每项均包含原始字符串和 extracted* 数值)、hotelClass 及 extractedHotelClass、overallRating、reviews、locationRating、ratings 评分分布、reviewsBreakdown(按主题统计的正面和负面提及)、amenities、images,以及包含步行和公共交通时间的 nearbyPlaces。searchInformation.totalResults 表示 Google 找到的结果数量,pagination 包含 nextPageToken,而 brands 会列出品牌树及 brands 筛选器所需的 ID。

价格有两种报价方式。lowest 包含税费,beforeTaxesFees 不含税费,房源可能只提供其中一种。比较和排序前,请确保比较的是同类价格。

{
  "name": "Casa Gràcia",
  "propertyToken": "ChcI0r6-2uyF7rIuGgsvZy8xdmo2bnNxZhAB",
  "type": "hotel",
  "description": "Cozy quarters in a hip lodging with dining & a lively bar, plus a kitchen, a library & free Wi-Fi.",
  "link": "https://room00hostel.com/barcelona/casa-gracia-hostel/",
  "gpsCoordinates": { "latitude": 41.3974523, "longitude": 2.1593339 },
  "ratePerNight": { "beforeTaxesFees": "US$61", "extractedBeforeTaxesFees": 61 },
  "totalRate": { "beforeTaxesFees": "US$182", "extractedBeforeTaxesFees": 182 },
  "hotelClass": "4-star hotel",
  "extractedHotelClass": 4,
  "overallRating": 3.9,
  "reviews": 3811,
  "locationRating": "4.6",
  "amenities": ["Breakfast", "Air conditioning", "Airport shuttle", "Kid-friendly"],
  "nearbyPlaces": [
    { "name": "La Pedrera - Casa Milà", "transportations": [{ "type": "Walking", "duration": "5 min" }] }
  ]
}
单个房源的完整信息

将任意搜索结果中的 propertyToken 传回同一工具,并保留日期,返回的就是该房源的独立信息。在搜索字段的基础上,还会添加 prices(Google 比较的所有来源的价格)、featuredPrices(赞助商价格)、住宿期间的 typicalPriceRange,以及 Google 将价格标记为优惠时提供的 deal 和 dealDescription;此外还包括 address、phone、directions、按类别分组的 amenitiesDetailed、excludedAmenities,以及来自 Tripadvisor 等平台的 otherReviews。

{
  "prices": [
    {
      "source": "Booking.com",
      "numGuests": 2,
      "ratePerNight": { "lowest": "$61", "beforeTaxesFees": "$39", "extractedLowest": 61 }
    }
  ],
  "typicalPriceRange": { "lowest": "$51", "highest": "$68", "extractedLowest": 51, "extractedHighest": 68 },
  "deal": "34% less than usual",
  "dealDescription": "Great Deal",
  "address": "Pg. de Gràcia, 116Bis, Gràcia, 08008 Barcelona, Spain",
  "phone": "+34 931 74 05 28"
}

提示词和资源

服务提供 7 个资源,每个资源对应一个可接受值为固定列表的参数。读取资源比从失败的调用中学习相关词汇更省时,而且不消耗额度。每个 URI 的格式为 hasdata://google_travel/<parameter>。

参数值数量所选内容
gl245用于限制搜索范围的国家/地区两字母代码。
hl159搜索所用语言的两字母代码。
currency71此参数定义返回价格所用的货币。
sortBy3对酒店结果排序。选项:- lowestPrice — 价格最低 - highestRating — 评分最高 - mostReviewed — 评论数最多
propertyType__25用于筛选的房源类型列表(例如,hotelResort,hotelMotel)。带 hotel* 前缀的值适用于搜索酒店(默认模式)。带 rental* 前缀的值适用于 vacationRentals=true 时。两组值互不重叠,因为 Google Hotels 为这两种模式提供了不同的房源类型目录——请传入与查询模式匹配的值。
amenity__32用于筛选的设施列表(例如,hotelFreeWifi,hotelPool)。带 hotel* 前缀的值适用于搜索酒店(默认模式)。带 rental* 前缀的值适用于 vacationRentals=true 时。两组值互不重叠,因为 Google Hotels 为这两种模式提供了不同的设施目录——请传入与查询模式匹配的值。
rating3按最低综合住客评分筛选。选项:- threePointFivePlus — 3.5 星及以上 - fourPlus — 4.0 星及以上 - fourPointFivePlus — 4.5 星及以上

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

错误和失败路径

客户端几乎不会在工具调用中收到 HTTP 错误代码。MCP 层会返回 200,并将失败信息放入结果中,同时将 isError 设为 true,并以文本形式说明原因。Agent 读到的是一条消息,而不是你可能预期的状态行。

密钥错误会显示为工具输出,而不是连接失败。 tools/list 接受任意非空密钥并返回工具,因此客户端会完成握手并显示绿色状态。随后,首次工具调用会返回 isError: true,文本为 HasData API error: 401 Unauthorized。请留意这段字符串,因为流程中此前不会报告此问题。

缺少密钥是唯一真正的 HTTP 错误。 授权会在调用任何工具前执行,连接本身会以 401 失败。响应中包含 CORS 标头,因此浏览器客户端读取到的是状态码,而不是不透明的网络错误。

缺少日期会在请求成为搜索前被拒绝。 删除 checkOutDate 后,调用会因验证失败而返回 422,并指出该字段。

最危险的失败悄无声息,而且会把你带到错误的地理位置。 Google 无法定位的目的地,以及从错误国家/地区读取的城市名称,都会返回 200 和一整页位于其他地方的房源。我们搜索了 Qwertyville,结果却得到数据中心附近 18 家真实酒店,而请求正是从该数据中心发出的。请检查首条结果中的 gpsCoordinates,或传入 gl,再相信结果列表。

不合理的日期会被悄悄修正,而不是拒绝。 退房日期早于入住日期,或入住日期在 2020 年,仍会返回 200 和房源,因为 Google 会规范化日期范围,而不是报错。如果日期来自模型,请在你自己的端进行验证。

包含数据的结果也会附带一个 requestMetadata.id,可在联系支持时引用。

定价、免费额度和限制

每次成功调用 Google Hotels 均需 10 个积分。响应大小不会改变价格,打开一家酒店的费用与搜索相同。

免费额度为每月 1,000 个积分,无需绑定银行卡,约可进行 100 次搜索。额度会随计费周期续期,因此低用量的 Agent 可以无限期使用免费额度。

付费套餐起价为每月 $59,包含 200,000 个积分,即 20,000 次搜索,或每 1,000 次搜索 $2.95。用量越大,单价越低,最大套餐低至每 1,000 次 $0.83;按年付费时,支付十个月的月费即可使用十二个月。最新价格请查看定价页面。

套餐还决定并发数:免费套餐同时可处理 1 个请求,Startup 为 5 个,Basic 为 15 个,Growth 各套餐为 50 到 500 个。对于任何无人值守的应用,都应妥善处理超出并发限制的情况。

返回非 200 状态码的请求不会计费。搜索后打开酒店详情属于第二次调用,请预留相应额度。

工具选择

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

?apis=google_travel_hotels           the one tool in this repo
?apis=google_travel                  add Google Flights
?apis=google_travel_hotels,airbnb    hotels plus Airbnb stays
?apis=google_travel_hotels,booking   hotels plus Booking.com

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

对比

Google 从未开放过公开的 Hotels API。Hotel Center 面向发布房价的酒店经营者,而 Places API 返回包含照片和评论的商家记录,但不提供日期范围内的房价。其他替代方案是各家预订网站提供的联盟 API,每种 API 只涵盖自身的库存,且都需要经过审批才能使用。

Google Places API本服务
入住期间的房价不提供按酒店提供每晚价格和总价
其他网站的收费不提供通过 prices 提供来源及其价格
评论五条评论摘要评论数量、星级分布图和按主题分类的详情
度假租赁不涵盖通过一个标志参数使用同一工具
设置Google Cloud 项目、结算、配额一个密钥和一个 URL
费用超出免费额度后按请求计费超出免费额度后付费,每次调用 10 个积分

本服务不提供的功能。 不支持预订和付款。它会读取房价、所选日期的空房情况,以及 Google 自己指向的链接,然后将预订步骤交还给你。

常见问题

有官方的 Google Hotels API 吗?

没有。Google 为发布自有房价的酒店经营者提供 Hotel Center,并为商家记录提供 Places API,但两者都不会返回入住期间的费用。本服务会读取公开结果,并将其作为结构化 JSON 返回。

什么是 Google Hotels MCP 服务?

它是一项将 Google Hotels 作为工具公开、供 AI 客户端调用的服务。客户端通过 Model Context Protocol 发送工具调用,服务获取酒店信息并返回结构化 JSON,模型再根据结果开展工作。此服务仅公开一个工具,并以远程方式运行。

为什么搜索结果中会出现其他国家的酒店?

因为如果只输入地点名称,Google 会根据其对搜索发起地的判断来解析地点,而搜索发起地就是请求离开的数据中心。输入 hotels in Barcelona,而不是 Barcelona,或者将 gl 设为国家代码,即可固定目的地。

如何查看每家预订网站的收费?

先执行搜索,然后使用你关注酒店的 propertyToken 再次调用该工具。结果会包含 prices,其中每个来源各有一项;还会提供此次入住的 typicalPriceRange,以及房价异常低时 Google 给出的 deal 判定。

我可以搜索度假租赁房源吗?

可以。启用 vacationRentals 后,同一工具就会搜索租赁房源,此时 bedrooms 和 bathrooms 可用作筛选条件。

我可以将其与其他 HasData API 搭配使用吗?

可以。apis 参数接受一个列表,使用 ?apis=google_travel 可在酒店之外添加 Google Flights。省略该参数,即可获取所有内容。

合规与个人数据

HasData 仅访问公开可用的数据。平台条款可能会限制自动访问,您有责任确保自己的操作符合相关规定。

HasData 链接

产品页面和请求构建器Google Hotels API
服务文档MCP server docs
一个服务中包含所有 HasData 工具HasData/hasdata-mcp
客户端使用指南MCP 客户端与集成
我们抓取的其他所有内容所有 HasData API
方案与积分费用方案与积分费用
密钥与用量HasData 控制面板
npm 上的 Node 启动器@hasdata/google-hotels-mcp
PyPI 上的 Python 启动器hasdata-google-hotels-mcp

开发

此仓库包含远程服务的配置和文档。无需构建,也无需容器化。

test/ 中的测试用于验证工具契约,也就是可能在未提交此仓库更改的情况下发生变化的部分。测试会检查 ?apis=google_travel_hotels 是否恰好返回一个工具、该工具是否仍声明了必需参数、名称是否未发生变化,以及实际使用的密钥是否确实有效。最后一项会实际调用工具,耗费 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 的拉取请求会在不使用密钥的情况下运行测试套件;实时检查会跳过,而不会导致测试变红。

许可证

MIT。请参阅 LICENSE。

评论

支持 Markdown

第一次接触 MCP?

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

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