MCPのプリミティブ
概要
プリミティブとはMCPサーバー・クライアントそれぞれがLLMに渡す機能のことを指す
MCPサーバー
リソース:読み取り専用のコンテンツを提供
プロンプト:プロンプトテンプレートを提供
ツール:LLMを拡張する小さなプログラム
MCPクライアント
サンプリング:MCPサーバーにLLM推論を提供
ルート:MCPホストへのアクセスを制御
MCPサーバー: リソース
LLMに対して、取り専用のコンテンツをコンテキストとして提供することができる
EX)社内の業務マニュアル・ライブラリのドキュメント
形式はテキスト・HTMLなどの構造化文書・画像などのバイナリデータを渡す
RAGと勘違いをしそうだが、RAGは検索結果によって動的にかわるコンテキストである一方、リソースは固定のコンテキストを渡す点で異なる
構造化データをURIで定義してLLMのデータを渡す。URIを渡すことでLLM自身がどのコンテンツを読み込めばいいかを判断させる材料にある。
URIはスキーマとコンテンツのパスの組み合わせ
Ex) note://report.txt
MCPサーバー: プロンプト
MCPサーバーが事前に再利用可能な入力テンプレートを準備しておいて、ユーザーが必要に応じてそのテンプレートを使用する仕組み
Ex)AIエージェントの翻訳して指示した時に、毎回「以下の文章を翻訳して」と記載しているが、指定のプロンプトを呼び出せば、この指示文を省略することができる
ポイントはユーザーがプロンプトを利用を明示的に選択すること。LLMが勝手に使用されるわけではない
プロンプトエンジニアリングをサポートする役割が大きく、毎回入力する手間を省き一定の高品質をプロンプトを担保するために存在する
MCPサーバー: ツール
LLMが実際に外部システムを利用するための機能
Ex) Web検索、天気予報を調べる、プレゼンし資料を作成
LLMが自律的にMCPサーバーのツールを呼び出して実行するために、MCPサーバーへツール一覧を事前に渡しておく
MCPが存在しない時代のFunction callingでは、ツール定義・呼び出し・レスポンスを自身で定義しないといけなかったが、MCPが登場してからは、Function callingがMCPを呼び出すことでツールを提供できるようになった。
code:シーケンス.mermaid
sequenceDiagram
participant A as アプリ
participant M as MCPサーバー
participant L as LLM
A->>M: 使えるツール一覧をもらう(tools / list)
M-->>A:
A->>L: ユーザーの質問+使えるツール知覧を入力
L-->>A: MCPサーバーに投げるリクエストをJSON-RPC形式で返却
A->>M: MCPサーバーにツール実行を依頼(tools / call)
M->>M: ツール実行
M-->>A: MCPサーバーからツール実行結果が返却
A->>L: ツール実行結果を入力
L-->>A: ユーザーへの最終回答を返却
MCPクライアント: サンプリング
MCPサーバー→MCPクライアントを経由してLLMにテキスト生成を依頼することができる機能
MCPサーバーから受け取ったツール・リソースの結果を一度LLMに要約させて、ユーザーに表示するみたいな動きが可能になる
サンプリングを対応しているアプリケーションはまだ多くない。これから普及される・
サンプリングは複雑なAIエージェント処理を行う時に必要になる。たとえば、MCPサーバー経由で取得した結果を元に、再度MCPサーバーを使用するなど、一度に複数の複雑な処理をする時に役にたつ。
code:サンプリングのユースケス.mermaid
sequenceDiagram
participant A as アプリ
participant M as MCPサーバー
participant L as LLM
M->>A: あなたの使っているLLM貸してください!指示文は「xxx」で
A->>A: 指示文に対するアプリユーザーの承認
A->>L: MCPサーバーに要求に従いLLMに指示文入力
L-->>A: LLMの応答を受け取る
A->>A: LLMの応答の応答をMCPサーバーに渡していいか、アプリユーザーの承認
A-->>M: LLM応答を返却
MCPクライアント:ルート
MCPサーバーがアクセスできるファイル・APIを制限する仕組み
ルートはあくまでアクセス可能なものを制御しているだけ。MCPサーバー側でファイルアクセスのツールなどを作成する際には、自前でロジックを作成する必要がある
code:ルートの動き.mermaid
sequenceDiagram
participant M as MCPサーバー
participant F as 財務情報
participant S as 売上情報
participant H as 人事情報
M->>F: 財務情報ならこのディレクトリにアクセス
M->>S: 売上情報ならこのディレクトリにアクセス
M-->>H: ルートに設定されていないディレクトリは見ないように制御しよう
MCPクライアントがアクセスをするURIに対してタグ付けができ、LLMが効率よく探索することができる
URL: /home/xxx/user-manual→ name: 操作マニュアル
URL: /hode/xxx/finacial → name: 財務情報
インスペクター
MCPサーバーのテスト・デバッグするためのツールがAnthoropicから提供されている