🔌 MCP とは?
The Model Context Protocol(MCP) は 2024 年 12 月に Anthropic により公開されたオープン標準で、AI モデルを外部ツール、データソース、サービスに接続するための汎用インターフェースを定義します。MCP が導入される前は、あらゆる AI 統合がカスタムの一回限りの実装でした。MCP は AI クライアントが外部機能と通信する方法を標準化し、1 回の統合で任意の互換性のある AI システムで動作するようにします。
MCP はクライアント-サーバープロトコルです: MCP クライアント は外部機能を利用したい AI システム(Claude、Cursor、VS Code with Copilot など)です。 MCP サーバー は GitHub、データベース、ファイルシステム、ウェブブラウザなどの機能を標準化された API を通じて公開するサービスです。どの MCP クライアントでも利用できます。
🔋 USB-C の比喩
USB-C が登場する前は、すべての機器が独自のプロプライエタリコネクタを持っていました — 電話の充電器はラップトップで使えず、ディスプレイケーブルはストレージデバイスで使えませんでした。USB-C は 1 つの汎用標準でこれを解決しました:1 つのポート、1 本のケーブルで無限のデバイスに対応します。
MCP 登場前の AI 統合も同じ混乱状態でした。Claude を GitHub に接続するにはカスタムコードが必要でした。GPT-4 を同じ GitHub API に接続するには別のカスタムコードが必要でした。新しいツールを追加するたびに各 AI プラットフォーム向けに統合を一から作り直す必要がありました。
MCP は AI にとっての USB-C です。1 つの標準:
- MCP サーバーを一度構築すれば — どの MCP クライアントでも使用できます
- 新しい AI モデルを採用しても — 既存の MCP サーバーはすぐに機能します
- MCP サーバーのエコシステムは AI モデル開発とは独立して成長します
⚙️ MCP の仕組み
MCP は transport 層上での JSON-RPC 2.0 プロトコルを使用します(ローカルサーバーでは stdio、リモートでは HTTP/SSE)。通信は初期化、機能発見、リクエスト処理のライフサイクルに従います。
3 つのコア原始操作
| Primitive | 公開するもの | Example |
|---|---|---|
| Tools | モデルが呼び出せる関数(model-controlled) | search_github_issues、run_sql_query、send_email |
| Resources | モデルが読み取れるデータ(application-controlled) | file:///workspace/src、db://customers/schema |
| Prompts | 再利用可能なプロンプトテンプレート(ユーザー制御) | code-review、summarize-pr、explain-error |
通信フロー
- 初期化: クライアントがサーバーに接続し、プロトコルバージョンと機能を交換する
- 発見: クライアントが利用可能なツール、リソース、プロンプトのリストを要求する
- 呼び出し: AI モデルがツールを呼び出すことを決定し、クライアントがサーバーにリクエストを送信する
- 返却: サーバーがアクションを実行し、構造化された結果をクライアントに返す
- 継続: AI モデルが結果を取り込み推論を続ける
トランスポートの選択肢
| Transport | 最適用途 | Notes |
|---|---|---|
| stdio | ローカルツール、CLI 統合 | クライアントがサーバーをサブプロセスとして起動する; 最もシンプルなセットアップ |
| HTTP + SSE | リモート/クラウドサービス、共有チーム向け | サーバーが独立して実行され、認証ヘッダーをサポートする |
| WebSocket | リアルタイム双方向(ドラフト) | ストリーミングユースケース向けに提案されている |
🔄 MCP と Function Calling の比較
Function calling(ツール使用)は OpenAI、Anthropic、Google などの特定の AI API に組み込まれた機能で、モデルが呼び出せるカスタム関数を定義できます。MCP は function calling の上に置かれるか並行して動作するレイヤーで、標準化を提供します。 それらの関数がどのように発見され接続されるか.
| Function Calling | MCP | |
|---|---|---|
| Scope | API 固有、リクエスト毎 | クロスプラットフォーム、標準化された |
| Discovery | API 呼び出しでハードコードされる | 動的 — サーバーが機能を広告する |
| Portability | 1 つの AI プロバイダーに結びつく | 任意の MCP 対応クライアントで動作する |
| Resources | 標準化されていない | ファーストクラスの原始操作(ファイル、DB、URI) |
| 最適用途 | 単純で単一プロバイダーのユースケース | マルチツール、マルチモデルのプロダクションシステム |
実際には、MCP サーバーは内部で function calling を利用することが多い — MCP は発見と接続のレイヤーを提供し、function calling が実際の LLM とツールの呼び出しを扱います。
🏢 MCP をサポートする企業
MCP は 2024 年 12 月のローンチ以来急速に採用が進んでいます。2026 年 4 月時点でのエコシステムには次が含まれます:
MCP サポートを備えた AI クライアント
- Claude(Anthropic) — Claude.ai と Claude Code にネイティブな MCP サポート
- Cursor — コード対応の AI 支援のための MCP サーバー
- VS Code(GitHub Copilot) — エージェントモードでの MCP 統合
- Windsurf(Codeium) — MCP サーバーのサポート
- Continue.dev — MCP を備えたオープンソース IDE アシスタント
人気のある MCP サーバー
- Filesystem — ローカルファイルの読み書き(公式 Anthropic)
- GitHub — リポジトリ、PR、Issue、コード検索
- PostgreSQL / SQLite — データベースクエリとスキーマ探索
- Brave Search / Exa — API キー不要のウェブ検索
- Puppeteer / Playwright — ブラウザ自動化
- Slack / Linear / Notion — 生産性ツールとの統合
🚀 MCP の始め方
オプション 1: 既存の MCP サーバーを使用する(5 分)
MCP を体験する最も速い方法は、プリビルトのサーバーを使った Claude Desktop を使用することです。 Claude Desktop の設定を次で編集します ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/Users/yourname/Documents"]
},
"github": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": { "GITHUB_PERSONAL_ACCESS_TOKEN": "ghp_..." }
}
}
} オプション 2: MCP サーバーを構築する(30 分)
公式 SDK は TypeScript、Python、Kotlin 用に利用可能です:
// TypeScript MCP server example
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
const server = new Server({ name: "my-server", version: "1.0.0" });
server.setRequestHandler("tools/list", async () => ({
tools: [{
name: "get_weather",
description: "Get current weather for a city",
inputSchema: {
type: "object",
properties: { city: { type: "string" } },
required: ["city"]
}
}]
}));
server.setRequestHandler("tools/call", async (request) => {
const { city } = request.params.arguments;
// ... fetch weather data
return { content: [{ type: "text", text: `Weather in ${city}: sunny, 22°C` }] };
});
const transport = new StdioServerTransport();
await server.connect(transport); 🔐 MCP セキュリティに関する考慮事項
AI モデルにツール、ファイル、サービスへのアクセスを与える MCP の力は、開発者が設計すべきセキュリティリスクも導入します。
| Risk | Description | Mitigation |
|---|---|---|
| MCP を介したプロンプトインジェクション | ツールの結果に含まれる悪意あるコンテンツが AI を操作する | ツールの出力をサニタイズする; 推論とアクション用モデルを分離する |
| 権限が過剰なサーバー | MCP サーバーが必要以上の権限を持っている | 最小権限の原則; 可能な場合は読み取り専用にする |
| 混乱した代行(Confused deputy) | AI がユーザーの認識なしに攻撃者の代わりに行動する | 破壊的/不可逆な操作には HITL 確認を行う |
| サーバーのサプライチェーン | 悪意あるサードパーティの MCP サーバーがデータを流出させる | 信頼できる監査済みのサーバーのみを使用する; サーバーのコードをレビューする |
MCP ツール結果を通じてプロンプトインジェクションがどのように兵器化されうるかを含む AI セキュリティ脆弱性の詳細については、当社のガイドを参照してください: プロンプトインジェクションの説明.