Have an amazing solution built in RAD Studio? Let us know. Looking for discounts? Visit our Special Offers page!
C++DelphiRAD Studio事例

意外と簡単?作って学ぶMCPサーバーの世界

AI の普及とともに、私たちの生活のさまざまな場面で AI が活用されるようになりました。文章の作成や画像生成、相談事など、これまではチャット形式での対話が主な使われ方だった生成AIですが、最近では「AIエージェント」としての活用にも注目が集まっています。
AI エージェントの活用を考えるうえで、もうひとつ注目したいのが「MCP(Model Context Protocol)」です。MCP を利用すると、AI から外部のツールやサービスへアクセスできるようになります。Kai にもMCPサーバーを登録し、利用するための機能が用意されています。

今回は、MCP サーバーの基本的な仕組みを学び、実際に RAD Studio で MCP サーバーを作成して Kai から利用してみます。
「MCPサーバー」と聞くと少し難しそうに感じるかもしれません。しかし、その基本的な構造をひとつずつ見ていくと、意外とシンプルな仕組みであることがわかります。

AI世界のUSB-C?

MCP はよく「AI 界の USB-C」と表現されます。しかし筆者は、この一見わかりやすそうな説明をしばらく理解することができませんでした。
そもそも AI に USB-C のような外部接続の仕組みがなぜ必要なのか。なぜ Type-C なのか、Type-A ではだめなのか…など、今思えばかなり的外れなことを気にしてしまい、本質的な部分に着目できていませんでした。

もし同じように「USB-C と言われてもピンとこない」と感じるのであれば、少し別の捉え方をしてみましょう。

「MCP は AI に使用してもらうためのプラグインの規格」と考えるとわかりやすくなるかもしれません。

MCP そのものは、あくまでプロトコル、つまり通信のための共通ルールです。その意味では「USB」という例えはかなり的確です。MCP という共通の規格に対応していれば、AI アプリケーションからさまざまなデータやツールを共通の方法で利用できるようになります。
例えば、データベースを検索する、ファイルを操作する、外部サービスから情報を取得するといった機能を MCP サーバーのツールとして用意することで、 AI はチャットによる対話だけでなく、外部の機能を利用しながら処理を行えるようになります。いわば普段私たちが使っている AI 向けにプラグインのようなものをユーザ側が作成し、提供することが可能なのです。

MCP はもともと Anthropic 社によって公開されたオープンなプロトコルですが、現在では Linux Foundation 傘下の Agentic AI Foundation(AAIF) に寄贈され、オープンプロジェクトとして運営されています。
Anthropic 社以外のさまざまな AI 製品やサービスでも採用されているため、MCP に対応した MCP サーバーであれば、特定の AI ベンダーだけに限定せず、対応する MCP の仕様や機能に応じて、さまざまなAI アプリケーションから利用することができます。

MCPサーバー作成の知っておくべき3つのコト

MCP サーバーの仕組みは、それほど複雑なものではありません。
まずは、MCP サーバーを作成するうえで知っておきたい3つのポイントを見ていきましょう。

①AIクライアントとのやり取りにはJSONを使用している

MCP では、クライアントが MCP サーバーに接続し、公開しているツールを利用します。この通信には、JSON-RPC 2.0 の仕様に準拠したメッセージが使用されます。

②トランスポート方式を知ろう

MCP サーバーを作成するうえで、トランスポート方式(クライアントとサーバー間の通信方法)を理解し、決定することは重要です。
トランスポート方式には、おおまかに次の2つがあります。

(1)stdio(標準入出力)方式
stdio 方式では、MCPクライアントと MCP サーバーが標準入力・標準出力を使ってデータをやり取りします。Delphi であれば、コンソールアプリケーションで Readln や Writeln などを使用し、①で説明した JSON-RPC 2.0 仕様に準拠したデータを送受信します。

