mcpField
O
Open Transfer Times

Open Transfer Times

ローカル
github.com/joelynli0110地図・旅行05 日前に更新

Open Transfer Times について

Open Transfer Timesは、1回乗り継ぎのフライトを評価するエージェント向けの読み取り専用MCPサーバーです。空港の引用付き情報を基に、根拠を説明できる判定を行い、情報不足と利用可能な推定を区別します。

主な機能

  1. 01乗り継ぎの判断、評価、信頼度を判定
  2. 02乗り継ぎ手順と時間的余裕を計算
  3. 03航空券の保護、ターミナル、手荷物を考慮
  4. 042~20件の旅程を比較・順位付け
  5. 05空港プロファイルと引用情報を返却

活用シーン

  1. 01フライトを勧める前に乗り継ぎ時間を評価
  2. 02フライト検索結果の乗り継ぎ候補を順位付け
  3. 03ターミナル変更による影響を確認
  4. 04手荷物や空港情報の不足を特定

MCP 対応

乗り継ぎの確認・比較と空港プロファイル取得のための読み取り専用ツールを提供します。ローカルのstdioで動作し、APIキーやネットワーク通信は不要です。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"joelynli0110-open-transfer-times": {
"command": "npx",
"args": [
"-y",
"open-transfer-times-mcp"
]
}
}
}
起動コマンドnpx -y open-transfer-times-mcp

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npmopen-transfer-times-mcp0.3.0

ツール

4

掲載時のツール一覧 · 4 日前に更新

パラメーター型必須説明
tostringはい2便目の目的地空港(IATA)、例:PVG
viastringはい乗り継ぎ空港(IATA)、例:IST
fromstringはい1便目の出発空港(IATA)、例:BER
ticketenumいいえprotected = 2便が同一の航空券/予約に含まれる;separate = 別々の航空券でセルフ乗り継ぎ;記載がなければ unknownprotected | separate | unknown
arrival_timestringいいえ1便目の乗り継ぎ空港への予定到着時刻(現地時刻)、YYYY-MM-DDTHH:mm。到着・出発の両方の時刻を指定するか、代わりに layover_minutes を指定してください。
departure_timestringいいえ2便目の乗り継ぎ空港からの予定出発時刻(現地時刻)、YYYY-MM-DDTHH:mm。到着・出発の両方の時刻を指定するか、代わりに layover_minutes を指定してください。
baggage_recheckbooleanいいえ受託手荷物を受け取り、再度預ける必要がある場合は true に設定します
layover_minutesintegerいいえ到着から出発までの予定時間(分)。ユーザーが乗り継ぎ時間のみを伝えた場合に使用します。日付や時刻を作り出さないでください。
terminal_changebooleanいいえターミナルの変更が必要と分かっているものの、ターミナル情報が示されていない場合は true に設定します
arrival_terminalstringいいえ分かる場合は、乗り継ぎ空港の到着ターミナルを指定します
departure_terminalstringいいえ分かる場合は、乗り継ぎ空港の出発ターミナルを指定します

詳細

open-transfer-times-mcp

AI エージェントが、フライトの乗り継ぎを推奨または予約する前に、現実的な接続かどうかを確認できるMCP サーバーです。

フライト検索ツールは旅程を返しますが、フランクフルトでの乗り継ぎ時間が50分で足りるかどうかは教えてくれません。このサーバーは、open-transfer-times エンジンによる決定論的で説明可能な評価を提供し、すべての見積もりの根拠となる引用付きの空港情報も返すため、エージェントは情報源を提示できます。

stdio 経由でローカル実行します。API キーもネットワーク呼び出しも不要です。

ツール

すべてのツールは読み取り専用です。

