本ドキュメントは、Model Context Protocol(MCP)クライアントの概要と使用方法を日本語でまとめたものです。
Model Context Protocol(MCP)は、LLMアプリケーションと外部ツール・サービスを接続するための標準プロトコルです。MCPクライアントはMCPサーバーに接続し、ツールの呼び出しやリソースへのアクセスを行います。
- ツール呼び出し: MCPサーバーが提供するツールを実行
- リソースアクセス: 外部リソースへのアクセス
- プロンプト管理: サーバー提供のプロンプトテンプレート
- 複数サーバー接続: 複数のMCPサーバーとの同時接続
- Python 3.8以上: Python版クライアントの場合
- Node.js 17以上: TypeScript版クライアントの場合
Python版の場合、以下のパッケージが必要です:
- mcp: MCPプロトコルライブラリ
- anthropic: Anthropic SDK(Claude使用時)
- python-dotenv: 環境変数管理
新しいプロジェクトディレクトリを作成し、仮想環境をセットアップします。必要なパッケージをインストールします。
使用するLLMプロバイダーのAPIキーを環境変数として設定します。.envファイルを作成して管理することを推奨します。セキュリティのため、.envファイルは.gitignoreに追加してください。
MCPクライアントの基本構造は以下のコンポーネントで構成されます:
- セッション管理: サーバーとの接続セッションを管理
- ツール管理: 利用可能なツールの一覧と実行
- メッセージ処理: LLMとの対話とツール呼び出しの処理
- クリーンアップ: リソースの適切な解放
MCPサーバーへの接続は以下の手順で行います:
- サーバースクリプトのパスを指定
- スクリプトの種類(Python/Node.js)を判定
- 適切なコマンドでサーバーを起動
- Stdioトランスポートで通信チャネルを確立
- セッションを初期化
- 利用可能なツールを取得
ユーザークエリの処理は以下の流れで行われます:
- サーバーから利用可能なツールのリストを取得
- クエリとツール情報をLLMに送信
- LLMがツール使用を決定した場合、MCPサーバーを通じてツールを実行
- 実行結果をLLMに返送
- 最終的な応答を取得
インタラクティブなチャットセッションでは、ユーザー入力を受け取り、クエリを処理し、応答を表示するループを実行します。
チャットセッション終了時には、MCPクライアントのリソースを適切に解放します。
- セッション管理とAPIクライアントの初期化
- 適切なリソース管理のためのAsyncExitStackの使用
- LLMクライアントの設定
- PythonとNode.jsサーバーの両方をサポート
- サーバースクリプトの種類を検証
- 適切な通信チャネルの設定
- セッションの初期化と利用可能なツールの一覧取得
- 会話コンテキストの維持
- LLMの応答とツール呼び出しの処理
- LLMとツール間のメッセージフローの管理
- 結果を一貫した応答に統合
- シンプルなコマンドラインインターフェースの提供
- ユーザー入力の処理と応答の表示
- 基本的なエラーハンドリング
- 優雅な終了処理
- リソースの適切なクリーンアップ
- 接続問題のエラーハンドリング
- 優雅なシャットダウン手順
- 特定のツールタイプに対応するためのクエリ処理のカスタマイズ
- ツール呼び出しのカスタムエラーハンドリング
- ツール固有のレスポンスフォーマット
- ツール結果のフォーマットカスタマイズ
- レスポンスフィルタリングや変換
- カスタムロギング
- GUIやWebインターフェースの追加
- リッチなコンソール出力
- コマンド履歴や自動補完
- ツール呼び出しはtry-catchブロックでラップ
- 意味のあるエラーメッセージを提供
- 接続問題を優雅に処理
- 適切なクリーンアップのためAsyncExitStackを使用
- 完了時に接続をクローズ
- サーバー切断を処理
- APIキーは.envファイルで安全に保管
- サーバーレスポンスを検証
- ツール権限に注意
- サーバースクリプトへのパスが正しいことを確認
- 相対パスが機能しない場合は絶対パスを使用
- Windowsではスラッシュ(/)またはエスケープされたバックスラッシュ(\)を使用
- サーバーファイルに正しい拡張子があることを確認
- 最初の応答は最大30秒かかる場合がある
- これはサーバー初期化、クエリ処理、ツール実行中に発生する正常な動作
- 後続の応答は通常より高速
- 初期待機期間中はプロセスを中断しない
- FileNotFoundError: サーバーパスを確認
- Connection refused: サーバーが実行中でパスが正しいことを確認
- Tool execution failed: ツールに必要な環境変数が設定されているか確認
- Timeout error: クライアント設定でタイムアウトを増やすことを検討
本プロジェクトでは、MCPToolClientクラスがMCPサーバーとの通信を担当します。config.yamlのmcp_serversセクションで設定されたサーバーに接続し、LLMからのツール呼び出しリクエストを処理します。
config.yamlのmcp_serversセクションで以下を設定します:
- mcp_server_name: サーバーの識別名
- command: サーバー起動コマンド(配列形式)
- system_prompt: サーバー提供ツールの説明(LLMへの説明用)
LLMからのツール呼び出しは「サーバー名/ツール名」の形式で指定します。MCPToolClientが適切なサーバーにリクエストをルーティングします。
参照元: Model Context Protocol公式ドキュメント(https://modelcontextprotocol.io)