(2)Streamable HTTP方式
Streamable HTTP 方式では、HTTP(HTTPS) を使用して MCP クライアントと MCP サーバーの間でデータをやり取りします。

③メソッド名の理解

MCP の仕様には、MCP サーバーとクライアント間でやり取りを行うための命令(メソッド)が定められています。MCP サーバーを作成するにあたって、まずは次のメソッドを知っておくとよいでしょう。

(1)initialize

MCP クライアントと MCP サーバーが最初に接続するときに使用するメソッドです。クライアントが使用する MCP のプロトコルバージョンや対応する機能などを MCP サーバーへ伝え、MCPサーバーも自身が対応する情報を返します。

(2)notifications/initialized

initialize による初期化が完了したことを、MCP クライアントから MCP サーバーへ通知するためのメソッドです。

(3)server/discover

クライアントが「このサーバーは何に対応しているか」を確認するためのメソッドです。MCP サーバーは、対応している MCP のプロトコルバージョンや機能などの情報を返します。
※ MCP のバージョンによって初期化の仕組みが異なります。initializeとnotifications/initialized は従来の仕様で使用され、2026-07-28 仕様では server/discover が導入されています。

(4)tools/list

クライアントが「この MCP サーバーでは、どんなツールが用意されているのか」を確認するためのメソッドです。
例えば「DoSomething」というツールを実装した場合、そのツールの名前や説明、必要な引数などを tools/list への応答として公開します。

MCPサーバーに独自の機能を実装する

ここまで紹介したメソッド名は、MCP の仕様によってあらかじめ決められたものです。
一方、実際にAIから利用してもらう機能は、「ツール」としてMCPサーバーに実装します。 ツールの名前は開発者が決めることができます。図は、MCP サーバーと MCP クライアント(AI)とのやり取りのフローです。

例えば「DoSomething」というツールを公開した場合、MCPクライアントは tools/list でその存在を知り、実際に実行するときには tools/call メソッドを使って「DoSomething」を呼び出します。
なお、MCPのメソッドのやり取りは、MCPのバージョンによって手順が異なります。どのバージョンで実装すべきかは、利用を前提とするクライアント(AI)やそのバージョンによって異なります。

RAD Studioでつくる初めてのMCPサーバー

RAD Studio をつかって MCP サーバーを作成していきます。
今回は Kai での使用を想定し、プロンプトが終了したら通知を行う MCP サーバーを作成します。通知には ShowMessage を使用しますが、応用例として、Windows のトースト機能や外部の通知サービスと連携することも考えられます。

ツール名は DoSomething と汎用的な名前にしておきます。その他、実行環境は以下のとおりです。

MCPサーバー名: MyMCPServer
ツール名: DoSomething
プロジェクト名: MyMCPServer
機能概要: Kai での MCPサーバとして使用することを前提とし、作業完了時に AI から DoSomething ツールを呼び出し、ShowMessage を使用してユーザに通知する。
開発言語: Delphi または C++Builder
使用するAIモデル(CLI): OpenAI(Codex)  バージョン1.11 ※MCP のバージョンは 2025-06-18版

コーディングについては Kai の環境をつかえるので AI にコーディングしてもらいましょう。
プロンプトは以下のとおりとします。(サンプルコードは記事の最後に掲載します)

生成されたコードを少し覗いてみましょう。次のコードは、メインルーチンにあたる部分です。極めてシンプルな構造であることがわかります。

メインルーチンは極めてシンプルです。①で各種初期化処理を行った後、 Input変数 に関連付けられた標準入力が終端に達するまでループします。
受け取ったデータは②-2で JSON に変換され、②-3で各種処理へと振り分けられます。

MCPサーバーの登録

次に、ビルドした Exe を Kai の MCP サーバーとして登録します。次の例は、その登録例です。

