关于 dealdata
dealdata 是连接 HasData 托管 Google Flights deals MCP 服务的本地桥接程序,适合根据自然语言行程想法查找航班优惠的旅行者。它返回航班日期、价格、行程信息和 Google Flights 链接,不支持预订或付款。
主要功能
- 01根据自然语言行程描述搜索优惠
- 02指定出发机场及可选目的地
- 03筛选日期、舱位、停靠次数和价格
- 04返回航班、行程和航空公司信息
- 05提供 Google Flights 直达链接
适用场景
- 01从出发机场查找海滩度假航班优惠
- 02按日期范围和行程长度筛选航班
- 03比较价格、飞行时长及中途停靠
MCP 相关
向 MCP 客户端提供一个只读航班优惠搜索工具,并将调用转发至 HasData 托管 Google Flights deals MCP 服务。该工具不提供预订、订票或付款功能。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
1收录的工具列表 · 更新于 2 天前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| q | string | 是 | 自由文本行程描述,可以是单独的地点名称,也可以是完整句子: - **目的地**:`Tokyo` - **行程类型**:`beach escape`、`weekend getaway in Europe` - **季节或活动**:`I would like to see cherry blossom in Japan` 如果查询中包含某个时段,Google 会自行确定日期,并在 `searchInformation.dateRange` 中返回日期范围。 |
| gl | string | 否 | 要将搜索范围限制到的国家/地区的两字母国家代码。请提供一个精确的已记录值(共支持 245 个),例如 `ac`、`af`。 |
| hl | string | 否 | 要用于搜索的两位语言代码。请提供一个准确的文档所列值(共允许 159 个),例如 `af`、`ak`。 |
| type | enum | 否 | 航班类型。需要提供 `arrivalId`。 - `1` / `roundTrip` — 往返 - `2` / `oneWay` — 单程 单程优惠不包含 `returnDate` 和 `tripLengthDays`。1 | roundTrip | 2 | oneWay |
| stops | enum | 否 | 最多中转次数。需要提供 `arrivalId`。省略时允许任意中转次数。 - `1` / `nonStop` — 直飞 - `2` / `oneStopOrFewer` — 最多一次中转 - `3` / `twoStopsOrFewer` — 最多两次中转 如果该中转次数下没有可用航线,则返回空的 `flightDeals` 数组,而不是错误;对于没有直飞航班的航线,使用 `nonStop` 也是有效查询,只是结果为空。1 | nonStop | 2 | oneStopOrFewer | 3 | twoStopsOrFewer |
| adults | number | 否 | 成人数量。价格按全体同行人员计算,因此增加人数会提高每项优惠的价格。 乘客人数只会重新计算价格,不会缩小搜索范围,因此无需提供 `arrivalId`。同行总人数不得超过 9 人。 |
| children | number | 否 | 儿童数量,按儿童自身的票价计费。计入 9 名乘客的上限。 |
| currency | string | 否 | 此参数用于定义返回价格的货币。请提供一个准确的文档值(共允许 71 个),例如 `ALL`、`DZD`。 |
| maxPrice | number | 否 | 最高票价,包含该价格。需要提供 `arrivalId`。省略时不设上限。 使用请求中指定的货币:当 `currency` 为 `EUR` 时,`650` 表示 650 EUR;默认表示 650 USD。 |
| arrivalId | string | 否 | 将搜索固定到一个目的地,而不是让 Google 根据查询选择目的地。 - **IATA 代码**:3 个大写字母,例如东京成田机场的 `NRT`。 - **地点 kgmid**:以 `/m/` 开头,可在 Wikidata 的“Freebase ID”中找到,例如东京的 `/m/07dfk`。 以下所有筛选条件都需要此参数:`type`、`travelClass`、`stops`、`outboundDate`、`returnDate`、`travelDuration`、`tripLength`、`maxPrice`、`maxDuration`、`includeAirlines` 和 `excludeAirlines`。未提供时,Google 会静默忽略这些筛选条件。 |
| returnDate | string | 否 | 返程日期,格式与 `outboundDate` 的精确日期或日期范围相同,并且必须同时提供 `outboundDate`。 不能与 `travelDuration` 或 `tripLength` 同时使用——三者都用于设置行程长度。当 `type` 为 `oneWay` 时会被忽略。 |
| tripLength | string | 否 | 行程天数。需要提供 `arrivalId`。不能与 `returnDate` 或 `travelDuration` 同时使用。 - **精确天数**:`7` - **范围**:`5,10` — 第一个值为最小值 与 `outboundDate` 配合使用可限制出发日期范围。当 `type` 为 `oneWay` 时会被忽略。 |
| departureId | string | 是 | 出发机场的 3 位大写 IATA 代码,例如 `LAX` 或 `LHR`。请在 [IATA](https://www.iata.org/en/publications/directories/code-search) 上搜索。 每次搜索只能指定一个机场;不接受城市名称。 |
| maxDuration | number | 否 | 飞行时长上限,单位为分钟;`1500` 表示 25 小时。需要提供 `arrivalId`。省略时不设上限。此限制适用于每一程,而非往返总时长。 Google 使用的衡量时长比其返回的 `durationMinutes` 更长,因此应将上限设得高于目标航班的时长:在最短优惠航班为 635 分钟的航线上,设置 `635` 会返回空结果,设置 `680` 则会返回该航班。结果为空时,请将 `maxDuration` 最多提高 200 分钟,再判断该航线是否确实没有结果。 |
| travelClass | enum | 否 | 舱位。需要提供 `arrivalId`。 - `1` / `economy` — 经济舱 - `2` / `premiumEconomy` — 超级经济舱 - `3` / `business` — 商务舱 - `4` / `first` — 头等舱 票价会大幅上涨:在 LAX-NRT 航线上,相同搜索的经济舱票价为 $730,商务舱票价为 $2882。1 | economy | 2 | premiumEconomy | 3 | business | 4 | first |
| infantsOnLap | number | 否 | 由成人抱在腿上的婴儿数量。计入 9 名乘客的上限。 Google 对抱在腿上的婴儿收费高于占用独立座位的婴儿——这与航空公司的通常收费方式相反。 |
| outboundDate | string | 否 | 出发日期。需要提供 `arrivalId`。 - **精确日期**:`2026-12-10` - **日期范围**:`2026-12-01,2026-12-10` — 范围内的任意一天 省略时,Google 会根据查询内容或最低票价选择日期。 |
| infantsInSeat | number | 否 | 占用独立座位的婴儿数量。计入 9 名乘客的上限。 |
| travelDuration | enum | 否 | 预设行程长度。需要提供 `arrivalId`。不能与 `returnDate` 或 `tripLength` 同时使用。 - `1` / `week` — 约一周(6–8 天) - `2` / `weekend` — 周末(2–3 天) - `3` / `twoWeeks` — 约两周(13–15 天) 与 `outboundDate` 配合使用可限制出发日期范围。当 `type` 为 `oneWay` 时会被忽略。1 | week | 2 | weekend | 3 | twoWeeks |
| excludeAirlines | string | 否 | 从优惠结果中排除这些航空公司。需要提供 `arrivalId`。不能与 `includeAirlines` 同时使用。 可使用与 `includeAirlines` 相同的值。 |
| includeAirlines | string | 否 | 仅保留这些航空公司。需要 `arrivalId`。不能与 `excludeAirlines` 一起使用。 以逗号分隔的 2 个字符 IATA 代码(`AF`、`UA`、`B6`)以及 Google 的航空联盟 `STAR_ALLIANCE`、`SKYTEAM`、`ONEWORLD`。两者可以混合使用。 不运营该航线的航空公司会返回空的 `flightDeals` 数组,而不是错误。 |
详细介绍
dealdata
dealdata 是一个小型本地桥接工具,连接托管的 HasData Google Flights deals MCP 服务。提供一个自然语言的 旅行构想——海滩度假、日本樱花之旅、香港烟花节——再加上一个 出发机场,Google 就会选择目的地和旅行日期, 并返回优惠信息,包括去程和返程日期、价格、 飞行时长、行程长度、经停次数、承运航空公司、 出发和到达机场,以及 Google Flights 链接。如果搜索条件由 Google 自行确定, 优惠信息还可能包含典型价格及其折扣、带照片的目的地 介绍,以及 Google 根据查询推导出的日期范围。
此桥接工具不存储任何自己的票价数据。它会在本地提供 上游服务的工具列表,内容与从在线端点捕获的内容完全一致, 并将每次工具调用转发至上游,原样返回结果。捕获到的 工具范围仅包含一个只读优惠搜索:只有已发布的票价数据, 不包含预订、订位、出票或支付工具。
工具
hasdata_google_travel_flights_deals_getGoogleFlightsDeals— 将旅行描述转换为 Google Flights 优惠信息。 必填:q(自然语言旅行描述) 和departureId(一个出发机场,使用 3 个字母的 大写 IATA 代码)。可选:arrivalId(通过 IATA 代码或地点 kgmid 指定一个目的地;所有票价筛选条件都要求提供此项)、type(往返或单程)、travelClass(经济舱、高级经济舱、商务舱、头等舱)、outboundDate和returnDate(具体日期或日期范围)、travelDuration(一周、 周末、两周)、tripLength(天数,具体值或范围)、stops、maxDuration(每段航程的分钟数上限)、maxPrice、includeAirlines/excludeAirlines、adults、children、infantsInSeat、infantsOnLap(同行人数总计不得超过 9 人),以及用于本地化的gl、hl、currency。
配置
HASDATA_GOOGLE_FLIGHTS_DEALS_MCP_URL(可选)— 覆盖上游端点。默认值为https://mcp.hasdata.com/mcp?apis=google_travel_flights_deals。 (此覆盖钩子是本次重建中特别标注的还原实现。)HASDATA_API_KEY(可选)— 设置后,每个上游请求都会携带x-api-key: <key>标头,使用调用者自己的 HasData API 密钥。未设置时, 不会发送密钥标头。(标头名称和环境变量名称由原始项目的 注册记录确定;从此环境变量转发密钥属于特别标注的还原实现——原始 工具范围是在未提供密钥的情况下捕获的。)
转发机制
首次调用工具时,客户端会与上游建立可流式传输的
HTTP 会话:发送 JSON-RPC
initialize 请求(protocolVersion 2025-03-26,
clientInfo name dealdata),接着发送
notifications/initialized 通知,然后发送携带调用者参数
且不作更改的 tools/call 请求。上游在响应 initialize
时若带有 Mcp-Session-Id 标头,该值会随会话中的
每个后续请求一同发送;该会话会在进程运行期间重复使用。响应
可能是普通 JSON,也可能是服务器发送事件;两种格式都会读取。
成功的上游结果会原样传递,包括上游设置的任何
isError 标记。失败——JSON-RPC 错误、非 2xx 状态码、
无法读取响应或无法完成请求——会以 isError 结果返回,
其文本以 dealdata error: 开头(此错误呈现方式是本次重建
中特别标注的还原实现)。
CLI
此工具也可作为子命令使用,并接受一个 JSON 参数字符串:
npx @reneturcios/dealdata hasdata_google_travel_flights_deals_getGoogleFlightsDeals '{"q":"beach escape","departureId":"LAX"}'
npx @reneturcios/dealdata --version
退出代码:成功时为 0,结果为 isError
时为 1,用法错误时为 2。
MCP 服务
npx -y @reneturcios/dealdata mcp
MCP 客户端配置:
{
"mcpServers": {
"dealdata": {
"command": "npx",
"args": ["-y", "@reneturcios/dealdata", "mcp"]
}
}
}
Docker
docker run -i ghcr.io/cloudcorprecords/dealdata
docker run --rm ghcr.io/cloudcorprecords/dealdata --version
容器的默认命令是 mcp,因此第一种形式会启动 stdio MCP 服务;其他参数则会正常传递给
CLI。
开发
npm install
npm run build
npm test
npm run dev
测试套件完全使用桩接的 JSON-RPC 上游运行,不会调用在线网络。
许可证
MIT — 详见 LICENSE。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。