🤔

MCP クライアントはどのツールを使う?ツール名の重要性を実験してみた

に公開

はじめに

こんにちは! 株式会社リンケージikkitang です。

Claude のような AI アシスタントと連携する MCP (Model Context Protocol) クライアントは、ユーザーの指示に基づいて様々なタスクを実行できます。その際、MCP サーバーが提供する「ツール」を利用しますが、クライアントはどのようにして実行すべきツールを選択しているのでしょうか?

この記事では、MCP クライアントのツール選択プロセスと、そのプロセスにおけるツール名の重要性について、簡単な実験をやってみましたので、ブログとして書きます。
ただ、まだあんまり分かってないです。どうやってやってるんでしょうか。

MCP クライアントのツール選択プロセス

MCP クライアントは、ユーザーからの自然言語による指示(プロンプト)と、接続されている MCP サーバーが提供するツールの情報(名前、説明、引数スキーマなど)を照合します。そして、指示内容に最も合致すると判断したツールを選択し、実行しようと試みます。

実験:ツール名が選択に与える影響

例として、UUID を生成・操作する機能を持つ ikki-uuid という MCP サーバーを考えます。このサーバーには以下のツールが登録されているとします。

  • generate-uuid: UUID を1つ生成する
  • generate-uuids: --count を引数に取り、指定された数の UUID を生成する
  • detect-uuid-version: --uuid を引数に取り、その UUID のバージョンを返す

本来は description 等も設定するべきですが、ここでは何も設定していません。

ちなみにこのツールはこのブログで作ったものです。
もしソースコードなどが必要であれば、ご参考までに。

https://zenn.dev/ikkitang/articles/ikkitang-115694559e9cc7

このサーバーに対して、様々な指示を与えてみます。

ケース1: ツール名が具体的で説明的な場合

  1. ツール名を明示:

    ユーザー: ikki-uuidのgenerate-uuidでUUID作って
    クライアント: (generate-uuid を実行しそう)
    

    → 意図通り generate-uuid が実行されます。

  2. サーバー名のみ指定:

    ユーザー: ikki-uuidでUUID作って
    クライアント: (generate-uuid を実行しそう)
    

    → 予想通り generate-uuid が実行されました。
    クライアントは文脈("UUID作って")から generate-uuid が最も適切だと判断し、実行していると推測します。

  3. 曖昧な指示:

    ユーザー: UUID作って
    クライアント: (generate-uuid を実行)
    

    → 予想通り generate-uuid が実行されました。
    クライアントは利用可能な全ツールの中から、指示に最も関連性の高い generate-uuid を選択し、実行していると推測します。

ケース2: ツール名が抽象的な場合

次に、ツール名を p1, p2, p3 のように抽象的な名前に変えてみます。

  • p1: uuidを生成する
  • p2: --count を引数に 指定した数 uuid を生成する
  • p3: --uuid を引数にバージョンを返す
  1. 曖昧な指示:

    ユーザー: UUID作って
    クライアント: (MCPツールを使わない)
    

    → 予想通り、MCPを使うことは無く、ClaudeがUUIDを自力で生成して返しました。
    クライアントはどのツールが「UUIDを作る」機能を持つのか判断できない場合は、MCPツールを使用しない、と判断すると推測します。

  2. サーバー名のみ指定:

    ユーザー: ikki-uuidでUUID作って
    クライアント: (MCPツールを使わない)
    

    → これは、意図に反して、 ClaudeがUUIDを自力で生成した後、MCPの p3 を呼びました。

一番予想に反したのはこのケースでした。
Claudeに「なんで p3 呼んだのよ??」 って聞いてみると、 引数が--uuidだったので一番それっぽいと思って.. と言ってました。 (なるほど)

  1. ツール名を明示:
    ユーザー: ikki-uuidのp1でUUID作って
    クライアント: (p1 を実行)
    
    → 予想通り p1 が実行されました。
    予めツール名が明示されていれば、意図通り p1 が実行されるようです。

結論:ツール名は具体的に!

実験結果からわかるように、MCP クライアントがユーザーの意図を正確に汲み取り、適切なツールを実行できるようにするためには、MCP ツールに具体的で説明的な名前を付けることが極めて重要です。

抽象的でわかりにくいツール名は、クライアントの誤解を招き、以下のような問題を引き起こす可能性があります。

  • 適切なツールが選択されない
  • 意図しないツールが実行される

MCP サーバーを開発する際は、ツールの機能が明確にわかるような名前を付けることが重要で、これによって、AI アシスタントとの連携がよりスムーズかつ正確になるんだろうな、と思いました。

ただ、まだ全然MCP理解できてないので、実験結果として参考にしてくださると嬉しいです。

MCPツールはいつのタイミングでfetchするんだ?とか...w もうちょい解像度上げたい所が多くあります。

今日の話は このイベントで雑談として取り上げてもらいました。
https://uzulla.connpass.com/event/350911/

Discussion