Proyecto Cliente MCP con Gemini y Servidor de Herramientas Meteorológicas について
Gemini クライアントと天気ツールのサーバーを組み合わせた Python の例です。AI が天気ツールを呼び出し、結果をユーザー向けの回答にまとめる流れを示します。
主な機能
- 01Gemini クライアントと天気サーバー
- 02気象警報と予報のツール
- 03ツールの検出と呼び出し
- 04クライアントとサーバーの統合ログ
活用シーン
- 01地域の天気に関する質問への回答
- 02MCP と Gemini のリクエストフローの確認
MCP 対応
クライアントは天気 MCP サーバーに接続し、get_alerts や get_forecast などのツールを検出して呼び出します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
要約
- 依存関係をインストールします:
pip install -r requirements.txt .envを作成し、GEMINI_API_KEY=TU_CLAVE_API_AQUIを設定します。- 実行します:
python mcp_gemini_client.py weather_tool_server.py
Gemini クライアントと気象ツールサーバーを使用する MCP プロジェクト
このリポジトリでは、MCP(Model-Client-Protocol)プロトコルを使用して、AI クライアント(Google Gemini を使用)を専門ツール(この場合は気象ツール)を提供するサーバーに接続する方法を紹介します。
仕組み
このシステムは、Gemini AI と専門ツールの間の橋渡し役として機能します。流れを簡単に説明します。
コンポーネントの役割
-
mcp_gemini_client.py- 次の役割を担う「仲介役」です。- Gemini AI と通信します。
- ツールサーバー(
weather_tool_server.py)に接続します。 - ユーザー入力を処理し、応答を表示します。
-
weather_tool_server.py- 次の役割を担う「ツールプロバイダー」です。- 気象に関する特定のツール(
get_alerts、get_forecast)を提供します。 - ツールのリクエストを処理し、結果を返します。
- 気象に関する特定のツール(
-
MCP(Model-Client-Protocol) - 次の役割を担う「通信システム」です。
- クライアントがツールを検出して呼び出すための標準化された方法を提供します。
- クライアントとサーバー間のメッセージングを処理します。
天気について質問したときの流れ
- ユーザー入力:クライアントで「ニューヨークの天気はどうですか?」のような質問を入力します。
- クライアントでの処理:
mcp_gemini_client.pyがこの質問を Gemini AI に送信します。- また、
weather_tool_server.pyサーバーに問い合わせて、利用可能なツールを Gemini に伝えます。
- Gemini AI の判断:
- Gemini は気象ツール(たとえば
get_forecast)を使う必要があると判断します。 - 使用するツールと引数(たとえばニューヨークの緯度と経度)を示す応答を作成します。
- Gemini は気象ツール(たとえば
- ツールの実行:
- クライアントは、ツールを使用するための Gemini のリクエストを解析します。
- ツールのリクエストを
weather_tool_server.pyサーバーに送信します。 - サーバーは気象情報を取得する処理を実行し、結果を返します。
- 最終応答:
- ツールの結果がクライアントに戻り、クライアントはそれを Gemini に送り返します。
- Gemini は、これらの結果をユーザーにとってわかりやすい応答にまとめます。
- クライアントはこの最終応答を表示します。
セットアップと実行
- 依存関係のインストール:
pip install google-generativeai python-dotenv mcp-protocols # Asegúrate de que mcp-protocols sea el paquete correcto - API キー:
- Google AI Studio から API キーを取得します。
- プロジェクトのルートに
.envファイルを作成します。 .envファイルにキーを追加します。GEMINI_API_KEY=TU_CLAVE_API_AQUI
- 実行:
mcp_gemini_client.pyとweather_tool_server.pyが同じディレクトリにあることを確認します。- サーバーのスクリプトの場所を指定して、クライアントを実行します。
python mcp_gemini_client.py weather_tool_server.py - 入力を求められたら、ターミナルにクエリを入力します。
ログファイル(mcp_log.txt)
- 統合された詳細なログ: このファイルには、クライアント(
mcp_gemini_client.py)とサーバー(weather_tool_server.py)の両方のログが統合されて記録されています。 - 処理フローの可視化: データの流れ全体を示すため、ログは意図的に詳細に記録されています。
- Gemini API に送信・受信されたメッセージ(プロンプトを含む)。
- クライアントとサーバー間で、MCP プロトコルを介して送信・受信されたツールのリクエストとレスポンス。
- 識別: 各ログエントリーにはモジュール名(
mcp_gemini_clientまたはweather_tool_server)が含まれるため、どのコンポーネントがメッセージを生成したかを識別できます。 - デバッグ: 問題のデバッグや、すべてのコンポーネント間のやり取りの把握に役立つ主要な情報源です。
ログのサンプルフロー(mcp_log.txt)
完全なやり取りのログがどのように見えるかを示す、主要な通信を含む簡略化された例を以下に示します。
-
クライアントが初期プロンプトをGeminiに送信する(ツールの説明を含む):
2025-04-21 12:31:54,519 - __main__ - INFO - === Prompt Sent to Gemini (Initial) === You are an assistant that helps users with weather information. You have access to the following tools: ... Tool: get_forecast Description: Get weather forecast for a location... Schema: {...} ... When you need to use a tool, format your response like this: TOOL_NAME: {the tool name} TOOL_ARGS: {JSON formatted arguments for the tool} ... The user message is: cual es el tiempo en nyc ? ====================================== -
Geminiがツールを要求する応答を返す:
2025-04-21 12:31:56,049 - __main__ - INFO - === Raw Response Received from Gemini (Initial) === TOOL_NAME: get_forecast TOOL_ARGS: {"latitude": 40.7128, "longitude": -74.0060} =============================================== -
クライアントが応答を解析し、MCPツールのリクエストをサーバーに送信する:
2025-04-21 12:31:56,050 - __main__ - INFO - Executing MCP tool: get_forecast with args: {'latitude': 40.7128, 'longitude': -74.006} -
サーバーがMCPツールのリクエストを受信する:
2025-04-21 12:31:56,052 - INFO - mcp.server.lowlevel.server - Processing request of type CallToolRequest 2025-04-21 12:31:56,052 - INFO - __main__ - MCP Request Received: get_forecast with latitude: 40.7128, longitude: -74.006 -
サーバーがツールを実行し、MCP応答をクライアントに送信する:
2025-04-21 12:31:57,180 - INFO - __main__ - === MCP Response Sent (get_forecast) === Today: Temperature: 56F ... Forecast: Cloudy. High near 56... ---... ======================================= -
クライアントがMCPツールの応答を受信する:
2025-04-21 12:31:57,182 - __main__ - INFO - Raw MCP Tool Result Object Received: meta=None content=[TextContent(type='text', text='\n Today:\n...)] isError=False 2025-04-21 12:31:57,182 - __main__ - INFO - MCP tool get_forecast executed. Extracted Result Content: [TextContent(type='text', text='\n Today:\n...)]... -
クライアントが最終プロンプトをGeminiに送信する(ツールの結果を含む):
2025-04-21 12:31:57,182 - __main__ - INFO - === Prompt Sent to Gemini (Final) === I asked for information about the weather in response to: "cual es el tiempo en nyc ?" I used the get_forecast tool with these arguments: {"latitude": 40.7128, "longitude": -74.006} The tool returned this result: [TextContent(type='text', text='\n Today:\n...')] Please provide a helpful, user-friendly response based on this information. ======================================= -
Geminiがユーザー向けに整形された最終回答を返す:
2025-04-21 12:31:59,000 - __main__ - INFO - === Raw Response Received from Gemini (Final) === The weather in NYC looks like this: **Today:** Cloudy with a high of 56F... ... ===============================================
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。