Model Context Protocol 紹介
Model Context Protocol (MCP) の詳細
プロトコル概要
Model Context Protocol (MCP) は、アプリケーションが大規模言語モデル (LLM) にコンテキストを提供する方法を標準化するオープンスタンダードです。MCPをAIアプリケーション用のUSB-Cポートのように考えてください—AIモデルを異なるデータソースやツールに接続する標準化された方法を提供します。
主要な利点
- 標準化された通信インターフェース
- セキュアなデータ転送
- 拡張可能なアーキテクチャ設計
- クロスプラットフォーム互換性
- リアルタイムコンテキスト同期
- プラグインベースの拡張サポート
使用例
- コード分析と理解
- ドキュメント生成と保守
- プロジェクト管理統合
- データベースクエリと操作
- APIサービス統合
- ワークフロー自動化
アーキテクチャ設計
MCPプロトコルの階層アーキテクチャとコンポーネント概要
MCPホスト
AIアプリケーション
1つまたは複数のMCPクライアントを調整・管理するAIアプリケーション
主な責任:
- 複数のMCPクライアントを調整
- AIモデルの相互作用を管理
- サーバーレスポンスを処理
- セッション状態を処理
MCPクライアント
接続マネージャー
MCPサーバーへの接続を維持し、MCPホストが使用するためにMCPサーバーからコンテキストを取得するコンポーネント
主な責任:
- 1対1のサーバー接続を維持
- コンテキストクエリを送信
- サーバーレスポンスを処理
- 接続ライフサイクルを管理
MCPサーバー
コンテキストプロバイダー
ツール、リソース、プロンプトを通じてMCPクライアントにコンテキストを提供するプログラム
主な責任:
- クライアント接続を受け入れ
- コンテキストリクエストを処理
- 構造化データを返す
- リソース状態を維持
トランスポート層
通信チャネル
クライアントとサーバー間の通信チャネルと認証を管理
主な責任:
- ローカルプロセス用のSTDIOトランスポート
- リモートサーバー用のHTTPトランスポート
- メッセージフレーミングとシリアライゼーション
- 認証とセキュリティ
データ層
プロトコル定義
クライアント-サーバー通信のためのJSON-RPCベースのプロトコルを定義
主な責任:
- JSON-RPC 2.0メッセージ形式
- ライフサイクル管理
- プリミティブ定義(ツール、リソース、プロンプト)
- 通知システム
MCPプリミティブ
クライアントとサーバーが互いに提供できるものを定義するコアプリミティブ
ツール
AIアプリケーションがアクションを実行するために呼び出すことができる実行可能な関数
例:
- ファイル操作(読み取り、書き込み、作成)
- 外部サービスへのAPI呼び出し
- データベースクエリと操作
- コード分析とコンパイル
- システムコマンド実行
利用可能なメソッド:
tools/list
tools/call
リソース
AIアプリケーションにコンテキスト情報を提供するデータソース
例:
- ファイルコンテンツとメタデータ
- データベースレコードとスキーマ
- APIレスポンスとドキュメント
- Gitリポジトリ情報
- 設定ファイル
利用可能なメソッド:
resources/list
resources/read
プロンプト
言語モデルとの相互作用を構造化するのに役立つ再利用可能なテンプレート
例:
- 特定タスク用のシステムプロンプト
- 学習用のFew-shot例
- コードレビューテンプレート
- ドキュメント生成プロンプト
- 分析と要約テンプレート
利用可能なメソッド:
prompts/list
prompts/get
トランスポート層
クライアントとサーバー間のデータ交換を可能にする通信メカニズム
STDIO トランスポート
直接プロセス通信のために標準入出力ストリームを使用
使用例:
- 同一マシン上のローカルMCPサーバー
- 直接プロセス通信
- ネットワークオーバーヘッドなしの最適パフォーマンス
- シンプルなセットアップと設定
例:
npx @modelcontextprotocol/server-filesystem /path/to/files
STDIOを介してファイルシステムサーバーを起動
HTTP トランスポート
オプションのServer-Sent Eventsを使用してクライアント-サーバーメッセージにHTTP POSTを使用
使用例:
- リモートMCPサーバー
- クラウドベースのサービス
- Bearerトークンによる認証
- スケーラブルなサーバーデプロイメント
例:
https://api.example.com/mcp
HTTPを介してリモートMCPサーバーに接続
メッセージタイプ
MCPプロトコルでサポートされるJSON-RPC 2.0ベースのメッセージタイプ
initialize
接続を初期化し、プロトコルバージョンと機能をネゴシエート
メッセージ例:
{ "method": "initialize", "params": { "protocolVersion": "2025-06-18", "capabilities": { "tools": {}, "resources": {} }, "clientInfo": { "name": "gemini-cli", "version": "1.0.0" } } }
tools/list
サーバー上の利用可能なツールを発見
メッセージ例:
{ "method": "tools/list", "params": {} }
tools/call
提供された引数で特定のツールを実行
メッセージ例:
{ "method": "tools/call", "params": { "name": "com.example.weather/current", "arguments": { "location": "San Francisco", "units": "imperial" } } }
resources/list
利用可能なリソースのリストを取得
メッセージ例:
{ "method": "resources/list", "params": {} }
resources/read
特定のリソースコンテンツを読み取り
メッセージ例:
{ "method": "resources/read", "params": { "uri": "file:///path/to/file.ts" } }
prompts/list
利用可能なプロンプトテンプレートを取得
メッセージ例:
{ "method": "prompts/list", "params": {} }
notifications/tools/list_changed
利用可能なツールが変更されたときにクライアントに通知
メッセージ例:
{ "method": "notifications/tools/list_changed" }
ツール定義例
MCPプロトコルでツールがどのように定義されるかの例
天気ツール定義
この例は、適切な入力スキーマ検証とドキュメントを含む天気ツールの定義方法を示しています。
// MCP 工具定义示例 { "name": "com.example.weather/current", "title": "Get Current Weather", "description": "Get current weather information for a specified location", "inputSchema": { "type": "object", "properties": { "location": { "type": "string", "description": "The location to get weather for" }, "units": { "type": "string", "enum": ["metric", "imperial"], "description": "Temperature units", "default": "metric" }, "include_forecast": { "type": "boolean", "description": "Whether to include forecast data", "default": false } }, "required": ["location"] } }
主要コンポーネント:
- name: ツールの一意識別子
- title: 人間が読める表示名
- description: 機能の詳細な説明
- inputSchema: 入力検証用のJSON Schema
ベストプラクティス:
- 名前空間付きツール名を使用(例:com.example.weather/current)
- 明確で説明的なドキュメントを提供
- 包括的な入力スキーマを定義
- 適切な場所にデフォルト値を含める
通信フロー
MCPクライアントとサーバー間の完全な通信フロー
接続の初期化
クライアントが接続を確立し、サーバーと機能をネゴシエート
詳細手順:
- クライアントがプロトコルバージョンと共に初期化リクエストを送信
- サーバーがサポートされる機能で応答
- 両者が通信パラメータをネゴシエート
- 合意されたプロトコルバージョンで接続確立
機能発見
クライアントが利用可能なツール、リソース、プロンプトを発見
詳細手順:
- 利用可能なツールリストを要求 (tools/list)
- 利用可能なリソースを要求 (resources/list)
- 利用可能なプロンプトを要求 (prompts/list)
- 効率的なアクセスのために機能情報をキャッシュ
コンテキスト交換
クライアントがリソースからコンテキストデータを要求し受信
詳細手順:
- リソース読み取りリクエストを送信 (resources/read)
- 様々な形式の構造化データを受信
- 必要に応じてデータ形式変換を処理
- 受信した情報でローカルコンテキストを更新
ツール実行
クライアントがアクションを実行するためにサーバーツールを呼び出し
詳細手順:
- ツール呼び出しリクエストを構築 (tools/call)
- 適切な検証で必要なパラメータを渡す
- サーバーからの実行結果を待機
- 返されたデータを処理しエラーを処理
リアルタイム更新
通知を通じて同期を維持
詳細手順:
- リソース変更通知をリッスン
- ツールリスト更新を動的に処理
- 接続中断を優雅に処理
- 必要時に接続を再確立
セキュリティ機能
MCPプロトコルのセキュリティメカニズムと保護対策
認証
複数の認証メカニズムをサポート
サポートされる方法:
- APIキー認証
- OAuth 2.0フロー
- Bearerトークン
- カスタム認証ヘッダー
認可
きめ細かい権限管理
サポートされる方法:
- リソースレベルの権限
- 操作タイプの制限
- 時間ベースのアクセス制御
- レート制限とクォータ
データ保護
エンドツーエンドのデータセキュリティ
サポートされる方法:
- TLS/SSL転送暗号化
- メッセージコンテンツ暗号化
- 機密データマスキング
- セキュアキー管理
監査とモニタリング
包括的な操作追跡
サポートされる方法:
- リクエスト/レスポンスログ
- 権限チェック記録
- エラーと例外追跡
- パフォーマンスメトリクス収集
始める
Gemini CLIでMCPの使用を開始する準備はできましたか?これらのリソースを探索してください