MCP over MQTT アーキテクチャ
MCP over MQTT は、標準のMCPアーキテクチャ(Host、Client、Server)のコアコンセプトを継承しつつ、トランスポート層として中央集権型のMQTTブローカーを導入しています。ブローカーはメッセージのルーティング、サービスの登録と検出、認証および認可を可能にします。
このアーキテクチャは、MCPの元々のコンテキスト相互作用モデルを保持しつつ、MQTTの軽量で広く適用可能な設計を活用し、IoTおよびエッジコンピューティングのシナリオにおける多対多通信、ロードバランシング、スケーラビリティの基盤を提供します。
MQTTトランスポートのコアコンポーネント
MCP over MQTTアーキテクチャでは、中央集権型のMQTTブローカーがメッセージルーターとして導入され、その他のコンポーネント(Host、Client、Server)は標準のMCP設計と一貫しています。
Host、Client、およびServer
Host、Client、およびServerのコンポーネントは変更されていません(詳細はMCPコアコンセプトを参照してください):
- Host はクライアントのコンテナおよびコーディネーターとして機能します。
- 各 Client はHostによって作成され、Serverと独立した接続を維持します。
- Server は専用のコンテキストと機能を提供します。
主な違いは、ClientとServerが直接通信するのではなく、MQTTブローカーを介して通信する点です。ブローカーの導入により、ClientとServer間の関係は一対一から多対多に変わります。
MQTTブローカーの役割
MQTTブローカーは中央集権型のメッセージルーターとして機能します:
- ClientとServer間のメッセージを転送します。
- サービスの登録および検出(retainedメッセージを介して)をサポートします。
- ClientおよびServerの認証と認可を処理します。
Serverのスケーリングとロードバランシング
スケーラビリティとロードバランシングを実現するために、MCP Serverは複数のインスタンス(プロセス)を起動できます。各インスタンスは一意のserver-idをMQTTクライアントIDとしてブローカーに接続し、すべてのインスタンスは同じserver-nameを共有します。
Clientの相互作用フロー:
- Clientはサービス検出トピックをサブスクライブし、対象の
server-nameに属するすべての利用可能なserver-idを取得します。 - Clientはカスタムポリシー(ランダムやラウンドロビンなど)に基づいてServerインスタンスを選択し、
initializeリクエストを送信します。 - 初期化後、Clientは専用のRPCトピックを通じて選択したServerインスタンスと通信します。
このアプローチにより、MCPサーバーの高可用性とスケーラビリティが実現されます:
- スケールアップ時、既存のMCPクライアントは古いサーバーインスタンスに接続したままで、新しいクライアントは新たに追加されたインスタンスで初期化できます。
- スケールダウン時、MCPクライアントは再初期化して他の利用可能なサーバーインスタンスに接続できます。