Model Context Protocol 紹介

Model Context Protocol (MCP) の詳細

プロトコル仕様40分で読める

プロトコル概要

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/listtools/call

リソース

AIアプリケーションにコンテキスト情報を提供するデータソース

例:

  • ファイルコンテンツとメタデータ
  • データベースレコードとスキーマ
  • APIレスポンスとドキュメント
  • Gitリポジトリ情報
  • 設定ファイル

利用可能なメソッド:

resources/listresources/read

プロンプト

言語モデルとの相互作用を構造化するのに役立つ再利用可能なテンプレート

例:

  • 特定タスク用のシステムプロンプト
  • 学習用のFew-shot例
  • コードレビューテンプレート
  • ドキュメント生成プロンプト
  • 分析と要約テンプレート

利用可能なメソッド:

prompts/listprompts/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クライアントとサーバー間の完全な通信フロー

1

接続の初期化

クライアントが接続を確立し、サーバーと機能をネゴシエート

詳細手順:

  • クライアントがプロトコルバージョンと共に初期化リクエストを送信
  • サーバーがサポートされる機能で応答
  • 両者が通信パラメータをネゴシエート
  • 合意されたプロトコルバージョンで接続確立
2

機能発見

クライアントが利用可能なツール、リソース、プロンプトを発見

詳細手順:

  • 利用可能なツールリストを要求 (tools/list)
  • 利用可能なリソースを要求 (resources/list)
  • 利用可能なプロンプトを要求 (prompts/list)
  • 効率的なアクセスのために機能情報をキャッシュ
3

コンテキスト交換

クライアントがリソースからコンテキストデータを要求し受信

詳細手順:

  • リソース読み取りリクエストを送信 (resources/read)
  • 様々な形式の構造化データを受信
  • 必要に応じてデータ形式変換を処理
  • 受信した情報でローカルコンテキストを更新
4

ツール実行

クライアントがアクションを実行するためにサーバーツールを呼び出し

詳細手順:

  • ツール呼び出しリクエストを構築 (tools/call)
  • 適切な検証で必要なパラメータを渡す
  • サーバーからの実行結果を待機
  • 返されたデータを処理しエラーを処理
5

リアルタイム更新

通知を通じて同期を維持

詳細手順:

  • リソース変更通知をリッスン
  • ツールリスト更新を動的に処理
  • 接続中断を優雅に処理
  • 必要時に接続を再確立

セキュリティ機能

MCPプロトコルのセキュリティメカニズムと保護対策

認証

複数の認証メカニズムをサポート

サポートされる方法:

  • APIキー認証
  • OAuth 2.0フロー
  • Bearerトークン
  • カスタム認証ヘッダー

認可

きめ細かい権限管理

サポートされる方法:

  • リソースレベルの権限
  • 操作タイプの制限
  • 時間ベースのアクセス制御
  • レート制限とクォータ

データ保護

エンドツーエンドのデータセキュリティ

サポートされる方法:

  • TLS/SSL転送暗号化
  • メッセージコンテンツ暗号化
  • 機密データマスキング
  • セキュアキー管理

監査とモニタリング

包括的な操作追跡

サポートされる方法:

  • リクエスト/レスポンスログ
  • 権限チェック記録
  • エラーと例外追跡
  • パフォーマンスメトリクス収集

始める

Gemini CLIでMCPの使用を開始する準備はできましたか?これらのリソースを探索してください