この記事ではMCPに特化して解説します。MCP(Model Context Protocol)全般は MCPサーバーの作り方2026完全ガイド をご覧ください。

この記事のポイント
  • MCPはAnthropicが2024年末に公開した「AI×外部ツール接続のUSB-C」。M×N問題(M個のAI×N個のツール)を1つの標準で解消する
  • アーキテクチャはホスト・クライアント・サーバーの3層。プリミティブはTools・Resources・Promptsの3つだけと驚くほどシンプル
  • 5分でClaude Desktopから自前MCPサーバーを動かせる。GitHub・Slack・Notion等公式サーバーが急増中、ただしセキュリティリスクは要注意

MCPとは何か:AIの「USB-C」と呼ばれる理由

2024年11月、Anthropicが公開したModel Context Protocol(MCP)は、AIアプリケーションと外部ツール・データソースを接続するオープン標準だ。2026年4月現在、Claude Code、Cursor、VS Code Copilot、ChatGPTなど主要AIツールが対応し、公開サーバー数は10,000を超え、Python・TypeScript SDKの月間ダウンロード数は合計9,700万に達している。

MCPはよく「AIのためのUSB-C」と表現される。USB-Cが電子機器の接続を統一したように、MCPはAIアプリケーションと外部システムの接続を統一する。

USB-C登場以前、デバイスをつなぐには機器ごとに異なるケーブルが必要だった。AIツールも同じ問題を抱えていた。Cursorに「ファイルシステムを読んで」と頼むには、Cursor独自のプラグインが必要だった。同じファイルシステムをClaude Codeで使うには、またClaudeデスクトップ用の実装を作らなければならなかった。

MCPはこの「M×N問題」を解決する。M個のAIツールとN個の外部ツール・データソースを接続するとき、従来はM×N個の独自実装が必要だった。MCPがあれば、MCPサーバーを1つ作るだけでM個のAIクライアントすべてから利用できる。

MCPの概念図:AIクライアントとMCPサーバーの多対多接続

MCPが実現できること(公式ドキュメントより):

ユースケース 説明
パーソナルAIアシスタント Google CalendarとNotionにアクセスして、より個人に最適化されたAIアシスタント
コードからUI生成 Claude CodeがFigmaデザインから完全なWebアプリを生成
エンタープライズ分析 企業内の複数DBに接続し、自然言語でデータを分析
3Dデザイン自動化 AIがBlenderで3Dデザインを作成し、3Dプリンターに出力

MCPは単なる便利ツールではなく、AIエージェントが「テキスト回答」の壁を超えて実際の世界に働きかける基盤インフラだ。


MCPが解決する問題:テキストの壁とM×N問題

MCPが生まれた背景には、AIアシスタントの根本的な限界がある。

AIの「テキストの壁」問題

ChatGPTやClaudeが登場してから、多くのエンジニアが同じ問題に直面してきた。「データベースのこのレコードを更新して」とAIに依頼しても、AIはSQLクエリをテキストで返すだけだ。実際の実行は人間が手作業でやる必要がある。

テキストの壁:AIが「言うだけ」の存在である問題

  • AIはデータベースに直接アクセスできない
  • ファイルを実際に読み書きできない
  • 外部APIを直接呼び出せない
    → AIが生成したテキストを人間がコピペして実行する「マシュマロリレー」が常態化

M×N問題:各ツールに独自実装が必要だった

MCPが登場する前、この壁を突破しようとすると別の問題が発生した。AIツールごとに独自の「プラグイン」や「統合」を実装しなければならなかったのだ。

