コンテンツにスキップ
X

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とは、ユーザーに直接向き合うAIアプリケーションです。AIモデルが動作する環境そのものを指します。

役割

  • ユーザーからの入力(テキスト・音声など)を受け取る
  • 会話履歴を保持し、コンテキストを管理する
  • AIモデルを呼び出してレスポンスを生成する
  • 必要に応じてMCPサーバーへの接続を開始する
  • 最終的な応答をユーザーに表示する

具体例

Hostアプリケーション種類
Claude DesktopデスクトップAIアシスタント
CursorAI搭載コードエディタ
WindsurfAI搭載コードエディタ
ZedAI搭載テキストエディタ
ChainlitAIチャットアプリ構築フレームワーク

Clientとは、Host内部に組み込まれたコンポーネントで、MCPサーバーとの低レベル通信を担当します。「アダプター」または「メッセンジャー」のような役割です。

役割

  • MCPプロトコルに従ったメッセージの送受信
  • 利用可能なツール・リソース・プロンプトのリスト取得(サーバーへの問い合わせ)
  • Hostからの指示をMCPメッセージに変換してServerに送信
  • Serverからの結果をHostに返す

HostとClientの関係

HostとClientは概念的に分離されていますが、実装上は同一アプリケーション内に存在します。

  • Host: AIの意図を決定する(「天気を調べよう」と判断する)
  • Client: MCPプロトコルで実際に通信する(天気MCPサーバーにリクエストを送る)

Serverとは、AIに具体的な機能(ツール・データなど)を提供する外部プログラムまたはサービスです。

役割

  • 提供できる機能(Tools・Resources・Prompts)を標準化されたフォーマットで公開
  • ClientからのToolsリスト要求に応答する
  • ツール呼び出しリクエストを受信し、実際の処理を実行する
  • 処理結果をClientに返す

動作環境

種類説明
ローカルサーバー同じマシン上で動作ファイルシステムMCPサーバー
リモートサーバークラウド上で動作天気API MCPサーバー

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を例に、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を使えるようになります。

疎結合(そけつごう)とは、コンポーネント間の依存関係を最小限にする設計原則です。

MCPのアーキテクチャでは、HostはServerの実装詳細を知る必要がありません。MCPプロトコルという共通インターフェースを通じて通信するため、Serverを別のものに入れ替えても、HostとClientのコードを変更する必要はありません。

1つのClientが複数のServerに同時に接続できます。たとえば、Claude Desktopは同時にファイルシステムサーバー・検索サーバー・GitHubサーバーの3つに接続し、それぞれの機能を使い分けることができます。

役割何者か主な責任
Hostユーザーが使うAIアプリユーザーとのインタラクション、AIモデルの実行
ClientHost内の通信コンポーネントMCPプロトコルに従ったServer間通信
Serverツール提供プログラム機能の公開、ツール呼び出しの実行

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