Skip to main content
Glama
MCP Weather Assistant

MCP Weather Assistant

MCP Weather Assistant

Model Context Protocol (MCP) を使用して構築された対話型天気アシスタントです。ホストは2つのローカルMCPサーバーに接続し、それらのツールをOpenRouter互換の言語モデルに公開し、モデルが天気情報を取得するタイミングを決定します。

特徴

  • 米国国立気象局APIを通じた米国内の場所の天気予報。

  • 米国の州のアクティブな気象警報。

  • weather2day.co.il ウェブサイトと、Playwright によって制御される可視の Chromium ブラウザを通じたイスラエルの天気予報。

  • 1つの対話型ターミナルチャットインターフェース。

  • stdio 経由で接続された複数のMCPサーバー。

  • サーバー間の衝突を避けるための自動ツール検出と名前空間化。

Related MCP server: MCP Weather Assistant

プロジェクト構造

ファイル

目的

host.py

メインアプリケーション。MCPサーバーに接続し、OpenRouterを呼び出し、ツール呼び出しをルーティングし、チャットループを実行します。

client.py

再利用可能なMCP stdioクライアントラッパー。現在のPythonインタープリターでサーバーを起動し、そのツールを一覧表示します。

weather_USA.py

米国国立気象局APIをバックエンドとするMCPサーバー。

weather_Israel.py

weather2day.co.il と Playwright をバックエンドとするMCPサーバー。

pyproject.toml

Pythonプロジェクトのメタデータと宣言された依存関係。

uv.lock

uvベースの環境向けにロックされた依存関係のバージョン。

.env

ローカル環境変数。このファイルはGitによって無視されます。

要件

  • Windows、macOS、またはLinux。

  • Python 3.13 以降。

  • OpenRouter APIキー。

  • OpenRouter、api.weather.gov、weather2day.co.il へのインターネットアクセス。

  • イスラエルの天気クエリ用に、Playwright を通じてインストールされた Chromium。

  • 仮想環境を推奨します。

インストール

uv を使用する場合

プロジェクトディレクトリから:

uv sync
uv run playwright install chromium

このプロジェクトは現在 httpx を直接インポートしています。ロックされた環境にまだ存在しない場合は、次でインストールします:

uv add httpx

標準のPythonツールを使用する場合

py -3.13 -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install --upgrade pip
python -m pip install anthropic mcp python-dotenv playwright openai google-genai httpx
python -m playwright install chromium

macOSまたはLinuxでは、次のコマンドで環境をアクティブにします:

source .venv/bin/activate

宣言された依存関係には、現在 host.py で使用されていないいくつかのプロバイダーSDKが含まれています。これらはテンプレートとの互換性のためにプロジェクトメタデータの一部として残っています。

設定

プロジェクトルートに .env ファイルを作成します:

OPENROUTER_API_KEY=your_openrouter_api_key

host.py は python-dotenv でこのファイルを読み込み、キーをBearerトークンとしてOpenRouterに送信します。.env をコミットしたり、ソース管理、ログ、スクリーンショット、エラーレポートでキーを公開しないでください。

現在のモデルは host.py で設定されています:

MODEL = "nvidia/nemotron-3-super-120b-a12b:free"

ツール呼び出しをサポートする別のOpenRouterモデルを使用したい場合は、この定数を変更してください。

アシスタントの実行

uv を使用する場合:

uv run python host.py

アクティブな仮想環境を使用する場合:

python host.py

起動メッセージの後に Query: プロンプトが表示されます。質問を入力してEnterキーを押します。quit と入力するとアプリケーションが停止します。

質問の例:

What is the forecast for 34.05, -118.25?
Are there any active weather alerts in California?
What is the weather forecast in Tel Aviv?

ホストはツール呼び出しが発生するたびに出力し、その後にモデルの最終応答を出力します。

MCPサーバーとツール

米国サーバー

weather_USA.py は weather-USA という名前のMCPサーバーを起動し、以下を提供します:

  • get_alerts_in_USA(state)

    • state: CA や NY などの2文字の州コード。

    • NWSのアクティブ警報エンドポイントを使用します。

  • get_forecast_in_USA(latitude, longitude)

    • latitude: 10進数の緯度。

    • longitude: 10進数の経度。

    • NWSのpointsエンドポイントを通じて場所を解決し、最初の5つの予報期間を返します。

NWS APIリクエストは Accept: application/geo+json とカスタム User-Agent を使用します。

イスラエルサーバー