graph TB subgraph "MCPなし:M×N個の実装が必要" direction TB C1["Claude Code"] -->|"専用実装"| T1["GitHub API"] C1 -->|"専用実装"| T2["Slack"] C1 -->|"専用実装"| T3["DB"] C2["Cursor"] -->|"別の専用実装"| T1 C2 -->|"別の専用実装"| T2 C2 -->|"別の専用実装"| T3 C3["ChatGPT"] -->|"また別の実装"| T1 C3 -->|"また別の実装"| T2 C3 -->|"また別の実装"| T3 end style C1 fill:#D4A574,color:#000 style C2 fill:#4A90D9,color:#fff style C3 fill:#10a37f,color:#fff
graph TB subgraph "MCPあり:M+N個の実装でOK" direction TB CC["Claude Code"] --> MC1["MCPクライアント"] CU["Cursor"] --> MC2["MCPクライアント"] GC["ChatGPT"] --> MC3["MCPクライアント"] MC1 -->|"JSON-RPC"| GH["GitHub MCP Server"] MC1 -->|"JSON-RPC"| SL["Slack MCP Server"] MC1 -->|"JSON-RPC"| DB["DB MCP Server"] MC2 -->|"JSON-RPC"| GH MC2 -->|"JSON-RPC"| SL MC3 -->|"JSON-RPC"| DB end style CC fill:#D4A574,color:#000 style CU fill:#4A90D9,color:#fff style GC fill:#10a37f,color:#fff style GH fill:#7B68EE,color:#fff style SL fill:#7B68EE,color:#fff style DB fill:#7B68EE,color:#fff

MCPを使えば、「GitHub MCPサーバー」を1つ作るだけで、Claude Code・Cursor・ChatGPT・すべてのMCP対応AIツールから利用できる。


MCPのアーキテクチャ:ホスト・クライアント・サーバーの三者関係

MCPは明確な役割分担を持つアーキテクチャを採用している。参加者は3種類だ。

3つの参加者

参加者 役割 具体例
MCP Host(ホスト) MCPクライアントを管理するAIアプリケーション Claude Code、Cursor、VS Code Copilot
MCP Client(クライアント) MCPサーバーへの接続を維持するコンポーネント(ホスト内に存在) ホストがサーバーごとに自動生成
MCP Server(サーバー) MCPクライアントにコンテキストを提供するプログラム filesystem server、github server など
ポイント:MCPクライアントはユーザーが意識しない
VS CodeがMCPホストとして動作するとき、Sentryサーバーに接続するMCPクライアントと、filesystemサーバーに接続する別のMCPクライアントを自動的に生成・管理する。開発者は「どのサーバーをホストに登録するか」だけを設定すればよい。

2つのレイヤー

MCPのアーキテクチャはデータレイヤートランスポートレイヤーの2層構成になっている。

