+ 作るログイン
図を読み込んでいます…
1 / 7
MCP入門 ― AIに道具を持たせる共通の作法 / 全6章

サーバーが渡す3つのもの ― ツール・リソース・プロンプト

発行
アニメモ公式
版
第1版
改訂
コマ
全7

MCPサーバーが外に出せるのは3種類だけ。分かれている理由は機能ではなく「誰が使うと決めるか」です。ツールの説明文がモデルの目になる、という設計上いちばん大事な点まで。

サーバーが渡せるものは、3種類しかない

MCPサーバーが外に出せるものは、ツール・リソース・プロンプトの3つだけです。この3つを覚えれば、サーバーの説明書はだいたい読めます。

- ツール(Tools) — 実行できる関数。検索する、メールを送る、予定を作る
- リソース(Resources) — 読み取り専用のデータ。ファイルの中身、スキーマ、過去の記録
- プロンプト(Prompts) — 定型の指示テンプレート。「休暇の計画を立てる」「議事録を要約する」

3つに分かれているのは、機能の都合ではありません。誰が使うと決めるかが違うからです。次のページで見ます。

  • 03 / MCP GUIDE
  • 1 / 7
  • サーバーが渡せるものは3種類しかない
  • ツール
  • リソース
  • プロンプト
  • 実行できるもの・読めるもの・選べるひな形。

分かれているのは「誰が決めるか」が違うから

誰が決めるかどういうことか
ツールモデル会話の流れを見て、モデルが呼ぶと判断する
リソースアプリどれを文脈に入れるかをAIアプリ側が選ぶ
プロンプト人利用者がメニューやスラッシュコマンドから選ぶ

ここが腑に落ちると、設計の迷いが減ります。

「モデルに勝手に実行されては困るもの」をツールにしてはいけません。逆に、「読ませたいだけのデータ」をツールにすると、モデルが不必要に呼び出して文脈を汚します。

迷ったときの問いはこれです。この操作を、モデルが自分の判断で起こしてよいか。 よければツール、よくなければリソースかプロンプトです。

  • 03 / MCP GUIDE
  • 2 / 7
  • 分かれているのは「誰が決めるか」が違うから
  • ツール
  • リソース
  • プロンプト
  • 決めるのは モデル
  • 決めるのは アプリ
  • 決めるのは 人
  • モデルが決める/アプリが決める/人が決める。

ツール:一覧をもらってから、呼ぶ

ツールの使い方は2手です。

- tools/list — 使えるツールの一覧と、それぞれの入力の形をもらう
- tools/call — 名前と引数を指定して実行する

一覧が別になっているのが効いています。サーバー側でツールを増やしても、クライアントは tools/list を取り直すだけで対応できます。再起動も再ビルドも要りません。

結果は content という配列で返ります。テキストだけでなく、画像や他の形式も返せるようになっています。

ツールが増減したときは通知も受け取れますが、これは申し込み制です。クライアントが subscriptions/listen で「ツール一覧の変更を知りたい」と伝えたときだけ届きます。届かないこともあるので、たまに取り直す作りにしておくのが安全です。

  • 03 / MCP GUIDE
  • 3 / 7
  • ツール:一覧をもらってから、呼ぶ
  • ツール
  • リソース
  • プロンプト
  • 決めるのは モデル
  • 決めるのは アプリ
  • 決めるのは 人
  • tools/list
  • tools/call
  • tools/list で一覧、tools/call で実行。増えても取り直すだけ。

ツールの説明文が、モデルの目になる

ツール1つの定義は、だいたいこの形です。

json
{
  "name": "searchFlights",
  "title": "航空券を探す",
  "description": "出発地・到着地・日付から空席を検索する",
  "inputSchema": {
    "type": "object",
    "properties": {
      "origin": { "type": "string", "description": "出発都市" },
      "destination": { "type": "string", "description": "到着都市" },
      "date": { "type": "string", "format": "date" }
    },
    "required": ["origin", "destination", "date"]
  }
}

入力の形は JSON Schema で書きます。型が決まるので、クライアントが呼び出し前に検証できます。

そして最重要なのが description です。モデルはこの文章だけを見て、使うかどうかを決めます。 コードの中身は見えていません。

- 名前は具体的に。calculate より calculator_arithmetic
- 説明には「何をするか」だけでなく「どんなときに使うか」を書く
- 引数1つ1つにも説明を付ける

