mcpField
S
swiss-transport-mcp

swiss-transport-mcp

ローカル
github.com地図・旅行82 週間前に更新

swiss-transport-mcp について

swiss-transport-mcpは、旅行者やAIアシスタント向けに、経路検索やリアルタイム発車情報などスイスの公共交通情報を提供します。OJP 2.0、SIRI-SX、RESTなどのAPIをJSONに変換し、ローカルとクラウドの両方で利用できます。

主な機能

  1. 01経路検索とリアルタイム発車情報
  2. 02名称や座標による停留所検索
  3. 03遅延や運休などの速報
  4. 04列車の混雑度と運賃の照会
  5. 05列車編成とオープンデータの検索

活用シーン

  1. 01乗り換えを含むスイス鉄道経路を計画
  2. 02次の発車時刻と乗り場を確認
  3. 03運行障害や列車の混雑度を確認
  4. 04運賃、設備、交通データセットを調査

MCP 対応

MCPサーバーは、スイスの公共交通オープンデータAPIを使った検索ツールとリソースを対応クライアントに公開します。stdioとStreamable HTTPに対応し、一部の追加ツールには別途APIキーが必要です。

設定

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

mcp.json · 共通設定
{
"mcpServers": {
"malkreide-swiss-transport": {
"command": "uvx",
"args": [
"swiss-transport-mcp"
]
}
}
}
起動コマンドuvx swiss-transport-mcp

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

パッケージ
pypiswiss-transport-mcp0.5.0

ツール

11

掲載時のツール一覧 · 2 週間前に更新

パラメーター型必須説明
paramsanyはい

詳細

🇨🇭 スイス公共データ MCP ポートフォリオの一部です

🚆 swiss-transport-mcp

Version License: MIT Python 3.11+ MCP Data Source CI

AI モデルをスイスの公共交通システムに接続する MCP サーバーです。経路計画、リアルタイムの発車情報、運行障害、混雑状況、乗車券の料金、列車編成、およびopentransportdata.swissのオープンデータに対応しています。

🇩🇪 ドイツ語版

デモ

デモ:Claude が運行障害と発車情報を照会


概要

swiss-transport-mcp を使うと、Claude などの AI アシスタントから、スイスの旅行情報システムを幅広く利用できます。時刻表だけでなく、リアルタイムの運行障害アラート、混雑予測、乗車券の料金、列車編成の詳細も確認できます。すべてを、標準化された単一の MCP インターフェースから利用できます。

opentransportdata.swiss の各種 API は、OJP 2.0(XML/SOAP)、SIRI-SX(XML)、REST/JSON など、異なるプロトコルを使用しています。このサーバーは、多言語対応のプロトコルインタープリターとして、すべてのデータを AI モデル向けの整理された JSON に変換します。

デモで使用する主なクエリ: 「チューリッヒからヴィンタートゥールのテクノラマまで、生徒25人の校外学習を計画してください。運行障害を確認し、最適な発車便を見つけてください。」 → 対象者別のその他の使用例 →


機能

  • 🗺️ 経路計画(乗り換え、所要時間、交通手段を含む A → B の経路)OJP 2.0 経由
  • 🕐 リアルタイムの発車情報(遅延や番線情報を含む)
  • 🔍 停留所の検索(名称または座標による検索)
  • 🚨 運行障害のライブアラート(運休、閉鎖)SIRI-SX 経由
  • 📊 列車の混雑予測(SBB、BLS、Thurbo、SOB)
  • 💰 乗車券の料金(座席クラスの選択を含む)
  • 🚃 列車編成(車両、クラス、設備、アクセシビリティ)
  • 📦 オープンデータカタログ(CKAN 経由で約90種類の交通データセットを提供)
  • 🔑 段階的な機能縮退(任意の API キーがなくても、基本ツールを利用できる状態でサーバーを起動)
  • ☁️ 2種類のトランスポート(Claude Desktop 向けの stdio、クラウドデプロイ向けの Streamable HTTP/SSE)

前提条件

  • Python 3.11+
  • api-manager.opentransportdata.swissで取得できる無料の API キー(最低限、OJP 2.0を申し込んでください)
  • 任意:SIRI-SX、Occupancy、Formation、OJP Fare 用の追加キー

