mcpField
C
compare-flights

compare-flights

github.com/borski生产力780112 次安装2 天前更新
代码仓库

关于 compare-flights

供 Agent 比较机票现金票价、里程票、积分门户和转点方案的编排技能,并将结果汇总为按成本排序的表格,附带故障处理与预订建议。

主要功能

  1. 01并行搜索现金票与里程票
  2. 02比较积分门户报价
  3. 03计算转点伙伴成本
  4. 04生成统一排序对比表
  5. 05报告数据源故障

适用场景

  1. 01比较现金票价与里程票
  2. 02评估积分门户兑换报价
  3. 03查找里程票的转点路径

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/borski/travel-hacking-toolkit --skill compare-flights

安装后在 Claude Code 中输入/compare-flights确认已加载。

详细介绍

比较航班

搜索所有可用来源,查找某条航线并提供统一的比较结果。将现金票价、奖励机票可用情况、门户网站积分支付方式和转点合作伙伴优化整合到一个表格中。

这是一项编排技能。 它会告诉 Agent 要运行哪些工具,以及如何整合结果。没有独立脚本。

配套参考技能。 加载以下技能以了解更多背景信息:

  • flight-search-strategy — 完整的来源优先级、市场选择和来源准确性层级
  • points-valuations — CPP 规则、最低值/最高值、附加费计划和转点奖励
  • partner-awards — 联盟及双边合作伙伴的可达范围
  • lessons-learned — Seats.aero 工作流、Southwest 详情和 Companion Pass 计算
  • fallback-and-resilience — 来源失效时的处理方式
  • transfer-bonuses — 当前有效的转点奖励(实时数据);计算比较表的选项 4–7 时,会影响兑换比例
  • stopovers — 行程有长时间转机或包含多个城市时,检查允许中途停留的计划是否比单独购买单程票的定价更低
  • round-the-world — 对于包含 3 个或更多停靠点、跨多个地区的行程,环球旅行产品的奖励机票定价可能低于各段价格之和
  • award-holds — 许多主要的西方计划(UA、Aeroplan、AS、DL、BA、ANA、Qatar、Korean)已不再提供保留机位服务。部分计划仍提供:AA(在线保留 24 小时)、Lufthansa M&M(5 天)、Flying Blue(3 天,电话办理需支付 $25)、Cathay(2 天,需支付 $39)、Turkish(2 天)、Virgin Atlantic(1–2 天,电话办理免费)、Singapore(由客服决定)。这会影响建议的方式是“先转点再出票”还是“立即出票”
  • status-match — 比较包含升舱或精英会员专享权益(贵宾室使用权、免费行李、优先服务)的选项时使用;会员等级会改变航班的实际成本

适用场景

  • “帮我找 8 月从 SFO 到 CDG 的最佳出行方式。”
  • “这趟航班应该付现金还是用积分?”
  • “比较从 SFO 到 NRT 的商务舱所有选项。”
  • 用户希望全面了解情况的任何航班搜索

来源

尽可能并行运行以下来源。绝不要静默失败。 如果某个来源出错,请在输出中说明,让用户知道缺少了哪些信息。

现金票价(并行运行)
来源技能速度备注
Duffelduffel~3s主要来源。提供带舱位代码的真实 GDS 票价。不包括 Southwest。
Ignavignav~2s快速 REST API。适合比价。提供预订链接。
Google Flightsgoogle-flights~10s通过浏览器自动化运行。涵盖所有航空公司,包括 Southwest 现金票价。适合交叉核对。
Skiplaggedweb 搜索~5s隐藏城市购票。经常能找到便宜很多的票价。搜索 skiplagged.com/flights/{origin}/{dest}/{date}。
Kiwi.comweb 搜索~5s灵活的航线、自行转机组合和多城市行程。搜索 kiwi.com。
Southwestsouthwest~20s仅限 Patchright、Docker。提供全部 4 个票价舱位的积分和现金价格。仅在 SW 执飞该航线时需要。

Skiplagged 和 Kiwi: 使用网页搜索(tavily 或 exa)查找票价。它们没有 MCP 技能,但其 URL 可预测。请始终注明 Skiplagged 票价的限制(不能托运行李,且必须将“错过”的转机城市作为目的地)。

