MCPツール説明は権限境界ではない: 宣言と実権限の照合
ツール名、説明、schemaはモデルの選択を助けますが、サーバーが実際に読める情報や送信先を証明しません。完全な宣言と実行権限、呼出引数、外部接続先を分けて確認する導入基準です。
Read in EnglishModel Context Protocolのstable仕様は、ツールのdescriptionを人が読めるmetadataとし、ツールはモデルが文脈から発見・呼出できる機能だと定義しています。一方で、サーバーを信頼できない場合、クライアントはtool annotationsを信頼してはならないとも明記しています。ここから言える中心的な事実は、説明文はツール選択を助けても、その背後にあるprocess、credential、filesystem、networkを制限しないということです。
Invariant Labsによるtool poisoningの一次報告は、この差が悪用される例を示しました。足し算ツールの説明内に、local設定とSSH private keyを読み、tool引数へ含めるようモデルへ指示する文が埋め込まれていました。この公開実験は、説明文がinstruction経路になり得る根拠です。ただし、すべてのclient、model、MCP serverで同じ挙動になると証明したものではありません。
宣言された機能と実際に行使できる権限
search_invoicesというツールがあり、表示上の用途が「取引先名で請求書を検索」、入力がqueryだけだったとします。この情報だけでは、server processが環境変数、home directory、広い会計API token、任意の外部hostへ到達できないとは確認できません。
| 確認対象 | 確認できること | 確認できないこと |
|---|---|---|
| ツール名と説明 | 想定用途とモデル向け案内 | runtime権限や説明の誠実性 |
| input schema | 受理する引数の形 | schema外の隠れた処理 |
| OAuth scope | 対象APIで許可された操作 | local fileや別credentialへのアクセス |
| OS/container制限 | processから見えるfile、process、socket | 返却内容の正しさ |
| 外部接続制限とlog | 許可・観測された送信先 | 許可先を使った隠れた目的 |
導入記録は二つに分けます。宣言記録には、UIで省略されていないtools/listの説明、schema、annotationsを保存します。実権限記録には、実行物またはremote endpoint、付与scope、渡すsecret、mount path、実行user、許可された外部接続先を残します。攻撃を再現できなくても、両者の不一致は追加調査または接続制限の理由になります。
接続前と更新時の確認操作
接続前にtool catalog全文を取得し、parameter descriptionを含め、モデルへ渡る文字列を確認します。serverはtask専用account、必要最小のAPI scope、限定したmount、送信先allowlistで起動します。情報を外へ渡す可能性があるcallでは、親しみやすいtool名だけでなく、実際の引数と送信先を承認画面へ出します。stable tools仕様も、悪意または誤操作によるdata exfiltrationを避けるため、呼出前にtool inputsを表示するよう推奨しています。
package、container image、endpoint、server versionの変更後は、宣言を再取得します。stable仕様ではtool list変更の通知が可能なため、過去の承認を後日のdescriptionやschemaへ自動的に広げるべきではありません。新旧catalogを比較し、追加された引数、instruction、送信先、能力を再評価します。hashやdiffは変更を検出しますが、安全性までは判断しません。
仕様の状態と限界
2026年9月22日時点の根拠は、2026年7月28日版のstable MCP仕様です。別に公開されているdraft仕様は作業中の文書として確認し、導入済み要件とはみなしていません。sandbox、catalog差分、外部接続制限は、stable仕様のtrust modelと公開実験から導いた運用上の推奨であり、MCP protocolが自動的に強制する機能ではありません。
今回のsource reviewでは、特定clientの再現試験、稼働serverの検査、普及率の集計は実施していません。説明文は機能を説明する資料、実権限はruntimeと送信先で別に確認する、という接続条件までを示します。