インストール

# Clone the repository
git clone https://github.com/malkreide/swiss-transport-mcp.git
cd swiss-transport-mcp

# Install
pip install -e .

または uvx を使ってインストールする(永続的なインストールは不要です):

uvx swiss-transport-mcp

クイックスタート

# Set the minimum required key (OJP core tools)
export TRANSPORT_API_KEY=your_key_here

# Start the server (stdio mode for Claude Desktop)
swiss-transport-mcp

Claude Desktop ですぐに試せます:

「チューリッヒ・シュターデルホーフェンから次に発車する列車を教えてください。」 「ヴェーデンスヴィルからベルンまで、列車で行くにはどうすればよいですか?」


設定

環境変数
変数API必須
TRANSPORT_API_KEYOJP + CKAN 共通キー✅(または個別のキー)
TRANSPORT_OJP_API_KEYOJP 2.0 経路検索任意(上書き)
TRANSPORT_CKAN_API_KEYCKAN データカタログ任意(個別のサブスクリプション)
SIRI_SX_API_KEY運行障害アラート(SIRI-SX)任意
OCCUPANCY_API_KEY混雑予測任意
FORMATION_API_KEY列車編成任意
OJP_FARE_API_KEYチケット料金(OJP Fare)任意

キーがない API は通知なしで無効になります。コアツール 6 個のみでも、サーバーは問題なく起動します。

運用/セキュリティ変数:

変数効果デフォルト
MCP_ENV / ENVプロセス環境です。TLS 検証の無効化を許可するには、dev/development/local/test に設定する必要があります。(未設定 → 本番)
TRANSPORT_SSL_VERIFYfalse に設定すると、TLS 証明書の検証を無効にします。MCP_ENV が開発環境を示す場合にのみ有効です。それ以外ではリクエストは無視され、検証は有効のままです。true
TRANSPORT_CKAN_URLCKAN のベース URL を上書きします。送信先許可リスト(*.opentransportdata.swiss)の範囲内にする必要があります。範囲外の URL への上書きは拒否されます。https://api.opentransportdata.swiss/ckan-api
MCP_CORS_ORIGINSHTTP トランスポートへの呼び出しを許可するブラウザーのオリジンを、カンマ区切りで指定します。すべてのオリジンを許可するには * を使用します(推奨しません)。これらのオリジンには Mcp-Session-Id ヘッダーが公開されます。https://claude.ai
LOG_FORMAT構造化ログ(RFC 5424 の重大度)には json を、それ以外の値には人間が読みやすいテキストを使用します。常に stderr に出力されます。text
OTEL_TRACES_ENABLEDOpenTelemetry トレースを有効にするには 1 を設定します(otel エクストラが必要です:pip install 'swiss-transport-mcp[otel]')。それ以外では何も行いません。(無効)
MCP_STATELESSStreamable HTTP トランスポートをステートレスで実行するには 1 を設定します。サーバー側のセッション状態を保持しないため、インスタンスにスティッキーロードバランシングは不要です。水平スケールアウトに推奨されます。(無効 → ステートフル)
MCP_ALLOWED_HOSTSこのサーバーに到達できるホスト名をカンマ区切りで指定します。必要に応じてポートも含めます(例:fahrplan.example.ch:8080)。それ以外の Host で届いたリクエストは 421 で拒否されます。コンテナーのヘルスチェックが引き続き機能するよう、ループバックは許可されます。ループバック以外にバインドしていて未設定の場合、チェックは無効になり、警告がログに記録されます。(未設定 → 無効)

🔒 送信先許可リスト: すべての外向きリクエストは、opentransportdata.swiss のホストに対する https:// に制限されます。それ以外のホストへのリクエストは、送信前に拒否されます(SSRF/送信先のセキュリティ強化)。

Claude Desktop の設定

最小構成(コアツールのみ):

{
  "mcpServers": {
    "swiss-transport": {
      "command": "swiss-transport-mcp",
      "env": {
        "TRANSPORT_API_KEY": "your_key_here"
      }
    }
  }
}

完全構成(ツール 11 個すべて):