Southwest: 如果 SW 执飞该航线,请运行 southwest 技能。在比较表中将 SW Rapid Rewards 积分作为单独的货币列出。lessons-learned 技能包含关于 SW 详情(票价舱位要求、Companion Pass 计算和 GDS 缺口)的完整信息。

SerpAPI 为可选项。 仅在用户询问 Google Hotels 或目的地发现时使用。

奖励机票可用情况
来源技能速度备注
Seats.aeroseats-aero~5s缓存了 25 个以上计划的奖励机票可用情况。主要奖励机票来源。
门户积分支付(并行运行,需要 Docker)
来源技能耗时备注
Chase URchase-travel~45s动态积分加成定价(部分预订可达约 1.5–2.0 cpp,但并非保证下限)。
Amex MRamex-travel~45s检测 Platinum 卡的 IAP 折扣。

门户搜索速度较慢(需要浏览器登录)。请彼此并行运行,但不要等待它们完成。先启动现金和奖励搜索,展示这些结果,然后在门户搜索完成后追加其结果。

只有在用户持有相关卡片或要求查询门户价格时,才运行门户搜索。 如果用户没有 Sapphire 卡,请勿运行 Chase 搜索。

工作流

步骤 1:收集所有价格

并行运行搜索。记录哪些来源成功,哪些失败。

PARALLEL GROUP 1 (fast, ~3-5s):
  - Duffel: cash prices with fare classes
  - Ignav: cash prices with booking links
  - Seats.aero: award availability by program
  - Skiplagged: hidden city fares (web search)
  - Kiwi.com: creative routings (web search)

PARALLEL GROUP 2 (browser-automated, ~10-45s, Docker):
  - Google Flights: all airlines including Southwest cash
  - Southwest: points + cash for all fare classes (if SW flies the route)
  - Chase Travel: UR portal pricing + Points Boost
  - Amex Travel: MR portal pricing + IAP discounts

对于每个来源,记录:

  • 来源名称
  • 状态:"ok" | "error: {reason}" | "skipped: {reason}"
  • 结果数量
  • 数据
步骤 2:应用转点合作伙伴优化

对于每条 seats.aero 奖励结果,使用 data/transfer-partners.json 计算每种可转点货币的实际成本:

For each award (e.g., United business at 88,000 miles):
  1. Look up which currencies transfer to United: Chase UR (1:1), Bilt (1:1)
  2. Calculate effective cost: 88,000 / 1.0 = 88,000 UR or 88,000 Bilt
  3. Calculate opportunity cost using data/points-valuations.json:
     88,000 UR × 1.7cpp floor = $1,496 equivalent

包括所有可行的转点路径,而不只是成本最低的路径。用户在某种货币中的积分可能比其他货币更多。

步骤 3:计算门户 CPP

Chase 门户在 CSR/CSP 上采用动态积分加成定价。历史上的固定 1.5 倍乘数已取消。 现在每笔预订都会给出具体的积分价格;CSR 的实际 cpp 通常在 1.5–2.0 之间,但并非每笔预订都保证达到这一水平。务必获取实际门户报价,而不是根据乘数计算。

积分加成报价示例(请核实实际价格):

Portal quote: 269,841 points for a $5,397 flight
True CPP: $5,397 / 269,841 = 2.0 cpp (excellent)

对于加成较低或没有加成的预订,同一航班的报价可能为 1.5 cpp,甚至更低。比较时务必使用实际报价。

Amex 门户的航班兑换比例约为 1 cpp(1 MR = 1 美分)。IAP 票价是折扣后的现金价格:

Standard: $5,044 = 504,400 MR points
IAP: $4,381 = 438,100 MR points (saves 66,300 MR)
步骤 4:展示统一表格

始终使用 Markdown 表格。 将所有选项放入一张表中,并按实际成本排序。

示例:SFO → CDG 商务舱,8 月 11 日
#选项来源价格积分货币CPP评级
1现金(最低价)Duffel$4,200————
2Flying Blue,经 Chase UR 转点seats.aero$120 税费55,000Chase UR7.4极佳
3Aeroplan,经 Chase UR 转点seats.aero$200 税费70,000Chase UR5.7极佳
4Chase 门户(加成优惠)chase-travel$5,400 门户价格180,000Chase UR3.0极佳(有此优惠时)
5Chase 门户(无加成)chase-travel$5,400 门户价格360,000Chase UR不固定(通常约 1.5)查询实时报价
6Amex 门户(IAP)amex-travel$5,044 门户价格438,100Amex MR1.15较差
7Amex 门户(标准)amex-travel$5,044 门户价格504,400Amex MR1.0较差

