关于 HasData Google Flights
HasData Google Flights 是托管式 MCP 服务,为 MCP 客户端提供 Google Flights 航班搜索。它以结构化 JSON 返回票价、航段、碳排放和价格历史,并支持单程、往返及多城市行程。
主要功能
- 01搜索单程、往返和多城市航班
- 02返回票价与航班航段信息
- 03提供碳排放数据
- 04提供价格区间与历史
- 05按舱位、经停和价格筛选
适用场景
- 01比较指定路线和日期的航班
- 02筛选低价或较低排放的行程
- 03查看票价是否处于常见区间
- 04获取往返行程的返程选项
MCP 相关
托管式远程 MCP 服务通过一个只读工具提供 Google Flights 查询,并返回结构化数据。服务还提供一个航班比较提示词和用于查询参数选项的资源。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://mcp.hasdata.com/mcp?apis=google_travel_flightsclaude mcp add --transport http com-hasdata-google-flights https://mcp.hasdata.com/mcp?apis=google_travel_flights{"mcpServers":{"com-hasdata-google-flights":{"type":"http","url":"https://mcp.hasdata.com/mcp?apis=google_travel_flights"}}}在 Cursor 中打开{"servers":{"com-hasdata-google-flights":{"type":"http","url":"https://mcp.hasdata.com/mcp?apis=google_travel_flights"}}}在 VS Code 中打开{"mcpServers":{"com-hasdata-google-flights":{"type":"http","url":"https://mcp.hasdata.com/mcp?apis=google_travel_flights"}}}{"mcpServers":{"com-hasdata-google-flights":{"serverUrl":"https://mcp.hasdata.com/mcp?apis=google_travel_flights"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
https://mcp.hasdata.com/mcp?apis=google_travel_flights需要授权工具
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 MCP 服务
一个托管式模型上下文协议(MCP)服务,为 Claude、Cursor、Windsurf 及任何其他 MCP 客户端提供一个 Google Flights 工具。搜索单程、往返和多城市行程,获取票价、航段、碳排放和价格历史,所有结果均为结构化 JSON;无需 Google 账号,也无需设法绕过已停用的旅行 API。
每月赠送 1,000 个免费额度,无需绑定银行卡,约可搜索 66 次航班。
https://mcp.hasdata.com/mcp?apis=google_travel_flights
目录
准备事项
你需要一个 MCP 客户端,以及从控制面板获取的 HasData API 密钥。注册免费,无需绑定银行卡;免费套餐按每次调用 15 个额度计算,每月约可调用 66 次。这是一个远程服务,因此最简单的接入方式是使用 URL 和 x-api-key 标头,无需运行容器,也无需在任何环节使用 Google 账号。仅支持 stdio 的客户端可通过轻量启动器连接该服务;启动器已发布到 npm,包名为 @hasdata/google-flights-mcp,也发布到 PyPI,包名为 hasdata-google-flights-mcp,如下所示。
快速开始
所有客户端使用相同的服务 URL。我们已在 Claude Code 和 Claude Desktop 中进行实际测试。其他配置块则遵循各客户端针对远程服务所记录的格式。
| 字段 | 值 |
|---|---|
| URL | https://mcp.hasdata.com/mcp?apis=google_travel_flights |
| 传输方式 | HTTP,可流式传输 |
| 认证标头 | x-api-key: HASDATA_API_KEY |
支持 OAuth 的客户端可以将相同的 URL 添加为连接器,然后登录,无需将密钥写入配置文件。
Claude Code
claude mcp add --transport http google-flights "https://mcp.hasdata.com/mcp?apis=google_travel_flights" \
--header "x-api-key: HASDATA_API_KEY"
Claude Desktop
依次选择 Settings、Connectors、Add custom connector,然后粘贴 https://mcp.hasdata.com/mcp?apis=google_travel_flights 并登录。
如果使用配置文件,Claude Desktop 只会加载本地(stdio)服务,因此需要通过 stdio 启动器连接远程服务。@hasdata/google-flights-mcp 包就是这个启动器,它会从环境变量读取密钥。将以下内容添加到 claude_desktop_config.json:
{
"mcpServers": {
"google-flights": {
"command": "npx",
"args": ["-y", "@hasdata/google-flights-mcp"],
"env": { "HASDATA_API_KEY": "YOUR_KEY" }
}
}
}
如果使用 Python 而非 Node,可以将启动器替换为 PyPI 包,uvx 无需手动安装即可运行该包:
{
"mcpServers": {
"google-flights": {
"command": "uvx",
"args": ["hasdata-google-flights-mcp"],
"env": { "HASDATA_API_KEY": "YOUR_KEY" }
}
}
}
Cursor
适用于所有项目的 ~/.cursor/mcp.json,或仅适用于一个项目的 .cursor/mcp.json:
{
"mcpServers": {
"google-flights": {
"url": "https://mcp.hasdata.com/mcp?apis=google_travel_flights",
"headers": { "x-api-key": "HASDATA_API_KEY" }
}
}
}
Windsurf
~/.codeium/windsurf/mcp_config.json。Windsurf 使用的字段名是 serverUrl,而不是 url:
{
"mcpServers": {
"google-flights": {
"serverUrl": "https://mcp.hasdata.com/mcp?apis=google_travel_flights",
"headers": { "x-api-key": "HASDATA_API_KEY" }
}
}
}
VS Code
工作区中的 .vscode/mcp.json:
{
"servers": {
"google-flights": {
"type": "http",
"url": "https://mcp.hasdata.com/mcp?apis=google_travel_flights",
"headers": { "x-api-key": "HASDATA_API_KEY" }
}
}
}
示例提示词
这些是提示词,不是代码。粘贴一条提示词,Agent 就会自行选择工具。每条提示词都注明了所需调用次数,因为每次成功调用会花费 15 个积分。
查找 9 月 15 日从 JFK 飞往伦敦希思罗机场的单程航班,按价格排序,并列出最便宜的三班,包括航空公司和碳排放估算。
一次调用,15 个积分。票价、航段和排放量会一并返回。
相同航线,但只要直飞航班,选择商务舱,并告诉我哪个选项的排放量最低。
一次调用,15 个积分。舱位和经停次数都是单次请求中的筛选条件。
考虑到历史价格,现在 JFK 到 LHR 的票价是 295 美元,这个价格怎么样?
一次调用,15 个积分。响应中的 priceInsights 会提供典型价格范围和价格水平。
JFK 到 LHR 往返,9 月 15 日出发,9 月 22 日返回,选择最低价。
两次调用,30 个积分。Google 会先返回去程选项,然后根据你选择的选项,通过第二次调用查询返程航段。
往返行程按设计需要两次调用。第一次会返回去程行程选项,每个选项都包含一个 departureToken;传回该令牌即可获取相匹配的返程航班。单程查询和价格查询则各需一次调用。
工具
| 工具 | 返回内容 |
|---|---|
hasdata_google_travel_flights_getGoogleFlights | 每个行程的价格、货币、总时长、经停次数、包含航空公司、航班号、飞机、出发/到达机场及时间的航段、CO2 排放量,以及……每次调用 15 个积分 |
这是一个只读工具。以下示例摘自一次真实调用,但票价会不断变化。请将其视为数据结构示例。工具名称链接到其端点参考文档,其中包含完整的参数列表。
示例是有效载荷,而非完整响应。tools/call 结果包含一个文本块,该文本本身是一个 JSON,其中包含 url、status、text 和 json,抓取的数据位于 json 下。从原始 JSON-RPC 响应中,路径为 result.content[0].text,解析后再取 .json。聊天客户端会替你解包,而直接与端点交互的代码不会。
获取 Google Flights 结果
hasdata_google_travel_flights_getGoogleFlights
指定航线和日期的行程,包含票价、航段、排放量和价格历史记录。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
departureId | string | 是 | IATA 代码,例如 JFK,或位置 kgmid,例如 /m/02_286。多个机场以逗号分隔 |
arrivalId | string | 是 | 格式与 departureId 相同 |
outboundDate | string | 是 | YYYY-MM-DD |
type | string | 默认为 roundTrip,也可以是 oneWay,或搭配 multiCityJson 使用 multiCity | |
returnDate | string | 当 type 为 roundTrip 时必填 | |
travelClass | string | economy、premiumEconomy、business 或 first | |
stops | string | nonStop、oneStopOrFewer 或 twoStopsOrFewer | |
sortBy | string | 默认为 topFlights,还可以是 price、duration、emissions、departureTime、arrivalTime | |
adults / children / infantsInSeat / infantsOnLap | number | 乘客构成 | |
maxPrice / maxDuration / bags | number | 上限和随身行李数量 | |
includeAirlines / excludeAirlines | string | 以逗号分隔的 IATA 航空公司代码,二者只能选其一 | |
departureToken | string | 选择一个去程选项,并获取其返程或下一航段 | |
bookingToken | string | 获取所选行程的预订选项 | |
currency / gl / hl | string | 搜索所用的货币、国家/地区和语言 | |
deepSearch | boolean | 匹配浏览器中 Google 显示的结果,但返回速度较慢 |
参考文档还介绍了 includeConnections、excludeConnections、layoverDuration、outboundTimes、returnTimes、showHidden、lessEmissions 和 multiCityJson。
结果分为 bestFlights 和 otherFlights。每个行程都包含 price、type、以分钟为单位的 totalDuration、由各航段构成的 flights 数组、carbonEmissions 对象,以及 bookingToken。每个航段包含 departureAirport 和 arrivalAirport(各自含有 id、name 和当地 time)、duration、airline、flightNumber、airplane、legroom、travelClass、extensions 数组,以及 Google 标记的航段所对应的 oftenDelayedByOver30Min。直飞行程只有一个航段,中转行程则包含多个航段。
carbonEmissions的单位是克,不是千克。thisFlight: 433000表示 433 千克。differencePercent将该航班与typicalForThisRoute进行比较,因此负数表示该航班比平均水平更环保。
{
"price": 295,
"type": "One way",
"totalDuration": 415,
"flights": [
{
"departureAirport": { "id": "JFK", "name": "John F. Kennedy International Airport", "time": "2026-09-15 8:15" },
"arrivalAirport": { "id": "LHR", "name": "Heathrow Airport", "time": "2026-09-15 20:10" },
"duration": 415,
"airline": "Virgin Atlantic",
"flightNumber": "VS 26",
"airplane": "Boeing 787",
"travelClass": "Economy"
}
],
"carbonEmissions": { "thisFlight": 367000, "typicalForThisRoute": 419000, "differencePercent": -12 },
"bookingToken": "W1t7..."
}
priceInsights 与行程并列,其中包含 lowestPrice、typicalPriceRange、typical 等 priceLevel 值,以及由 [timestamp, price] 数据点构成的 priceHistory。airports 会返回解析后的出发和到达机场信息,包括城市和国家/地区。
提示词和资源
该服务提供一个提示词,即一个现成的工作流,客户端可以直接提供给用户,而无需让用户自行编写工具调用。
| 提示词 | 功能 |
|---|---|
google_flights | 比较两个机场之间的航班选项。 |
此外,该服务还公开了 7 个资源,每个资源对应一个取值范围固定的参数。读取资源比在调用遭拒后再了解这些取值更省事,而且不消耗额度。每个 URI 的格式为 hasdata://google_travel_flights/<parameter>。
| 参数 | 值数量 | 选择内容 |
|---|---|---|
type | 3 | 指定航班类型。选项:- roundTrip(默认)- oneWay - multiCity(需要 multiCityJson 提供航班详情)对于往返行程,请使用单独的请求和 departureToken 获取返程航班详情。 |
gl | 245 | 用于将搜索范围限制到指定国家/地区的两字母国家/地区代码。 |
hl | 159 | 用于指定搜索语言的两字母语言代码。 |
currency | 71 | 用于指定返回价格所用货币的参数。 |
travelClass | 4 | 航班舱位(经济舱、高端经济舱、商务舱或头等舱)。 |
sortBy | 6 | 按价格、出发时间、到达时间等对航班结果排序。 |
stops | 3 | 限制航班行程中的经停次数。 |
这两个列表无需 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,并指出有问题的字段。未提供 returnDate 的 roundTrip,或同时使用 includeAirlines 和 excludeAirlines,都会在此处被拦截。
指定日期没有航班的航线会返回成功结果,但行程数组为空,而非报错。requestMetadata.status 仍为 ok。请先检查是否有航班,再进行排序。
错误的机场代码会返回 400,且 requestMetadata.status 设为 error。请使用 IATA 代码或 kgmids,而不是城市名称。
包含数据的结果还会附带一个 requestMetadata.id,可在联系支持时引用。
定价、免费套餐和限制
每次成功调用 Google Flights 都会消耗 15 个额度。响应大小不会影响价格,深度搜索与标准搜索的费用相同。
免费套餐每月提供 1,000 个额度,无需绑定银行卡,约可搜索 66 次航班。额度会随计费周期续期,因此低频使用的 Agent 可以一直使用免费套餐。
付费套餐起价为 每月 $59,包含 200,000 个额度,约可搜索 13,000 次。随着用量增加,单价会降低:入门套餐为 每 1,000 次调用 $4.42,Basic 套餐为 $1.79,Growth 系列套餐均为 $1.25。当前价格请查看定价页面。
套餐还决定并发数。免费套餐允许同时处理 1 个请求,Startup 套餐为 5 个,Basic 套餐为 15 个,Growth 系列套餐则为 50 到 500 个。对于无人值守运行的程序,请务必妥善处理超出并发限制的情况。
未返回 200 状态码的请求不会计费。往返行程需要调用两次,请据此规划额度。
工具选择
apis 查询参数决定 Agent 可以看到哪些工具。工具越少,工具定义占用的上下文就越少,模型选错工具的可能性也越低。
?apis=google_travel_flights the one tool in this repo
?apis=google_travel add Google Hotels
?apis=google_travel_flights,airbnb flights plus Airbnb stays
该参数接受 google_travel 这样的提供方名称,也接受 google_travel_flights 这样的具体 API 名称。拼写错误的名称会被忽略。如果所有名称都无效,请求将失败并返回 400;响应正文会列出无法识别的名称以及所有有效值。不传该参数,同一端点便会提供全部 57 个 HasData 工具。
对比
Google 于 2018 年停用了 QPX Express 航班 API,此后从未推出替代产品,因此没有官方的 Google Flights API。现有方案要么抓取公开搜索结果,要么购买原始 GDS 票价数据的授权,成本高且流程繁琐。本服务读取网站显示的相同结果,并以 JSON 格式返回。
| Google 官方 API | 本服务 | |
|---|---|---|
| 可用性 | QPX Express 于 2018 年关闭后便不再提供 | 基于实时结果并持续维护的架构 |
| 排放数据 | 不提供 | 按行程提供,并与航线平均值对比 |
| 价格历史 | 不提供 | 通过 priceInsights 提供典型价格范围 |
| 设置 | 无需设置,因为该 API 并不存在 | 只需一个密钥和一个 URL |
| 费用 | 不适用 | 超出免费额度后收费,每次调用消耗 15 个额度 |
本服务不提供的功能。 不提供预订或付款功能。它会读取票价、航段以及 Google 自身用于跳转到预订流程的令牌,然后将预订步骤交还给你。
常见问题
有官方的 Google Flights API 吗?
没有。Google 于 2018 年关闭了 QPX Express,此后没有推出替代产品。所有方案读取的都是网站提供的相同公开搜索结果。本服务由 HasData 维护,并以结构化 JSON 格式返回结果。
什么是 Google Flights MCP 服务?
它是一种将 Google Flights 封装为工具、供 AI 客户端调用的服务。客户端通过模型上下文协议发送工具调用,服务获取行程并返回结构化 JSON,模型再处理结果。本服务提供一个工具,并在远程运行。
为什么往返行程需要调用两次?
Google 会先返回去程选项,每个选项都带有 departureToken。选择一个选项并传回其令牌,即可获取与之匹配的返程航班。这与网站的工作方式一致,因此往返行程会消耗 30 个额度。
碳排放数值的单位是千克吗?
不是,是克。thisFlight: 433000 表示 433 千克,differencePercent 则将其与航线平均值进行比较。
什么是深度搜索?
一种速度较慢的模式,返回的结果与 Google Flights 在浏览器中的显示完全一致。若追求速度,请关闭该模式;若需要与网站结果一致,请开启该模式。
可以将它与其他 HasData API 一起使用吗?
可以。apis 参数接受一个列表,?apis=google_travel 会在航班搜索之外添加 Google Hotels。移除该参数即可获取所有工具。
合规与个人数据
HasData 仅访问公开数据。平台的条款可能限制自动访问,您需自行负责合规事宜。
HasData 链接
| 产品页面和请求构建器 | Google Flights API |
| 服务文档 | MCP 服务文档 |
| 一个服务中的全部 57 个工具 | HasData/hasdata-mcp |
| 客户端指南 | MCP 客户端和集成 |
| 我们抓取的其他所有内容 | Google Flights API 及另外 54 项 |
| 方案和积分费用 | 方案和积分费用 |
| 密钥和用量 | HasData 控制面板 |
| npm 上的 Node 启动器 | @hasdata/google-flights-mcp |
| PyPI 上的 Python 启动器 | hasdata-google-flights-mcp |
开发
此代码库包含远程服务的配置和文档。无需构建,也无需将任何内容容器化。
test/ 中的测试用于断言工具契约,即无需在此提交代码就可能发生变化的部分。测试会检查 ?apis=google_travel_flights 是否恰好返回一个工具、工具是否仍声明必需参数、名称是否有变,以及正在使用的密钥是否确实可用。最后一项会实际调用工具,消耗 15 个积分;这就是一次可能因合理原因失败的金丝雀测试的成本。
# 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。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。