MCP (Model Context Protocol)
エンジニアのためのWebチートシート
MCP(Model Context Protocol)は、AIアプリケーションと外部システムを接続するためのオープンスタンダードプロトコルです。 アーキテクチャ、プリミティブ(Tools/Resources/Prompts)、TypeScript/Python SDK、クライアント設定、JSON-RPC通信などをチートシートにまとめました。
アーキテクチャ
コンポーネント構成
| コンポーネント | 役割 |
|---|---|
| MCP Host | AIアプリケーション(Claude Desktop、VS Code等)。クライアントを内包し、ユーザーとAIのインターフェースを提供します。 |
| MCP Client | ホスト内のコンポーネント。MCPサーバーとの1:1接続を管理し、プロトコルメッセージを仲介します。 |
| MCP Server | 外部システムへのアクセスを提供。Tools、Resources、Promptsを公開し、クライアントからのリクエストに応答します。 |
レイヤー構成
MCPは2層構成です。
プロトコルプリミティブ
サーバー側プリミティブ
| プリミティブ | 説明 | 用途 |
|---|---|---|
| Tools | LLMが呼び出す実行可能な関数。JSON Schemaで入力を定義。 | API呼び出し、DB操作、ファイル操作、計算 |
| Resources | 読み取り専用データ。URIパターンでRESTful風アクセス。 | ファイル内容、DBレコード、APIレスポンス、スキーマ |
| Prompts | 再利用可能なテンプレート。ユーザーが明示的に選択。 | システムプロンプト、Few-shot例、推奨フォーマット |
クライアント側プリミティブ
| プリミティブ | 説明 | 用途 |
|---|---|---|
| Sampling | サーバーからLLM補完をリクエスト。 | AI生成コンテンツの取得、要約、分析 |
| Elicitation | ユーザーに追加情報を対話的にリクエスト。 | パラメータ確認、承認フロー、入力収集 |
トランスポート
トランスポート比較
| トランスポート | 特徴 | 説明 |
|---|---|---|
| Stdio | ローカル実行、子プロセス、最高パフォーマンス | stdin/stdoutでJSON-RPCメッセージを交換。ローカルサーバーに最適。 |
| Streamable HTTP | リモート対応、認証サポート、複数クライアント | HTTP POSTでリクエスト、SSEでストリーミング応答。リモートサーバーに推奨。 |
| SSE | レガシー(非推奨) | 旧式の2エンドポイント方式。新規実装ではStreamable HTTPを使用してください。 |
サーバー実装(TypeScript)
FastMCP(推奨)
FastMCPフレームワークを使ったTypeScript実装です。
公式SDK(低レベル)
@modelcontextprotocol/sdk を使った低レベル実装です。
サーバー実装(Python)
FastMCP(推奨)
デコレーターベースのPython実装です。
公式SDK(低レベル)
mcp パッケージを使った低レベル実装です。
クライアント設定
設定ファイルのパス
MCPクライアントの設定ファイルの場所です。
Stdio サーバー設定
ローカルで実行するサーバーの設定例です。
HTTP リモートサーバー設定
リモートで実行するサーバーの設定例です。
ライフサイクル & JSON-RPC
初期化シーケンス
1. Client → Server: Initialize Request
2. Server → Client: Initialize Response
3. Client → Server: Initialized Notification
JSON-RPC メッセージ形式
Request
Success Response
Error Response / Notification
セキュリティ & デバッグ
セキュリティベストプラクティス
| プラクティス |
|---|
| APIキー・トークンは環境変数に格納する(JSONに平文記載しない) |
| 信頼できるソースからのみサーバーを使用する |
| ファイルシステムアクセスはディレクトリ制限を設定する |
| ツール実行時はユーザー承認を要求する |
| 機密設定には sensitive: true を使用する |
| ログにパスワード・トークン・機密データを絶対に含めない |
デバッグツール
| プラクティス |
|---|
| MCP Inspector(http://localhost:5173)でサーバーを対話的にテスト |
| デバッグログはstderrに出力(stdoutはJSON-RPCメッセージ用) |
| リクエストID、エラー型、パフォーマンス指標を構造化ログで記録 |
エラーコード
| コード | 意味 |
|---|---|
| -32700 | Parse Error |
| -32600 | 不正なリクエスト |
| -32601 | メソッドが見つからない |
| -32602 | 不正なパラメータ |
| -32000 | サーバーエラー |
| -32001 | リクエストタイムアウト |