Flyan 是一个非官方的开源 Python SDK 与 MCP 服务器,用于获取 Ryanair(瑞安航空)的航班数据。项目说明其为“Unofficial API wrapper”,与 Ryanair 无隶属关系,需自行承担使用风险并遵守 Ryanair 服务条款。
一、用途 Flyan 面向需要程序化查询 Ryanair 航班信息的开发者与 AI 智能体,提供两类使用入口:作为 Python 库集成到代码中,或作为 MCP 服务器接入 Claude Desktop、Claude Code、Cursor 等支持 MCP 的客户端,用自然语言搜索航班。项目强调无需 API 密钥、无需账号、无需配置限流。
二、主要能力
- 客户端与货币:创建 RyanAir 客户端实例,可通过 currency 参数指定计价货币(默认 "EUR"),需为支持的货币代码。
- 单程航班搜索:search 方法接收 FlightSearchParams 参数,返回 list[Flight]。FlightSearchParams 包含 from_airport(出发机场 IATA 代码,如 "DUB")、from_date(最早出发日期)、to_date(最晚出发日期)、destination_country(可选,目的地国家代码)、max_price(可选,最高价格)、to_airport(可选,到达机场 IATA 代码)、departure_time_from 与 departure_time_to(可选,HH:MM 格式的出发时间范围)。Flight 对象包含出发/到达机场信息、出发/到达日期时间、价格、货币、flight_key、flight_number、previous_price(可选)等字段。
- 往返搜索参数:提供 ReturnFlightSearchParams 类(资料中仅列出类名,未展开具体字段);另有代表往返预订的类,包含 outbound、inbound、summary_price、summary_currency、previous_price 等。
- Explore 探索模式:回答“从这里实际能飞往哪里”,读取一次 Ryanair 实时网络元数据,暴露任意机场的可达目的地,可分组、筛选或与日期窗口内的最低价结合。相关方法同时存在于 RyanAir 与 AsyncRyanAir。可列出全部目的地、按国家/地区/城市筛选、分组目的地、查询仅季节性目的地、以及 explore_with_fares() 返回 DestinationFare(目的地机场 NetworkAirport 加可选最低价 Flight,若窗口内无定价库存则为 None,消耗一次网络调用加一次价格调用)。国家代码为小写 ISO2,地区与城市代码来自实时网络(大写,如 SCOTLAND、ANDALUSIA、COSTA_DE_SOL、LONDON、MILAN)。无 region_code 的机场归入空字符串键。季节性目的地因上游 seasonalRoutes 数据稀疏,在夏/冬班期切换之外常返回空列表。
- NetworkAirport 字段:country_code、city_code、region_code(可选)、currency_code、time_zone、base(是否为 Ryanair 基地)、latitude/longitude、routes、seasonal_routes、categories、aliases,并提供 airport_routes()、country_routes()、seasonal_airport_routes()、typed_routes()、typed_seasonal_routes() 等辅助方法。
- 性能建议:连续调用多个 explore 方法时,可用 CachingTransport 包裹传输层,使网络元数据只获取一次并复用。
- MCP 服务器:通过安装带 MCP extra 的 Flyan,会在 PATH 上生成 flyan-mcp 控制台脚本。服务器暴露四个工具:find_flights(单程搜索,支持国家、IATA 或价格筛选)、find_anywhere_under(“X 预算内能去哪”)、explore_destinations(“从 X 能到哪些国家”)、cheapest_per_day(“某月 X 到 Y 最便宜的一天”)。服务器默认以 EUR 返回价格,可通过 FLYAN_CURRENCY 环境变量或 MCP 配置指定其他 ISO 4217 代码,未知或不支持的代码会静默回退到 EUR。服务器复用单个 RyanAir 客户端。
三、使用方式 Python SDK:创建 RyanAir 客户端实例后调用搜索方法,传入 FlightSearchParams 等参数即可。 MCP 接入:先安装带 MCP extra 的 Flyan(项目称“两条命令即可完成”,但资料未给出具体命令文本),然后在 Claude Code(一行命令)、Claude Desktop(编辑 macOS 的 ~/Library/Application Support/Claude/claude_desktop_config.json 或 Windows 的 %APPDATA%\Claude\claude_desktop_config.json 后重启,配置中服务器名用 flyan、命令用 flyan-mcp)或 Cursor(Settings → MCP → Add new server,名称 flyan,命令 flyan-mcp)中添加。之后可向智能体提问,如“Find me a one-way from Dublin to anywhere in Spain in the first week of August under €150.”,智能体应调用 find_flights 并设置 destination_country="es",再汇总最便宜选项。
四、适用场景 需要以代码方式查询 Ryanair 单程票价、按国家或预算探索可达目的地、寻找两地之间当月最便宜出行日期的开发者,以及希望在 Claude、Cursor 等 AI 客户端中以自然语言查询 Ryanair 航班的用户。支持的机场为 Ryanair 网络内所有机场,机场代码须为有效的三字母 IATA 代码,完整列表可通过 client.get_network() 获取并按 network.airports 遍历;资料列出的示例机场包括 STN(London Stansted)、BCN(Barcelona)、FCO(Rome Fiumicino)、AMS(Amsterdam)。支持的货币示例包括 USD、GBP、CHF,完整列表见 currencies.json。
五、限制与注意事项 这是非官方 API 封装,与 Ryanair 无隶属关系,使用需自担风险并遵守 Ryanair 服务条款。SDK 内置带指数退避的自动重试逻辑以应对限流和临时 API 问题,最多重试 5 次后放弃。季节性目的地查询在班期切换之外常为空。explore_with_fares() 对无定价库存的航线返回 None。MCP 服务器遇到未知或不支持的货币代码会静默回退 EUR。资料未提供具体安装命令、价格、收费方案或性能数据,这些暂未提供。