1. はじめに
「Pythonコード不要?Elastic AI Agent と ES|QL で実現する超シンプルな次世代RAG」のブログ で Elastic AI Agent を使って、「柿之助」についての質問に答える RAG を作成しました。
その際、「柿之助」に関するコンテキストを取得する手段として ES|QL を用いた Elastic AI Agent Tool を作成・登録しました。
本記事では、この Tool を MCP (Model Context Protocol) サーバーとして公開し、LM Studio などの MCPクライアントから外部ツールとして呼び出せる環境を構築してみます。
※一般的には MCPサーバーは多様な役割を担いますが、本稿では「柿之助のコンテキストを提供するデータソース」としてシンプルに活用しています。
Elastic AI Agent Tool (の集合)をMCP サーバーとして公開するメリット:
- Claude Desktop や LM Studio などの標準的な MCP クライアントから、自作の Elastic 検索ロジック(ES|QL)をコンテキスト提供ツールとしてシームレスに呼び出せるようになります。
2. 動作環境
- Elastic Cloud Enterprise License (Elastic Integration Service (EIS) 用に必要)
- Docker 実行環境 (筆者はWindows用のRancher Desktop 1.24.0を利用)
- MCPクライアント : LM Studio 0.4.25
- Local Chat LLM : google/gemma-4-e4b
※Elasticsearch 9.5.3 (Trial License) は、自動的にダウンロードされます。
※今回、MCPクライアントには LM Studio を利用しました。MCPクライアントに Claude Desktop などを利用することも可能です。 → 参考URL: Claude DesktopにElastic Agent BuilderのMCPサーバーを追加する方法
3. 以前のバージョンとの比較
2025年1月に作成した RAG アプリケーションとの比較表です。
| 項目 | 2025年01月版 | 今回版(MCP利用版) |
|---|---|---|
| ベースとなる Elasticsearch のバージョン | v8.16.0 | v9.5.3 |
| index.mode | standard | vectordb_document |
| Machine Learning Node | 必須 | 不要 (代わりにEISを利用) |
| クエリーの言語 | Query DSL | ES|QL |
| 密ベクトル生成用のモデル | .multilingual-e5-small_linux-x86_64 | .jina-embeddings-v5-text-nano (EIS経由) |
| セマンティックリランク用モデル | なし | .jina-reranker-v3.5 (EIS経由) |
| MCPサーバー | なし | Elastic AI Agent Tool |
| MCPクライアント | なし | LM Studio |
| 質問回答用LLM | Cohere Command R (2024年12月版) | google/gemma-4-e4b |
| UI | Streamlit | LM Studio |
4. シーケンス図(概略図)

5. 準備
Pythonコード不要?Elastic AI Agent と ES|QL で実現する超シンプルな次世代RAG の準備作業の 1 ~ 5.4 までを行い、以下が完了している状態にします。
- Elasticsearch / Kibana のセットアップ
- ES|QLを用いた AI Agent Tool (kakinosuke.get_contents) の登録
※なお、Elastic 側の AI Agent の登録は今回は不要です。
6. MCPサーバーのURL の取得
※ Kibana の Display language : 日本語 としています。
6.1. Elasticsearch / Agent / Tool の画面の表示
Kibana にログイン後、Home / Elasticsearch / エージェント / ツール の画面を表示します。
6.2. すべてのツールを管理
右上の すべてのツールを管理 をクリックします。

6.3. MCPサーバーのURLをコピー
ツールライブラリ画面が表示されるので、右上の MCPを管理 から MCPサーバーのURLをコピー をクリックします。
MCPサーバーのURLがクリップボードにコピーされるので、メモ帳などに貼り付けて記録しておきます。
今回は Docker 上で、HTTP で動作させているため、下記のような URL になるはずです。
http://localhost:5601/api/agent_builder/mcp
7. API Key の発行
7.1. APIキー作成画面の検索
上部の検索窓に api と入力します。「セキュリティ / APIキー」が検索結果に表示されるのでクリックします。

7.2. APIキー作成画面への遷移
[(+) APIキーを作成] をクリックします。
既に他のAPIキーが存在する場合、表示される内容が異なりますが、その場合も [(+) APIキーを作成] をクリックしてください。

7.3. APIキーの作成
APIキー作成画面が表示されます。
名前に MCPサーバーへのアクセス用とわかる名前を入力し、右下の [APIキーを作成] をクリックします。
- 名前 : mcp_server_api_key (例)
※注 本番運用では、有効期限の設定や、セキュリティ権限の制御を行うことを推奨します。

