🔥
mcpプロトコル(2025-03-26)に関して
要点まとめ
(MCPサーバー) -> LLMを利用する際に便利な機能を用意したサーバー
(MCPクライアント) ->MCPサーバーとやり取りする機構(コネクション用)
(MCPホスト) -> (MCPクライアント) を搭載。 LLMとのやりとりもこっち
MCP ->上記のやり取りを担うプロトコル。(トランスポートのレイヤでhttpベースとstdioベースの二種類の実装が想定されている)
プロトコルは少しずつ改良されているので注意
記事記載時点では、プロトコルバージョンは 2025-03-26
過去と現在のバージョン
- 2024-11-05
- 2025-03-26
ベースのプロトコル
JSON-RPC message typesをベースとしている。
- 基本的なJSON-RPCとは異なり、IDはnullであってはならないなど、制約もある.
詳細は下記
メッセージのタイプは三つ
- request
- response
- Notification
リクエスト
{
jsonrpc: "2.0";
id: string | number;
method: string;
params?: {
[key: string]: unknown;
};
}
レスポンスの例
{
jsonrpc: "2.0";
id: string | number;
result?: {
[key: string]: unknown;
}
error?: {
code: number;
message: string;
data?: unknown;
}
}
クライアントとサーバー接続のライフサイクル
Initialization: プロトコルのバージョン確認等
Operation: 通常のプロトコルのやり取り
Shutdown: 接続を終了させる
↓公式ドキュメントはまだ2024-11-05になってるっぽい...(いつか改修されそう)
{
"jsonrpc": "2.0",
"id": 1,
"method": "initialize",
"params": {
"protocolVersion": "2024-11-05",
"capabilities": {
"roots": {
"listChanged": true
},
"sampling": {}
},
"clientInfo": {
"name": "ExampleClient",
"version": "1.0.0"
}
}
}
MCPサーバーが提供するもの
三つの機能を主に提供する。
- Resources:ユーザーまたはAIモデルが利用するためのコンテキストとデータ
- Prompts: ユーザー向けのテンプレート化されたメッセージとワークフロー
- Tools: AIモデルが実行するための関数
標準的なトランスポート実装
MCPには2つの標準的なトランスポート実装が含まれている
- HTTPベースのトランスポート(Streamable HTTP)(*)
- STDIOのトランスポート
*HTTP+SSE transportからHTTP-based transportsに定義が置き換わった。
ただ必要に応じてストリーミング通信(SSE)にシームレスに切り替えることが可能な模様
HTTPベースのトランスポートにおける認可フロー
認可はMCP実装において任意
- PKCE を使用したBasic OAuth 2.1の例
アクセストークンに関して
ヘッダーをつける。
Authorization: Bearer <access-token>
例
GET /v1/contexts HTTP/1.1
Host: mcp.example.com
Authorization: Bearer eyJhbGciOiJIUzI1NiIs...
Streamable HTTP
MCP endpoint
MCP endpointを用意する必要がある。
example
https://example.com/mcp
GETメソッドとPOSTメソッドをサポートしておく。
- クライアントは、MCP endpointに対して、JSON-RPCのHTTP POSTを送信する。
- サーバーが(JSON-RPCレスポンスまたは通知)の入力を受け付けた場合、HTTPステータスコード「202 Accepted」をbodyなしで返す。
- サーバーが(JSON-RPC リクエスト)の入力を受け付けた場合、
- Content-Type: text/event-stream を返して SSE(サーバー送信イベント)ストリーム を開始する
- Content-Type: application/json を返して 1つのJSONオブジェクト を返す
appendix
mcp client一覧
上記のリポジトリに色々まとまっている。
Discussion