はじめに
この記事は、スタンバイ Advent Calendar 2025 の記事として書いています。
昨年も参加し、記事を書いていたのですが、今年は2本書かせていただきました!
1本目の記事は下記になりますので、もし気になる方はぜひご覧ください!
今回、書く内容は、Vespa に最近追加されたMCPサーバについてとなります。
そもそもVespa は、ベクトル検索・ハイブリッド検索・機械学習モデルの推論・RAG(検索拡張生成)などを備えた高機能な検索エンジンです。
似たプロダクトとして有名なのが、Elasticsearch や OpenSearch などです。
スタンバイでは、Vespaを活用しており、そこで最近追加されたMCPサーバは便利なのでは?と思い実際に動かしてみようと思ったので、今回記事にしてみました。
今回は、Vespa MCPサーバを動かし、 Visual Studio Code の GitHub Copilotからアクセスできるようにしたいと思います。
これにより、開発時にスキーマの確認や、ちょっとした YQL の実行作業を GitHub Copilot 経由などで行えるようになり、調査や作業効率の向上が見込めるはずです!
この記事で話さないこと ![]()
-
Model Context Protocolの詳しい説明
-
Vespa MCPサーバの詳しい実装の解説
-
詳しいVespaの機能説明
Vespa MCPサーバを動かせるようにしてみよう!
Vespa公式に mcp-server-app としてサンプルが用意されていたので、こちらを使っていきたいと思います。
注意点
2025年11月30日現在、公式ドキュメントにはまだ反映されておらず、詳細を公式ドキュメントから確認することはできません。
https://docs.vespa.ai/en/learn/llm-help.html#mcp-server
サンプルコードを入手
サンプルコードがあるリポジトリからソースを clone してきます。
この中にサンプルデータも一式揃っているので、こちらを活用します。
git clone --depth 1 https://github.com/vespa-engine/sample-apps.git && cd sample-apps/examples/mcp-server-app
Vespaのコンテナを起動
Vespa MCPサーバは Vespa コンテナ内で動作するため、まず Vespa を起動します。
docker run --detach --name vespa --hostname vespa-container \
--publish 8080:8080 --publish 19071:19071 \
vespaengine/vespa
Vespaの設定ファイルを見ると、MCPの関連する記述があることがわかります。
cat app/services.xml
<?xml version="1.0" encoding="utf-8" ?>
<services version="1.0" xmlns:deploy="vespa" xmlns:preprocess="properties">
<container id="default" version="1.0">
<handler id="ai.vespa.mcp.McpJdiscHandler" bundle="mcp-server">
<binding>http://*/mcp/*</binding>
</handler>
<document-api/>
<search/>
<nodes>
<node hostalias="node1"/>
</nodes>
</container>
<content id="content" version="1.0">
<min-redundancy>1</min-redundancy>
<documents>
<document type="candidate" mode="index" />
<document type="job" mode="index" />
</documents>
<nodes>
<node hostalias="node1" distribution-key="0"/>
</nodes>
</content>
</services>%
ローカルで動かすために target を local に設定
vespa config set target local
サンプルのアプリケーションをローカルへデプロイ
vespa deploy app --wait 300
サンプルで用意されたデータを検索エンジンへ登録
GitHub の README では、 vespa feed コマンドを使っていましたが、うまく動かすことができなかったので、別コマンドで対応しました。
なぜか私の環境では、1 件だけにしても feed がいつまで経っても完了しない事象があったため、こちらの方法は諦めました。
jobs データを投入
cat dataset/jobs.jsonl | while read line; do echo "$line" | vespa document put -; done
candidates データを投入
cat dataset/candidates.jsonl | while read line; do echo "$line" | vespa document put -; done
Visual Studio Code にMCPサーバの設定を追加
Visual Studio Code に MCP サーバの設定をしてみます。
設定ファイルのサンプルを作成したので、下記を参考に設定してみてください。
.vscode/mcp.json
{
"servers": {
"vespa-mcp": {
"type": "http",
"url": "http://localhost:8080/mcp/"
}
}
}
ファイルを作成できたら、起動 を押下し、起動してみましょう!
Vespa MCPサーバを実際に使ってみよう!
まず、GitHub の README によると Vespa MCPサーバは、下記の3つのことが実行できるとのことなので、1つずつ試してみましょう!
-
getSchemas: スキーマ情報の取得 -
executeQuery: クエリの構築と実行 -
getDocumentation: Vespaドキュメントを検索し、関連情報の取得
公式ドキュメントでは、 searchDocumentation とありますが、実際のコードなどを見る限りは、 getDocumentation だと思われます。今回の記事では実装を正として、 getDocumentationの記載で説明します。
スキーマ情報の取得
#vespa-mcp を明示的に使うように指定しつつ、スキーマについて確認してみましょう。
#vespa-mcp
現在のスキーマを調べてください。
応答結果を見ると、ちゃんと getSchemas が実行されているのが確認できました。
candidate と job の 2 つのスキーマがあることが確認でき、各フィールドの型情報やランクプロファイルについても情報を答えてくれています。
クエリの構築と実行
次は、candidateのカウントを試しに実行してもらいましょう。
#vespa-mcp
candidateから1件だけ取得するクエリを実行してください。
executeQuery で、YQLを実行し、失敗してしまったので、 readQueryExamples から参考となるクエリを読み取って正しいクエリを組み立てた後に実行しているようです。
最終的に正しいクエリを組み立て、1 件だけ取得できました。
readQueryExamplesは、こちらのテキストを読み取っているようです。
Vespaドキュメントを検索し、関連情報の取得
MCPに関するドキュメントを調べてもらいましたが、 getDocumentation でちゃんと公式ドキュメントから情報を取得し、内容を説明してくれました。
公式ドキュメントには記載がまだありませんが、ブログ記事(LLMs, Vespa, and aside of Summer Debugging)の内容も参照して回答しているようです。
正直この機能が一番気に入っています!公式ドキュメントから自然言語で質問し回答を得られるのは、Vespaの運用ではかなり重宝しそうです。
まとめ
- 公式のサンプルを利用して、Vespa MCPサーバの起動を確認することができた
- Vespa MCPサーバを経由し、自然言語で指示して、下記のことを確認することができた
- スキーマ情報の取得
- YQLの組み立てと実行
- 公式ドキュメントから情報を取得
明日は、@piro12vortis さんの今年のふりかえり第2弾 - カンファレンス協賛についての記事になります!ぜひ、お楽しみにしていてください!