ツール機能
check_connection1件の乗り継ぎを評価します。判定(recommend / caution / insufficient_data / avoid)、評価(comfortable → risky)、理由付きの信頼度、実際の乗り継ぎ時間、所要時間を含む各乗り継ぎ手順、余裕時間、航空券による保護の有無、および引用付きの乗り継ぎ空港情報を返します。
compare_connections2~20件の旅程(例:フライト検索結果)を評価して順位付けします。判定、評価、航空券による保護(1枚の航空券 → 不明 → 自己乗り継ぎ)、信頼度、余裕時間の順に比較します。データが不足している乗り継ぎが、利用可能な乗り継ぎより上位になることはありません。各候補に独自の id を指定すると、結果との対応付けができます。
get_airport_profile空港の乗り継ぎ時間の許容値、それぞれが heuristic(経験則に基づく)か sourced(情報源に基づく)か、および公式リンク付きの引用情報を返します。
list_airports個別のプロファイルを持つ空港と、それぞれの情報源の充実度を一覧表示します。
check_connection の入力
フィールド必須例備考
from、via、toはいBER、LHR、PVGIATA コード。大文字と小文字は区別されません。
arrival_timeいずれか2026-09-20T10:001便目の到着時刻。via の現地時刻です。UTC オフセット(+02:00)は任意です。
departure_timeいずれか2026-09-20T11:302便目の出発時刻。via の現地時刻です。
layover_minutesいずれか90乗り継ぎ時間だけがわかっている場合は、2つの時刻の代わりに指定します。
ticketいいえprotectedprotected(1つの予約)、separate(自己乗り継ぎ)、unknown(デフォルト)。
arrival_terminal、departure_terminalいいえ2、5両方が指定されていて異なる場合、ターミナルの変更が検出されます。
terminal_changeいいえtrueターミナルが不明でも、変更があるとわかっている場合に指定します。
baggage_recheckいいえfalsetrue:手荷物を受け取り、再度預ける必要があります。false:機内持ち込み手荷物のみ、または預け入れ手荷物が最終目的地まで運ばれます。不明な場合にのみ省略してください。別々の航空券の場合、結果にその影響が示されます。

時刻を両方指定するか、layover_minutes を指定してください。両方の時刻を指定する場合は、乗り継ぎ時間と一致している必要があります。

結果テキストの例:

BER–LHR–PVG: CAUTION — The terminals are not known, and a terminal change would leave little or no margin; ask for the terminals.
Rating: REASONABLE — A practical connection on one ticket.
Confidence: MEDIUM — The terminals are not known; a terminal change would make this connection tight or risky. With a terminal change (25 min) the margin would be 10 min (tight). The transfer-step durations are rule-of-thumb estimates, not sourced figures.
Layover 90 min, transfer steps 55 min, margin 10 to 35 min (10 min if every possible step applies: tight).
Steps counted: Move through airport 40 min (heuristic); Allow for another security check 15 min (heuristic). No other steps were counted.
Possible step not counted: Change terminals 25 min (terminals not given). Give the margin as a range and ask for the terminals if it matters.
Factors: Transfer through London Heathrow; Additional security screening may apply; Moderate transfer margin.
Ticket: Protected itinerary.
MCT: no published minimum connection time in this data. This is a structural estimate, not proof that an airline would sell this connection.
Data: London Heathrow profile (partial, 3 cited facts).
Comparing several options? Send them together to compare_connections, which ranks them.
Airport facts are context, not extra steps. Apply a fact only where its scope matches this trip:
- All connecting passengers go through security screening again at Heathrow.
- ...

別々の航空券で、手荷物について記載がなく、再預け入れが問題となる場合:

