2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

MCPサーバーの仕組みをアーキテクチャから理解する

Last updated at Posted at 2026-01-27

MCPサーバーを使って業務効率化を図っている方も、最近かなり増えてきたのではないでしょうか。

私自身も最近、FigmaのMCPサーバーを使ってフロントエンドのコーディングを試してみたのですが、「これは確かに便利だな」と感じました。

一方で、実際に使ってはいるものの、「MCPサーバーって内部的にはどういう仕組みなんだっけ?」と聞かれると、正直あまりちゃんと説明できていないことに気づきました。

そこで本記事では、MCPサーバーを使う側のエンジニア視点で、MCPサーバーの仕組みを整理してみた内容をまとめていきます。

MCPって何?

MCPは Model Context Protocol の略で、AI(ChatGPT / Claude など)と外部ツール・データ・ワークフローを安全かつ統一的につなぐためのオープン標準プロトコルです。

MCPは、しばしば「AIにとってのUSB-Cポート」に例えられます。USB-Cがさまざまなデバイスを共通の規格で接続できるように、MCPもクラウドサービスやローカルシステム、データベース、業務アプリケーションなどを共通のインターフェースでつなぎます。これにより、AIは個別実装に依存することなく、多様なシステムと柔軟に連携できるようになります。

MCP

出典: https://norahsakal.com/blog/mcp-vs-api-model-context-protocol-explained/

従来との比較

(従来のAI × 外部ツール連携)

  • AIアプリケーションを外部ツールに接続する際には、ツールごとに個別のAPI連携を実装する必要があった
  • APIの仕様や認証方式はサービスごとに異なり、実装や保守のコストが高くなりがちだった
  • 利用するLLMモデルを変更した場合、連携部分の実装を見直す必要が生じるケースも多かった

(MCP導入後の連携)

  • 外部ツール側にMCPサーバーが用意されていれば、個別のAPI連携を意識せずに利用できる
  • 最小限の設定だけで、複数のツールを共通の方法で接続できる
  • LLMモデルを変更しても、追加の連携実装を行うことなく利用できる

(ひと目で分かる比較)

観点 従来 MCP導入後
連携方法 ツールごとに個別API実装 共通インターフェース
実装コスト 高い 低い
モデル変更時の対応 再実装が必要 原則不要
保守性 低い 高い

MCPを導入することで、AIと外部ツールの連携を標準化でき、実装や保守にかかるコストを大きく削減できる。

MCPの全体構成

MCPの全体構成はMCPホスト、MCPクライアント、MCPサーバーの3つの層に分けることができます。

それぞれの役割をざっくり説明する下記のようになります。

  • MCPホスト:ユーザーと対話するAIエージェントの司令塔(ChatGPT,Cursorなど)
  • MCPクライアント:ホストとサーバーをつなぐ仲介役
  • MCPサーバー:実際に外部リソースへアクセスする実行役

スクリーンショット 2026-01-27 0.59.51.png

出典: https://modelcontextprotocol.io/docs/learn/architecture


上記のアーキテクチャをみたところで、それぞれの役割を詳しくみていきたいと思います。

MCPホスト(司令塔)

MCPホストは、ユーザーと直接対話するAIエージェント本体の「司令塔」です。ユーザーからのプロンプト(命令文)を受け取り、「どのツール・データが必要か」を判断し、適切なMCPクライアントに処理を依頼します。

(MCPホストの主な機能)

  • ユーザーのプロンプト内容を解析
  • 必要なツール・リソースを特定
  • MCPサーバーに対する実行リクエストの指示
  • 各クライアントからの結果を整理・統合し、ユーザーに返答

MCPクライアント(仲介役)

