ここまでの3つの土台は、どれもクライアントがサーバーに尋ね、サーバーが応じるという一直線のやり取りでした。ここから扱う3つの機構は、向きが逆になる場面を含みます。サーバーがクライアントに何かを頼む、という流れです。
サンプリング:サーバーがクライアントにLLMを呼んでもらう
MCPサーバーを作るとき、サーバー自身の中でもう一度AIに何か考えさせたい場面が出てきます。集めた情報を要約させる、翻訳させる、といった処理です。
ここで選択肢が2つに分かれます。サーバー自身がAIのAPIキーを持ち、自分で呼び出す方法と、接続しているクライアント側に「代わりに呼んでほしい」と頼む方法です。MCPが用意しているのは後者で、サンプリングと呼びます。
サーバーが自分でAIを呼ぶか、クライアントに頼むか
サーバーが独自にAIへ接続する。鍵の管理・費用の負担・利用制限は、すべてサーバー側の責任になる。
サーバーは鍵を持たない。接続しているクライアントに依頼し、費用の負担や利用制限もクライアント側に委ねられる。
公式仕様は、サンプリングにも人間が止められる機会を求めています。サーバーから来た依頼をそのままAIに投げるのではなく、送る内容をユーザーが確認・編集でき、返ってきた結果もユーザーが確認してから使う。この一往復が前提です。
通知:進んでいることを伝える
時間のかかる処理を頼んだとき、何も反応がないと「動いているのか、止まっているのか」が分かりません。これに応えるのが通知です。
長く続く処理の途中で、サーバーは進み具合をクライアントに送ることができます。今どこまで進んだか、全体のどれくらいかという値です。
処理を頼む
時間のかかる処理を、進捗を受け取りたい形で依頼する
サーバーが進捗を送る
区切りのよいタイミングで、進んだ分をクライアントに伝える
クライアントが表示する
進捗バーやログなど、見せ方はアプリの設計次第
完了で止まる
処理が終わると、進捗の通知もそこで終わる
通知を送るかどうか、どれくらいの頻度で送るかは、サーバー側が自由に選べます。一切送らないサーバーがあってもかまいません。受け取る側も、表示するかどうかを自由に決められます。
ルート:どこを触っていいかを伝える
3つ目はルートです。サーバーがローカルのファイルを扱う必要があるとき、「どこまでなら触っていいか」を先に知っておく必要があります。ルートは、クライアントがその境界をサーバーに伝える仕組みです。
境界となるのは、実在するフォルダやファイルを指すfile://形式のURIです。ユーザーが選んだプロジェクトフォルダの範囲だけをサーバーに見せる、という使い方をします。
注意
ルートは自動では守られない
公式仕様は、サーバーがルートの境界を尊重すべきだと定めています。ですが、これはプロトコルが自動で強制してくれる仕組みではありません。境界の外に出ないよう確かめる処理は、サーバーを作る側が自分で書く必要があります。「伝えられている」ことと「守られている」ことは、別の話です。
この「自動では守られない」という一点は、次のレッスンで扱う安全の話の出発点になります。
この行き来は、通信のやり方に支えられている
サンプリング・通知・ルートのように、サーバーからクライアントへ話しかける動きは、実際にはどう通信で実現されているのでしょうか。MCPは通信のやり方(トランスポート)を2種類定めています。
クライアントがサーバーをサブプロセスとして起動し、標準入出力でやり取りする。同じマシンの中で完結する、最も単純な形
1つのHTTPエンドポイントに対してPOSTとGETの両方を使い、必要に応じてサーバーからも継続的に送り続けられる。ネットワーク越しに使う形
どちらの上でも、ここまで見てきたツール・リソース・プロンプト・サンプリング・通知・ルートという機構そのものは変わりません。変わるのは、その行き来がどう配線されているかだけです。通信方式の細部まで踏み込むのは、実装に入ってからで十分です。
やってみよう
演習1:サンプリングが役立つ場面を考える
自分が使いたい、または作りたいMCPサーバーを思い浮かべてください。そのサーバーが、集めた情報を要約する・翻訳する・言い換えるといった処理を挟みたくなる場面はありますか。あるなら、それがサンプリングの候補です。
演習2:進捗通知がないと不安になる処理を挙げる
自分の業務で、実行に時間がかかり、何の反応もないと不安になる処理を1つ挙げてください。その処理をMCPサーバー化するなら、通知をどのタイミングで送るとよいか考えてみてください。
今日のまとめ
3行で振り返ります。
- サンプリングは、サーバーが自分でAIの鍵を持つ代わりに、クライアントに呼び出しを頼む仕組み
- 通知は、時間のかかる処理の進み具合をサーバーからクライアントへ伝える、任意の仕組み
- ルートはアクセスしてよい範囲を伝えるだけで、守る処理は実装側が自分で書く必要がある
次のレッスンでは、この「自分で書く必要がある」という一点を軸に、MCPの安全性が誰の責任なのかをまとめます。
セルフチェック
1. サンプリングの目的として正しい説明はどれですか。
2. MCPの通知(進捗の伝達)について正しい説明はどれですか。
3. ルート(Roots)について、本文で強調していた注意点はどれですか。