内容
# google-flights-mcp
[](https://www.npmjs.com/package/google-flights-mcp)
[](https://github.com/andreacappelletti97/google-flights-mcp/actions)
[](https://opensource.org/licenses/ISC)
最全面的 Google Flights MCP 服务器。不需要 API 密钥。
12 种工具用于搜索航班、跟踪价格、比较舱位、分析中转时间等,所有功能都由实时的 Google Flights 数据提供支持。
与 Claude Desktop、Claude Code、Cursor 以及任何 MCP 兼容的客户端兼容。
## 其他 Google Flights MCP 没有的功能
- **碳排放量**:每航班和每航程的碳排放量(千克 CO2)
- **价格背景**:Google 自己对价格的评估,判断价格是低、典型还是高
- **价格跟踪**:使用 SQLite 持久化跟踪价格随时间的变化,检测价格下降和趋势
- **日历热力图**:通过一次 API 调用获取 60 天的每日价格
- **舱位比较**:经济舱 vs 高级经济舱 vs 商务舱 vs 头等舱, side by side 比较
- **附近机场建议**:查找更便宜的替代机场(例如,JFK 附近的 EWR/LGA)
- **中转时间分析**:连接时间风险评估(紧密/舒适/隔夜)
- **飞机和座位详情**:波音 787 vs 777,座位间距(英寸)
- **Google Flights 网址**:用户可以直接点击的预订链接
## 你可以询问
- *"查找从 JFK 到伦敦的直飞航班,下个月"*
- *"从 SFO 到东京最便宜的飞行周是几周?"*
- *"比较从 LAX 到巴黎的经济舱和商务舱价格"*
- *"JFK 附近有更便宜的机场吗?"*
- *"跟踪 SFO 到 NRT 在 6 月 15 日的价格,如果价格下降,请提醒我"*
- *"显示从 SFO 到东京的航班排放量"*
- *"分析从 SFO 到曼谷的中转航班"*
## 快速开始
### 选项 1:npx(无需安装)
立即与 Claude Code 配合使用:
```bash
claude mcp add google-flights -- npx -y google-flights-mcp
```
或者与 Claude Desktop 配合使用,在您的 `claude_desktop_config.json` 中添加:
```json
{
"mcpServers": {
"google-flights": {
"command": "npx",
"args": ["-y", "google-flights-mcp"]
}
}
}
```
### 选项 2:从源代码安装
```bash
git clone https://github.com/andreacappelletti97/google-flights-mcp.git
cd google-flights-mcp
npm install
npm run build
```
然后连接到 Claude Code:
```bash
claude mcp add google-flights node /absolute/path/to/google-flights-mcp/dist/index.js
```
或者连接到 Claude Desktop(`claude_desktop_config.json`):
```json
{
"mcpServers": {
"google-flights": {
"command": "node",
"args": ["/absolute/path/to/google-flights-mcp/dist/index.js"]
}
}
}
```
重启您的 MCP 客户端。您应该会看到 12 个可用的航班工具。
## 工具(12 个)
### 搜索
| 工具 | 描述 |
|------|-------------|
| `search_flights` | 单程和往返搜索。返回价格、航空公司、时长、停靠次数、飞机、座位间距、碳排放量和价格背景。 |
| `search_multi_city` | 多段行程搜索(2-5 段)。 |
### 价格情报
| 工具 | 描述 |
|------|-------------|
| `get_calendar_heatmap` | 通过一次 API 调用获取完整的每日价格日历(约 60 天)。一目了然地查看最便宜的日期。 |
| `get_price_insights` | 扫描日期范围以查找最便宜的出发日期(多个 API 调用以确保准确性)。 |
| `compare_cabin_classes` | 比较同一航线的经济舱、高级经济舱、商务舱和头等舱价格。 |
| `track_price` | 记录当前价格并报告趋势(下降/上升/稳定)。价格存储在 SQLite 中。 |
| `get_price_history` | 查看跟踪航线的所有记录的价格观察。 |
| `list_tracked_routes` | 列出所有正在跟踪价格的航线及其最新价格。 |
### 机场工具
| 工具 | 描述 |
|------|-------------|
| `lookup_airport` | 通过城市、名称、IATA 代码或国家搜索 8,800+ 个机场。 |
| `find_nearby_airports` | 在一定半径内(默认为 200 公里)查找替代机场。使用 Haversine 距离公式。 |
### 实用工具
| 工具 | 描述 |
|------|-------------|
| `get_flight_url` | 生成直接的 Google Flights 预订网址。 |
| `analyze_layovers` | 分析多段航班的连接质量。报告风险级别、连接类型和飞机。 |
## 示例输出
### `search_flights`(含排放量和价格背景)
```
2026-06-15 从 SFO 到 NRT 的航班:
价格评估:高(比典型价格高 294 美元)。价格范围:500 - 700 美元,典型价格:577 美元
航班 1:874 美元 | 11 小时 15 分钟 | 0 次中转 | 碳排放量:428 千克
ZG 25:SFO -> NRT(11 小时 15 分钟)[飞机:波音 787,座位间距:31 英寸,碳排放量:428 千克]
航班 2:1310 美元 | 11 小时 5 分钟 | 0 次中转 | 碳排放量:545 千克
NH 7:SFO -> NRT(11 小时 5 分钟)[飞机:波音 777,座位间距:34 英寸,碳排放量:545 千克]
```
### `get_calendar_heatmap`
```
价格日历:SFO -> NRT
61 天的数据
最便宜:384 美元(2026-02-12)
最贵:870 美元(2026-04-13)
平均:632 美元
2026-02:
12:384 美元 ***
13:384 美元 ***
...
20:540 美元 ***
2026-03:
06:609 美元 *
...
20:689 美元
```
### `find_nearby_airports`
```
距 JFK 150 公里范围内的机场:
LGA - 拉瓜迪亚机场(纽约,美国),17 公里远
EWR - Newark Liberty 国际机场(纽瓦克,美国),33 公里远
HPN - 威斯特彻斯特县机场(怀特普莱恩斯,美国),48 公里远
```
## 工作原理
没有官方的 Google Flights API。该服务器反向工程 Google 的内部 `FlightsFrontendService` 端点。它提取的不仅是航班,还有隐藏的元数据:排放量、价格评估、每日价格日历、飞机类型和座位详情。
### 可靠性
- **缓存**:5 分钟 TTL 缓存,相同的搜索不会两次命中 Google
- **重试和退避**:指数退避 + 抖动处理 429/5xx 错误,遵守 `Retry-After` 头部
- **断路器**:在连续 5 次失败后停止请求,30 秒后自动恢复
- **结构验证**:当 Google 更改其响应格式时,提供清晰的错误信息
- **TLS 缓解**:`undici` 采用类似浏览器的头部 + 旋转 User-Agent,`fetch` 备用
### 价格跟踪
价格历史存储在 SQLite 数据库中,位于 `~/.google-flights-mcp/prices.db`。每次调用 `track_price` 时,都会记录当前最便宜的价格,并根据之前的观察结果报告趋势。
## 开发
```bash
npm install # 安装依赖
npm run build # 使用 tsup 构建
npm test # 运行测试(85 个测试)
npm run lint # 使用 FP 规则进行 ESLint 检查(无 let/var/.push()/for 循环)
npm run typecheck # TypeScript 严格类型检查
npm run check # typecheck + lint + test(完整的 CI 流水线)
npm run dev # 监视模式下构建
```
### 设计
完全功能的 TypeScript 代码库:
- **无突变**:所有类型均为 `readonly`,无 `let`/`var`/.push()/for 循环
- **结果单体**:错误是值(`Result<T, E>`),而非异常
- **纯/IO 分离**:纯变换与网络和磁盘 IO 分离
- **组合**:使用 `pipe()` + `flatMap()` 链接可失败的操作
参见 [CLAUDE.md](CLAUDE.md),了解架构细节和 Google Flights 响应格式参考。
## 限制
- **无官方 API**:使用未公开的 Google 端点,可能随时更改。结构验证使破坏变得明显。
- **速率限制**:Google 可能会限制大量使用。内置重试和断路器处理暂时的异常。
- **价格是估计值**:价格反映查询时的价格;它们可以在预订前更改。
- **货币**:由 Google 根据 IP/位置确定。
## 贡献
1. 分叉仓库
2. 创建功能分支
3. 进行更改
4. 运行 `npm run check` 进行验证
5. 打开 PR
## 许可证
ISC