MCPのアーキテクチャ
from やさしいMCP入門
サーバー・クライアント・ホストの関係性
ポイントとしてMCPホストがMCPクライアントを保持していて、MCPクライアントがMCPサーバーへ問い合わせを行うようになっている
code:mermaid
sequenceDiagram
participant You as ユーザー
participant H as MCPホスト(MCPクライアント)
participant L as LLM
participant MS as MCPサーバー
participant T as Tool
You->>H: AIエージェントへ指示
H->>L: LLMへ指示
L-->>H: 結果を受け取る
H->>MS: 相互に通信
MS->>T: ツール利用
T-->>MS: 結果を受け取る
MS->H: 結果を受け取る
H->>L: MCPサーバーレスポンスを含めてLLMへ指示
L-->>You: 指示結果を受け取る
標準入出力(stdio)とStreamable HTTP
MCPサーバー・クライアント間では標準入出力とStreamableHTTPが採用されている
標準入出力
MCPホストとMCPクライアントが同じ環境で作動するときに使用する通信方法
CLIの標準入出力を使って対応する
Streamable HTTP
MCPサーバーが外部の環境に存在する時の使用する仕組み
2025/3/26に仕様改訂された新しいトランスポート
現状の主流は、HTTP + SSEで実装されているが、今後はStreamable HTTPの置き換えが予想される
現在の主流: HTTP + SSE
code:HTTP + SSE.mermaid
sequenceDiagram
participant L as ローカル(MCPクライアント)
participant S as リモート(MCPサーバー)
L->>S: HTTP
S-->>L: SSE
今後: Streamable HTTP
MCPプロトコルに統合された「ストリーミング対応のリクエスト/レスポンス」仕組み。
イベント種別や完了通知が標準化されており、双方向のやり取りも可能。
code:HTTP + SSE.mermaid
sequenceDiagram
participant L as ローカル(MCPローカル)
participant S as リモート(MCPサーバー)
alt HTTP(必要に応じてSSE)
L->>S:
S-->>L:
end
送受信されるメッセージはJSON-RPC2.0という形式で行う
サーバー→クライアント
code:sample.json
{
"jsonrpc": "2.0",
"result": 19,
"id": 1
}
クライアント→サーバー
code:json
{
"jsonrpc": "2.0",
"method": "subtract",
"params": 42, 23,
"id": 1
}