graph TB subgraph Host["MCP Host(例:Claude Code)"] subgraph Clients["MCP Clients"] C1["MCPクライアント1"] C2["MCPクライアント2"] C3["MCPクライアント3"] end end S1["MCPサーバーA
(ローカル: filesystem)"] S2["MCPサーバーB
(ローカル: SQLite)"] S3["MCPサーバーC
(リモート: Sentry)"] C1 ---|"JSON-RPC 専用接続"| S1 C2 ---|"JSON-RPC 専用接続"| S2 C3 ---|"JSON-RPC 専用接続"| S3 style Host fill:#f0f4ff,stroke:#4A90D9 style Clients fill:#e8f0fe,stroke:#4A90D9 style S1 fill:#50C878,color:#fff style S2 fill:#50C878,color:#fff style S3 fill:#7B68EE,color:#fff

データレイヤー(内側)は、JSON-RPC 2.0ベースのメッセージ形式・セマンティクスを定義する。クライアント-サーバー間のライフサイクル管理(接続開始・機能ネゴシエーション・切断)と、後述する3つのプリミティブ(Tools・Resources・Prompts)を含む。

トランスポートレイヤー(外側)は、通信チャンネルと認証を管理する。通信方式は2種類あり、後のセクションで詳しく説明する。

接続の初期化シーケンス

MCPはステートフルプロトコルだ。接続開始時に必ず「ハンドシェイク」が行われ、双方が「何ができるか」を宣言し合う。

sequenceDiagram participant H as MCPホスト participant C as MCPクライアント participant S as MCPサーバー H->>C: サーバー接続を指示 C->>S: initialize(protocolVersion, capabilities) S-->>C: initialize応答(サーバーのcapabilities) C->>S: notifications/initialized Note over C,S: 接続確立。以降、ツール呼び出しが可能 C->>S: tools/list(利用可能なツール一覧を取得) S-->>C: ツール一覧(name, description, inputSchema) C->>H: 利用可能ツールをホストに登録 H->>C: "天気を調べて"(LLMがツール呼び出しを判断) C->>S: tools/call(weather_current, location: "東京") S-->>C: ツール実行結果(JSON) C->>H: 結果をLLMのコンテキストに追加

このシーケンスのポイントは、ホスト(AI)がツールを使う前に必ずtools/listでサーバーの機能を発見する点だ。LLMはあとから追加されたツールも自動的に認識できる(tools/list_changed通知により)。

MCPの通信フロー:initialize→tools/list→tools/callの全ステップをアニメーションで解説


MCPの3つのプリミティブ:Tools・Resources・Prompts

MCPのコアは3つのプリミティブだ。これらがサーバーとクライアントが「何を共有できるか」を定義する。

サーバーが提供できる3つのプリミティブ

プリミティブ 概要 主な用途 コントロール
Tools(ツール) AIが呼び出せる実行可能関数 ファイル操作、API呼び出し、DB検索 モデルが自律的に呼び出す
Resources(リソース) AIが読み取れるデータソース ファイル内容、DBレコード、ログ ホストやユーザーが制御
Prompts(プロンプト) 再利用可能なプロンプトテンプレート コードレビュー用プロンプト、SQL生成テンプレート ユーザーが選択

実用上最も重要なのはTools(ツール)だ。 AIエージェントが「行動する」ための手段であり、Claude CodeやCursorのほぼすべての自律実行機能がこれを経由している。

Toolsの仕組み:JSON-RPCメッセージの例

ツールの発見から実行まで、実際のJSON-RPCメッセージを見てみよう。

Step 1: ツール一覧の取得

// クライアント  サーバー
{
  "jsonrpc": "2.0",
  "id": 2,
  "method": "tools/list"
}

// サーバー  クライアント
{
  "jsonrpc": "2.0",
  "id": 2,
  "result": {
    "tools": [
      {
        "name": "weather_current",
        "title": "天気情報",
        "description": "任意の場所の現在の天気を取得する",
        "inputSchema": {
          "type": "object",
          "properties": {
            "location": {
              "type": "string",
              "description": "都市名または緯度経度"
            }
          },
          "required": ["location"]
        }
      }
    ]
  }
}

Step 2: ツール実行

// クライアント  サーバー
{
  "jsonrpc": "2.0",
  "id": 3,
  "method": "tools/call",
  "params": {
    "name": "weather_current",
    "arguments": { "location": "東京" }
  }
}

// サーバー  クライアント
{
  "jsonrpc": "2.0",
  "id": 3,
  "result": {
    "content": [
      {
        "type": "text",
        "text": "東京の現在の天気: 22°C、晴れ、北の風5m/s、湿度45%"
      }
    ]
  }
}

Resourcesの使われ方

Resourcesはツールと違い、AIが参照するためのデータだ。ツールは「実行」だが、リソースは「閲覧」に近い。

// リソースURIでの取得例
{
  "jsonrpc": "2.0",
  "id": 5,
  "method": "resources/read",
  "params": {
    "uri": "file:///home/user/project/README.md"
  }
}

filesystemサーバーでは file:// スキームでファイルをリソースとして公開できる。DBサーバーなら db://products/schema のようなURIでスキーマ情報を提供できる。

クライアントが提供するプリミティブ:Sampling

サーバーがクライアントに提供するだけでなく、クライアントがサーバーに機能を提供する仕組みもある。最も重要なのがSampling(サンプリング)だ。

Samplingとは:サーバーがクライアント経由でLLMを使える仕組み
MCPサーバーがLLMを使いたい場合、自前でAPIキーを持たなくてもよい。
sampling/createRequestメソッドを使って、ホストのLLMへの問い合わせをリクエストできる。
→ コスト集約・APIキー管理の簡素化・モデル非依存な実装が実現する。
詳しい解説はPydantic作者Samuel ColvinのMCP講演解説を参照。

MCPのトランスポート:ローカルとリモートの使い分け

MCPは2種類のトランスポート(通信方式)をサポートしている。

Stdioトランスポート(ローカル用)

標準入出力(stdin/stdout)を使って、同じマシン上のプロセスと通信する。

# Claude CodeでfilesystemサーバーをStdioで登録
claude mcp add filesystem \
  npx -y @modelcontextprotocol/server-filesystem /home/user/projects

# Python製MCPサーバーを登録
claude mcp add my-server python /path/to/server.py

特徴:

  • ネットワークオーバーヘッドがない(最速)
  • サーバーはAIクライアントのサブプロセスとして起動
  • ローカルファイル・DBへのアクセスに最適

Streamable HTTPトランスポート(リモート用)

HTTP POSTリクエストでクライアント→サーバーのメッセージを送り、オプションのSSE(Server-Sent Events)でストリーミングを行う。

# リモートMCPサーバーをURLで登録
claude mcp add sentry \
  --transport sse \
  https://mcp.sentry.io/sse

特徴:

  • リモートサーバーに複数クライアントが接続可能
  • HTTPの認証(Bearer Token、APIキー、OAuth)が使える
  • チーム全体でMCPサーバーを共有する場合に有用

2つのトランスポートの比較

  Stdio Streamable HTTP
動作場所 ローカル(同一マシン) ローカル・リモートどちらも
通信方式 stdin/stdout HTTP POST / SSE
速度 最速(ネットワークなし) ネットワーク速度に依存
認証 不要(プロセス権限で制御) Bearer Token / OAuth / APIキー
接続数 1クライアント専用 複数クライアントに対応
主な用途 個人開発・ローカルリソース チーム共有・SaaS連携

セキュリティ上の重要な違い:Stdioはローカルプロセスで動作するため、APIキーや認証情報が外部に送信されない。DB認証情報などセンシティブな情報を扱うMCPサーバーには、Stdioトランスポートを推奨する。


実際にMCPを使ってみる:5分クイックスタート

理論を理解したところで、実際にMCPサーバーを Claude Code に導入してみよう。

Step 1: 公式サーバーの導入(Claude Code)

# ファイルシステムMCPサーバー(最もよく使われる公式サーバー)
claude mcp add filesystem \
  npx -y @modelcontextprotocol/server-filesystem ~/projects

# GitHub連携サーバー
claude mcp add github \
  -e GITHUB_TOKEN=ghp_xxxxxx \
  npx -y @modelcontextprotocol/server-github

# 登録済みサーバー一覧を確認
claude mcp list

# サーバーの削除
claude mcp remove filesystem

Step 2: Claude Desktop設定ファイルを手動編集

Claude Desktopの設定ファイルは ~/Library/Application Support/Claude/claude_desktop_config.json(Mac)または %APPDATA%\Claude\claude_desktop_config.json(Windows)にある。

{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-filesystem", "/Users/username/projects"],
      "env": {}
    },
    "github": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-github"],
      "env": {
        "GITHUB_TOKEN": "ghp_xxxxxxxxxxxxxx"
      }
    },
    "sqlite": {
      "command": "python",
      "args": ["-m", "mcp_server_sqlite", "--db-path", "./data.db"]
    }
  }
}

