Flyan について
Flyanは、Ryanairの非公式オープンソース航空券データラッパーで、任意でMCPサーバーとしても利用できます。APIキーやアカウントなしで、自然言語検索、就航先の探索、運賃の絞り込みを行いたい旅行者やエージェント向けです。
主な機能
- 01Ryanairの片道便検索
- 02目的地と価格による絞り込み
- 03就航先の探索
- 04運賃上限内の行き先検索
- 05日別の最安運賃比較
活用シーン
- 01日付と空港を指定した便の検索
- 02出発空港から低価格の行き先探し
- 03就航先の国や都市の確認
- 04路線の最安日を特定
MCP 対応
任意のMCPサーバーは、フライト検索、価格上限内の行き先検索、路線探索、最安日の検索に使う4種類のツールを提供します。キーやアカウントを必要とせず、Ryanairの匿名APIを利用します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
4掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| to_date | string | はい | |
| from_date | string | はい | |
| max_price | any | いいえ | |
| to_airport | any | いいえ | |
| from_airport | string | はい | |
| destination_country | any | いいえ |
詳細
Flyan SDK
Ryanair のフライトデータを取得する、オープンソースの非公式 API ラッパーです。
ヒント
新機能:AI エージェント向け MCP サーバー。 Flyan を Claude Desktop、 Claude Code、または Cursor に接続して、自然言語で Ryanair のフライトを検索できます。 MCP クイックスタートに移動してください。
目次
- インストール
- クイックスタート
- API リファレンス
- データモデル
- 使用例
- 探索モード
- Claude、Cursor、その他の MCP クライアントでの使用
- 対応空港
- 対応通貨
- レート制限
- コントリビューション
- 免責事項
インストール
pip install Flyan
または uv を使用します。
uv add Flyan
クイックスタート
from datetime import datetime
from flyan import RyanAir, FlightSearchParams
# Initialize the client
client = RyanAir(currency="EUR")
# Set up search parameters
search_params = FlightSearchParams(
from_airport="DUB", # Dublin
to_airport="BCN", # Barcelona
from_date=datetime(2025, 8, 15),
to_date=datetime(2025, 8, 20),
max_price=200
)
# Search for one-way flights
flights = client.get_oneways(search_params)
# Display results
for flight in flights:
print(f"Flight {flight.flight_number}: {flight.departure_airport.name} → {flight.arrival_airport.name}")
print(f"Departure: {flight.departure_date}")
print(f"Price: {flight.price} {flight.currency}")
print("---")
API リファレンス
RyanAir クラス
コンストラクター
RyanAir(currency: str = "EUR")
新しい RyanAir クライアントインスタンスを作成します。
パラメーター:
currency(str, optional):料金に使用する通貨です。デフォルトは "EUR" です。対応通貨一覧にある有効な通貨コードを指定する必要があります。
例:
# Default EUR currency
client = RyanAir()
# Specific currency
client = RyanAir(currency="USD")
メソッド
get_oneways(params: FlightSearchParams) -> list[Flight]
片道フライトを検索します。
パラメーター:
params(FlightSearchParams):検索パラメーター
戻り値:
list[Flight]:利用可能なフライトのリスト
FlightSearchParams クラス
フライト検索用のパラメーターです。
FlightSearchParams(
from_airport: str,
from_date: datetime,
to_date: datetime,
destination_country: Optional[str] = None,
max_price: Optional[int] = None,
to_airport: Optional[str] = None,
departure_time_from: Optional[str] = "00:00",
departure_time_to: Optional[str] = "23:59"
)
パラメーター:
from_airport(str):出発空港の IATA コード(例:"DUB")from_date(datetime):出発日の最早日to_date(datetime):出発日の最遅日destination_country(str, optional):目的地の国コードmax_price(int, optional):最高価格のフィルターto_airport(str, optional):到着空港の IATA コードdeparture_time_from(str, optional):最も早い出発時刻(HH:MM 形式)departure_time_to(str, optional):最も遅い出発時刻(HH:MM 形式)
例:
from datetime import datetime
params = FlightSearchParams(
from_airport="DUB",
from_date=datetime(2025, 8, 15),
to_date=datetime(2025, 8, 20),
to_airport="BCN",
max_price=150,
departure_time_from="08:00",
departure_time_to="18:00"
)
ReturnFlightSearchParams クラス
往復フライト検索用の拡張パラメーターです。
ReturnFlightSearchParams(
# All FlightSearchParams fields plus:
return_date_from: datetime,
return_date_to: datetime,
inbound_departure_time_from: Optional[str] = "00:00",
inbound_departure_time_to: Optional[str] = "23:59"
)
データモデル
Flight
単一のフライトを表します。
属性:
departure_airport(Airport):出発空港の情報arrival_airport(Airport):到着空港の情報departure_date(datetime):出発日時arrival_date(datetime):到着日時price(float):フライト料金currency(str):料金の通貨flight_key(str):一意のフライト識別子flight_number(str):フライト番号previous_price(Optional[str | float]):利用可能な場合、以前の料金
Airport
空港情報を表します。
属性:
country_name(str):国名iata_code(str):IATA 空港コードname(str):空港名seo_name(str):SEO に適した名前city_name(str):市名city_code(str):市コードcity_country_code(str):国コード
ReturnFlight
往復航空券の予約を表します。
属性:
outbound(Flight):往路のフライトinbound(Flight):復路のフライトsummary_price(float):両方のフライトの合計金額summary_currency(str):合計金額の通貨previous_price(str | float):利用可能な場合の以前の合計金額
NetworkAirport
Ryanairの運航中のネットワークにある空港を表します。探索メソッドから返されます。
属性:
iata_code(str):IATA空港コードname(str):空港名seo_name(str):SEOに適した名前country_code(str):小文字のISO2国コード(例:"ie"、"es")city_code(str):都市コード(例:"LONDON"、"DUBLIN")region_code(Optional[str]):地域コード(例:"SCOTLAND"、"ANDALUSIA")currency_code(str):現地通貨コードtime_zone(str):IANAタイムゾーン(例:"Europe/Dublin")base(bool):Ryanairの拠点空港の場合はTruelatitude(float)、longitude(float):座標routes(list[str]):生の路線文字列(通年運航)seasonal_routes(list[str]):生の路線文字列(季節限定)categories(list[str]):Ryanairが割り当てたマーケティングカテゴリaliases(list[str]):別名
ヘルパー:airport_routes()、country_routes()、seasonal_airport_routes()、
typed_routes()、typed_seasonal_routes()。
DestinationFare
explore_with_fares()から返されます。到達可能な目的地と、価格照会で返された場合は、サンプリングされた最安運賃を組み合わせたものです。
属性:
airport(NetworkAirport):目的地の空港fare(Optional[Flight]):期間内でサンプリングされた最安運賃。ネットワーク上に路線はあるものの、価格情報のある便が返されなかった場合(期間内に便がない、売り切れなど)はNone
例
国で検索
# Search flights to any airport in Spain
params = FlightSearchParams(
from_airport="DUB",
destination_country="ES",
from_date=datetime(2025, 9, 1),
to_date=datetime(2025, 9, 7)
)
flights = client.get_oneways(params)
時刻と価格で絞り込む
# Morning flights under €100
params = FlightSearchParams(
from_airport="STN", # London Stansted
to_airport="DUB", # Dublin
from_date=datetime(2025, 8, 1),
to_date=datetime(2025, 8, 5),
max_price=100,
departure_time_from="06:00",
departure_time_to="12:00"
)
flights = client.get_oneways(params)
エラー処理
from flyan import RyanairException
try:
flights = client.get_oneways(params)
if not flights:
print("No flights found for the given criteria")
except RyanairException as e:
print(f"Ryanair API error: {e}")
except Exception as e:
print(f"Unexpected error: {e}")
Exploreモード
Exploreモードでは、「ここから実際にどこへ飛べるのか?」という問いに答えます。Ryanairの運航中のネットワークメタデータを一度読み込み、任意の空港から到達可能な目的地を公開します。必要に応じてグループ化、絞り込み、または期間内の最安運賃との結合も行えます。
以下のすべてのメソッドは、RyanAirとAsyncRyanAirの両方で利用できます。
すべての目的地を一覧表示する
destinations = client.get_destinations("DUB")
for airport in destinations:
print(f"{airport.iata_code} {airport.name} ({airport.country_code})")
国、地域、または都市で絞り込む
# All Scottish airports DUB flies to
in_scotland = client.get_destinations_in_region("DUB", "SCOTLAND")
# All London airports DUB flies to (LGW, LTN, STN)
in_london = client.get_destinations_in_city("DUB", "LONDON")
# All Spanish airports DUB flies to
in_spain = client.get_destinations_in_country("DUB", "es")
国コードは小文字のISO2です。地域コードと都市コードは運航中のネットワークから取得されます(大文字。例:SCOTLAND、ANDALUSIA、COSTA_DE_SOL、LONDON、MILAN)。
目的地をグループ化する
# {country_code: [airports]}
by_country = client.explore_by_country("DUB")
print(f"DUB flies to {len(by_country)} countries")
for country, airports in sorted(by_country.items()):
codes = ", ".join(a.iata_code for a in airports)
print(f" {country}: {codes}")
# {region_code: [airports]}
by_region = client.explore_by_region("DUB")
region_codeがない空港は空文字列のキーにまとめられるため、呼び出し側で表示するか除外するかを決められます。
季節限定の目的地
seasonal = client.get_seasonal_destinations("DUB")
RyanairのseasonalRoutesリストは上流での登録がまばらなため、夏季・冬季スケジュールの切り替え時期以外は、[]が返されることがよくあります。このメソッドを使えば、生の路線文字列を確認する必要はありません。
最安運賃付きの目的地
explore_with_fares()は、ネットワーク上の目的地をoneWayFaresの照会結果と結合するため、各目的地について、サンプリングされた最安のFlightが返されます(期間内にその路線の運賃が返されなかった場合はNone)。ネットワークへの呼び出し1回と運賃への呼び出し1回が必要です。
from datetime import datetime, timedelta
start = datetime.now() + timedelta(days=14)
end = start + timedelta(days=7)
results = client.explore_with_fares("DUB", start, end, max_price=100)
priced = [d for d in results if d.fare is not None]
cheapest_first = sorted(priced, key=lambda d: d.fare.price)
for d in cheapest_first[:10]:
print(f"{d.airport.iata_code} {d.airport.name}: "
f"{d.fare.price} {d.fare.currency}")
非同期での使用
AsyncRyanAirには、すべての探索メソッドに対応するメソッドがあります。
import asyncio
from flyan import AsyncRyanAir
async def main():
async with AsyncRyanAir() as client:
by_country = await client.explore_by_country("DUB")
print(f"{len(by_country)} countries reachable from DUB")
asyncio.run(main())
探索メソッドを複数続けて呼び出す場合は、トランスポートをCachingTransportでラップすると、ネットワークメタデータが一度だけ取得され、再利用されます。
Claude、Cursor、その他のMCPクライアントでの使用
重要
2つのコマンドを実行すれば完了です。
uv tool install "Flyan[mcp]" claude mcp add flyan flyan-mcpこれでエージェントが自然言語でRyanairのフライトを検索できます。APIキーもアカウントも必要ありません。
Flyanには、エージェントが「ダブリン発スペイン行きで、8月に150ユーロ以下の安いフライトを探して」や「DUBからBCNへ飛ぶなら、7月の何曜日が最安?」のような自然言語のプロンプトでRyanairの運賃を検索できる、オプションのModel Context Protocolサーバーが付属しています。
クイックスタート
1. MCP 拡張機能付きで Flyan をインストールします:
uv tool install "Flyan[mcp]"
または、pip を使用します:
pipx install "Flyan[mcp]"
これにより、PATH 上に flyan-mcp コンソールスクリプトがインストールされます。
2. エージェントに追加します:
Claude Code(ワンライナー):
claude mcp add flyan flyan-mcp
Claude Desktop:macOS では ~/Library/Application Support/Claude/claude_desktop_config.json(Windows では %APPDATA%\Claude\claude_desktop_config.json)を開き、次を追加します:
{
"mcpServers": {
"flyan": {
"command": "flyan-mcp"
}
}
}
その後、Claude Desktop を再起動します。
Cursor:Settings → MCP → Add new server を開き、名前に flyan、コマンドに flyan-mcp を指定します。
通貨
サーバーはデフォルトで EUR 建ての価格を返します。別の通貨で取得するには、flyan-mcp の起動前に FLYAN_CURRENCY 環境変数を、サポート対象の ISO 4217 コードのいずれかに設定します:
FLYAN_CURRENCY=GBP flyan-mcp
または、エージェントの MCP 設定を通して渡します:
{
"mcpServers": {
"flyan": {
"command": "flyan-mcp",
"env": { "FLYAN_CURRENCY": "GBP" }
}
}
}
不明なコードやサポート対象外のコードは、通知なしで EUR にフォールバックします。
3. 試してみましょう。 エージェントに次のように尋ねます:
「ダブリンからスペイン国内のどこへでも行ける、8 月第 1 週の片道航空券を €150 未満で探してください。」
エージェントは destination_country="es" を指定して find_flights を呼び出し、最も安い選択肢を要約します。
公開されるツール
サーバーは、エージェントが確実に選択できるよう、厳選された 4 つのツールを公開します:
find_flightsは、国、IATA コード、または価格のフィルターを任意で指定した片道検索に使用しますfind_anywhere_underは、「£X 未満でどこへ行けますか」というプロンプトに使用しますexplore_destinationsは、「X からどの国に行けますか」というプロンプトに使用しますcheapest_per_dayは、「今月、X から Y へ飛ぶのに最も安い日はいつですか」というプロンプトに使用します
API キー、アカウント、レート制限の設定は不要です。Ryanair の API は匿名で利用でき、サーバーは呼び出し間で単一の RyanAir クライアントを再利用します。
サポート対象の空港
SDK は Ryanair のネットワーク内のすべての空港をサポートします。空港コードには、有効な 3 文字の IATA コードを指定する必要があります。最新の一覧は、client.get_network() を通じて Ryanair の集約エンドポイントから取得されます。全空港の一覧を確認するには、network.airports を反復処理してください。
主な空港は次のとおりです:
- DUB - ダブリン
- STN - ロンドン・スタンステッド
- BCN - バルセロナ
- MAD - マドリード
- FCO - ローマ・フィウミチーノ
- BRU - ブリュッセル
- AMS - アムステルダム
サポート対象の通貨
SDK は複数の通貨をサポートします。主な通貨は次のとおりです:
- EUR - ユーロ
- USD - 米ドル
- GBP - 英ポンド
- CHF - スイスフラン
完全な一覧については、currencies.json を参照してください。
レート制限
SDK には、レート制限や一時的な API の問題に対処するため、指数バックオフを使った自動再試行ロジックが含まれています。リクエストが失敗した場合、最大 5 回まで再試行してから処理を中断します。
コントリビューション
これはオープンソースプロジェクトです。コントリビューションを歓迎します!
免責事項
これは非公式の API ラッパーであり、Ryanair とは提携していません。自己責任で使用し、Ryanair の利用規約を遵守してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。