メインコンテンツへスキップ

サンプリング・通知・ルート:サーバーとクライアントが行き来する仕組み

  • レッスン 4
  • 12分

このレッスンで

終わる頃には、次ができるようになります

  • サンプリング・通知・ルートを、サーバーとクライアントが双方向にやり取りする仕組みとして説明できる
  • サンプリングがサーバー側のAPIキー保有をどう変えるかを説明できる
  • ルートの制約はプロトコルが自動で守るものではないと説明できる

ここまでの3つの土台は、どれもクライアントがサーバーに尋ね、サーバーが応じるという一直線のやり取りでした。ここから扱う3つの機構は、向きが逆になる場面を含みます。サーバーがクライアントに何かを頼む、という流れです。

サンプリング:サーバーがクライアントにLLMを呼んでもらう

MCPサーバーを作るとき、サーバー自身の中でもう一度AIに何か考えさせたい場面が出てきます。集めた情報を要約させる、翻訳させる、といった処理です。

ここで選択肢が2つに分かれます。サーバー自身がAIのAPIキーを持ち、自分で呼び出す方法と、接続しているクライアント側に「代わりに呼んでほしい」と頼む方法です。MCPが用意しているのは後者で、サンプリングと呼びます。

サーバーが自分でAIを呼ぶか、クライアントに頼むか

サーバー自身がAPIキーを持つ

サーバーが独自にAIへ接続する。鍵の管理・費用の負担・利用制限は、すべてサーバー側の責任になる。

サンプリングでクライアントに頼む

サーバーは鍵を持たない。接続しているクライアントに依頼し、費用の負担や利用制限もクライアント側に委ねられる。

公式仕様は、サンプリングにも人間が止められる機会を求めています。サーバーから来た依頼をそのままAIに投げるのではなく、送る内容をユーザーが確認・編集でき、返ってきた結果もユーザーが確認してから使う。この一往復が前提です。


通知:進んでいることを伝える

時間のかかる処理を頼んだとき、何も反応がないと「動いているのか、止まっているのか」が分かりません。これに応えるのが通知です。

長く続く処理の途中で、サーバーは進み具合をクライアントに送ることができます。今どこまで進んだか、全体のどれくらいかという値です。

01

処理を頼む

時間のかかる処理を、進捗を受け取りたい形で依頼する

02

サーバーが進捗を送る

区切りのよいタイミングで、進んだ分をクライアントに伝える

03

クライアントが表示する

進捗バーやログなど、見せ方はアプリの設計次第

04

完了で止まる

処理が終わると、進捗の通知もそこで終わる

通知が届くまで

通知を送るかどうか、どれくらいの頻度で送るかは、サーバー側が自由に選べます。一切送らないサーバーがあってもかまいません。受け取る側も、表示するかどうかを自由に決められます。


ルート:どこを触っていいかを伝える

3つ目はルートです。サーバーがローカルのファイルを扱う必要があるとき、「どこまでなら触っていいか」を先に知っておく必要があります。ルートは、クライアントがその境界をサーバーに伝える仕組みです。

境界となるのは、実在するフォルダやファイルを指すfile://形式のURIです。ユーザーが選んだプロジェクトフォルダの範囲だけをサーバーに見せる、という使い方をします。

注意

ルートは自動では守られない

公式仕様は、サーバーがルートの境界を尊重すべきだと定めています。ですが、これはプロトコルが自動で強制してくれる仕組みではありません。境界の外に出ないよう確かめる処理は、サーバーを作る側が自分で書く必要があります。「伝えられている」ことと「守られている」ことは、別の話です。

この「自動では守られない」という一点は、次のレッスンで扱う安全の話の出発点になります。


この行き来は、通信のやり方に支えられている

サンプリング・通知・ルートのように、サーバーからクライアントへ話しかける動きは、実際にはどう通信で実現されているのでしょうか。MCPは通信のやり方(トランスポート)を2種類定めています。

stdio

クライアントがサーバーをサブプロセスとして起動し、標準入出力でやり取りする。同じマシンの中で完結する、最も単純な形

Streamable HTTP

1つのHTTPエンドポイントに対してPOSTとGETの両方を使い、必要に応じてサーバーからも継続的に送り続けられる。ネットワーク越しに使う形

2つのトランスポート

どちらの上でも、ここまで見てきたツール・リソース・プロンプト・サンプリング・通知・ルートという機構そのものは変わりません。変わるのは、その行き来がどう配線されているかだけです。通信方式の細部まで踏み込むのは、実装に入ってからで十分です。


やってみよう

演習1:サンプリングが役立つ場面を考える

自分が使いたい、または作りたいMCPサーバーを思い浮かべてください。そのサーバーが、集めた情報を要約する・翻訳する・言い換えるといった処理を挟みたくなる場面はありますか。あるなら、それがサンプリングの候補です。

演習2:進捗通知がないと不安になる処理を挙げる

自分の業務で、実行に時間がかかり、何の反応もないと不安になる処理を1つ挙げてください。その処理をMCPサーバー化するなら、通知をどのタイミングで送るとよいか考えてみてください。


今日のまとめ

3行で振り返ります。

  • サンプリングは、サーバーが自分でAIの鍵を持つ代わりに、クライアントに呼び出しを頼む仕組み
  • 通知は、時間のかかる処理の進み具合をサーバーからクライアントへ伝える、任意の仕組み
  • ルートはアクセスしてよい範囲を伝えるだけで、守る処理は実装側が自分で書く必要がある

次のレッスンでは、この「自分で書く必要がある」という一点を軸に、MCPの安全性が誰の責任なのかをまとめます。

セルフチェック

1. サンプリングの目的として正しい説明はどれですか。

2. MCPの通知(進捗の伝達)について正しい説明はどれですか。

3. ルート(Roots)について、本文で強調していた注意点はどれですか。

SourceARTICLE
MCP公式仕様: Sampling

サンプリングの目的と、人間の承認を求める原則の一次情報。

Webmodelcontextprotocol.io
modelcontextprotocol.io/specification/2025-06-18/client/sampling
SourceARTICLE
MCP公式仕様: Roots

ルートの定義と、境界を守る責任がどちらにあるかの一次情報。

Webmodelcontextprotocol.io
modelcontextprotocol.io/specification/2025-06-18/client/roots
SourceARTICLE
MCP公式仕様: Transports

stdioとStreamable HTTP、2つの通信方式の一次情報。

Webmodelcontextprotocol.io
modelcontextprotocol.io/specification/2025-06-18/basic/transports

このレッスンは役に立ちましたか?