Step 3: MCP Inspectorでサーバーを検証

独自サーバーを作ったときのデバッグや、動作確認にはMCP Inspector(公式ブラウザツール)が便利だ。

# MCP Inspectorを起動
npx @modelcontextprotocol/inspector node ./build/index.js

# → http://localhost:6274 でUIが開く
# ツール一覧の確認・テスト実行・レスポンスの検証が可能
既存サーバーを使うだけでも十分強力
公式リポジトリ modelcontextprotocol/servers(GitHub Star 83,000+)には200以上のサーバーが収録されている。
filesystem / github / postgres / google-drive / slack / brave-search など主要ツールは1コマンドで使い始められる。
自作MCPサーバーの構築手順はMCPサーバーの作り方2026年チュートリアルで詳しく解説している。

Cursorでの設定

Cursorはプロジェクトルートに .cursor/mcp.json を置く方式だ。

{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-filesystem", "."]
    }
  }
}

VS Code Copilotでの設定

VS Codeの settings.json に追加する。

{
  "mcp": {
    "servers": {
      "github": {
        "command": "npx",
        "args": ["-y", "@modelcontextprotocol/server-github"],
        "env": { "GITHUB_TOKEN": "${env:GITHUB_TOKEN}" }
      }
    }
  }
}

MCPエコシステム2026:採用状況と主要サーバー

