关于 HasData Google Flights Deals
HasData Google Flights Deals 是托管的 MCP 服务,可将自然语言旅行描述转换为带日期的航班优惠和预订链接。适合仍在构思目的地与出行时间的旅行规划者,并返回票价、航司、经停等结构化信息。
主要功能
- 01以自然语言描述行程
- 02返回日期、票价和典型价格
- 03显示航司、经停与航程信息
- 04提供 Google Flights 预订链接
- 05通过资源读取筛选参数选项
适用场景
- 01从出发机场探索旅行目的地
- 02比较不同出发机场的航班优惠
- 03查找指定目的地和舱位的票价
- 04按日期窗口探索行程
MCP 相关
该远程 MCP 服务向 MCP 客户端提供航班优惠查询工具,以及筛选参数选项资源。客户端通过 HTTP 连接,并使用 HasData API key 验证。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://mcp.hasdata.com/mcp?apis=google_travel_flights_dealsclaude mcp add --transport http com-hasdata-google-flights-deals https://mcp.hasdata.com/mcp?apis=google_travel_flights_deals{"mcpServers":{"com-hasdata-google-flights-deals":{"type":"http","url":"https://mcp.hasdata.com/mcp?apis=google_travel_flights_deals"}}}在 Cursor 中打开{"servers":{"com-hasdata-google-flights-deals":{"type":"http","url":"https://mcp.hasdata.com/mcp?apis=google_travel_flights_deals"}}}在 VS Code 中打开{"mcpServers":{"com-hasdata-google-flights-deals":{"type":"http","url":"https://mcp.hasdata.com/mcp?apis=google_travel_flights_deals"}}}{"mcpServers":{"com-hasdata-google-flights-deals":{"serverUrl":"https://mcp.hasdata.com/mcp?apis=google_travel_flights_deals"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
https://mcp.hasdata.com/mcp?apis=google_travel_flights_deals需要授权工具
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 | 否 | 用于获取下一页结果的令牌。 |
详细介绍
Google Flights Deals MCP Server
一个托管式模型上下文协议(MCP)服务,为 Claude、Cursor、Windsurf 及任何其他 MCP 客户端提供一个 Google Flights Deals 工具。用通俗语言描述一次旅行,例如“日本樱花”或“海滩度假”,即可获取从一个出发机场出发的带日期票价、典型价格、航空公司、经停次数和预订链接,并以结构化 JSON 返回。
每月免费获得 1,000 点额度,无需信用卡,约可进行 66 次搜索。
https://mcp.hasdata.com/mcp?apis=google_travel_flights_deals
目录
所需条件
一个 MCP 客户端和一个 HasData API 密钥,可在控制面板免费创建,无需信用卡;免费套餐按每次调用 15 点额度计算,每月约可调用 66 次。这是一个远程服务,因此最简单的接入方式是使用 URL 和 x-api-key 请求头,无需运行容器,整个流程也不需要 Google 账号。仅支持 stdio 的客户端可通过轻量启动器连接该服务;启动器发布在 npm 上,名称为 @hasdata/google-flights-deals-mcp,在 PyPI 上的名称为 hasdata-google-flights-deals-mcp,如下所示。
快速开始
所有客户端使用相同的服务 URL。我们已在 Claude Code 和 Claude Desktop 中实际运行。其他代码块则遵循各客户端关于远程服务的官方格式。
| 字段 | 值 |
|---|---|
| URL | https://mcp.hasdata.com/mcp?apis=google_travel_flights_deals |
| 传输方式 | HTTP,可流式传输 |
| 身份验证请求头 | x-api-key: HASDATA_API_KEY |
支持 OAuth 的客户端可以将同一 URL 添加为连接器,并登录使用,无需将密钥写入配置文件。
Claude Code
claude mcp add --transport http google-flights-deals "https://mcp.hasdata.com/mcp?apis=google_travel_flights_deals" \
--header "x-api-key: HASDATA_API_KEY"
Claude Desktop
{
"mcpServers": {
"google-flights-deals": {
"type": "http",
"url": "https://mcp.hasdata.com/mcp?apis=google_travel_flights_deals",
"headers": { "x-api-key": "HASDATA_API_KEY" }
}
}
}
Cursor
{
"mcpServers": {
"google-flights-deals": {
"type": "streamable-http",
"url": "https://mcp.hasdata.com/mcp?apis=google_travel_flights_deals",
"headers": { "x-api-key": "HASDATA_API_KEY" }
}
}
}
VS Code
{
"servers": {
"google-flights-deals": {
"type": "http",
"url": "https://mcp.hasdata.com/mcp?apis=google_travel_flights_deals",
"headers": { "x-api-key": "HASDATA_API_KEY" }
}
}
}
提示词,而非代码。粘贴一条提示词,Agent 就会自行选择工具。每条提示词都标注了所需的调用次数,因为每次成功调用都会消耗 15 个点数。
我想去日本看樱花,从 LAX 出发。哪些日期最便宜?
一次调用,15 个点数。Google 会根据描述选择目的地和日期范围。
2 月从伦敦出发去海滩度假,价格不超过 600 英镑,只要直飞。
一次调用,15 个点数。价格上限和经停筛选条件都需要通过 arrivalId 固定目的地,因此 Agent 必须指定目的地或移除筛选条件。
同样的行程,但目的地指定为东京,十天,商务舱。
一次调用,15 个点数。设置 arrivalId 后,就可以指定行程时长和舱位。
比较从 LAX 和 JFK 出发的赏樱行程。
两次调用,30 个点数。每次调用只能指定一个出发地。
工具
| 工具 | 返回内容 |
|---|---|
hasdata_google_travel_flights_deals_getGoogleFlightsDeals | 带日期的优惠信息,包括票价、该航线的常见价格、飞行时长、行程时长、经停次数、承运航空公司、机场和 Google Flights 预订链接,以及 Google 根据查询推导出的目的地和日期范围。每次调用消耗 15 个点数 |
一个工具,每次成功调用消耗 15 个点数。
查找机票优惠
hasdata_google_travel_flights_deals_getGoogleFlightsDeals
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
q | string | 是 | 自由格式的行程描述,可以是单独的地名,也可以是完整句子 |
departureId | string | 是 | 出发地,使用三字母大写 IATA 代码,例如 LAX |
arrivalId | string | 固定目的地,而不是让 Google 自行选择。以下所有筛选条件都需要此参数 | |
type | string | roundTrip(默认)或 oneWay | |
travelClass | string | economy、premiumEconomy、business 或 first | |
outboundDate | string | 确切日期,或使用 2026-12-01,2026-12-10 表示日期范围 | |
returnDate | string | 格式与 outboundDate 相同,且必须与之同时提供 | |
travelDuration | string | 预设时长:week、weekend 或 twoWeeks | |
tripLength | string | 行程天数,不能与 returnDate 或 travelDuration 同时使用 | |
stops | string | nonStop、oneStopOrFewer 或 twoStopsOrFewer | |
maxDuration | number | 每段航班的时长上限,单位为分钟 | |
maxPrice | number | 价格上限,币种与请求中的币种相同 | |
includeAirlines / excludeAirlines | string | 两者只能选其一,不能同时使用 |
筛选条件是需要正确处理的关键。所有筛选条件都需要 arrivalId。 如果提示词要求直飞且价格不超过上限,同时又让 Google 选择目的地,那么这两个要求无法同时满足;API 会返回 422 错误,并指出冲突的参数对。固定目的地或移除筛选条件。
searchInformation 会报告 Google 对查询的解读:完整的 departure 机场信息,包括所在城市和坐标、确定的 dateRange、找到的 priceRange 和涉及的 airlines。
{
"searchInformation": {
"query": "cherry blossom in Japan",
"departure": { "airport": "LAX", "city": "Los Angeles", "country": "United States" },
"dateRange": { "from": "2027-03-01", "to": "2027-04-30" }
},
"flightDeals": [
{
"outboundDate": "2027-03-01",
"returnDate": "2027-03-08",
"price": { "value": 960, "currency": "USD" },
"typicalPrice": { "value": 1335, "currency": "USD" },
"discountPercent": 28,
"durationMinutes": 1320,
"tripLengthDays": 7,
"stops": 1,
"airlineCode": "CX",
"airline": "Cathay Pacific",
"multipleAirlines": false,
"departureAirport": "LAX",
"arrivalAirport": "HIJ",
"destination": { "city": "Hiroshima", "country": "Japan", "highlight": "Peace Park Memorial & Shukkei-en garden" },
"bookingLink": "https://www.google.com/travel/flights?tfs=…"
}
]
}
提示词和资源
该服务公开了 7 个资源,每个资源对应一个取值范围固定的参数。读取资源比从被拒绝的调用中摸清可用值更省事,而且不消耗积分。每个 URI 的格式都是 hasdata://google_travel_flights_deals/<parameter>。
| 参数 | 取值数量 | 选择内容 |
|---|---|---|
type | 4 | 航班类型。需要 arrivalId。- 1 / roundTrip — 往返(默认)- 2 / oneWay — 单程 单程优惠不包含 returnDate 和 tripLengthDays。 |
travelClass | 8 | 舱位等级。需要 arrivalId。- 1 / economy — 经济舱(默认)- 2 / premiumEconomy — 超级经济舱 - 3 / business — 商务舱 - 4 / first — 头等舱 票价涨幅很大:同一次 LAX-NRT 搜索中,经济舱为 $730,商务舱为 $2882。 |
travelDuration | 6 | 预设行程时长。需要 arrivalId。不能与 returnDate 或 tripLength 同时使用。- 1 / week — 约一周(6-8 天)- 2 / weekend — 周末(2-3 天)- 3 / twoWeeks — 约两周(13-15 天)与 outboundDate 搭配使用可限制出发日期范围。若 type 为 oneWay,则会被忽略。 |
stops | 6 | 中转次数上限。需要 arrivalId。省略时允许任意中转次数。- 1 / nonStop — 仅直飞 - 2 / oneStopOrFewer — 最多中转一次 - 3 / twoStopsOrFewer — 最多中转两次 如果某条航线在该中转次数范围内没有航班,返回的是空的 flightDeals 数组,而不是错误 — 对于没有直飞航班的航线,nonStop 会返回有效的空结果。 |
gl | 245 | 用于限制搜索范围的国家/地区两字母代码。 |
hl | 159 | 搜索所用语言的两字母代码。 |
currency | 71 | 此参数定义返回价格所用的货币。 |
此列表无需 API 密钥即可获取,因此客户端可以在用户注册之前读取。
错误和失败路径
工具调用几乎不会向客户端返回 HTTP 错误代码。MCP 层会返回 200,并将失败信息放在结果中,设置 isError 为 true,并以文本说明原因。
discountPercent 是例外,而非常态。 在 2026-10-05 测量的 351 个优惠中,该字段仅出现在 109 个优惠里。该字段存在时,其值与 price 和 typicalPrice 之间的差额相符,误差不超过一个舍入单位;该字段缺失时,差额为 4% 到 15%,因此 Google 似乎只会在超过其内部阈值时发布此字段。每个优惠都有 typicalPrice,因此应自行计算差价,而不是因为缺少该键就报告“无折扣”。
airline 和 airlineCode 会同时缺失。 同一组样本中,269 个优惠列出了航空公司,82 个没有,比例恰好对应 multipleAirlines 标志:每个将其设为 true 的优惠都省略了这两个字段,而未设置该标志的优惠则都有这两个字段。报告航空公司之前应先检查此标志;若有多家航空公司,应写“多家航空公司”,而不是留空。
没有 arrivalId 的筛选条件会在执行前被拒绝。 API 会返回 422,且 rule: "requiredIfExists" 会同时列出 arrivalId 和触发错误的筛选条件,并且不会扣费。所有十一种筛选条件都会如此处理,因此此类失败会明确报错,且不会造成损失。
除非你指定日期,否则日期由 Google 决定。 searchInformation.dateRange 是实际搜索的日期范围,可能距离今天有几个月。展示价格时应注明该日期范围,因为明年三月的票价不等于下个月的票价。
每次成功调用都会从已连接的账户扣除积分。根据调用前后读取余额的结果,无论是验证导致的 422,还是上游返回的 400,都不会扣费。
定价、免费额度和限制
Google Flights Deals 工具每次成功调用需 15 个积分,与 Google Flights API 相同。返回的优惠数量不会影响价格。
免费额度为每月 1,000 个积分,无需绑定银行卡,约可搜索 66 次。
付费方案起价为每月 $59,含 200,000 个积分,约可搜索 13,000 次。购买更大额度的方案时,单价会更低。当前价格请查看方案页面。
对比
| Google Flights API | 此服务 | |
|---|---|---|
| 输入 | 出发地、目的地和日期 | 一句话,目的地可选 |
| 谁来选择目的地 | 你 | Google 根据描述选择 |
| 谁来选择日期 | 你 | Google,除非你指定日期 |
| 最适合 | 已经确定行程的旅行 | 还在构思中的旅行 |
两者相辅相成,而非相互竞争。先用此服务查找目的地和出行时间,再在确定行程后使用 Google Flights API 为行程查询价格。
常见问题
我需要 Google 账号吗?
不需要。唯一需要的凭据是你的 HasData 密钥。
为什么我的筛选条件被忽略了?
最有可能的原因是请求中没有传入 arrivalId。此工具的所有筛选条件都需要指定目的地,即使省略该参数,请求仍会成功。
我可以同时搜索多个出发地吗?
不可以。departureId 只接受一个机场,因此比较不同出发地需要分别调用一次。
它会搜索多长时间后的航班?
搜索范围由 Google 根据查询内容决定。请查看 searchInformation.dateRange,不要假设它只涵盖接下来几周。
HasData 与 Google 有关联吗?
没有。HasData 是独立的网络数据提供商,与 Google 无关联,也未获其认可或赞助。所有商标均归其所有者所有。
合规与个人数据
此服务读取 Google Flights 公开的优惠界面。它不处理乘客数据,也不会预订任何行程。
HasData 链接
| 产品页面和请求构建器 | Google Flights API |
| 端点文档 | Google Flights Deals API docs |
| 服务文档 | MCP server docs |
| 一个服务包含所有工具 | HasData/hasdata-mcp |
| 客户端使用指南 | MCP clients and integrations |
| 方案与积分费用 | Plans and credit costs |
开发
npm install
npm test
test/ 中的测试会验证工具契约,也就是此处无需提交代码就可能发生变化的部分。测试会检查 ?apis=google_travel_flights_deals 是否返回唯一预期工具、工具名称和必需参数是否保持不变、工具是否带有描述,以及实际搜索是否仍会返回包含文档所述字段的 flightDeals。
贡献
上方的参数表和示例取自实时架构和实际调用,而非文档。如果字段或故障模式发生变化,欢迎提出修正。请提交 issue,并附上你看到的响应。
许可证
MIT
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。