MCPクライアントは、ホストアプリケーションによってインスタンス化・管理され、特定のMCPサーバーと1対1で通信を行う仲介コンポーネントです。Claude.ai や IDE などのホストアプリは複数のMCPクライアントを管理し、それぞれを異なるMCPサーバーとの通信に割り当てます。ユーザーの指示にもとづき、MCPクライアントは適切なMCPサーバーへ実行指示を送信し、サーバーから得られた実行結果をLLMにコンテキストとして渡すことで、ホスト側での最終的な返答テキスト生成をトリガーします。
(※ テキスト生成そのものはホスト/LLMが行います)

(MCPクライアントの主な機能)

MCPクライアントは、MCPサーバーとの通信を仲介するにあたり、以下のような仕組み・機能を提供します。

ルート(Roots)
ルートは、アクセス可能な範囲を限定する仕組みです。LLMが必要な情報のみにアクセスできるようにし、不要・危険なデータへのアクセスを防ぎます。

例)

  • 旅行予約用サーバーには、特定のカレンダーディレクトリのみを許可
  • ユーザーのカレンダー情報だけを読み取れるよう制限

→ セキュリティと最小権限の実現


サンプリング(Sampling)
サンプリングは、MCPクライアントを介してLLMに対し、同じ問いについて複数回の応答生成を要求できる仕組みです。MCPクライアントは、異なるコンテキストや条件を付加しながらLLM呼び出しを仲介することで、より精度が高く、文脈に適した回答を引き出します。

また、MCPサーバーはMCPクライアントを通じてLLMのサンプリングを要求でき、判断をLLMに委ねることも可能です。

例)

  • 「このデータをどう解釈すべき?」
  • 「次に何をすべき?」
  • フライト一覧をLLMに渡し、「ユーザーにとって最適な便を選んで」と依頼する

エリシテーション(Elicitation)
エリシテーションは、ユーザーに追加の確認を求める仕組みです。

例)

  • 「本当に削除しますか?」
  • 「どちらの方法がよいですか?」
  • 座席の種類、部屋タイプ、連絡先情報などを予約確定前にユーザーへ確認

MCPサーバー(実行役)

MCPサーバーは、MCPクライアントから受け取った指示をもとに、実際に外部リソースへアクセスする「実行役」です。

(MCPサーバーの主な機能)

MCPサーバーは、MCPプロトコルに従って、クライアントから利用可能な機能として、
以下の要素を公開します。

ツール(Tools)
ツールは、LLMが外部とやり取りするためのアクションを提供します。

例)

  • 外部APIの呼び出し
  • 関数計算
  • ファイル操作
  • 外部システムとの通信

→ 「文章生成だけでは足りない」場面を補う存在


リソース(Resources)

リソースは、LLMの回答生成に必要なコンテンツを提供する読み取り専用データです。

例)

  • ファイル内容
  • データベースのレコード
  • データベーススキーマ
  • APIドキュメント

→ 文脈情報を提供する受動的なデータソース


プロンプト(Prompts)
プロンプトは、LLMの応答をテンプレート化し、対話を構造化するための仕組みです。外部アクション(ツール実行など)を伴わずに、質問の前提や文脈をあらかじめ定義できます。

あらかじめ用意されたプロンプトを利用することで、

  • 質問をコンテキスト化する
  • 異なる形式のデータを統合する
  • 特定のツールやリソースを使うようLLMに指示する

といったことを、毎回同じ指示を書かずに実現できます。

例)

  • 英訳タスク
    • 通常:「以下の文章を英訳してください」と毎回入力
    • MCPプロンプト使用時:英訳したい本文だけ入力すればOK

まとめ

本記事では、MCPについて、MCPサーバーを利用するエンジニアの視点から、その全体像と仕組みを整理しました。

MCPは単なる「便利な連携手段」ではなく、AIと外部ツールを標準化された形で安全につなぐためのアーキテクチャとして設計されていることが分かります。

特に、MCPホスト、MCPクライアント、MCPサーバーのそれぞれの役割分担を意識してアーキテクチャをイメージすると、「なぜこの構成になっているのか」「どこで何が起きているのか」が理解しやすくなるはずです。

2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?