Vertex AI Search MCP サーバーで普段遣いの LLM に RAG を実装
はじめに
MCP の Tools として、Vertex AI Search の検索結果を提供するサーバーを作ってみました。本当にシンプルで、提供しているツールは検索のみです[1]。
Vertex AI Search のアプリの事前準備が必要ですが、mcp.json
などで以下のように設定します。
{
"mcpServers": {
"vais-mcp": {
"command": "uvx",
"args": ["vais-mcp@latest"],
"env": {
"GOOGLE_CLOUD_PROJECT_ID": "<google_cloud_project_id>",
"VAIS_ENGINE_ID": "<vais_engine_id>"
}
}
}
}
使用すると以下のような結果が返ってきます。
{
"response": [
{
"title": "Sample Document Title 1",
"content": "Extracted text segment from the document."
},
{
"title": "Sample Document Title 2",
"content": "Another extracted text segment."
}
]
}
詳しい設定方法などはリポジトリの README に書いてありますので、気になる方はご覧ください。
取り組みの動機: Cursor から Obsidian の情報を参照したい
私は日々の学びやアイデアを長らく Notion に記録してきましたが、1ヶ月ほど前にいま話題[2]の Obsidian に移行しました。
技術的な疑問は LLM に尋ねることで少なからず解決できますが、それでも以下のようなシーンでは自分でネットを見に行って情報を収集し、Obsidian のようなツールに整理する必要性を感じています。
- LLM がカバーしていない情報を知りたい
- 最新情報やニッチな分野など、LLM の知識が及ばない領域 (ナレッジカットオフの問題など) のケース。
- Cursor にも Web検索が実装されましたし、ここは必要性が薄れつつあります。
- 最新情報やニッチな分野など、LLM の知識が及ばない領域 (ナレッジカットオフの問題など) のケース。
- 自分に最適化された手順やノウハウを迅速に確認したい
- 複数のサービスを横断する環境構築や、特定のエラーに対するトラブルシューティングなど、「自分だけの詳細な手順書」として整理しておきたいケース。
- 環境構築に関しては、新しい技術にキャッチアップしている際など、色々なことが "手についていない" 段階で特に感じます。
- トラブルシューティングに関しては、LLM へのコンテキスト伝達や、何往復ものやり取りがめんどくさいと感じます。
- 複数のサービスを横断する環境構築や、特定のエラーに対するトラブルシューティングなど、「自分だけの詳細な手順書」として整理しておきたいケース。
こうした背景から「自分用に 100% 最適化された Obsidian 上のナレッジ」を、より効率的に、そしてコンテキストに沿った形で Cursor から参照したいと考えたのが発端です。
Obsidian MCP サーバーなどの既存ツールでは満足できそうになかった
Cursor から情報を参照したいのであれば、Obsidian の MCP サーバーも存在する[3]のですが、キーワード検索が中心だったり、どうも私が想定している使い方とは親和性が低そうに感じました。
また、Ubie さんが作られた Vertex AI Search の MCP サーバーもあったのですが、Vertex AI Search が Gemini のツールとして使用されるものだったので、純粋な検索結果を取得したく、自作しました。
最終的に色々めんどくさくなって本来の目的は果たせていないですが、MCP サーバーは完成させました。
MCP サーバーを作っている中での色々
過程で起きたことや感じたことなどを雑多に書いていきます。
フレームワークの選定: FastMCP を選択
FastMCP で構築しました。
以下だけで MCP サーバーが作れます。非常に簡単です。
from fastmcp import FastMCP
mcp = FastMCP()
@mcp.tool()
def tool_function(...)
mcp.run()
途中まで FastAPI MCP を使っていたのですが、2025/5 現在で基本的に SSE のみ対応 (mcp-proxy を利用することで stdio での接続も可能) です。一旦はローカル MCP として使用できれば良いと考えていたので、MCP クライアントとの通信方法としてメジャーだと現状認識している stdio にしたいと思ったのが 1 つ。また、FastAPI MCP は現状で情報量がそこまで多くなく、ハマったときのタイムロスを避けたく、メジャーな FastMCP に切り替えました。
途中で使うことを止めたが、FastAPI MCP の良さそうな点
既存で提供しているサービスに MCP サーバーを追加する場合は、API サーバー自体には手を加えず、その前段にプロキシサーバーとして新規追加する方が良いのではという話[4]があります。 FastAPI で構築されたサーバーが既に存在する場合、少ない新規実装で MCP サーバーを追加できそうで、良さそうに思いました。エンドポイントがそのままツールになります。(エンドポイントの公開範囲設定やoperation_id
をつけることが推奨されていたりと、他にも考慮事項はあると思いますが、、。)
from fastapi import FastAPI
from fastapi_mcp import FastApiMCP
app = FastAPI()
mcp = FastApiMCP(app)
# Explicit operation_id (tool will be named "get_user_info")
@app.get("/users/{user_id}", operation_id="get_user_info")
async def read_user(user_id: int):
return {"user_id": user_id}
# Mount the MCP server directly to your FastAPI app
mcp.mount()
MCP サーバー間におけるツール名の重複に考慮した命名が必要
もともとsearch
という素朴なツール名にしていたのですが、LLM が複数の MCP サーバーのクライアントになった際、ツール名が重複しているとその認識に問題が出るという事象が起きるようです。そのため、search_vais
というツール名に変更しました。
詳しい検証結果などは以下の記事をぜひご覧ください。
Cursor × Windows での MCP サーバー設定に苦戦: Cursor の v0.5 で解決したように見える
Cursor × Windows (+もしかしたら uvx
) での MCP サーバー設定に関する情報が少なくてツラかったです。
以下の設定からAdd new global MCP server
をクリックするとC:\Users\user\.cursor
という Windows 側のパスにmcp.json
が置かれます。
Windows と wsl の連携が難しくハマりまくっていたのですが、最終的にプロジェクトレベル (.cursor/mcp.json
) で設定して動作確認をしました。とりあえず Cursor から動く確認さえできればよかったので、グローバルで設定することは諦めました。
バージョン 0.5 で、wsl に mcp.json が置かれるようになりました!
直近 2025/5/15 リリースのバージョン 0.5 で上記は解消されたように見えます。実際に、アップデートしてみると、home/user/.cursor
にmcp.json
が置かれるようになりました。同じことで苦しんでいる方は Cursor のアップデートをしてみてください。
Google Cloud 提供の公式 MCP サーバーは無いが、Google 主導の OSS がいくつかある
AWS と Azure の公式 MCP サーバーはありますが、Google Cloud だけ存在を知らなかったので調べてみました。
結論として、オフィシャルに提供されている汎用の MCP サーバーは無いですが、OSS として公開されているものがいくつかあることがわかりました。以下の 3 つです。
-
MCP Toolbox for Databases
- BigQuery や Spanner など Google Cloud の主要 DB サービスをはじめ PostgreSQL や MySQL などが対象
-
MCP Servers for Google Cloud Genmedia
- Imagen 3、Veo 2、Chirp 3、Lyria が対象
-
Google Security Operations and Threat Intelligence MCP Server
- Google Security Operations (旧 Chronicle) や Google Security Operations SOAR、Google Threat Intelligence、Security Command Center などが対象
- Cloudflare や CrowdStrike、Okta や Wiz などとパートナーシップを組んで進めている取り組みのようです[5]。
MCP Toolbox for Databases は触ってみたいと思っていましたが、あとの 2 つはまったく知りませんでした。
機会があれば触ってみて記事にしたいと思います。
-
AWS の Bedrock Knowledge Bases MCP サーバーでは Rerank のツールが提供されていて、それも入れても良かったかもと思いました。 ↩︎
-
特に記憶に残っているのはなぜ Notion は AI 時代の勝者とならないのかです。 ↩︎
-
2025/5 現在、個人の方が作ったものと、Smitheryという MCP サーバーのプラットフォームのようなサービスを提供している会社が作ったものの 2 つが存在します。前者の方がツールが豊富ですが、MCP の公式ドキュメントで紹介されているのは後者です。 ↩︎
-
Building an open ecosystem for AI-driven security with MCP
↩︎
Discussion