Thank You For Reaching Out To Us
We have received your message and will get back to you within 24-48 hours. Have a great day!
本文へスキップ

AI MCPアーキテクチャを解説:ホスト、クライアント、サーバー、プリミティブ

MCPアーキテクチャを図解で解説します。ホスト・クライアント・サーバーの役割と連携の仕組み、ツール・リソース・プロンプトの3つのプリミティブ、接続ライフサイクルを紹介します。
10分で​​読む

AI MCPのアーキテクチャは、1つの標準プロトコルでAIアプリケーションを外部のデータやツールに接続するクライアント・サーバーモデルです。AIアプリケーションとデータソースの組み合わせごとに個別の連携を構築する(N × M問題)のではなく、データソースごとにMCPサーバーを1つ構築すれば、MCPに対応したどのアプリケーションからでも利用できます。

このアーキテクチャは、ホスト(host、ユーザーが操作するAIアプリケーション)、クライアント(client、ホスト内の接続レイヤー)、サーバー(server、データソースやツールを公開するプログラム)の3つで構成されます。サーバーはツール(tools)、リソース(resources)、プロンプト(prompts)の3つのプリミティブ(primitives)を提供します。AIアプリケーションとデータアクセス層を分けることで、連携を複数のアプリケーションで再利用でき、企業は自社システムのアクセス制御を自ら管理できます。

概要については、AI MCPとは?Model Context Protocol、AIの「USB-C」をご覧ください。

AI MCPアーキテクチャの3つの構成要素

MCPは処理を3つの構成要素に分担します。それぞれの責任範囲を把握することが、保守しやすい連携への第一歩です。

MCPホスト

ホストは、Claude Desktop、CursorやVS CodeなどのIDE、企業独自のエージェントなど、ユーザーが操作するAIアプリケーションです。ホストは言語モデルに接続し、会話のコンテキストとユーザーインターフェースを管理し、モデルの出力に基づいて、どのツール呼び出しを実行し、どれにユーザーの承認が必要かを判断します。また、接続するサーバーごとにMCPクライアントを1つ作成し、管理します。

MCPクライアント

クライアントは、ホスト内で接続を担うコンポーネントです。各クライアントは1つのMCPサーバーと1対1で接続します。この分離は意図的なもので、あるデータソースの認証、エラー、トランスポート設定が他のデータソースに影響しないようにしています。クライアントはJSON-RPC 2.0メッセージを処理し、リクエストごとにプロトコルバージョンと自身の機能(capabilities)を送信します。

MCPサーバー

サーバーは、特定のデータソースやツールをAIアプリケーションに公開するプログラムです。MCPのリクエストを、REST、SQL、GraphQLなど、基盤となるシステム固有の呼び出しに変換します。たとえばPostgreSQLのMCPサーバーは、tools/callリクエストをSQLクエリに変換します。

ローカルサーバー(stdio)は起動したユーザーの権限で動作し、リモートサーバー(Streamable HTTP)は通常はOAuthでクライアントを認可します。MCPのアーキテクチャは2つの層で構成されます。JSON-RPC 2.0メッセージ、ライフサイクル、プリミティブを定義するデータ層(data layer)と、クライアントとサーバー間の通信を担うトランスポート層(transport layer)です。トランスポートには、ローカルサーバーではstdio、リモートサーバーではStreamable HTTPを使用します。

MCPのプリミティブ:ツール、リソース、プロンプト

MCPサーバーは3つのプリミティブを公開します。MCPの仕様では、誰が制御するかによって区別されています。ツールはモデル、リソースはアプリケーション、プロンプトはユーザーが制御します。

プリミティブ制御する側目的例
ツールモデル必要に応じてデータを取得したりアクションを実行したりするJiraチケットの作成、SQLクエリの実行
リソースホストアプリケーション読み取り専用のコンテキストを提供するログファイル、データベースのレコード
プロンプトユーザー定型のワークフローを開始する「このプルリクエストをレビュー」テンプレート

リソース:コンテキスト層

リソースは、ホストがコンテキストとして添付できる読み取り専用のデータです。これにより、モデルは推測ではなく実際のデータに基づいて動作します。

  • URIによる識別: 各リソースにはfile:///var/log/syslogやpostgres://db/users/123のようなURIがあり、ホストはどのサーバーでも同じ方法でデータを要求できます。
  • MIMEタイプ: リソースはテキストでもバイナリでも構いません。サーバーがMIMEタイプ(text/plain、application/json、image/pngなど)を宣言するため、ホストは内容を正しく処理できます。
  • サブスクリプション(任意): サーバーが対応していれば、クライアントはリソースをサブスクライブし、ポーリングの代わりに、変更時にnotifications/resources/updatedメッセージを受け取れます。

ツール:アクション層