BER–IST–PVG: INSUFFICIENT DATA — Separate tickets, and it is not known whether bags must be collected and checked in again; a re-check would make this connection tight or risky. With a bag re-check the margin would be -15 min (risky). The result cannot be relied on.
Do not call this connection safe, fine or comfortable. Tell the user the estimate is unreliable, why, and what would settle it.
Confidence: LOW, for the reasons above.
Rough estimate only: layover 75 min, transfer steps 45 min, margin 30 min.
...
Bags: not stated. If they must be collected and checked in again, the margin is -15 min (risky). Ask the user.
  • テキストは判断を先に示し、compare_connections は推奨されない各選択肢について説明します(「理由:…」)。insufficient_data の場合、テキストには評価が一切含まれません。エージェントの評価では、判断に評価を信頼できないと示されていても、エージェントが安心材料として「快適」や「十分な余裕」を繰り返したためです。評価は structuredContent に残ります。
  • mct は構造的な評価とは分けて扱われます。below_published は、この空港での乗り継ぎ時間が航空会社の公表する最短乗り継ぎ時間(例:FRA でのルフトハンザ航空の60分)を下回ることを意味します。旅程に適用されるかどうかは unknown なので、合格として扱われることはありません。
  • 対応に用いるフィールドは decision です。insufficient_data は重要な情報が不足していることを意味します(不足している情報は信頼度の理由に示されます)。乗り継ぎを推奨するのではなく、ユーザーに確認してください。
  • steps の合計は常に transfer_process_minutes と一致します。情報には scope(たとえば「パリの空港でのエールフランス航空の乗り継ぎ」)が記載されるため、エージェントが誤った旅程に適用することを防げます。
  • 乗り継ぎ時間は実際の経過時間です。プロファイル済みの13空港では、夏時間の変更をまたぐ乗り継ぎ時間は空港のタイムゾーンで計算され、wall_clock_layover_minutes に時計上の時間が示されます。
エージェント向けの指示

クライアントが接続すると、サーバーは使用方法の指示(MCP instructions)を送信します。ユーザーから得た情報でまずツールを呼び出すこと、時刻を作り出さずに layover_minutes を渡すこと、空港または所要時間が不明な場合にのみ質問すること、比較には compare_connections を使うこと、計上された手順のみを説明すること、判断を報告すること、別々の航空券の場合は結果を示した後に手荷物について尋ねること、事実の適用範囲を守ること(適用範囲のある事実は「(適用対象:…)」と表示されます)が指示されます。各ルールはエージェントのテストで確認された問題に対応しています。eval を参照してください。

同じデータが、ツールの出力スキーマに一致する structuredContent として返されます。

セットアップ

Node.js 20 以降が必要です。

Claude Desktop — claude_desktop_config.json に追加します:

{
  "mcpServers": {
    "open-transfer-times": {
      "command": "npx",
      "args": ["-y", "open-transfer-times-mcp"]
    }
  }
}

Claude Code:

claude mcp add open-transfer-times -- npx -y open-transfer-times-mcp

このリポジトリをクローンして使用する場合(パッケージ公開前):

{
  "mcpServers": {
    "open-transfer-times": {
      "command": "node",
      "args": ["/absolute/path/to/open-transfer-times/packages/mcp/src/cli.js"]
    }
  }
}

先にリポジトリのルートで npm install を実行してください。

フライト検索サーバーとの連携

フライトを検索する任意の MCP サーバーと組み合わせてください。エージェントには、「9月20日のベルリン発上海行きのフライトを探して、乗り継ぎ1回の選択肢を乗り継ぎの安全性で順位付けして」のように依頼できます。エージェントは一方のサーバーで検索し、結果を compare_connections に渡します。

制限事項

  • 乗り継ぎ1回の旅程(2区間)のみです。
  • 予定時刻と公開されている空港情報に基づく構造的な推定です。 公式な最低乗り継ぎ時間ではなく、遅延予測でもありません。
  • 13空港には独自のプロファイルがあり、その他の空港では標準的な基準値を使用します。その場合、結果には coverage: "baseline" と表示されます。
  • 時刻変更はプロファイルのある13空港で処理されます。それ以外の空港では、正確な乗り継ぎ時間を求めるため、UTCオフセット付きの時刻を指定してください。

開発

npm install                          # at the repository root
node packages/mcp/test/server.test.js
npx @modelcontextprotocol/inspector node packages/mcp/src/cli.js   # interactive testing

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。