weather_Israel.py は weather-Israel という名前のMCPサーバーを起動し、以下を提供します:

  1. open_weather_forecast_israel()

    • ヘッドレスではないChromiumブラウザを開き、イスラエルの天気予報ウェブサイトに移動します。

  2. enter_weather_forecast_city_israel(city)

    • 都市名を入力し、オートコンプリートの候補を待ちます。

  3. select_weather_forecast_city_israel()

    • 最初のオートコンプリート候補を選択し、予報ページを待ちます。

  4. get_forecast_content_israel()

    • 読み込まれたページから表示テキストを抽出し、空行をクリーンアップし、結果を4,000文字に制限します。

イスラエルのツールはステートフルであり、順番に呼び出す必要があります。都市を入力する前にブラウザを開く必要があり、予報を抽出する前に都市を選択する必要があります。

アーキテクチャ

User terminal
    |
    v
host.py (ChatHost)
    |-- OpenRouter chat-completions API
    |
    |-- client.py -> weather_USA.py -> api.weather.gov
    |
    `-- client.py -> weather_Israel.py -> Playwright -> weather2day.co.il

起動時に、ChatHost は各天気サーバーに対して1つの MCPClient を作成します。各クライアントは、ホストと同じPythonインタープリターを使用してサーバーを子プロセスとして起動します。ホストはすべてのMCPツールを検出し、関数呼び出しスキーマを使用してOpenRouterに公開します。

重複する名前を防ぐために、ツールはモデルに次のように公開されます:

<server_script_name>__<tool_name>

たとえば、米国の警報ツールは weather_USA__get_alerts_in_USA として公開されます。OpenRouterがツールを要求すると、ホストはその公開名を所有するMCPクライアントと元のツール名にマッピングし、それを実行して結果をモデル会話に送り返します。

個別のMCPサーバーの実行

各サーバーは、MCP互換クライアント用または基本的なスモークテスト用に直接起動できます:

python weather_USA.py
python weather_Israel.py

これらのプログラムはMCP stdioトランスポートを使用するため、通常のWebページやコマンドプロンプトを表示するのではなく、MCPクライアントと通信することを目的としています。

トラブルシューティング

ModuleNotFoundError: No module named 'httpx'

不足している依存関係をインストールします:

uv add httpx

または:

python -m pip install httpx

Chromiumが起動しない

Playwrightブラウザバイナリをインストールします:

python -m playwright install chromium

イスラエルサーバーは意図的に headless=False でChromiumを起動するため、そのプロバイダーにはデスクトップセッションが必要です。

OpenRouter認証が失敗する

.env が host.py と同じディレクトリにあること、変数名が正確に OPENROUTER_API_KEY であること、キーがアクティブであることを確認してください。ファイルを変更した後、ホストを再起動してください。

ツールが利用できない

両方のサーバースクリプトがプロジェクトルートに存在し、ホストがそのディレクトリから起動されていることを確認してください。ホストは現在、相対パス ./weather_USA.py と ./weather_Israel.py を使用しています。

天気リクエストが失敗する

アプリケーションは外部サービスに依存しています。インターネットアクセス、要求された座標または州に対するNWSの応答、およびイスラエルのウェブサイトのHTMLセレクターが変更されていないかどうかを確認してください。

セキュリティと運用上の注意

  • host.py とNWSクライアントは、verify=False でTLS証明書の検証を無効にしています。これは現在のネットワーク環境では必要かもしれませんが、トランスポートのセキュリティを低下させるため、本番環境では通常の証明書検証に置き換える必要があります。

  • OpenRouterは、ユーザーのクエリと天気ツールが返す結果を受け取ります。

  • イスラエルのプロバイダーは可視のブラウザを開き、ページの本文テキストをスクレイピングします。ウェブサイトのレイアウト変更により、セレクターが壊れたり、抽出されたコンテンツが変わったりする可能性があります。

  • アプリケーションには永続的な会話履歴はありません。各ターミナルクエリは新しいモデルメッセージリストを開始します。

  • エラーはターミナルに出力され、ロギングサービスには書き込まれません。

開発ノート

MCPサーバースクリプトは FastMCP デコレーターを通じてツールを公開し、ネットワークおよびブラウザ操作には非同期関数を使用します。サーバーを変更するときは、stdioチャネルをMCPプロトコルトラフィック専用に保ってください。診断出力は、プロトコル通信を破損しないように慎重に処理する必要があります。

現在、リポジトリには自動テストはありません。有用な次のテストレイヤーは、NWS応答、OpenRouterツール呼び出し応答、およびPlaywrightページ操作をモックして、ネットワークアクセスやブラウザなしでオーケストレーションを検証できるようにすることです。

ライセンス

現在、このリポジトリにはライセンスファイルは含まれていません。

Maintenance

ActivityStale
ResponsivenessNo recent community issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    B
    quality
    C
    maintenance
    MCP server that enables LLMs to retrieve weather forecasts for Israeli cities by automating a browser with Playwright, and also provides US weather alerts and forecasts via NWS API.
    4
    -