MolTravel について
MolTravelは、旅行者や旅行計画エージェント向けに検索機能と旅行データをまとめるMCPサーバーです。旅行サービスのツールを中継し、空港、ビザ、渡航情報のデータも提供します。
主な機能
- 01フライト検索と料金比較
- 02アクティビティと体験の検索
- 03空港と航空会社の検索
- 04ビザと国情報の確認
- 05渡航安全情報
- 06任意の自然言語ルーティング
活用シーン
- 01予約サイト間でフライト料金を比較
- 02アクティビティを探して日付別の空き状況を確認
- 03空港情報とビザ要件を調べる
- 04渡航先の注意情報を確認
MCP 対応
単一のMCPエンドポイントを通じて、上流の旅行関連MCPサービスのツールとネイティブツールを公開します。クライアントには上流ツールのスキーマが提示され、引数の検証は上流サービスが行います。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://mcp.moltravel.com/mcpclaude mcp add --transport http com-moltravel-travel https://mcp.moltravel.com/mcp{"mcpServers":{"com-moltravel-travel":{"type":"http","url":"https://mcp.moltravel.com/mcp"}}}Cursor で開く{"servers":{"com-moltravel-travel":{"type":"http","url":"https://mcp.moltravel.com/mcp"}}}VS Code で開く{"mcpServers":{"com-moltravel-travel":{"type":"http","url":"https://mcp.moltravel.com/mcp"}}}{"mcpServers":{"com-moltravel-travel":{"serverUrl":"https://mcp.moltravel.com/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
56| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| query | string | はい | |
| fields | any | いいえ | |
| search_by | string | いいえ |
詳細
MoltTravel
1つのMCPサーバーで、あらゆる旅行ツールを利用できます。
フライトの検索、価格の比較、ビザの確認、空港の検索、
渡航情報の確認を、単一のエンドポイントから行えます。
Kiwi.com Navifare Peek.com LastMinute
(flights) (prices) (experiences) (flights)
\ | | /
\ | | /
+--------+-----------+--------+
| |
| MoltTravel MCP Server |
| |
| Airports Airlines Visas |
| Countries FCDO Gemini AI |
| |
+-------------|---------------+
|
MCP over HTTP
|
Any MCP Client
(Claude, Cursor, your app)
なぜ?
旅行データは多数のAPIに分散しており、それぞれ認証方法や形式、固有の仕様が異なります。MoltTravelは、これらを単一のModel Context Protocolエンドポイントに集約します。
- 21種類以上のツール:4つの上流MCPプロバイダーと6つの組み込みデータセットから提供
- 静的データは設定不要:空港、航空会社、ビザのデータはAPIキーなしで遅延読み込みされます
- スキーマをそのまま透過するプロキシ:クライアントには実際の上流JSON Schemaが表示され、引数は上流サーバーが検証します
- Claude Desktop、Claude Code、Cursor、その他のMCPクライアントから1行で接続できます
クイックスタート
git clone https://github.com/navifare/moltravel-mcp.git
cd moltravel-mcp
python -m venv venv && source venv/bin/activate
pip install -r requirements.txt
python molttravel_server.py
サーバーは http://localhost:8000/mcp で起動します。以上です。
クライアントを接続する
Claude Desktop
claude_desktop_config.jsonに追加します:
{
"mcpServers": {
"molttravel": {
"url": "http://localhost:8000/mcp"
}
}
}
Claude Code
.claude/settings.jsonに追加します:
{
"mcpServers": {
"molttravel": {
"url": "http://localhost:8000/mcp"
}
}
}
Python(プログラムから利用)
from mcp import ClientSession
from mcp.client.streamable_http import streamablehttp_client
async with streamablehttp_client("http://localhost:8000/mcp") as (r, w, _):
async with ClientSession(r, w) as session:
await session.initialize()
tools = await session.list_tools()
result = await session.call_tool("airports_lookup", {"code": "ZRH"})
ツール
フライトと料金
| ツール | プロバイダー | 機能 |
|---|---|---|
kiwi_search-flight | Kiwi.com | 路線、日付、乗客数、客室クラスを指定してフライトを検索します |
navifare_format_flight_pricecheck_request | Navifare | 自然言語のフライト情報を構造化データに変換します |
navifare_flight_pricecheck | Navifare | 複数の予約サイトでフライト料金を比較します |
体験とアクティビティ
| ツール | プロバイダー | 機能 |
|---|---|---|
peek_search_experiences | Peek.com | 世界中の30万件以上の認証済みアクティビティを検索します |
peek_experience_details | Peek.com | 体験の詳細、レビュー、写真を表示します |
peek_experience_availability | Peek.com | 指定した日付の空き状況と料金を確認します |
peek_search_regions | Peek.com | 名前から地域IDを検索します |
peek_list_tags | Peek.com | アクティビティのカテゴリとタグを表示します |
peek_render_activity_tiles | Peek.com | 埋め込み可能なアクティビティウィジェットを表示します |
参照データ (組み込み済み、APIキー不要)
| ツール | データセット | 機能 |
|---|---|---|
airports_lookup | OurAirports | IATAまたはICAOコードで検索します |
airports_search | OurAirports | 名前で検索し、国または種別で絞り込みます |
airports_near | OurAirports | 任意の座標から指定半径内の空港を検索します |
airlines_lookup | OpenFlights | IATAまたはICAOコードで検索します |
airlines_search | OpenFlights | 名前で検索し、国または運航状況で絞り込みます |
visa_check | Passport Index | 2か国間のビザ要件を確認します |
visa_summary | Passport Index | パスポートに応じたビザ免除、到着時ビザ、電子ビザの詳細を表示します |
restcountries_country_info | REST Countries | 首都、通貨、言語、タイムゾーン、人口を表示します |
fcdo_travel_advice | UK FCDO | 安全に関する注意、入国要件、健康に関する警告を表示します |
fcdo_list_countries | UK FCDO | 渡航情報があるすべての国を一覧表示します |
data_status | — | 読み込み済みのデータセットとレコード数を確認します |
自然言語 (任意)
| ツール | 機能 |
|---|---|
travel_agent | 旅行に関するあらゆる質問をすると、Geminiが適切なツールを選び、回答をまとめて返します |
GEMINI_API_KEYが必要です。例:「来週、チューリッヒからローマへの最安フライトを教えて。ビザは必要ですか?」
## 仕組み
1. ツールの検出
起動時に、MoltTravel は各アップストリーム MCP サーバーに接続し、tools/list を呼び出して、検出したすべてのツールを {provider}_{tool_name} というプレフィックス付きで登録します。
kiwi → kiwi_search-flight, kiwi_feedback-to-devs
navifare → navifare_flight_pricecheck, navifare_format_flight_pricecheck_request
peek → peek_search_experiences, peek_experience_details, ...
lastminute → (discovered at runtime)
ネイティブツール(空港、航空会社、ビザ、国、FCDO)は直接登録されます。
2. スキーマを透過するプロキシ
クライアントには、各ツールの元のアップストリーム JSON Schema が表示されます。列挙型、ネストされたオブジェクト、$ref など、すべてそのままです。内部では、MoltTravel は寛容な Pydantic モデル(すべてのフィールドに Any を使用)を使うため、引数は情報を失うことなくそのまま渡されます。引数の検証はアップストリーム MCP サーバーが行います。
# Client sees the real schema
parameters = input_schema # original from upstream
# Server doesn't re-validate types — just passes through
fields[prop_name] = (Any, Field(default=None))
3. 遅延データ読み込み
静的データセット(空港、航空会社、ビザ)は、非同期ロックを使って初回使用時にダウンロードされます。起動時の負荷はなく、フライトツールしか使わない場合に帯域幅を無駄にすることもありません。
設定
| 変数 | デフォルト | 説明 |
|---|---|---|
PORT | 8000 | サーバーポート |
GEMINI_API_KEY | — | 自然言語ルーティングツール travel_agent を有効にします |
デプロイ
Docker
FROM python:3.12-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 8000
CMD ["python", "molttravel_server.py"]
docker build -t molttravel .
docker run -p 8000:8000 molttravel
Render / Railway / Fly.io
サーバーは環境変数から PORT を読み取り、0.0.0.0 にバインドします。そのため、どのコンテナプラットフォームでもそのまま動作します。開始コマンドに python molttravel_server.py を指定するだけです。
プロジェクト構成
moltravel-mcp/
├── molttravel_server.py # Server core — proxy logic, native tools, routing
├── requirements.txt # mcp[cli], httpx
├── test_search.py # Integration test client
└── providers/
├── __init__.py # MCP_PROVIDERS registry + exports
├── mcp_client.py # Generic HTTP client for upstream MCP servers
├── data_loader.py # CSV downloader + haversine distance
├── airports.py # 45K airports from OurAirports
├── airlines.py # 7K airlines from OpenFlights
├── visas.py # Visa requirements from Passport Index
├── restcountries.py # REST Countries API
├── fcdo.py # UK FCDO travel advisories
└── gemini.py # Gemini Flash tool router
拡張
MCP プロバイダーを追加する
providers/__init__.py に1行追加して、再起動します。
MCP_PROVIDERS = {
"kiwi": McpClient("https://mcp.kiwi.com/mcp"),
"navifare": McpClient("https://mcp.navifare.com/mcp"),
"peek": McpClient("https://mcp.peek.com/mcp"),
"your_provider": McpClient("https://mcp.example.com/mcp"), # new
}
ツールは自動的に検出され、your_provider_{tool_name} として登録されます。
ネイティブツールを追加する
@server.tool(name="my_tool")
async def my_tool(query: str) -> str:
"""Description shown to MCP clients."""
return "result"
データソースとライセンス
| データセット | ソース | ライセンス |
|---|---|---|
| 空港 | OurAirports | パブリックドメイン |
| 航空会社 | OpenFlights | ODbL 1.0 |
| ビザ要件 | Passport Index | MIT |
| 国情報 | REST Countries | MPL 2.0 |
| 渡航勧告 | 英国 FCDO | OGL v3.0 |
コントリビューション
- リポジトリをフォークします
- ブランチを作成します(
git checkout -b feature/my-feature) - 変更を加えてテストします(
python molttravel_server.py) - プルリクエストを作成します
ライセンス
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。