7.4. APIキーのコピー
APIキーが作成されると、APIキーの作成完了画面が表示されます。
エンコーディング済のAPIキーの値をコピーします。
コピーした APIキーは、メモ帳などに貼り付けて記録しておきます。
もしも、この値を忘れてしまったら、APIキーを再作成してください。

8. LM Studio からの MCPサーバー への接続手順
8.1. Developer Mode
LM Studio を起動し、Developer Mode を選択します。
Developer Mode の画面から [mcp.json] をクリックします。

8.2. mcp.json の編集
mcp.json の編集画面になるので、下記を貼り付けます。貼り付けが終わったら、mcp.json を保存します。
※既存の設定がある場合は、それらの設定を削除しないように貼り付けてください。
※mcp-remote の次の行のURLには、6.3. でコピーしたMCPサーバーの URL を貼り付けます。
※YOUR_API_KEY== のところには、7.4. でコピーした APIキーの値を貼り付けます。
{
"mcpServers": {
"elastic-agent-builder": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"http://localhost:5601/api/agent_builder/mcp",
"--header",
"Authorization:${AUTH_HEADER}"
],
"env": {
"AUTH_HEADER": "ApiKey YOUR_API_KEY=="
}
}
}
}9. LM Studio での Local LLM のロード
LM Studio で使いたい LLM を選択してロードします。ここでは、google/gemma-4-e4b を選択しています。
この状態では、まだ、Elastic AI Agent Tool の MCPサーバーとは接続できていません。

10. MCPサーバーとの接続
10.1. mcp/elastic-agent-builder との接続
LM Studio の画面の右側に Integrations メニューが表示されます。
そこから mcp/elastic-agent-builder の左のスイッチを ON にします。
MCPサーバー (Elastic AI Agent Tool) との接続が行われます(少し時間がかかります)。

10.2. 利用する tool の選択
MCPサーバー (Elastic AI Agent Tool) との接続に成功すると、tool の一覧が表示されます。
今回利用したい tool は、kakinosuke_get_contents のみなので、それ以外のチェックを外します。
※ Elastic 側では、kakinosuke.get_contents として登録しましたが、LM Studio 側には kakinosuke_get_contents として表示されます。

なお、MCPサーバーへの接続に成功すると、LM Studio のチャット入力欄に elastic-agent-builder が追加されて表示されます。

11. 問い合わせの実行
11.1. 問い合わせの実行
LM Studio のチャット入力欄に次の内容を入力します。
あなたは柿之助についての質問に答えるエージェントです。
# 指示1
与えられた質問を query とし、次の tool を呼び出して、結果の 5 件のドキュメントを受け取りなさい。
受け取った5件のドキュメントを指示2に渡しなさい。
- tool : kakinosuke_get_contents
# 指示2
指示1 で取得した 5 件のドキュメントを元に、与えられた質問 (query) に答えなさい。
# 質問
柿之助の3人の家来は誰?11.2. 処理の継続
途中で、「処理を継続するか?」の確認を求められるので、処理の継続を選択します。

11.3. 回答の確認
回答が次のように返ってきます(下記は回答例です)。
ご提示いただいた資料に基づくと、柿之助の3人の家来は**猫**、**ゴリラ**、そして**鷹**です。
資料には「猫と、ゴリラと、鷹と、これで三にんまで、いい家来ができたので」といった記述や、「宝物をいっぱい積んだ車を、猫が先に立って引き出しました。鷹が綱を引いて、ゴリラがあとを押しました。」という描写から、この3体が一緒に行動していることが確認できます。

LM Studio から MCPサーバーとしての Elastic AI Agent Tool へ接続し、必要なコンテキストを取得して、Local LLM に回答させることに成功しました。
12. 注意事項
- 公開単位の仕様:
- Elasticsearch の MCPサーバーは、登録されている Elastic AI Agent Tool の「集合(ライブラリ全体)」を公開します。個別の Tool のみを個別に絞り込んで公開することはできません。
- 通信の暗号化 (HTTPS):
- 本稿ではローカル検証のため、Kibana を HTTP で動作させていますが、本番運用時は必ず HTTPS (TLS) で保護してください。
- スペースの分離:
- 今回は検証用に Kibana の Default スペースを使用しましたが、本番環境では公開専用のスペースを作成・整理して運用することを推奨します。
- API Key の権限最小化:
- 今回発行した API Key は検証用に有効期限や権限を設定していません。本番環境では、必要最低限のロール設定および有効期限を設定してください。