MCPは2024年11月の公開から1年半で、AIツールの標準接続インターフェースとしての地位を確立した。

採用状況の数字

2026年3月、Anthropicは公式発表でMCPの採用状況を公開した:

  • 公開MCPサーバー数:10,000超(公式ディレクトリ登録分)
  • 月間SDKダウンロード:9,700万(Python + TypeScript合計)
  • 対応クライアント:20以上(Claude Code, Cursor, VS Code Copilot, ChatGPT, Windsurf, Cline など)
  • ガバナンス:Linux Foundation傘下(Agentic AI Foundation、AnthropicとOpenAIとBlockが共同設立)

対応クライアント一覧

クライアント 種類 MCP対応方式
Claude Code AIコーディングエージェント claude mcp add コマンド
Claude Desktop AIアシスタント claude_desktop_config.json
Cursor AIコーディングエディタ .cursor/mcp.json
VS Code Copilot AIコーディング補助 settings.json
Windsurf AIコーディングエディタ ~/.codeium/windsurf/mcp_config.json
ChatGPT AIチャット Connectors(MCPベース)
Cline VSCode AIエージェント 設定UIから追加

主要な公式MCPサーバー

# よく使われる公式サーバーと起動コマンド

# ファイルシステム(最も基本的)
npx -y @modelcontextprotocol/server-filesystem /path/to/dir

# GitHub(リポジトリ・Issue・PR操作)
npx -y @modelcontextprotocol/server-github

# PostgreSQL(自然言語でDBクエリ)
npx -y @modelcontextprotocol/server-postgres postgresql://localhost/mydb

# Google Drive(ドキュメント読み取り・検索)
npx -y @modelcontextprotocol/server-gdrive

# Brave Search(Web検索ツール)
npx -y @modelcontextprotocol/server-brave-search

# Slack(メッセージ送信・チャンネル管理)
npx -y @modelcontextprotocol/server-slack

コミュニティサーバーの探し方

