MCP公式ドキュメント 日本語版
  1. コンセプト
MCP公式ドキュメント 日本語版
  • 始める
    • 導入
    • サンプルサーバー
    • クライアントの例
    • クイックスタート
      • サーバー開発者向け
      • クライアント開発者向け
      • Claude デスクトップ ユーザー向け
  • チュートリアル
    • LLMs を使用した MCP の構築
    • デバッグ
    • Inspector
  • コンセプト
    • リソース
    • コアアーキテクチャ
    • プロンプト
    • ツール
    • サンプリング
    • ルーツ
    • トランスポート
  • 発達
    • 最新情報
    • ロードマップ
    • 貢献
  1. コンセプト

ツール

LLM がサーバーを通じてアクションを実行できるようにする
Tools は、Model Context Protocol (MCP) における強力なプリミティブであり、サーバーが実行可能な機能をクライアントに公開することを可能にします。Tools を通じて、LLM は外部システムとインタラクトし、計算を実行し、現実世界でアクションを実行できます。
Tools は モデル制御 を前提として設計されており、AI モデルが(承認を与える人間の介入を前提として)自動的に呼び出すことを意図して、サーバーからクライアントに公開されます。

概要#

MCP における Tools により、サーバーはクライアントによって呼び出され、LLM がアクションを実行するために使用できる実行可能な関数を公開できます。Tools の主な側面は次のとおりです。
Discovery(発見): クライアントは tools/list エンドポイントを通じて利用可能な Tools をリストできます。
Invocation(呼び出し): Tools は tools/call エンドポイントを使用して呼び出され、サーバーは要求された操作を実行し、結果を返します。
Flexibility(柔軟性): Tools は、単純な計算から複雑な API インタラクションまで、多岐にわたります。
resources と同様に、Tools は一意の名前で識別され、その使用方法をガイドするための説明を含めることができます。ただし、resources とは異なり、Tools は状態を変更したり、外部システムとインタラクトしたりできる動的な操作を表します。

Tool の定義構造#

各 Tool は、次の構造で定義されます。

Tools の実装#

MCP サーバーで基本的な Tool を実装する例を次に示します。
TypeScript
Python

Tool パターンの例#

サーバーが提供できる Tool の種類の例を次に示します。

システム操作#

ローカルシステムとインタラクトする Tools:

API 連携#

外部 API をラップする Tools:

データ処理#

データを変換または分析する Tools:

ベストプラクティス#

Tools を実装する際は、以下を考慮してください。
1.
明確で説明的な名前と説明を提供する
2.
パラメータの詳細な JSON Schema 定義を使用する
3.
モデルが Tool をどのように使用するかを示すために、Tool の説明に例を含める
4.
適切なエラー処理と検証を実装する
5.
長い操作の場合は、進捗状況のレポートを使用する
6.
Tool の操作を集中化し、アトミックにする
7.
予想される戻り値の構造を文書化する
8.
適切なタイムアウトを実装する
9.
リソースを大量に消費する操作の場合は、レート制限を検討する
10.
デバッグと監視のために Tool の使用状況をログに記録する

セキュリティに関する考慮事項#

Tools を公開する際は、以下を考慮してください。

入力検証#

すべてのパラメータをスキーマに対して検証する
ファイルパスとシステムコマンドをサニタイズする
URL と外部識別子を検証する
パラメータのサイズと範囲をチェックする
コマンドインジェクションを防ぐ

アクセス制御#

必要に応じて認証を実装する
適切な承認チェックを使用する
Tool の使用状況を監査する
リクエストをレート制限する
悪用を監視する

エラー処理#

内部エラーをクライアントに公開しない
セキュリティ関連のエラーをログに記録する
タイムアウトを適切に処理する
エラー後にリソースをクリーンアップする
戻り値を検証する

Tool の検出と更新#

MCP は動的な Tool の検出をサポートしています。
1.
クライアントはいつでも利用可能な Tool をリストできます。
2.
サーバーは notifications/tools/list_changed を使用して、Tool が変更されたときにクライアントに通知できます。
3.
Tool は実行時に追加または削除できます。
4.
Tool の定義を更新できます(ただし、これは慎重に行う必要があります)。

エラー処理#

Tool のエラーは、MCP プロトコルレベルのエラーとしてではなく、結果オブジェクト内で報告する必要があります。これにより、LLM はエラーを確認し、潜在的に処理できます。Tool がエラーを検出した場合:
1.
結果で isError を true に設定する
2.
content 配列にエラーの詳細を含める
Tool の適切なエラー処理の例を次に示します。
TypeScript
Python
このアプローチにより、LLM はエラーが発生したことを確認し、潜在的に是正措置を講じたり、人間の介入を要求したりできます。

Tools のテスト#

MCP Tools の包括的なテスト戦略は、以下をカバーする必要があります。
Functional testing(機能テスト): Tool が有効な入力で正しく実行され、無効な入力を適切に処理することを確認する
Integration testing(統合テスト): 実際およびモックの依存関係を使用して、外部システムとの Tool のインタラクションをテストする
Security testing(セキュリティテスト): 認証、承認、入力サニタイズ、およびレート制限を検証する
Performance testing(パフォーマンステスト): 負荷時の動作、タイムアウト処理、およびリソースのクリーンアップをチェックする
Error handling(エラー処理): Tool が MCP プロトコルを通じてエラーを適切に報告し、リソースをクリーンアップすることを確認する
前へ
プロンプト
次へ
サンプリング
Built with