RAD Studio IDE より ツール > オプション > Kai > チャット > MCPサーバー > カスタムを選択します。
サーバーの追加を行う(+)ボタンをクリックしプロパティを以下のように設定します
Name: MyMCPServer (または任意の名称)
タイプ: ローカル
開始コマンド: 作成した MCP サーバーのフルパス(例では “C:\Users\Public\Documents\MyMCPServer\Win64\Debug\MyMCPServer.exe")

以上を入力したら保存をクリックし、RAD Studio を再起動します。

動作テスト

作成した MCP サーバーが期待した動作をするかチェックします。
RAD Studio IDE より [表示 > Kai - チャット]を選択し、チャットウインドウを開いたら新しいセッションを開始します。

新しいセッションが作成されるのと同時に、タスクマネージャーを開くと、作成した MyMCPServer.exe が起動されていることが確認できます。この状態であれば[実行 > プロセスにアタッチ] を行って、RAD Studio でデバッグを行うこともできます。

つぎに、プロンプトを以下のように入力し、作業の終わりに通知が行われるか確かめます。

図は、プロンプトが実行され、プロジェクトが作成された直後の状態です。ご覧の通り、メッセージボックスが表示されています。なお、メッセージボックスの文面は MCP サーバー側で用意した定型文ではなく、AI 側で作成した文章をそのまま表示しています。

次のテキストは MCP クライアントとサーバーの通信ログです

ログは2行1組で構成され、1行目は記録時刻と通信の方向(AI→MCPサーバー または MCP→AI)です。2行目は実際の通信内容です。通信の内容は JSON 形式でやり取りされていることがわかります。
冒頭で説明した通り、JSON のフォーマットは MCP の仕様として公式サイトに定義されています。

MCP Connectでさらに簡潔に

RAD Studio 13.2 からは、「MCPConnect」を利用することで、MCPサーバーをより手軽に開発できるようになりました。

MCPConnect には、MCP サーバーの実装に必要となる基本的な機能があらかじめライブラリとして用意されているため、通信処理や各種機能を一から実装する必要がなく、よりシンプルなコードで MCP サーバーを構築できます。
さらに、MCPConnect には MCP サーバー作成用のウィザードも用意されています。用途に合わせたスケルトンも生成してくれるため、初めて MCP サーバーを開発する方でもスムーズに開発を始めることができます。

MCPConnect は、アドオンとして GetItから入手が可能です。
また、Paolo Rossi 氏によって執筆された Building MCP Servers in Delphi with MCPConnect  および Luca Minuti氏によって執筆された MCPConnect: How To Secure MCP Servers (いずれも英語) ではMCPの基礎知識とともに、MCPConnect をより詳細に解説しています。ぜひこちらもご覧ください。

まとめ:広がるMCPサーバーの世界

RAD Studio でつくる MCP サーバーは、Kai で利用するツールを作成する場合はもちろん、本格的な AI エージェントとして利用するツールを開発する場合でも、今回ご紹介した仕組みが基本となります。
RAD Studio で MCPサーバーを開発するメリットのひとつとして、既存のプログラム資産を活用できることが挙げられます。例えば、既存の業務アプリケーションに実装されているビジネスロジックを、AI エージェントから利用するケースを考えてみましょう。

これまで UI を通じてユーザーが操作していた処理を、MCP サーバーを介して実行できるようにすることで、既存のワークフローと併用して、AIから利用できるワークフローを追加させることができます。

このように MCP サーバーは、新たなツールを開発するためだけでなく、これまで蓄積してきたプログラム資産と AI をつなぐ橋渡し役としても活用できます。

参考

サンプルコード

Delphi

C++Builder

RAD Studio 13.2 Florence Now Available! Kai 1.1.1 Now Available! What's Coming in RAD Studio 13.2 Florence

Reduce development time and get to market faster with RAD Studio, Delphi, or C++Builder.
Design. Code. Compile. Deploy.

Start Free Trial   Upgrade Today

   Free Delphi Community Edition   Free C++Builder Community Edition

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.

IN THE ARTICLES