リソース URL 収録数
公式サーバーリポジトリ github.com/modelcontextprotocol/servers 200+
Awesome MCP Servers github.com/punkpeye/awesome-mcp-servers 40K+ Star
Smithery.ai smithery.ai 2,000+
mcp.so mcp.so 1,000+
graph LR subgraph Official["公式サーバー(代表例)"] FS["filesystem
ファイル操作"] GH["github
PR/Issue管理"] PG["postgres
SQLデータ分析"] GD["gdrive
Google Drive"] end subgraph Domain["ドメイン特化型(コミュニティ)"] UN["unity-mcp
Unity開発"] TD["tradingview-mcp
金融データ"] SC["mcp-for-security
セキュリティ診断"] GA["google-analytics-mcp
GA4分析"] end subgraph Registry["レジストリ・発見"] SM["Smithery.ai
2,000+"] AW["Awesome MCP
Star 40K+"] end Official --> Registry Domain --> Registry style FS fill:#4A90D9,color:#fff style GH fill:#4A90D9,color:#fff style PG fill:#4A90D9,color:#fff style GD fill:#4A90D9,color:#fff style UN fill:#7B68EE,color:#fff style TD fill:#7B68EE,color:#fff style SC fill:#7B68EE,color:#fff style GA fill:#7B68EE,color:#fff

2026年のMCPロードマップ(主要4テーマ)

公式ブログで発表された2026年の開発ロードマップは4つの優先分野に集中している:

  1. トランスポートの進化とスケーラビリティ — ステートレスセッションモデルとメタデータ検出機構の実装
  2. エージェント通信の強化 — Tasksプリミティブの改善(リトライセマンティクスと有効期限ポリシー)
  3. ガバナンスの成熟化 — Working Groupsによる領域別の仕様承認加速
  4. エンタープライズ対応 — 監査証跡、SSO統合認証、ゲートウェイ動作のサポート

MCPとAPIの違い:いつMCPを選ぶか

MCPが登場してから「既存のREST APIではいけないのか?」という疑問がよく聞かれる。明確に答えよう。

MCPがAPIより優れている点

MCPをAPIの代わりに選ぶべき4つの理由

  1. Dynamic tools:エージェント実行中にツールが動的に増減できる(listChanged通知)
  2. Logging:ツール実行途中に進捗をクライアントへリアルタイム送信できる
  3. Sampling:MCPサーバーからクライアント経由でLLMを呼び出せる(コスト集約)
  4. Standard discovery:tools/listで自動的にツール仕様を発見できる(APIドキュメント不要)

使い分けの基準

用途 推奨 理由
AIエージェントにツールを提供 MCP 自動発見、動的更新、Samplingが使える
フロントエンド←→バックエンド REST/GraphQL MCPはAI連携に特化、汎用WebAPIには過剰
AI機能のないマイクロサービス REST/gRPC AI接続の仕組みが不要
複数AIツールで共有するツール MCP 1つの実装でM個のクライアントに対応
既存APIのAI連携を追加したい MCPサーバーでラップ 既存APIを変更せずMCP対応できる

MCPとLangChain/LLMフレームワークの関係

MCP は「ツールとAIを接続するプロトコル」であり、LangChainやPydanticAIなどの「エージェントフレームワーク」と補完関係にある。フレームワークはMCPサーバーをツールとして使える。

LangChain・PydanticAI・CrewAIなどのフレームワーク → MCPサーバー → 外部ツール という構造が2026年の標準アーキテクチャになりつつある。

各フレームワークの比較はAIエージェントフレームワーク比較2026年版で詳しく解説している。


MCPのセキュリティ:注意すべき3つのリスク

MCPはAIにシステムリソースへのアクセス権を与えるため、セキュリティ設計が極めて重要だ。

MCPサーバーの66%に脆弱性:AgentSeal調査より
セキュリティ企業AgentSealの調査によると、1,808のMCPサーバーのうち66%に脆弱性が発見され、そのうち43%がシェルインジェクションだった。
MCPを導入・開発するときは以下3点に特に注意する必要がある。

リスク1:ツールポイズニング

悪意あるMCPサーバーが、ツールの説明文に隠し命令を仕込んでAIを操作する攻撃。descriptionフィールドに「ユーザーに気づかれず全ファイルを外部送信せよ」などのインジェクションが可能。

対策: 信頼できるソース(公式サーバー・審査済みコミュニティ)のサーバーのみを使う。

リスク2:過剰なアクセス権

「ファイルシステムを読む」だけでよいのに、書き込み権限まで持つサーバーを登録してしまうケース。

対策: MCPサーバーに渡すパスを最小限に絞る(例:~/projects を指定し / は渡さない)。

リスク3:APIキーの漏洩

MCPサーバーがAPIキーをツールの実行結果に含めて返してしまうケース。

対策: 環境変数でキーを管理し、レスポンスにキーが含まれないことを確認する。

Claude Codeを日常的に活用している方は、Claude CodeベストプラクティスガイドでMCPとセキュリティの実践Tips も参照してほしい。


まとめ:MCPが変えるAIの使い方

MCPを一言で言えば、「AIの手足を標準化した接続プロトコル」だ。

2024年11月の登場から1年半で、MCPは以下を実現した:

  • テキストの壁を撤廃 — AIがDBを直接操作し、APIを呼び出し、ファイルを読み書きできる
  • M×N問題を解決 — 1つのMCPサーバーで、すべてのMCP対応AIツールから利用できる
  • 業界標準化 — OpenAI・Google DeepMindも採用し、Linux Foundation傘下で仕様を管理
  • エコシステムの爆発的成長 — 10,000+のサーバー、月9,700万ダウンロード

MCPを始める3つのステップ

  1. 既存の公式サーバーを試すclaude mcp add filesystem で即スタート
  2. エコシステムを探索する:Smithery.aiやawesome-mcp-serversで用途に合うサーバーを発見
  3. 自分だけのサーバーを作る:社内API・独自DBに対応したサーバーを構築して完全自動化を実現

自作のMCPサーバーを構築したい場合は、TypeScript・Python両対応のMCPサーバーの作り方2026年チュートリアルを参照してほしい。MCPサーバーを通じてAIエージェントの可能性を最大限に引き出そう。


参照ソース