14
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

リンクアンドモチベーションAdvent Calendar 2024

Day 9

MCPサーバーの機能を全部(Prompt, Resource, Tool)試してみる

Last updated at Posted at 2024-12-08

はじめに

先日AnthropicからMCP (Model Context Protocol) が発表され話題になっています。

MCPのサーバー側の基本機能としてはPrompt, Resource, Toolの3つが存在するのですが、SNS等で話題になっているMCPの利用例はToolの利用がほとんどであり、その他のResourceやPromptについては触れられているものが少なかったので、調べてみることにしました。

MCPサーバーの3つの基本機能について

下記ページに記載の内容を日本語で整理します。

Prompts:LLMとのインタラクションをガイドする、事前定義されたテンプレートや指示
Resources:モデルに追加のコンテキストを提供する構造化データやコンテンツ
Tools:モデルが操作を行ったり、情報を取得したりできるようにする実行可能な関数

各要素は、以下の制御階層でまとめることができます。

プリミティブ 制御主体 説明
Prompts ユーザー制御 ユーザーの選択によって呼び出される対話型テンプレート スラッシュコマンド、メニューオプション
Resources アプリケーション制御 クライアントによって付与・管理されるコンテキストデータ ファイル内容、Git履歴
Tools モデル制御 LLM(大規模言語モデル)に公開された実行関数 API POSTリクエスト、ファイル書き込み

また、大きな違いとしてPromptとToolは呼び出し時に変数を渡せるのに対し、ResourceはURIを指定することしかできません。
https://spec.modelcontextprotocol.io/specification/server/prompts/#getting-a-prompt
https://spec.modelcontextprotocol.io/specification/server/resources/#reading-resources
https://spec.modelcontextprotocol.io/specification/server/tools/#calling-tools

Claude Desktop Appでの活用例

実際に、それぞれの機能を提供するMCPサーバーを、Claudeのデスクトップアプリを通して触ってみます。
(Apple sillicon, MacOS 15.1.1)

Prompt

Everything MCP Server

まずは簡単な例を確かめるために、以下のeverythingサーバーを使ってみます。

この中で提供されているPromptは以下の2つです

  • simple_prompt: シンプルな固定prompt
  • complex_prompt: 変数ありのprompt

このサーバーを設定してClaudeを起動してみるとファイルを添付するボタンの横に Attach from MCP というボタンが出現します。

image.png

このボタンをクリックすると、サーバーで定義されているPromptが表示されました。
(後述するResourceもここに表示されています)
image.png

実際に simple_prompt を選択してみるとこのようにtxtファイルが添付されるだけでした。
選んだらpromptが展開される挙動を期待していたのですが、現状はそこまで実装されていないようです。
image.png

続いて変数ありの complex_prompt を選択してみると、変数の入力モーダルが展開されます。
image.png

ただしこれも、値を入力してsubmitすると添付ファイルができるだけでした。
もちろんこれでも十分プロンプトテンプレートを提供する機能は果たせていますが、体験としてはちょっと物足りないかなと感じました。

Fetch MCP Server

もう1つ、Prompt機能を提供しているサーバーがあったので、こちらも試してみます。

このサーバーでは、URLを引数として渡せる fetch promptが提供されています。

先ほど同様、設定をしてClaudeを起動すると fetch というpromptが選択できます。

image.png

試しにqiitaのtopページのurlを入れてみます。
image.png

すると先ほど同様に、txtファイルが添付ファイルとして添付されました。
そのファイルの中身を見てみるとPromptではなく実際にfetchしてきた内容そのものが入っていました。

image.png

個人的にはPromptの使い方としてはあくまで、MCPサーバー内のツールをうまく使えるプロンプトなどをスラッシュコマンドなどで呼び出し、展開するようなものだと考えていました。
しかしこのように、ResourceのURI指定だけだと対応できない、動的なコンテキスト付与を行いたい場合にもPromptが活用できるようです。

Resource

Google Drive server

Resourceに関してはGoogle DriveのMCPサーバーを使って検証します。

Google Driveサーバーの設定

google driveのサーバーだけ、READMEの通りだとうまくいかなかったので少し設定を補足します。
まずREADMEのGetting startedの1~6までを実行します。

その後

# このリポジトリをclone
git clone git@github.com:modelcontextprotocol/servers.git

# 6で落としてきたjsonファイルを `servers/` に `gcp-oauth.keys.json` という名前で置く
mv (DLしてきたcredential情報が載っているjson) servers/gcp-oauth.keys.json

# ディレクトリ移動
cd path/to/servers/src/gdrive
npm install
npm run build

# googleの認証を通す
# このコマンドを実行すると、ブラウザが開いて認証画面が表示される
node ./dist auth

ここまでやったら claude_desktop_config.json

{
  "mcpServers": {
    "gdrive": {
      "command": "node",
      "args": [
        "path/to/servers/src/gdrive/dist/index.js"
      ]
    }
  }
}

を設定し、Claudeアプリを再起動してください。

Google Driveサーバーでは、接続したDrive内のファイルがリソースとして活用できます。
設定を済ませてClaudeを起動し、Promptの時同様「Attach from MCP」ボタンをクリックしてみます。

image.png

Drive内のファイルたちが、選択できるようになっています。
ファイルを選択すると、コンテキストとして添付することができます。

ただし現状のClaudeアプリだと、検索窓もなく、表示件数もサーバーで指定されている数だけ(デフォルトだと10件)でページャーもないので、かなり使い勝手は悪いです。

Tool

Slack MCP Server

Toolに関しては、下記のSlackのMCPサーバーで試します。

このMCPサーバーでは、以下の8つのツールが提供されています。

  • slack_list_channels
  • slack_post_message
  • slack_reply_to_thread
  • slack_add_reaction
  • slack_get_channel_history
  • slack_get_thread_replies
  • slack_get_users
  • slack_get_user_profile

今回は slack_list_channel で自分のtimesを見つけ、 slack_post_message でテスト投稿をするところまでやってみます。

設定に関しては slackのMCPサーバーのREADMEに沿ってやれば問題ありません。
(ただし今回は、作ったbotをいちいちチャンネルに参加させるのが面倒だったので、Bot TokenのScopeに chat:write.public を追加しています。)

無事接続に成功すると、チャットエリアの右下に🔨アイコンと 8 という数字が表示されます。
image.png

ここをクリックすると、無事SlackのMCPサーバーが提供しているtoolが使えるようになっていることが確認できました。
image.png

実際にtimesを探してテスト投稿をしてもらうようにお願いしてみると、適切なtoolを活用してちゃんと正しいチャンネルに投稿してくれました。
image.png

まとめ

Prompt, Resource, Toolそれぞれについて、Claudeアプリをクライアントとして実際に試してみましたが、現状Tool以外は体験としてはなんともいえませんでした。
Promptを動的なコンテキスト付与だと捉えると少し活用幅は広がりそうかなと思いましたが、クライアント側の機能拡張がもう少し進まないと、引き続きToolの利用が主目的になるかなという感じです。

逆に自分がクライアント側の実装をする時には、これらの機能をフル活用できるように作りたいなと思います

14
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?