注:门户行的 CPP 以门户自身报价($5,400 / $5,044)为基准,因为这是门户实际收取的现金价格。奖励行则以 Duffel 的市场价格($4,200)为基准,因为这是用户兑换里程所放弃的现金等价。由于门户会加价,这两个基准不同,因此门户 CPP 和奖励 CPP 不能直接比较。更好的比较方式是比较每种方案的现金自付总额(税费 + 现金部分)。

示例:SFO → LAX 经济舱,8 月 11 日
#选项来源价格积分货币CPP评级
1SW Wanna Get Awaysouthwest$795,200SW RR1.52不错
2现金(最低价)Duffel$89————
3SW WGA+southwest$1198,400SW RR1.42一般
4通过 Chase UR 兑换 Unitedseats.aero$5.60 税费5,000Chase UR1.67不错
5Chase Portalchase-travel—8,900Chase UR不定(通常约 1.5)获取实时报价
6SW Anytimesouthwest$21916,800SW RR1.30一般

注意:SW 积分价值采用直接兑换的 CPP。如果用户拥有 Companion Pass,实际 CPP 会翻倍(支付一张机票的积分即可兑换两张机票)。

已查询的来源:

  • ✅ Duffel:45 个结果
  • ✅ Ignav:38 个结果
  • ✅ Skiplagged:3 个隐藏城市选项
  • ✅ Kiwi.com:12 个创意路线
  • ✅ Seats.aero:12 个奖励兑换选项
  • ✅ Southwest:4 种票价等级(WGA $79/5.2K、WGA+ $119/8.4K、Anytime $219/16.8K、BizSelect $289/22.1K)
  • ✅ Chase Travel:300 个结果(其中 3 个可享 Points Boost)
  • ✅ Amex Travel:292 个结果(可使用 IAP)
  • ✅ Google Flights:52 个结果
步骤 5:提出建议

表格后,始终提供:

  1. 总体最佳价值: 哪个选项的 CPP 最高
  2. 最方便: 哪个选项最容易预订(在线预订还是电话预订、即时转点还是需要等待)
  3. 现金还是积分: 使用 trip-calculator 框架:
    • 如果现金价格 < 最佳奖励兑换的机会成本 → “支付现金”
    • 如果现金价格 > 机会成本 → “使用积分”
  4. 转点警告: “确认有位后再转点。转点通常即时到账,但可能需要 48 小时。”
  5. 余额检查: 如果已知用户的积分余额(来自 AwardWallet 或此前的上下文),请指出余额是否不足

错误处理

绝不能静默失败。 每个来源都必须报告其状态。

如果某个来源失败:

- ❌ Duffel: API error (rate limit exceeded). Cash prices from Ignav only.
- ❌ Chase Travel: Login failed (2FA timeout). No portal pricing available.

如果所有现金来源都失败,请明确说明。不要在未指出缺少现金价格对比的情况下,只提供奖励兑换结果。

如果 seats.aero 未返回任何可用性,请说明“未找到奖励兑换可用性”,而不是静默省略奖励兑换部分。

使用的数据文件

文件用途
data/transfer-partners.json信用卡 → 忠诚度计划的转点比例
data/points-valuations.json用于计算机会成本的 CPP 下限/上限
data/partner-awards.json跨联盟预订选项(VA→ANA、EY→AA 等)

限制

  • 门户搜索需要 Docker 和登录凭据。如果未配置,请跳过。
  • Seats.aero 显示的是缓存的可用性(可能最多早 24 小时)。通过 seats-aero-web 进行的实时搜索仅限本地。
  • 转点比例来自 transfer-partners.json。进行大额转点前,请向发卡机构核实。
  • Chase 门户价格采用动态 Points Boost(特定预订通常为 1.5–2.0 cpp,并非保证下限)。过去固定的 1.5 倍乘数已取消。请获取门户的实际报价,不要根据乘数计算。
  • Southwest 不在 Duffel、Ignav 或 seats.aero 中。如果需要 Southwest 价格,请使用 Google Flights 技能。

评论

支持 Markdown