ツールにより、モデルはコードの実行、外部APIの呼び出し、データの変更を行えます。AIが「読む」だけでなく「動く」段階に入る部分なので、ツール設計には明確な制限が必要です。

  • 名前、説明、入力スキーマ: すべてのツールは引数のJSON Schemaを宣言します。モデルはツールの名前、説明、スキーマをもとに、いつどのように呼び出すかを判断します。
  • 実行の安全性: ツールを実行するのはサーバーです。本番環境のサーバーは、タイムアウト、権限チェック、必要に応じてサンドボックス化を実施すべきです。データを変更する呼び出しについては、ホストがユーザーに承認を求めるべきです。
  • 結果とエラー: サーバーは結果をコンテンツ項目(テキスト、画像、構造化データ)として返します。ツール自体が失敗した場合は、結果にisError: trueと説明が付き、モデルは内容を調整して再試行できます。JSON-RPCエラーは、未知のツールなどプロトコル上の問題に使われます。

プロンプト:インタラクション層

プロンプトは、サーバーが提供しユーザーが選ぶ再利用可能なテンプレートで、スラッシュコマンドやメニュー項目として表示されることが多くあります。どのツールとリソースを組み合わせればよいか知らなくても、複雑な作業を始められます。

  • 引数: プロンプトは、リポジトリ名や日付範囲など、定義された引数を受け取ります。
  • メッセージの組み立て: 呼び出されると、プロンプトは会話用のメッセージを1つ以上返し、リソースをコンテキストとして埋め込むこともできます。
  • ディスカバリー: クライアントはprompts/listで利用可能なプロンプトを一覧表示し、ユーザーにすぐに使えるワークフローのメニューを提示します。
MCPのプリミティブ:ツールはモデル、リソースはアプリケーション、プロンプトはユーザーが制御します。
MCPのプリミティブ:ツールはモデル、リソースはアプリケーション、プロンプトはユーザーが制御します。

AI MCPアーキテクチャ図

AI MCPアーキテクチャ図(AI MCPダイアグラム)は、リクエストがユーザーから外部システムへ届き、結果が戻ってくるまでの経路を示します。この図のポイントは、1つのホストがサーバーごとに別々のクライアントを動かしていることです。

AI MCPアーキテクチャ図:1つのホストがMCPサーバーごとに別々のMCPクライアントを動かし、各サーバーが外部システムに接続します。
AI MCPアーキテクチャ図:1つのホストがMCPサーバーごとに別々のMCPクライアントを動かし、各サーバーが外部システムに接続します。

要約すると、ホストが利用可能なツールの一覧をモデルに渡し、モデルがツールを選び、ホストが対応するクライアントを通じて呼び出しを送り、サーバーが外部システムに対して実行して構造化された結果を返します。各段階については、次のライフサイクルで説明します。

MCP接続のライフサイクル:構成要素の接続方法

MCPはステートレス(stateless)なリクエストモデルを採用しており、各リクエストには処理に必要なプロトコルバージョンとクライアントの機能が含まれます。クライアントは、リクエストを送信する前に、サーバーが対応するバージョンと機能を確認できます。以前のバージョンとは異なり、現在のプロトコルでは接続単位の初期化ハンドシェイクは不要で、プロトコルレベルのセッションも維持しません。

1. ディスカバリー

クライアントはリクエストを送信する前にserver/discoverを呼び出し、サーバーが対応するプロトコルバージョン、サーバーの識別情報、提供する機能を確認できます。これにより、クライアントは互換性のあるプロトコルバージョンを選択できます。続いて、クライアントはtools/list、resources/list、prompts/listで利用可能な機能を問い合わせます。サーバーは、各項目の名前、説明、ツールの場合は入力スキーマを含む一覧を返します。

2. 運用

クライアントは、選択したプロトコルバージョンと自身の機能を、io.modelcontextprotocol/protocolVersionとio.modelcontextprotocol/clientCapabilitiesを使って_metaに含め、リクエストを送信します。また、io.modelcontextprotocol/clientInfoで自身を識別することが推奨されます。

モデルがツールを選ぶと、ホストは対応するMCPクライアントを通じてtools/callでリクエストを送信します。また、resources/readでデータを取得することもできます。サーバーは各リクエストを処理し、結果のメタデータに自身の識別情報を含めて結果を返します。

継続的な変更通知が必要な場合、クライアントはsubscriptions/listenでオプトインできます。このストリームは、ツール・プロンプト・リソースの一覧の変更通知と、リソースのサブスクリプションに対応しており、従来のresources/subscribeとresources/unsubscribeメソッドに代わるものです。データベースのタイムアウトなどツール実行の失敗はisError: trueの結果として返され、モデルが対処または再試行できます。JSON-RPCエラーは、プロトコルレベルまたはリクエストレベルの問題を示します。

