FastMCP でVertex AI Search MCP サーバー作ってみた

2025/05/23に公開されました。
2025/05/23に更新されました。

MCPの理解を深める題材としてVertex AI Searchの検索結果を取得できるMCPサーバーを作りました。


author: Shintaro

はじめに

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 に書いてありますので、気になる方はご覧ください。

取り組みの動機

日々の学びやアイデアは長らくNotionに記録していました。技術的な内容については生成AIに質問して解決ということも多いのですが、以下のようなシーンではGoogle検索も現役で活躍中です。

  • 知りたい内容に関する生成AIの知識量が少ない
    • ナレッジカットオフの時期の問題など
  • 細かいコンテキストが伝わりきらない
  • 特定の手順 (環境構築やトラブルシュートなど) を自分用に整理したい
    • 「あのコマンド、何だっけ」と都度公式ドキュメントなどを見に行くのがめんどくさいなど

これら100%自分のためだけに整理した情報をCursorから効率的に参照したいと考えたのが発端です。

最近、NotionとObsidianの比較の話題を目にすることが多いです2。この記事で詳しくは触れませんが、生成AIと親和性が高いのはObsidianということで、私もNotionからObsidianに乗り換えてみました。そろそろ1か月経ちます。 そして、ObsidianをCursorから参照したいのであれば、ObsidianのMCPサーバーも存在する3のですが、キーワード検索が中心だったり、どうも私が想定している使い方とは親和性が低そうに感じました。

Ubie さんが作られた Vertex AI Search の MCP サーバーもあったのですが、Vertex AI SearchがGeminiのツールとして使用されるものだったので、純粋な検索結果を取得したく、自作しました。

結果として色々めんどくさくなって本来の目的は果たせていないですが、とりあえずこれはこれとして完成させました。

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として使用できれば良いと考えていたので、現状の一般的なトランスポートの方法である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 × Windows (+もしかしたら uvx)でのMCPサーバー設定に関する情報が少なくてツラかったです。

以下の設定からAdd new global MCP serverをクリックするとC:\Users\user\.cursorというWindows側のパスにmcp.jsonが置かれます。

Cursorの設定画面からグローバルMCPサーバーを追加

Windowsとwslの連携が難しくハマりまくっていたのですが、最終的にプロジェクトレベル(.cursor/mcp.json)で設定して動作確認をしました。とりあえずCursorから動く確認さえできればよかったので、グローバルで設定することは諦めました。

バージョン 0.5 で、wsl に mcp.json が置かれるようになりました!

直近 2025/5/15 リリースのバージョン 0.5 で上記は解消されたように見えます。実際に、アップデートしてみると、home/user/.cursormcp.jsonが作られるようになりました。同じことで苦しんでいる方はCursorのアップデートをしてみてください。

Google Cloud 提供の公式 MCP サーバーは無いが、Google 主導の OSS がいくつかある

AWSとAzureの公式MCPサーバーはありますが、Google Cloudだけ存在を知らなかったので調べてみました。

結論として、オフィシャルに提供されている汎用のMCPサーバーは無いですが、OSSとして公開されているものがいくつかあることがわかりました。以下の3つです。

MCP Toolbox for Databasesは触ってみたいと思っていましたが、あとの2つはまったく知りませんでした。 機会があれば触ってみて記事にします。

Footnotes

  1. AWSの Bedrock Knowledge Bases MCP サーバーではRerankのツールが提供されていて、それも入れても良かったかもと思いました。

  2. 特に記憶に残っているのはなぜ Notion は AI 時代の勝者とならないのかです。

  3. 2025/5現在、個人の方が作ったものと、Smitheryという MCP サーバーのプラットフォームのようなサービスを提供している会社が作ったものの2つが存在します。前者の方がツールが豊富ですが、MCP の公式ドキュメントで紹介されているのは後者です。

  4. Cloudflare Workers で進めるリモート MCP 活用

  5. Building an open ecosystem for AI-driven security with MCP

※本記事は、ジーアイクラウド株式会社の見解を述べたものであり、必要な調査・検討は行っているものの必ずしもその正確性や真実性を保証するものではありません。

※リンクを利用する際には、必ず出典がGIC dryaki-blogであることを明記してください。
リンクの利用によりトラブルが発生した場合、リンクを設置した方ご自身の責任で対応してください。
ジーアイクラウド株式会社はユーザーによるリンクの利用につき、如何なる責任を負うものではありません。