MCPのアーキテクチャ
MCPのアーキテクチャ
Section titled “MCPのアーキテクチャ”MCPはクライアント-サーバーアーキテクチャ(Client-Server Architecture)に基づいて設計されています。このアーキテクチャには3つの役割があります。Host(AIアプリケーション)・Client(通信コンポーネント)・Server(ツール提供プログラム)です。それぞれが明確に分離されることで、拡張性と再利用性が高まります。
対象読者: MCPの概要(なぜMCPが必要か)を理解している方
学習時間の目安: 読了 20分
前提知識: なぜMCPが必要か を読んでいること
MCPにおける通信フローを図示します。
graph LR
U[ユーザー] --> H[Host\nClaude Desktop / Cursor]
H --> C[Client\nMCPクライアント]
C --> S1[Server A\n天気 MCP サーバー]
C --> S2[Server B\nファイルシステム\nMCP サーバー]
S1 --> T1[天気 API]
S2 --> T2[ローカル\nファイル]ユーザーはHostに指示を送り、HostはClientを通じてMCPサーバーと通信し、ツールや情報を取得して応答します。
Host(ホスト)
Section titled “Host(ホスト)”Hostとは、ユーザーに直接向き合うAIアプリケーションです。AIモデルが動作する環境そのものを指します。
役割
- ユーザーからの入力(テキスト・音声など)を受け取る
- 会話履歴を保持し、コンテキストを管理する
- AIモデルを呼び出してレスポンスを生成する
- 必要に応じてMCPサーバーへの接続を開始する
- 最終的な応答をユーザーに表示する
具体例
| Hostアプリケーション | 種類 |
|---|---|
| Claude Desktop | デスクトップAIアシスタント |
| Cursor | AI搭載コードエディタ |
| Windsurf | AI搭載コードエディタ |
| Zed | AI搭載テキストエディタ |
| Chainlit | AIチャットアプリ構築フレームワーク |
Client(クライアント)
Section titled “Client(クライアント)”Clientとは、Host内部に組み込まれたコンポーネントで、MCPサーバーとの低レベル通信を担当します。「アダプター」または「メッセンジャー」のような役割です。
役割
- MCPプロトコルに従ったメッセージの送受信
- 利用可能なツール・リソース・プロンプトのリスト取得(サーバーへの問い合わせ)
- Hostからの指示をMCPメッセージに変換してServerに送信
- Serverからの結果をHostに返す
HostとClientの関係
HostとClientは概念的に分離されていますが、実装上は同一アプリケーション内に存在します。
- Host: AIの意図を決定する(「天気を調べよう」と判断する)
- Client: MCPプロトコルで実際に通信する(天気MCPサーバーにリクエストを送る)
Server(サーバー)
Section titled “Server(サーバー)”Serverとは、AIに具体的な機能(ツール・データなど)を提供する外部プログラムまたはサービスです。
役割
- 提供できる機能(Tools・Resources・Prompts)を標準化されたフォーマットで公開
- ClientからのToolsリスト要求に応答する
- ツール呼び出しリクエストを受信し、実際の処理を実行する
- 処理結果をClientに返す
動作環境
| 種類 | 説明 | 例 |
|---|---|---|
| ローカルサーバー | 同じマシン上で動作 | ファイルシステムMCPサーバー |
| リモートサーバー | クラウド上で動作 | 天気API MCPサーバー |
通信フローの詳細
Section titled “通信フローの詳細”MCPによるツール呼び出しの流れを手順で示します。
sequenceDiagram
participant U as ユーザー
participant H as Host
participant C as Client
participant S as Server
U->>H: 「今日の東京の天気は?」
H->>C: 利用可能なツールを取得
C->>S: tools/list リクエスト
S-->>C: [get_weather, get_forecast, ...]
C-->>H: ツールリストを返す
H->>H: LLMが get_weather の呼び出しを決定
H->>C: get_weather(location="Tokyo") を実行
C->>S: tools/call リクエスト
S->>S: 天気APIを呼び出す
S-->>C: {"temp": 18, "condition": "晴れ"}
C-->>H: ツール結果を返す
H->>H: LLMが結果を元に回答を生成
H-->>U: 「今日の東京は18度で晴れです。」実装例:Claude Desktop
Section titled “実装例:Claude Desktop”Claude Desktopを例に、3つの役割の対応を整理します。
Claude Desktop (Host + Client)
├── チャットUI (Host の役割)
│ - ユーザー入力の受付
│ - 会話履歴の表示
│ - Anthropic API との通信
│
└── MCP クライアント (Client の役割)
- MCPサーバーへの接続管理
- プロトコルに従ったメッセージ送受信
接続先 MCPサーバー群 (Server の役割)
├── filesystem: ファイルシステム操作
├── brave-search: Web検索
└── github: GitHubリポジトリ操作Claude Desktopの設定ファイル(claude_desktop_config.json)でMCPサーバーを追加すると、ClaudeがそのサーバーのToolsを使えるようになります。
アーキテクチャの特徴
Section titled “アーキテクチャの特徴”疎結合(Loose Coupling)
Section titled “疎結合(Loose Coupling)”疎結合(そけつごう)とは、コンポーネント間の依存関係を最小限にする設計原則です。
MCPのアーキテクチャでは、HostはServerの実装詳細を知る必要がありません。MCPプロトコルという共通インターフェースを通じて通信するため、Serverを別のものに入れ替えても、HostとClientのコードを変更する必要はありません。
1対多の接続
Section titled “1対多の接続”1つのClientが複数のServerに同時に接続できます。たとえば、Claude Desktopは同時にファイルシステムサーバー・検索サーバー・GitHubサーバーの3つに接続し、それぞれの機能を使い分けることができます。
| 役割 | 何者か | 主な責任 |
|---|---|---|
| Host | ユーザーが使うAIアプリ | ユーザーとのインタラクション、AIモデルの実行 |
| Client | Host内の通信コンポーネント | MCPプロトコルに従ったServer間通信 |
| Server | ツール提供プログラム | 機能の公開、ツール呼び出しの実行 |
次のステップ
Section titled “次のステップ”- MCPのケイパビリティ — ServerがClientに提供できるTools・Resources・Promptsの詳細
- なぜMCPが必要か — M×N統合問題とMCPによる解決策を再確認
- MCPとは — MCPの概要に戻る
よくある質問
Section titled “よくある質問”Q: 1つのAIアプリに複数のMCPクライアントを持つことはできますか?
A: MCPの仕様上、1つのHostが複数のClientを持ち、それぞれが異なるServerに接続することは可能です。ただし多くの実装では、1つのClientが複数のServerに接続する構成が一般的です。
Q: MCPサーバーはどこで動かすのですか?
A: MCPサーバーはローカルマシン上またはクラウド上で動作します。Claude Desktopなどは設定ファイルにコマンドを記述することでローカルMCPサーバーを自動起動できます。リモートサーバーの場合はHTTPSエンドポイントを指定します。
Q: Serverはどのプログラミング言語で実装できますか?
A: MCPはプロトコルであるため、言語を問いません。公式SDKとしてTypeScript・Python・Java・Kotlinなどが提供されており、これらを使って比較的簡単にMCPサーバーを実装できます。
このページへのリンク(英語): MCP Architecture