{
  "mcpServers": {
    "swiss-transport": {
      "command": "swiss-transport-mcp",
      "env": {
        "TRANSPORT_API_KEY": "your_ojp_key_here",
        "SIRI_SX_API_KEY": "your_siri_key_here",
        "OCCUPANCY_API_KEY": "your_occupancy_key_here",
        "FORMATION_API_KEY": "your_formation_key_here",
        "OJP_FARE_API_KEY": "your_fare_key_here"
      }
    }
  }
}

設定ファイルの場所:

  • macOS:~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows:%APPDATA%\Claude\claude_desktop_config.json
クラウドへのデプロイ(Streamable HTTP)

ブラウザーの claude.ai から使用する場合(例:ローカルソフトウェアを利用できない管理対象ワークステーション)。クラウドのトランスポートは Streamable HTTP(MCP_TRANSPORT=streamable-http、エンドポイント /mcp)です。SSE(/sse)も引き続きサポートされていますが、非推奨です。

MCP_TRANSPORT用途エンドポイント
stdio(デフォルト)ローカルの Claude Desktop サブプロセス–
streamable-http(または http)クラウド/コンテナ(推奨)/mcp
sseレガシーのブラウザートランスポート(非推奨)/sse

Docker(推奨):

# Build + run with explicit resource limits (see docker-compose.yml)
TRANSPORT_API_KEY=xxx docker compose up --build
# → http://127.0.0.1:8000/mcp

このイメージは、非 root ユーザーとして実行されるマルチステージビルドです。docker-compose.yml では read_only、no-new-privileges に加え、メモリ/CPU/PID の制限を設定しています。

Render.com:

  1. リポジトリを GitHub にプッシュするか、フォークします
  2. render.com で「New Web Service」を選択し、GitHub リポジトリに接続します(Docker ランタイム)
  3. 環境変数 MCP_TRANSPORT=streamable-http および MCP_HOST=0.0.0.0 を設定します
  4. claude.ai の「Settings → MCP Servers」で、https://your-app.onrender.com/mcp を追加します

💡 「開発者のノート PC では stdio、クラウドでは Streamable HTTP。」

水平方向のスケーリング: MCP_STATELESS=1 を設定して実行します。ステートレスモードではサーバーがセッションごとの状態を保持しないため、どのインスタンスでもあらゆるリクエストに対応でき、通常のラウンドロビンロードバランサーで十分です。スティッキーセッションや Mcp-Session-Id によるアフィニティは不要です。代わりにステートフルストリーミングが必要な場合は、エッジの LB(例:HAProxy stick-tables)で Mcp-Session-Id に基づいてルーティングし、各セッションが同じインスタンスに固定されるようにしてください。

⚠️ バインド: ネットワークトランスポートでは、デフォルトでサーバーは 127.0.0.1 にバインドされるため、ローカルで起動したサーバーがネットワーク全体(例:公衆 Wi-Fi)に公開されることはありません。MCP_HOST=0.0.0.0 を設定するのは、すべてのインターフェースへのバインドを意図したコンテナ/クラウド環境に限ってください(Docker イメージでは設定済みです)。


利用可能なツール

コアツール(OJP 2.0 / CKAN)
ツール説明データソース
transport_search_stop名前で停留所/駅を検索OJP 2.0
transport_nearby_stops座標を使って近くの停留所を検索OJP 2.0
transport_departures遅延と番線を含むリアルタイムの出発案内OJP 2.0
transport_trip_plan乗り換え、所要時間、交通手段を含む A → B の移動を計画OJP 2.0
transport_search_datasetsオープンデータカタログ(約 90 件のデータセット)を検索CKAN¹
transport_get_dataset特定のデータセットの詳細情報を取得CKAN¹

¹ CKAN ツールを利用するには、API Manager で別途サブスクリプションが必要です。

拡張ツール(オプションの API キー)
ツール説明データソース
get_transport_disruptions🚨 運行障害、運休、路線閉鎖のリアルタイム情報SIRI-SX
get_train_occupancy📊 特定の列車の混雑予測Occupancy JSON
get_ticket_price💰 経路の運賃OJP Fare
get_train_composition🚃 列車編成、車両クラス、アクセシビリティFormation REST
check_transport_api_status🔍 設定済みのすべての API のヘルスチェックすべて
使用例
クエリツール
「チューリッヒ・シュターデルホーフェン発の次の列車は?」transport_departures
「チューリッヒからヴィンタートゥールのテクノラマまで、学生 25 人の移動を計画して」transport_trip_plan
「チューリッヒとベルンの間で運行障害はありますか?」get_transport_disruptions
「今日の IC 1009 の混雑状況は?」get_train_occupancy
「ヴェーデンスヴィルからベルンまでの切符はいくらですか?」get_ticket_price
「IC 708 に食堂車はありますか?」get_train_composition
「ラングシュトラーセ 100 の近くにある停留所は?」transport_nearby_stops

