MCPの仕組み:サーバーとクライアント
MCPは、どのようにして動いているのだろうか
これまでの記事で、MCPがAIと外部ツールを繋ぐプロトコルであること、そしてそれによって何が可能になるかを見てきました。しかし、「AIからの指示が、どのようにして手元のPCで実行されるのか」その具体的な仕組みについては、まだ謎に包まれています。
この記事では、MCPの心臓部である クライアントとサーバーの構造 について解説します。この基本的なアーキテクチャを理解することで、あなたが将来MCPツールを自作したり、トラブルシューティングを行ったりする際に、きっと役立つはずです。
MCPの基本構造:クライアントとサーバー
はじめに、MCPのシステムが大きく2つの要素から成り立っていることを理解しましょう。それは クライアント と サーバー です。
-
クライアント (Client): AIモデル(たとえばClaude)側に存在し、ユーザーの指示を解釈して、「どのツールの、どの機能を使いたいか」というリクエスト(お願い)を作成する役割を担います。
-
サーバー (Server): あなたの開発環境(PCやサーバー)で動作し、クライアントからのリクエストを待ち受けます。リクエストを受け取ると、対応するツールを実行し、その結果をクライアントに返す役割を持ちます。
この2者が、インターネットを通じて通信することで、MCPの仕組みは成り立っています。
+-----------------+ +-----------------+ | AI (Claude) | | あなたのPC/サーバー | | | | | | [ クライアント ] | <-----> | [ サーバー ] | | | 通信(MCP) | | +-----------------+ | +-----------+ | | | ツール群 | | | +-----------+ | +-----------------+
要するに、「AI側のクライアントが『お願い』を送り、あなたのPCのサーバーがそれを受けて『実行』する」という役割分担になっているということです。
通信のルール:JSON-RPC
クライアントとサーバーは、どのような言語で会話しているのでしょうか。その会話形式として、MCPでは JSON-RPC という標準的な仕様が採用されています。
- JSON (JavaScript Object Notation): 人間にも機械にも分かりやすい、軽量なデータ交換フォーマットです。
{"key": "value"}
のような形式でデータを表現します。 - RPC (Remote Procedure Call): 「遠隔手続き呼び出し」と訳されます。手元のマシンから、ネットワーク経経由で別のマシンにある関数やメソッドを呼び出すための仕組みです。
クライアントは、呼び出したいツールの情報(関数名、引数など)をJSON形式のメッセージに変換してサーバーに送ります。サーバーはそのJSONを解析し、指定されたツールを実行。そして、実行結果(またはエラー情報)を、再びJSON形式でクライアントに返します。
たとえば、readFile("/path/to/file")
というツールを呼び出す場合、以下のようなJSONが送受信されます(簡略化しています)。
クライアント → サーバー (リクエスト)
{"method": "readFile", "params": ["/path/to/file"]}
サーバー → クライアント (レスポンス)
{"result": "ファイルの内容..."}
要するに、「JSONという分かりやすい形式を使って、リモートにある関数を呼び出す仕組み(JSON-RPC)で通信している」ということです。
なぜこの構造なのか?そのメリット
MCPがこのようなクライアント・サーバー構造とJSON-RPCを採用しているのには、いくつかの重要な理由があります。
- 疎結合 (Loosely Coupled): クライアントとサーバーは、お互いに「JSON-RPCのルールで話す」ことさえ知っていればよく、相手が内部で何をしているか(どんな言語で書かれているか、どんなOSで動いているか)を知る必要がありません。これにより、それぞれを独立して開発・更新することができます。
- セキュリティ: サーバーはあなたの管理下にあり、外部からのリクエストを受け付ける窓口となります。ここで、どのツールを公開するのか、どのようなリクエストを許可するのかを制御することで、安全性を確保できます。
- 拡張性: 新しいツールを追加したい場合、サーバー側に新しい関数を実装し、それを公開するだけで済みます。クライアント側(AIモデル側)に何か変更を加える必要はありません。
要するに、「お互いを独立させつつ、安全で拡張しやすい関係を保つために、この構造が採用されている」のです。
サーバーの実装方法
では、このサーバーはどのようにして作るのでしょうか。幸いなことに、多くのプログラミング言語には、JSON-RPCサーバーを簡単に構築するためのライブラリが存在します。
- Python:
json-rpc
やwerkzeug
といったライブラリを組み合わせることで、数行のコードで基本的なMCPサーバーを立ち上げることができます。 - Node.js:
express
などのWebフレームワークとjson-rpc-2.0
のようなライブラリを使えば、同様に簡単に実装可能です。
具体的な実装方法は、本コースの後半で詳しく解説しますので、ここでは「専用のライブラリを使えば、意外と簡単に作れる」ということだけ覚えておいてください。
まとめ
今回は、MCPの根幹をなす技術的な仕組みについて解説しました。
- MCPは、AI側の「クライアント」と、ツールが置かれた「サーバー」から構成される。
- 通信には、JSON-RPCという標準的なプロトコルが使われている。
- この構造により、疎結合で、安全かつ拡張性の高いシステムが実現されている。
- 各言語で提供されているライブラリを使えば、サーバーの実装は比較的容易である。
このクライアント・サーバーモデルを理解することで、MCPの動作がより明確にイメージできるようになったのではないでしょうか。
次回からは、いよいよ実践編です。まずは「初めてのMCPサーバー」を、実際にあなたの手で構築してみましょう。