Provides grounding capabilities using Google Search through Gemini API, enabling AI agents to perform web searches and retrieve up-to-date information with search result grounding.
https://github.com/rinerebox1/deno-gemini-grounding-mcp-server
使い方
Docker を使ってクリーンアップ・ビルド・起動する。MCPサーバーが起動してそこで止まる。ただ、これだけあっても用途は良く分からない。
終了したあとは docker compose down する。
簡単にMCPサーバーを起動する方法(Docker を使わない):deno task start
テスト: deno task test:tokyo deno task test:google_search deno task test:google_search_simple
MCPサーバーを追加する方法
実装するファイル
index.ts で server.tool を追加する
tools フォルダで Tool を定義する(get~~.ts)
tools/helpers/formatHelpers.ts で出力フォーマットの整形
tools/index.ts に追加
ライブラリの追加が必要な場合
deno.json に追加
deno.lock のアップデート方法:
rm -rf ~/.cache/deno && deno cache --reload index.ts
アップデートできたかは以下で確認:
ls -la deno.lock && head -10 deno.lock
テストコード
tests フォルダにテストコードを実装
次に deno.json の tasks にテストファイルの追加
テストの実行方法
deno task test:tokyo
注意点
from で呼び出すファイルは .js ではなく .tx。LLM が良く .js に変えるので注意
テストが通ったら MCPサーバーが実装できたということなので 「C:\Users\kbpsh\OneDrive\development\MCP\deno-gemini-grounding-mcp-client」の方で 「.gemini/settings.json」に追記する。 Gemini CLI から MCPサーバーを利用する。 「deno-gemini-grounding-mcp-client」の方はWSLで起動しないこと。WSLとMCPクライアントの相性が悪そうなので、MCPクライアントはWindows側にする。
v1: Connpass機能あり + 基本的なGenAI機能(stdio)
v2: Connpass機能削除 + 東京観光特化のGenAI機能(stdio)
v3: v2 を改良して Cloudflare Workers対応(Hono サーバーでちゃんと動いたが、Cloudflareへのデプロイはしていない)(Streamable HTTP)
v4: v2の改良版。Gemini のグラウンディング MCPサーバーを追加。Cloudflare Workersの対応はしていない(stdio)
Google 検索によるグラウンディング の料金
https://cloud.google.com/vertex-ai/generative-ai/pricing?hl=ja
Gemini Flash 2.5 なら1日 1500 件まで無料で検索可能。Lite も一緒。だいたい1回検索で3クエリくらい消費する。
ファイル読み取りや環境変数アクセス、ネットワーク接続などは Deno のセキュリティモデル上 --allow-read、--allow-env、--allow-net などのフラグで制御されますが、これらもあくまで【ローカル実行時にのみ有効】【リモートでは使えない】です
Cursor かつ WSL 側で MCP Tool を登録するのがかなり難しい。とりあえず、Cドライブ側で Gemini CLI から MCP サーバーを認識できたので OK とする。ただ、Cドライブ側でも Cursor での MCP Tool 呼び出しはできないので、Cursor で MCP 使うのは止める。
問題はCursor と MCP サーバー間の接続にある
緑のランプがつくのに Tool 数はゼロ
以下でチェックできる。 echo '{"jsonrpc": "2.0", "id": 1, "method": "tools/list", "params": {}}' | deno run --env-file=.env --allow-net=generativelanguage.googleapis.com --allow-env --allow-read index.ts
セットアップ
(Connpass APIキーをすでに取得済の場合はスキップ)Connpass APIキーの発行をしてもらいます。詳細についてはconnpassのAPI利用についてを参照してください。
このリポジトリをクローンします。
必要な環境変数を設定します。
.env.exampleを.envにコピーして、Connpass APIキーを設定します。
サーバーを起動します。
Denoでの起動(推奨)
Node.jsでの起動
MCPサーバーを起動するために必要な依存関係をインストールします。
TypeScriptをビルドします。
MCPクライアントの設定ファイル側にビルドしたファイルを指定します。
Dockerでの起動
docker-compose使用(推奨)
環境変数ファイルを作成します。
用途に応じてサービスを起動します。
docker compose run vs docker compose up の違い
🔍 重要な違い
docker compose up:
サービス全体を起動し、フォアグラウンドで継続実行
ログが表示され続け、Ctrl+Cで停止するまで動作
開発・テスト時のサーバー起動に適している
docker compose run:
一回限りのコマンド実行に使用
コンテナを起動してコマンドを実行し、完了後に自動終了
MCPクライアントからの呼び出しに適している
🔧 開発・テスト用(継続実行):
または、手動でdocker composeコマンドを実行します。
⚡ MCP用(一回限りの実行): MCPクライアント経由で自動実行されます。手動テストする場合:
MCPクライアントの設定ファイルでは、docker compose runコマンドを指定します。
MCPサーバーはstdin/stdoutでの対話的通信が必要なため、設定は以下のようになります(先にビルドが必要):
直接Docker使用
Dockerfileを使用してサーバーを起動することもできます。
Dockerイメージをビルドします。
コンテナを起動します。APIキーは環境変数として渡します。
MCPクライアントの設定ファイルでは、dockerコマンドを指定します。
npxでの起動(非推奨)
このリポジトリをクローンしてDenoまたはNode.jsでMCPサーバーの起動が可能です。
ただし
機能
以下のMCPサーバーのToolsを提供しています:
Tools
get_connpass_user_list - Connpassユーザーの基本情報を取得します
パラメータ:
nickname(Connpassユーザー名/ニックネームの配列)取得情報: 参加イベント数、管理イベント数、発表イベント数、ブックマークイベント数
get_connpass_user_group_list - Connpassユーザーが所属するグループ一覧を取得します
パラメータ:
nickname(Connpassユーザー名/ニックネーム)取得情報: グループ名、URL、説明、参加者数など
get_connpass_user_events - Connpassユーザーが参加したイベント情報を取得します
パラメータ:
nickname(Connpassユーザー名/ニックネーム)取得情報: イベント名、日時、場所、URL、説明
get_connpass_user_presenter_events - Connpassユーザーが発表者として参加したイベント情報を取得します
パラメータ:
nickname(Connpassユーザー名/ニックネーム)取得情報: イベント名、日時、場所、URL、説明
プロンプト例
次のようなプロンプトをLLMへ渡すことが可能です:
「yamanoku, okuto_oyamaさんのConnpassユーザー情報を教えて」
「yamanokuさんの参加するConnpassイベント情報を教えて」
「yamanokuさんの発表したConnpassイベント一覧を表示して」
「yamanokuさんのConnpass所属グループを一覧表示して」
テスト
Denoでのテスト
東京の魅力プロンプトなど、Gemini API を使用したテストを実行します:
以下のようなアウトプットになっていれば成功。30秒の安全タイムアウトが作動しているのは正常な動作。
テストの詳細については tests/README.md を参照してください。
Deno と Node.js はともに実行環境のこと。
謝辞
このOSSはGPT-4o Image Generationによってロゴを製作、Claude 3.7 Sonnetによって実装、ドキュメントのサンプルを提案いただきました。感謝申し上げます。