アーキテクチャ

┌─────────────────┐     ┌───────────────────────────┐     ┌──────────────────────────┐
│   Claude / AI   │────▶│   Swiss Transport MCP     │────▶│  opentransportdata.swiss  │
│   (MCP Host)    │◀────│   (MCP Server)            │◀────│                          │
└─────────────────┘     │                           │     │  OJP 2.0  (XML/SOAP)     │
                        │  11 Tools · 2 Resources   │     │  SIRI-SX  (XML)          │
                        │  Stdio | SSE              │     │  CKAN     (REST/JSON)    │
                        │                           │     │  Occupancy(REST/JSON)    │
                        │  Core:                    │     │  Formation(REST/JSON)    │
                        │   api_client + ojp_client │     │  OJP Fare (XML/SOAP)     │
                        │  Extensions:              │     └──────────────────────────┘
                        │   siri_sx, occupancy,     │
                        │   ojp_fare, formation     │
                        └───────────────────────────┘
インフラストラクチャコンポーネント
コンポーネントたとえ機能
RateLimiter用心棒一定時間内の API 呼び出し数を制限します
SimpleCacheホワイトボード繰り返しのクエリに対するレスポンスをキャッシュします
APIClient配電盤認証、リダイレクト、エラーを一元的に処理します
APIConfig名刺API ごとのキー、URL、制限を設定します
キャッシュ戦略
APIキャッシュ TTL理由
SIRI-SX120s運行障害は毎秒変化するわけではありません
Occupancy300s予測は日単位です
Formation600s列車編成はその日の間、安定しています
OJP Fare1800s料金が日中に変わることはほとんどありません

プロジェクト構成

swiss-transport-mcp/
├── src/swiss_transport_mcp/        # Main package
│   ├── server.py                   # FastMCP server, tool definitions
│   ├── api_client.py               # Core OJP + CKAN client
│   ├── ojp_client.py               # OJP 2.0 XML/SOAP parser
│   ├── api_infrastructure.py       # RateLimiter, SimpleCache, APIClient
│   ├── siri_sx.py                  # Disruption alerts
│   ├── occupancy.py                # Occupancy forecasts
│   ├── ojp_fare.py                 # Ticket prices
│   └── formation.py                # Train formation
├── tests/
│   └── test_server.py              # Unit + integration tests
├── .github/workflows/ci.yml        # GitHub Actions (Python 3.11/3.12/3.13)
├── claude_desktop_config.json       # Example Claude Desktop config
├── pyproject.toml
├── CHANGELOG.md
├── CONTRIBUTING.md
├── LICENSE
├── README.md                        # This file (English)
└── README.de.md                     # German version

安全性と制限

  • 読み取り専用: すべてのツールは読み取り専用のリクエスト(HTTP GET/クエリ専用の OJP XML POST)を実行します。上流システムのデータを書き込み、変更、削除することはありません。
  • 個人データなし: 経路検索のクエリは一時的なもので、このサーバーには保存されません。API が返すのは、予定された時刻表とリアルタイムの運行データです。個人を特定できる情報(PII)の処理や保持は行いません。
  • レート制限: opentransportdata.swiss はキーごとのレート制限を適用しています(API Manager に記載)。サーバー組み込みの RateLimiter(SIRI-SX:2 req/min、Formation/OJP Fare:5 req/min)は、この制限の範囲内に自動的に収まります。一括クエリでは、limit パラメーターを控えめに使用してください。
  • API キーが必要: api-manager.opentransportdata.swiss の無料キーが必須です。キーはアカウントのサブスクリプションに紐付けられています。利用する予定の API だけを登録してください。
  • データの鮮度: リアルタイムツール(出発、運行障害、混雑状況)は、クエリ時点の上流ソースを反映します。API の負荷を軽減するため、サーバーはレスポンスを短い TTL(120s~1800s)でキャッシュします。上記のキャッシュ戦略の表を参照してください。
  • 利用規約: データには opentransportdata.swiss の利用規約が適用されます。OJP、SIRI-SX、CKAN カタログは、非営利および研究目的でオープンライセンス(ODbL/CC BY 4.0)のもと公開されています。
  • 保証なし: このサーバーはコミュニティプロジェクトであり、連邦運輸局(BAV/OFT)または SBB とは関係ありません。利用可能かどうかは上流 API に依存します。
