MCPリソースは、MCP サーバーが AI へ見せるために公開する読み取り専用のデータです。 ファイル内容、DB スキーマ、設定情報、API ドキュメントなど、「文脈として渡したい情報」がここに入ります。
ツールとの決定的な違いは「誰が選ぶか」
同じ「ファイルを読む」でも、ツールとして実装すればモデルが自分の判断で呼び、リソースとして公開すればアプリケーション側(=ユーザーが操作する画面)が何を渡すか決めます。 公式ドキュメントでもリソースは application-driven(アプリケーション主導) と位置づけられています。ファイルピッカーで選ぶ、検索して絞る、自動で添付する、といったUIはすべてこの前提の上に成り立っています。 (出典:MCP 仕様 / Resources)
URI で識別する
リソースは URI で一意に識別され、MIME タイプを持ちます。file:///project/README.md のような固定URIのほか、weather://forecast/{city} のようにパラメータを含むテンプレートも定義できます。
クライアントは resources/list で一覧を取得し、resources/read で中身を読みます。変更通知を購読する仕組みもあり、更新されたら読み直す動きが作れます。
公開範囲は最初に絞る
いちばん多い事故は、リポジトリ全体やホームディレクトリをそのままリソースとして開けてしまうことです。.env、鍵ファイル、顧客データが混ざっていても、リソースは中身を見せるためのものなので素通りします。
- 公開するディレクトリを列挙する(除外リストで運用しない)
- 機密が入りうる拡張子・ファイル名は明示的にはじく
- 「見せてよいか」の判断はサーバー側で行い、クライアントの善意に頼らない