Model Context Protocol(MCP)(モデルコンテキストプロトコル)
Model Context Protocol(MCP)とは、Anthropicが2024年に公開したオープン標準プロトコルで、LLM(大規模言語モデル)アプリケーションと外部データソースやツールを標準化された方法で接続するための仕様である。
Model Context Protocol(MCP)は、LLMアプリケーションが外部のデータソース、ツール、サービスと統一的に連携するためのオープン標準プロトコルである。Anthropicが2024年11月に公開し、2025年3月にはStreamable HTTPトランスポートの追加や認証フレームワーク(OAuth 2.1)の統合など大幅改訂が行われた。USB-Cが様々なデバイスに共通接続を提供するように、MCPはLLMに「ユニバーサルコネクタ」を提供する。
概要と背景
従来のLLMアプリケーション開発では、外部データソースやツールとの連携にAPI固有のラッパーや独自プロトコルが必要だった。各サービスごとにアダプターを実装するN×M問題が深刻化し、開発コストとメンテナンス負荷が指数関数的に増加していた。
MCPはこの問題を「ホスト→クライアント→サーバー」の3層アーキテクチャで解決する。ホスト(Claude Desktop、Claude Code、Cursor、Windsurf等のLLMアプリケーション)がMCPクライアントを内蔵し、クライアントが各MCPサーバーと1:1のステートフル接続を確立する。サーバー側は統一されたプロトコルでツール・リソース・プロンプトを公開するため、一度MCPサーバーを構築すれば任意のMCPホストから利用できる。
2025年にはOpenAI Agents SDKがMCPサポートを追加し、Google ADKやMicrosoft Copilot Studioも対応を発表するなど、業界横断の標準プロトコルとしての地位を確立しつつある。2026年6月時点でGitHubのMCPサーバーレジストリには4,000以上のコミュニティ製サーバーが登録されている。
主な構成要素
MCPプロトコルは以下の3つのプリミティブで構成される。
- Tools(ツール): LLMが呼び出す実行可能な関数。ファイル操作、データベースクエリ、API呼び出し、計算処理などを定義する。JSON Schemaで入出力を厳密に型定義し、LLMが自動的にパラメータを推論して呼び出す
- Resources(リソース): サーバーが公開する読み取り専用のデータソース。ファイル内容、データベースレコード、API応答などをURIベースで参照する。
file:///path/to/doc.mdやpostgres://db/table等のスキームで識別する - Prompts(プロンプト): サーバーが提供する再利用可能なプロンプトテンプレート。特定のワークフローに最適化されたプロンプトをパッケージ化し、引数付きで呼び出せる
これらに加え、以下の機能が補助的に提供される。
- Sampling: サーバーがLLMに推論リクエストを送信する仕組み(エージェント的な再帰呼び出し)
- Roots: クライアントがサーバーに公開するファイルシステム境界の定義
- Logging: サーバーからクライアントへの構造化ログメッセージ送信
対応プラットフォーム比較
| ホスト/クライアント | MCP対応バージョン | トランスポート | 特徴 |
|---|---|---|---|
| Claude Desktop | 2024年11月〜 | stdio, SSE, Streamable HTTP | Anthropic公式、最初のMCPホスト |
| Claude Code | 2025年2月〜 | stdio, SSE, Streamable HTTP | CLI/IDE統合、プロジェクト設定対応 |
| Cursor | 2025年3月〜 | stdio, SSE | AI IDEの先駆者、MCP設定UIあり |
| Windsurf (Codeium) | 2025年4月〜 | stdio | エディタ統合MCPサポート |
| OpenAI Agents SDK | 2025年3月〜 | stdio, SSE | MCPServerStdio/MCPServerSseクラス提供 |
| VS Code (GitHub Copilot) | 2025年4月〜 | stdio | mcp.json設定ファイル対応 |
| Zed Editor | 2025年3月〜 | stdio | Rust製エディタのネイティブMCP統合 |
JSON-RPC 2.0 ベースの通信
MCPの通信レイヤーはJSON-RPC 2.0プロトコルに基づく。リクエスト・レスポンス・通知の3種類のメッセージを使い分ける。
// リクエスト(レスポンス必須)
{"jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": {"name": "read_file", "arguments": {"path": "/src/main.ts"}}}
// レスポンス
{"jsonrpc": "2.0", "id": 1, "result": {"content": [{"type": "text", "text": "file contents..."}]}}
// 通知(レスポンス不要)
{"jsonrpc": "2.0", "method": "notifications/progress", "params": {"progressToken": "abc", "progress": 50, "total": 100}}
接続確立時にはCapabilityネゴシエーションが行われ、クライアントとサーバーがそれぞれサポートする機能セットを交換する。プロトコルバージョンの互換性確認もinitializeメソッドで自動的に行われる。
セキュリティと認証
2025年のプロトコル改訂でOAuth 2.1ベースの認証フレームワークが正式統合された。リモートMCPサーバーへのアクセスにはAuthorizationヘッダーによるBearerトークン認証が標準となり、PKCEフローによるセキュアなトークン取得が推奨される。
ローカルstdioサーバーはOSのプロセス分離で保護され、リモートサーバーはTLS + OAuth 2.1で保護される。ツール呼び出し時にはユーザー承認(Human-in-the-loop)の仕組みが組み込まれており、危険な操作を自動実行しない安全策が標準装備されている。
よくある質問(FAQ)
Q1: MCPとFunction Calling / Tool Useの違いは何ですか? A: Function Callingは特定のLLMプロバイダ(OpenAI、Anthropic等)のAPI仕様であり、ツール定義のフォーマットはプロバイダごとに異なる。MCPはプロバイダ非依存のオープン標準プロトコルで、一度MCPサーバーを構築すれば任意のMCP対応ホストから利用できる。MCPはFunction Callingの「上位レイヤー」として機能し、ツールだけでなくリソースやプロンプトも統一的に扱える。
Q2: MCPサーバーの開発に必要な技術スタックは?
A: Anthropicが公式SDKをTypeScript(@modelcontextprotocol/sdk)、Python(mcpパッケージ)、Java、Kotlin、C#で提供している。最小構成ではTypeScript版で50行程度のコードでMCPサーバーを実装できる。JSON-RPCの通信やCapabilityネゴシエーションはSDKが自動処理するため、開発者はツール/リソースのビジネスロジックに集中できる。
Q3: MCPはローカル環境以外でも使えますか? A: 使える。当初はstdio(ローカルプロセス通信)が主流だったが、2025年のStreamable HTTPトランスポート追加により、クラウドホスティングされたリモートMCPサーバーへのHTTPベース接続が標準化された。Cloudflare Workers、AWS Lambda、Google Cloud Run等のサーバーレス環境でMCPサーバーを運用する事例が増えている。
まとめ
- MCPはLLMアプリケーションと外部ツール/データの接続を標準化するオープンプロトコル
- ホスト→クライアント→サーバーの3層構造でN×M問題を解消
- Tools・Resources・Promptsの3プリミティブで統一的にサービスを公開
- Anthropic、OpenAI、Google、Microsoftが対応を表明する業界標準へ成長
- TypeScript/Python/Java等の公式SDKで容易にサーバー開発が可能