説明文の質が、そのままツールの使われ方の質になります。ここは手を抜くところではありません。

  • 03 / MCP GUIDE
  • 4 / 7
  • ツールの説明文が、モデルの目になる
  • ツール
  • リソース
  • プロンプト
  • 決めるのは モデル
  • 決めるのは アプリ
  • 決めるのは 人
  • tools/list
  • tools/call
  • name / title / description / inputSchema(JSON Schema)
  • ★コードは見えない。文章だけで「使うか」が決まる
  • モデルが見ているのは description と inputSchema だけ。

リソース:URIで指す、読み取り専用のデータ

リソースには1つずつ URI が付きます。file:///Documents/report.md や calendar://events/2026 のような形です。MIMEタイプも一緒に宣言します。

指し方は2種類あります。

- 直接指定 — calendar://events/2026 のように、決まったURIを指す
- テンプレート — travel://activities/{city}/{category} のように、穴の空いたURIを置いておく

テンプレートがあると、travel://activities/barcelona/museums のような組み合わせを後から作れます。入力補完にも使えます。

操作は resources/list(一覧)、resources/templates/list(テンプレート一覧)、resources/read(読む)です。

リソースはアプリが選ぶものなので、見せ方は自由です。ファイルツリーのように並べても、検索欄を出しても、会話の内容から自動で選んでも構いません。プロトコルはUIを決めていません。

  • 03 / MCP GUIDE
  • 5 / 7
  • リソース:URIで指す、読み取り専用のデータ
  • ツール
  • リソース
  • プロンプト
  • 決めるのは モデル
  • 決めるのは アプリ
  • 決めるのは 人
  • tools/list
  • resources/list
  • tools/call
  • resources/read
  • calendar://events/2026
  • travel://activities/{city}/{category} ← テンプレート
  • 直接指すURIと、穴の空いたテンプレート。

プロンプト:人が選んで起動する定型

プロンプトは、サーバー作者が用意する手順のひな形です。prompts/list で一覧を取り、prompts/get で中身をもらいます。

引数を持てるので、「休暇の計画」プロンプトに行き先・日数・予算を渡す、といった使い方ができます。

json
{
  "name": "plan-vacation",
  "title": "休暇の計画を立てる",
  "arguments": [
    { "name": "destination", "type": "string", "required": true },
    { "name": "duration", "type": "number" }
  ]
}

必ず人が明示的に選びます。 モデルが勝手に起動することはありません。スラッシュコマンド(/plan-vacation)やコマンドパレットとして出す実装が多いのは、この性質に合っているからです。

サーバーを作る側から見ると、プロンプトは「このサーバーの正しい使い方」を見せる場所でもあります。ツールとリソースをどう組み合わせるとよいかを、ひな形として配れます。

  • 03 / MCP GUIDE
  • 6 / 7
  • プロンプト:人が選んで起動する定型
  • ツール
  • リソース
  • プロンプト
  • 決めるのは モデル
  • 決めるのは アプリ
  • 決めるのは 人
  • tools/list
  • resources/list
  • prompts/list
  • tools/call
  • resources/read
  • prompts/get
  • /plan-vacation destination=Barcelona duration=7
  • スラッシュコマンドとして出す実装が多い
  • モデルは勝手に起動しない。必ず人が選ぶ。

確認:データベースを更新するのは、どれ?

答えはツールです。書き込み・送信・作成のように副作用があるものは、すべてツールになります。

リソースは読み取り専用です。「データベースのスキーマ」はリソース、「データベースを更新する」はツール、と分かれます。

ここで気をつけたいのが、ツールはモデルが判断して呼ぶという性質です。破壊的な操作をツールにするなら、アプリ側で実行前の確認を出す、権限を絞る、といった手当てが要ります。仕様も「ツールは実行前に利用者の同意を求めることがある」と書いています。

3つの区別をもう一度。

- モデルが決める → ツール
- アプリが決める → リソース
- 人が決める → プロンプト

次の章では、この3つがどうやって相手に届くのかを見ます。

  • 03 / MCP GUIDE
  • 7 / 7
  • 確認:データベースを更新するのは、どれ?
  • ツール
  • リソース
  • プロンプト
  • 決めるのは モデル
  • 決めるのは アプリ
  • 決めるのは 人
  • tools/list
  • resources/list
  • prompts/list
  • tools/call
  • resources/read
  • prompts/get
  • 更新・送信・作成 → ツール
  • リソースは読み取り専用
  • 副作用があるものは、すべてツール。

0 件のコメント

読み込み中…

権利侵害・不適切な内容の連絡: [email protected]