AI活用

MCPのTools・Resources・Promptsの違い|何をどのprimitiveで公開するか

MCP ServerでTools・Resources・Promptsのどれを使うか、制御主体、副作用、URI、テンプレートの違いと10ユースケースの分類表で解説します。

この記事の目次
  1. 結論:動詞・名詞・手順で分ける
  2. Tools:処理と副作用を公開する
  3. Resources:URIで参照情報を公開する
  4. Prompts:利用者が選ぶ手順を公開する
  5. 10ユースケースの分類表
  6. 曖昧なケースの判断方法
  7. 検索結果はResourceですか、Toolですか?
  8. 「現在時刻」はどちらですか?
  9. テンプレートから実行まで一気にできますか?
  10. 設計の判断フロー
  11. Tool設計チェックリスト
  12. Resource・Prompt設計チェックリスト
  13. まとめ

MCPのTools・Resources・Promptsは、どれもAIへ機能を提供しますが、役割と選び方が異なります。処理を実行するならTool、読み取る情報ならResource、利用者が始める再利用手順ならPromptが基本です。

同じ「顧客情報を扱う」機能でも、顧客一覧を読む処理と、顧客を更新する処理ではprimitiveを分けます。副作用、選択主体、入力、出力、権限を基準に判断します。

この記事では、3primitiveの違い、曖昧なケース、10ユースケース分類表、設計チェックリストを解説します。

情報確認日:2026年7月17日(日本時間)

結論:動詞・名詞・手順で分ける

primitive 考え方 主な制御
Tools 動詞:実行する model-controlled issue作成、検索、計算
Resources 名詞:読み取る application-controlled README、schema、文書
Prompts 手順:始める user-controlled review、要約、調査template

これはMCP公式ドキュメントの基本分類です。HostのUIや実装で選択方法は変わりますが、Server設計時に「誰が、いつ、何を選ぶか」を考える出発点になります。

スポンサーリンク

Tools:処理と副作用を公開する

Toolは名前、説明、入力schemaを持つ実行可能な処理です。モデルが利用候補から選ぶため、説明とschemaは曖昧にせず、コード側で引数を検証します。

  • 検索、計算、変換
  • ファイル・issue・下書きの作成
  • データ更新、通知、外部API呼び出し

「何でも実行するshell」のような広いToolより、search_docscreate_issue_draftのように目的と権限を小さく分けます。削除、送信、公開などはHostで承認を求めます。

Resources:URIで参照情報を公開する

ResourceはURIで識別できる読み取り用のデータです。text、JSON、画像などのMIME typeと内容を返し、アプリや利用者がモデルのcontextへ追加できます。

file:///project/README.md
schema://database/orders
docs://handbook/expenses
repo://current/diff

URIを知っているだけで読める設計にせず、利用者、tenant、project、文書ごとの権限を検査します。大きなResourceは一覧と個別読み取りを分け、必要な範囲だけ返します。

Prompts:利用者が選ぶ手順を公開する

Promptは、引数を受け取り、再利用可能なmessage templateを返します。「PRをレビューする」「障害報告を整理する」など、利用者がメニューやcommandから開始する定型作業に向きます。

Prompt: review-pull-request
Arguments:
- focus: security | correctness | performance
- severity: blocker | high | all

Result:
- roleと指示
- 対象diffを確認する手順
- 出力形式

Promptは処理そのものを実行しません。Promptから始まった会話でResourceを読み、モデルがToolの利用を提案する組み合わせができます。

10ユースケースの分類表

用途 primitive 理由 注意
1.READMEを読む Resource 既存情報の読み取り project範囲
2.DB schemaを見る Resource 構造化された参照情報 機密列を除外
3.issueを作る Tool 外部状態を変更 下書きと作成を分離
4.注文を検索する Tool queryを実行し結果を返す tenantと件数制限
5.現在のdiffを取得 Resource 読み取り時点のcontext 秘密fileを除外
6.PRレビューを開始 Prompt 利用者が選ぶ定型手順 対象Resourceを明示
7.価格を計算する Tool 入力から決定的処理 通貨・丸めを固定
8.社内規程を提示 Resource 正本を参照 版と権限
9.障害報告を作成 Prompt+Tool template後に下書き保存 外部送信は承認
10.顧客調査workflow Prompt+Resource+Tool 手順、資料、検索を組合せ 個人情報と監査

曖昧なケースの判断方法

検索結果はResourceですか、Toolですか?

固定された既知URIの文書を読むならResourceが自然です。利用者のquery、filter、pageを受け、毎回検索処理を実行するならToolが自然です。検索結果の各文書をResource URIで返す組み合わせもできます。

「現在時刻」はどちらですか?

引数なしの取得でも、呼び出すたびに計算する機能としてToolにできます。現在状態のsnapshotをResourceとして表す設計も可能です。更新頻度、購読、選択主体で決めます。

テンプレートから実行まで一気にできますか?

Promptはmessageを用意し、Toolは処理を実行します。実行まで必要なら分けて公開し、Hostの承認を経てToolを呼びます。

設計の判断フロー

  1. 外部状態を変更するか → Tool
  2. 引数付きで検索・計算するか → Tool候補
  3. URIで識別する既存情報か → Resource
  4. 利用者が明示的に開始する定型手順か → Prompt
  5. 複数の役割があるか → primitiveを組み合わせる

Tool設計チェックリスト

  • 名前が具体的な動詞になっている
  • 説明に利用条件と副作用がある
  • 入力schemaが型・必須・許可値を制限する
  • 利用者・tenant・対象の認可をコードで確認する
  • timeout、rate limit、idempotencyがある
  • 高影響操作を承認なしで実行しない

Resource・Prompt設計チェックリスト

  • Resource URIが安定し、MIME typeが正しい
  • 一覧と読み取りの両方で権限を確認する
  • 大きすぎる内容を無制限に返さない
  • Prompt名と引数が利用者に理解できる
  • Prompt内で外部データを命令として扱わない
  • 更新、廃止、versionの方針がある

MCP全体のHost・Client・Server構成はFlutter向けMCP Serverの例、モデルがToolを選ぶ一般的な仕組みはTool Callingとはも参考になります。

まとめ

MCPでは、処理を実行するならTool、URIで読む情報ならResource、利用者が開始する定型手順ならPromptが基本です。誰が選ぶか、副作用があるか、入力と出力をどう制御するかで判断します。

複雑な業務は、Promptで開始し、Resourceで根拠を読み、Toolで処理するように分けると、権限と承認を設計しやすくなります。

スポンサーリンク