3. 終了

MCPには終了専用のメッセージも、終了すべきプロトコルレベルのセッションもありません。通信が完了すると、クライアントとサーバーは基盤となるトランスポートを閉じます。stdioでは、クライアントがサーバーの入力ストリームを閉じ、サーバープロセスが終了できるようにします。Streamable HTTPでは、クライアントが該当するHTTP接続またはレスポンスストリームを閉じます。サーバーは、必要に応じてデータベース接続やファイルロックなどの一時的なリソースを解放すべきです。

後方互換性: 古いMCPサーバーやクライアントでは、以前のプロトコルバージョンで定義されたinitialize / notifications/initializedハンドシェイクが引き続き使われている場合があります。

MCP接続のライフサイクル:ステートレスなリクエストモデルにおけるディスカバリー、運用、終了
MCP接続のライフサイクル:ステートレスなリクエストモデルにおけるディスカバリー、運用、終了

アーキテクチャのトレードオフ

ホスト・クライアント・サーバーの分離は、複数のAIアプリケーションが同じシステムを必要とする場合に効果を発揮しますが、コストもあります。

  • 構成要素が増える: サーバーごとに、デプロイ、監視、更新が必要なプロセスやサービスが増えます。1つのアプリケーションが1つの安定したAPIを呼ぶだけなら、直接連携のほうがシンプルな場合が多くあります。
  • コンテキストの消費: 各ツールの名前、説明、スキーマはモデルに渡されます。多くのツールを持つサーバーを複数接続すると、コンテキストウィンドウを消費し、ツール選択の精度が下がることがあるため、用途に必要なツールだけを公開しましょう。
  • 信頼境界: サーバーのツール結果はそのままモデルのコンテキストに入ります。サードパーティ製サーバーは検証してバージョンを固定し、各サーバーには最小権限のアカウントを与えましょう。

事例:1つのホストで複数の業務システムを利用

Haposoftは、Hapo ERP(ファスナーメーカー向けERP)、Hapo SMS、Hapo OKRなど自社製品向けにMCPサーバーを構築しています。各システムにそれぞれサーバーがあり、1つのホストであるClaudeが別々のクライアントを通じてすべてに接続します。ユーザーは1か所から、製造オーダーや在庫の確認、営業パイプラインや支払い状況の確認、OKRのチェックイン提出が行えます。サーバーはリモートで稼働し、各ユーザーがOAuthでサインインするため、アクセスはそのユーザー自身の権限に従います。レコードの削除や承認を行うツールは公開しておらず、データの変更には必ず確認が必要です。

AI MCPアーキテクチャに関するよくある質問

MCPホストとMCPクライアントの違いは?

ホストは、IDEやチャットアプリなど、ユーザーが作業するAIアプリケーションです。クライアントは、そのホスト内で1つのMCPサーバーとの接続を担うコンポーネントです。ホストはインターフェース、モデル、承認を管理し、各クライアントは担当するサーバーとの通信を担います。

1つのMCPホストで複数のサーバーに接続できますか?

はい。ホストはサーバーごとにクライアントを1つ作成するため、1つのアプリケーションから複数のデータソース(たとえばローカルのファイルシステム用サーバーとリモートのPostgreSQL用サーバー)に同時に接続できます。

AI MCPアーキテクチャ図はどう読めばよいですか?

リクエストの流れを追いましょう。ホストはクライアントを通じてtools/callやresources/readなどのリクエストを送り、サーバーは構造化された結果を返します。図では、AIアプリケーション(ホストとモデル)とデータアクセス層(サーバーとその先のシステム)が分かれています。

ツール、リソース、プロンプトのどれを使うべきですか?

モデル自身にアクションの実行や必要に応じたデータ取得を判断させたい場合はツール、アプリケーション側で既知のコンテキストを添付したい場合はリソース、ユーザーが繰り返し使える定型ワークフローが必要な場合はプロンプトを使います。

まとめ

AI MCPのアーキテクチャは、AIアプリケーションを外部のデータやツールに接続するための標準的な方法を提供します。ホストがユーザーとモデルのやり取りを管理し、クライアントがそれぞれ1つの接続を担い、サーバーがツール、リソース、プロンプトを公開します。この分離により、連携を複数のAIアプリケーションで再利用でき、自社システムのアクセス制御も維持できます。仕様の詳細は、Model Context Protocolの公式ドキュメントをご覧ください。

自社システム向けのMCPサーバーをご検討中ですか?クラウドでもオンプレミスでも、安全なMCP連携についてHaposoftのAI MCPチームにご相談ください。

シェア
コピーしました
cta-background

ニュースレター登録

デジタルトランスフォーメーションに​関する​専門的な​知見や​イベント最新情報を、​メールボックスに​直接​お届けします。