AI・機械学習
中級

Model Context Protocol(MCP)(モデルコンテキストプロトコル)

Model Context Protocol(MCP)とは、Anthropicが2024年に公開したオープン標準プロトコルで、LLM(大規模言語モデル)アプリケーションと外部データソースやツールを標準化された方法で接続するための仕様である。

0 回閲覧
0 いいね

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 Desktop2024年11月〜stdio, SSE, Streamable HTTPAnthropic公式、最初のMCPホスト
Claude Code2025年2月〜stdio, SSE, Streamable HTTPCLI/IDE統合、プロジェクト設定対応
Cursor2025年3月〜stdio, SSEAI IDEの先駆者、MCP設定UIあり
Windsurf (Codeium)2025年4月〜stdioエディタ統合MCPサポート
OpenAI Agents SDK2025年3月〜stdio, SSEMCPServerStdio/MCPServerSseクラス提供
VS Code (GitHub Copilot)2025年4月〜stdiomcp.json設定ファイル対応
Zed Editor2025年3月〜stdioRust製エディタのネイティブ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で容易にサーバー開発が可能