Weather Information Service について
Weather Information Serviceは、FastMCPを使ってNational Weather Service APIから警報と予報を取得するサービスです。米国の州別警報や、場所を指定した予報の取得に利用できます。
主な機能
- 01州別の発令中警報の取得
- 02座標による天気予報の取得
- 03本番環境での構造化JSONログ
- 04ログレベルの設定
活用シーン
- 01米国の州で発令中の警報を確認
- 02緯度と経度から地点の予報を取得
MCP 対応
FastMCPを通じて、警報と予報を取得するツールをMCPクライアントに公開します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
気象情報サービス
このプロジェクトは、米国国立気象局(NWS)API から警報や予報などの気象情報を取得するサービスを提供します。
プロジェクトの構成
main.py:プロジェクトのシンプルなエントリーポイントです(現在は、hello メッセージを出力するだけです)。weather.py:プロジェクトの中核です。FastMCPフレームワークを使用して気象データを取得するツールを公開するWeatherServiceを実装しています。構造化 JSON ログを出力し、NWS API と通信します。smithery.yaml:WeatherServiceの実行方法や操作方法を定義するツール、Smithery の設定ファイルです。Dockerfile:このプロジェクトを Docker でコンテナ化できることを示しています。pyproject.toml:Python プロジェクトのメタデータと依存関係を定義します。.gitignore:Git が無視する、意図的に追跡対象から外したファイルを指定します。.python-version:プロジェクトで使用する Python のバージョンを指定します(pyenvなどのツールで使用すると思われます)。uv.lock:uvPython パッケージインストーラー兼リゾルバーが生成するロックファイルです。ビルドの再現性を確保します。
(WeatherService のツール、プロジェクトの実行方法、ログに関するセクションは、後続の手順で追加されます)。
WeatherService のツール
weather.py スクリプトは、以下のツールを備えた WeatherService を提供します。
get_alerts(state: str) -> str
- **目的:**指定された米国の州に発令中の気象警報を取得します。
- 引数:
state(str):米国の州を表す 2 文字のコード(例:CA、NY)。
- **出力:**書式設定された気象警報を含む文字列。警報が見つからない場合やエラーが発生した場合は、メッセージを返します。
- 例(警報の取得に成功した場合):
Event: Special Weather Statement Area: San Francisco Bay Shoreline Severity: Minor Description: ... Instructions: ... --- Event: Coastal Flood Advisory Area: North Bay Interior Valleys Severity: Moderate Description: ... Instructions: ... - 例(警報がない場合):
No active alerts for this state. - 例(エラー):
Unable to fetch alerts or no alerts found.
- 例(警報の取得に成功した場合):
get_forecast(latitude: float, longitude: float) -> str
- **目的:**特定の地理的位置の気象予報を取得します。
- 引数:
latitude(float):位置の緯度。longitude(float):位置の経度。
- **出力:**次の 5 期間の書式設定された気象予報を含む文字列。予報を取得できない場合は、メッセージを返します。
- 例(予報の取得に成功した場合):
Tonight: Temperature: 55°F Wind: 5 to 10 mph W Forecast: Mostly clear, with a low around 55. West wind 5 to 10 mph. --- Wednesday: Temperature: 70°F Wind: 5 to 15 mph W Forecast: Sunny, with a high near 70. West wind 5 to 15 mph, with gusts as high as 20 mph. ... (up to 5 periods) - 例(エラー):
Unable to fetch forecast data for this location.
- 例(予報の取得に成功した場合):
プロジェクトの実行
このプロジェクトはサービスとして実行するように設計されており、FastMCP フレームワークと提供されている smithery.yaml 設定を使用することを想定しています。
-
前提条件:
- Python 3.x
httpxライブラリ(およびpyproject.tomlで定義されているその他の依存関係)。通常は pip を使って次のようにインストールできます。pip install httpx # Or, if using a full project setup with pyproject.toml pip install .
-
サービスの実行:
weather.pyスクリプトを直接実行すると、サービスが起動します。smithery.yamlファイルがあることから、次の方法で実行することを想定しています。python weather.pyこれにより、
FastMCPサーバーが起動し、リクエストを受け付けます(たとえば、smithery.yamlで設定されている stdio 経由)。Smithery がインストールされている場合は、Smithery のコマンドを使って実行できることもありますが、ローカルでの開発やテストには
weather.pyを直接実行すれば問題ありません。main.pyスクリプトはシンプルなエントリーポイントであり、メインの天気サービスは実行しません。
ログ
weather.py の WeatherService は、構造化 JSON ログを使用します。ログがログ管理システムに取り込まれる可能性がある本番環境で、特に役立ちます。
ログ実装の主な機能:
- JSON 形式(本番環境):
ENV環境変数がproductionに設定されている場合、ログは JSON 形式で出力されます。各ログエントリーには次の情報が含まれます。timestamplevel(例:INFO、ERROR)logger(ロガー名。例:WeatherService)messagecorrelation_id(論理的な操作やフローを追跡します)request_id(個々のリクエストを追跡します)user_idfileおよびlineno(ログの発生元)function(ログが記録された関数名)processおよびthreadenvironment(ENV変数の値)app_version(APP_VERSION変数の値)host(HOSTNAME変数の値)duration(該当する場合、処理にかかった時間)error_details(例外が発生した場合のスタックトレース)
- 読みやすい形式(開発環境):
ENVがproductionに設定されていない場合(またはdevelopmentなど別の値に設定されている場合)、ログはより人が読みやすいプレーンテキスト形式で出力されます。 - 設定可能なログレベル:
LOG_LEVEL環境変数を使って、ログレベルを設定できます(例:INFO、DEBUG、ERROR)。デフォルトはINFOです。 - コンテキスト情報: ログには
correlation_id、request_id、user_idが含まれ、システム内での処理の追跡に役立ちます。
ログ用の環境変数:
LOG_LEVEL:ログの詳細度を設定します(例:DEBUG、INFO、WARNING、ERROR)。デフォルトはINFOです。ENV:JSON ログを有効にするにはproductionに設定します。読みやすいログのデフォルトはdevelopmentです。APP_VERSION:ログに記録するアプリケーションのバージョンを設定します。デフォルトは0.1.0です。HOSTNAME:ログに記録するホスト名を設定します。デフォルトはlocalhostです。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。