MCP Weather Server について
FastAPIを基盤とする天気サービスで、MCP経由でHome Assistantと連携し、OpenWeatherMap One Call API 3.0のデータを利用します。地点ごとの現在の天気や日別・時間別予報を必要とするユーザー向けです。
主な機能
- 01現在の天気状況の取得
- 02最大7日間の日別予報
- 03最大48時間の時間別予報
- 04メートル法とヤード・ポンド法の選択
- 05地点名の置換設定
活用シーン
- 01Home Assistantで地点の天気を確認
- 02今後数日間の天気傾向を確認
- 03今後数時間の予報を取得
MCP 対応
`/mcp/sse`エンドポイントを通じて、現在の天気、日別予報、時間別予報のツールをHome AssistantなどのMCPクライアントに公開します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
MCP Weather Server
Model Context Protocol(MCP)を使用して Home Assistant と連携する、FastAPI ベースの天気サーバーです。このサーバーは OpenWeatherMap の One Call API 3.0 を使用して、あらゆる場所の現在の天気、日別予報、時間別予報など、包括的な気象情報を提供します。
前提条件
- Python 3.7+
- OpenWeatherMap API キー(One Call API 3.0 へのアクセス権が必要)
セットアップ
-
このリポジトリをクローンします
-
依存関係をインストールします:
pip install -r requirements.txt -
以下のいずれかの方法で OpenWeather API キーを設定します:
- 環境変数を設定します(推奨):
export OPENWEATHER_API_KEY=your_api_key_here - または、
config.yamlに追加します:settings: api_key: your_api_key_here
注:環境変数は設定ファイルより優先されます。
- 環境変数を設定します(推奨):
-
(任意)
config.yamlで追加の設定を行います:# General settings settings: units: "imperial" # Optional: "metric" (default) or "imperial" api_key: "your_api_key_here" # Alternative to environment variable server: host: "0.0.0.0" # Optional: Interface to listen on (default: "0.0.0.0") port: 8000 # Optional: Port to listen on (default: 8000) # Location overrides (optional) overrides: "lafayette": "Lafayette, CA, US" # Add more overrides as needed
設定
API キー
OpenWeather API キーは、次の2つの方法で設定できます:
- 環境変数
OPENWEATHER_API_KEY(セキュリティ上推奨) config.yamlのsettings.api_key
サーバー設定
config.yaml でサーバーの待ち受けインターフェースとポートを設定します:
settings:
server:
host: "0.0.0.0" # Listen on all interfaces (default)
port: 8000 # Port number (default)
host:待ち受けるネットワークインターフェース"0.0.0.0":すべてのインターフェースで待ち受けます(デフォルト)"127.0.0.1":localhost のみで待ち受けます"192.168.1.100":指定したインターフェースで待ち受けます
port:待ち受けるポート番号(デフォルト:8000)
単位
config.yaml でメートル法とヤード・ポンド法を選択できます:
metric(指定がない場合のデフォルト):- 気温:摂氏
- 風速:メートル毎秒
imperial:- 気温:華氏
- 風速:マイル毎時
場所の上書き設定
config.yaml の任意の overrides セクションでは、曖昧な都市名に対するデフォルトの場所を指定できます。例:
overrides:
"lafayette": "Lafayette, CA, US"
"springfield": "Springfield, IL, US"
デフォルト設定
config.yaml ファイルがない場合、サーバーは次のように動作します:
- メートル法の単位を使用します
- すべてのインターフェース(0.0.0.0:8000)で待ち受けます
- 場所の上書き設定は使用しません
- API キーを環境変数に設定する必要があります
サーバーの実行
次のコマンドでサーバーを起動します:
python server.py
サーバーは設定されたホストとポートで実行されます(デフォルト:http://0.0.0.0:8000)
API エンドポイント
従来の REST API
これらのエンドポイントでは、従来の HTTP アクセスを利用できます:
現在の天気
GET /api/current-weather/{location}
気温、体感温度、湿度、風速、UV インデックス、雲量など、現在の天気を返します。
日別予報
GET /api/daily-forecast/{location}?days={number_of_days}
最大7日分の日別予報を返します。日中・最低・最高気温、降水確率、UV インデックスが含まれます。
時間別予報
GET /api/hourly-forecast/{location}?hours={number_of_hours}
最大48時間分の時間別予報を返します。気温、体感温度、降水確率、UV インデックスが含まれます。
MCP 連携
このサーバーは、Home Assistant とシームレスに連携するための Model Context Protocol(MCP)を実装しています。MCP エンドポイントは次のとおりです:
/mcp/sse
利用可能な MCP ツール:
current_weather(location: str):現在の天気を取得しますhourly_forecast(location: str, hours: int = 24):時間別予報を取得しますdaily_forecast(location: str, days: int = 7):日別予報を取得します
場所の解決
このサーバーでは、柔軟な場所解決システムを使用しています:
- 場所が
overrides設定のエントリと一致する場合、その上書き設定を使用します - 州や国の指定がない都市名は、直接解決を試みます
- 「都市名, 州」の形式の場合、米国とみなします(例:「Portland, OR」→「Portland, Oregon, US」)
- 完全な「都市名, 州, 国」の形式は常にそのまま使用されます
例:
- 「London」→「London, England, GB」
- 「Lafayette」→「Lafayette, California, US」(overrides で設定されている場合)
- 「Portland, OR」→「Portland, Oregon, US」
- 「Melbourne, AU」→「Melbourne, Victoria, AU」
API レスポンス形式
天気データは設定に応じて、メートル法またはヤード・ポンド法の単位で返されます:
メートル法(デフォルト):
- 気温:摂氏
- 風速:メートル毎秒
- 湿度:パーセント
- UV インデックス:0~11+
- 降水確率:0~1(0~100%)
- 雲量:パーセント
ヤード・ポンド法:
- 気温:華氏
- 風速:マイル毎時
- その他の単位はメートル法と同じです
現在の天気の応答例:
{
"resolved_location": "London, England, GB",
"temperature": 17.88,
"feels_like": 17.29,
"description": "few clouds",
"humidity": 60,
"wind_speed": 5.14,
"uvi": 0,
"clouds": 11,
"timestamp": "2024-04-30T13:10:15"
}
日別予報の応答例:
{
"resolved_location": "London, England, GB",
"forecast": [
{
"date": "2024-04-30",
"temp_day": 20.3,
"temp_min": 15.1,
"temp_max": 22.4,
"description": "scattered clouds",
"humidity": 70,
"wind_speed": 4.2,
"precipitation_probability": 0.3,
"uvi": 6.1
}
]
}
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。