インストール前に(同意)

このサーバーを MCP クライアントに追加すると、接続された AI モデルが、お客様の opentransportdata.swiss API キーを使用してお客様に代わってスイスの公共交通機関に関するクエリを実行し、opentransportdata.swiss に HTTPS リクエストを送信できるようになります。上流への書き込みはなく、PII も保存されませんが、サーバーを設定する前に、上記のツール一覧を確認し、そのアクセスを許可して問題ないことをご確認ください。

HTTP トランスポートを安全に実行する(組み込み認証なし)

サーバーには独自の認証機能がありません。Streamable HTTP トランスポート(MCP_TRANSPORT=streamable-http)を実行すると、MCP SDK は セッションごとに暗号学的にランダムな Mcp-Session-Id を発行しますが、ユーザー IDは関連付けられません。そのため、次の点にご注意ください。

  • 認証なしのインスタンスを、そのままパブリックインターネットに公開しないでください。 認証機能のあるリバース プロキシ(OAuth2 プロキシ、mTLS、またはお使いのプラットフォームのアクセス制御)の背後に配置するか、 信頼できるネットワークに制限してください。
  • ローカルで使用する場合は、デフォルトの MCP_HOST=127.0.0.1 を維持してください。制御されたコンテナー/クラウド環境内でのみ 0.0.0.0 にバインドしてください(「デプロイ」を参照)。
  • MCP_CORS_ORIGINS は、実際に信頼するオリジンに限定してください。
  • ループバック以外にバインドする場合は、必ず MCP_ALLOWED_HOSTS を設定してください。これは DNS リバインディングを防ぎます。ネットワーク上のページが、自身のホスト名をこのサーバーのアドレスに解決し、 その後ブラウザーからサーバーにアクセスする攻撃です。CORS ではこれを阻止できません。ブラウザーから見ると 同一オリジンのリクエストだからです。また、トークンでも防げません。攻撃ページはトークンを保持するコンテキストで実行されるためです。 防止できるのは Host チェックだけです。未設定の場合、このチェックは無効のままになります。サーバーの前段で Host を検証するものがある場合にのみ、これが適切なデフォルトです。

セキュリティ体制と、受け入れるリスクに関する判断(ゲートウェイレベルの制御)については、 SECURITY.md を参照してください。


既知の制限事項

  • OJP 運賃: 割引(Halbtax、GA、地域パス)が常に反映されるとは限りません
  • 編成: 停留所ベースのデータは当日分のみ利用できます(リアルタイムデータへの依存)
  • 混雑状況: SBB、BLS、Thurbo、SOB のみです。民間鉄道は対象外です
  • SIRI-SX: スイス国内のすべての運行障害を返します → filter_text パラメーターを使用してください
  • CKAN: API Manager で別途サブスクリプションが必要です

MCP プロトコルのバージョン

このサーバーは、同じエンドポイントで2つのプロトコル世代に対応しています。接続時のクライアントの最初のリクエストによって、どちらを適用するかが決まり、後から別の世代を申告しても拒否されます。

世代リビジョン対応するクライアント
initialize ハンドシェイク2024-11-05 … 2025-11-25現在のクライアントが使用するリビジョンです。サーバーは要求されたリビジョンで応答します。要求されたリビジョンが上限を超える場合は、上限の 2025-11-25 で応答します。
リクエストごとのエンベロープ2026-07-282026-07-28 の _meta エンベロープを含むリクエストによって、モダンな接続が開始されます。

両方のリビジョンは tests/test_protocol_version.pyで固定され、インストール済みの SDK に対して検証されます。そのため、Dependabot による mcp の更新で、どちらかが気づかないうちに変わることはありません。この固定によって示されるのは、SDK が提示するリビジョンです。

サーバーが実際にそのリビジョンを提供していることは、tests/test_modern_wire.pyで、uvicorn に渡す main() と同じアプリを使って測定します。実際の 2026-07-28 単一リクエスト POST で、initialize なし、Mcp-Session-Id なしで server/discover、tools/list、tools/call を検証します。また、3段階の拒否ケース(エンベロープの欠落、ルーティングヘッダーと本文の不一致、未対応のリビジョン)と、両世代が共存することを示すための、同じエンドポイントへのレガシーな initialize も検証します。

このセクションの以前の版では、リポジトリはリクエストを送信できる ASGI アプリを構築しないと述べ、ゲートが定数の検証しかできない理由としていました。実際には、アプリを構築していました。

サーバーの識別情報。 2026-07-28 には initialize がないため、クライアントが serverInfo を取得する単一の場所もありません。このリビジョンでは、Implementation(名前、タイトル、バージョン、ウェブサイト)を server/discover とすべての結果の _meta に含めます。このサーバーはそれらの情報を独自の配布メタデータから取得するため、通信上のバージョンはインストールされたバージョンと一致し、pyproject.toml のバージョンからずれることはありません。

SDK の LATEST_PROTOCOL_VERSION はハンドシェイク世代ではなく、モダン世代の別名であることに注意してください。これだけを基準に固定すると、現在のクライアントが実際にネゴシエートする世代が、変更されても検知されない状態になります。

更新方針。 ゲートに失敗した場合、定数を安易に編集しないでください。2つのリビジョン間の仕様変更履歴を読み、サーバーが引き続き正しく動作することを確認したうえで、定数、このセクション、README.de.md、CHANGELOG.mdをまとめて更新してください。


テスト

# Unit tests (no API key required)
PYTHONPATH=src pytest tests/ -m "not live"

# Integration tests (API key required)
TRANSPORT_API_KEY=xxx pytest tests/ -m "live"
テストデータの入手元

4つの上流 API はすべて opentransportdata.swiss API-Manager の Bearer トークンを必要とするため、CI では実際のレスポンスを記録できません。その測定結果は tests/fixtures/upstream_auth_probe.json に保存されています。そのため、テストモジュール内の XML ペイロードは記録したものではなく、手作業で作成したものであり、本番コードの誤りを否定する根拠にはなりません。どちらも同じドキュメントの解釈に基づいており、両方が誤っている場合は、同じ箇所で誤っています。

記録できるのは契約です。OJP 2.0 は公開 XML スキーマを持つ CEN 規格(CEN/TS 17118)であり、tests/fixtures/ojp_2_0_contract.json はそこから作成した日付付きの索引です。要素名、このサーバーが基盤として使用する構造、値として送信する列挙値に加え、読み込んだすべてのスキーマファイルの SHA-256 が記載されています。tests/test_ojp_contract.py には、この索引に基づくリクエストとパーサーが含まれています。ソースリポジトリにライセンスファイルがないため、スキーマ自体は意図的にベンダリングしていません。

python scripts/record_fixtures.py          # re-record
python scripts/record_fixtures.py --check  # recompute against the pinned tag

出典、日付、選択ルール、ハッシュについては、tests/fixtures/PROVENANCE.mdを参照してください。


変更履歴

CHANGELOG.mdを参照してください。


コントリビューション

CONTRIBUTING.mdを参照してください。


セキュリティ

セキュリティに関する方針と脆弱性の報告方法については、SECURITY.md(ドイツ語)を参照してください。


ライセンス

MIT License — LICENSEを参照してください。


作者

Hayal Oezkan · github.com/malkreide


クレジットと関連プロジェクト

インストール

uv の uvx 経由で実行できます。リポジトリのクローンや手動インストールは不要です。MCP クライアントの設定に追加してください(Claude Desktop、Cursor、Windsurf では mcpServers を使用し、VS Code では .vscode/mcp.json にトップレベルの servers キーを使用します):

{
  "mcpServers": {
    "swiss-transport-mcp": {
      "command": "uvx",
      "args": [
        "swiss-transport-mcp"
      ]
    }
  }
}

コメント

MCP は初めてですか?

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

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