Swiss Weather について
スイス各地の天気や天文情報を必要とする AI アプリ向けの MCP サーバーです。MeteoSwiss の予報と観測所の測定値にスイスの地名検索を組み合わせ、テスト用クライアントも含みます。
主な機能
- 01最長9日間の日別予報
- 02降雨、気温、日照、風の予報
- 03観測所の現在値と極値
- 04日の出、薄明、月の情報
- 05スイスの地名検索
活用シーン
- 01スイスの地点の天気予報を確認
- 02観測所の現在の測定値を比較
- 03観測所の現在の気象極値を確認
- 04指定日の太陽と月の時刻を調べる
MCP 対応
スイスの予報、測定値、地名検索、天文データを MCP クライアント向けのツールとして提供します。stdio と streamable HTTP のトランスポートに対応します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
12掲載時のツール一覧 · 3 日前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| days | integer | いいえ | |
| near | any | いいえ | 同名の場所が複数ある場合に限ります。ユーザーが意図する場所の隣にある村を指定します。「Bettmeralp 近くの Blausee」の場合は、location に "Blausee"、near に "Bettmeralp" を指定します。それ以外の場合は省略します。 |
| location | string | はい | |
| start_date | string | はい |
詳細
Swiss Weather MCP サーバー
スイス国内のあらゆる場所の気象情報をAIアプリケーションに提供する、**Model Context Protocol(MCP)**サーバーです。
- MeteoSwiss の地域別予報による本日から今後8日間の予報。毎時更新されます
- 約160か所のSwissMetNet 気象観測所の観測データ。10分ごとに更新されます
- swissNAMES3Dによる、町、地区、湖、山頂などのスイス国土地図上の地名
- 任意の日について、任意の場所での太陽と月の出没時刻、市民薄明、月の位相と照らされている割合を計算します
- テスト用の MCP クライアントを同梱
データソース。 このプロジェクトは MeteoSwiss の公式製品ではありません。
- 天気予報と観測データ:MeteoSwiss Open Data。提供元:MeteoSwiss
- 地名:swissNAMES3D。提供元:スイス連邦地形局 swisstopo
- 自治体と州:swissBOUNDARIES3D。提供元:スイス連邦地形局 swisstopo
目次
プロジェクト構成
swiss-weather-mcp/
├── src/swiss_weather_mcp/
│ ├── server.py # MCP server and its tools
│ ├── places/ # swisstopo place lookup
│ ├── forecast/ # MeteoSwiss local forecasts
│ ├── measurements/ # MeteoSwiss SwissMetNet measurements
│ ├── astronomy/ # Sunrise, sunset, moonrise, moonset and phase
│ ├── opendata.py # Downloads from data.geo.admin.ch
│ ├── formatting.py # Times, wind directions and height differences in the answers
│ ├── errors.py # The error for questions the data cannot answer
│ ├── log.py # Logging setup
│ └── client.py # MCP client
├── tests/swiss_weather_mcp/ # Tests
└── .github/workflows/ # CI and release pipelines
インストール
# As a command line tool
uv tool install swiss-weather-mcp
# With the optional MCP client, which pulls in the OpenAI SDK
uv tool install 'swiss-weather-mcp[client]'
# As a library dependency
uv add swiss-weather-mcp # or: pip install swiss-weather-mcp
ソースからの場合:
git clone https://github.com/cuolm/swiss-weather-mcp.git
cd swiss-weather-mcp
uv sync --extra client # or, in a virtual environment: pip install -e ".[client]"
設定は不要です。サーバーは必要な情報をすべて MeteoSwiss と swisstopo から読み込みます。
使い方
サーバーの起動
# stdio (default)
swiss-weather-mcp-server
# streamable-http
swiss-weather-mcp-server --transport=streamable-http --host=localhost --port=8050
ソースのチェックアウトから実行する場合は、先頭に uv run を付けてください。--help ですべてのフラグを確認できます。
サーバーがファイルを保存する場所と --cache-all-forecast-points については、キャッシュとダウンロードを参照してください。
Docker でサーバーを起動する
イメージは GitHub Actions によって自動的にビルドされ、プロジェクトのGitHub Container Registryに公開されます。タグは :latest(最新リリース)とバージョン別です。
# Published image
docker run -p 8050:8050 ghcr.io/cuolm/swiss-weather-mcp:latest
# Built from a source checkout
docker build -t swiss-weather-mcp .
docker run -p 8050:8050 swiss-weather-mcp
サーバーは http://localhost:8050/mcp/ で利用できます。
docker run を実行するたびに、キャッシュが空の新しいコンテナが起動します。キャッシュを保持するには、たとえば
-v swiss-weather-cache:/root/.cache/swiss-weather-mcp のようにボリュームをマウントしてください。
MCP クライアントの実行
同梱の MCP クライアントは、stdio 経由でサーバーをテストします。client エクストラが必要です(インストールを参照)。クライアントは MCP サーバー自体を起動しますが、LLM は起動しません。たとえば llama-server で、あらかじめ LLM を起動しておく必要があります。
# Install llama.cpp, which provides llama-server, here with Homebrew on macOS or Linux
brew install llama.cpp
# Start llama-server with a model in its own terminal; it downloads the model on first use
llama-server --jinja --no-mmproj -hf unsloth/Qwen3.5-4B-GGUF --port 8080
# Run the client against it in a second terminal
swiss-weather-mcp-client --model=unsloth/Qwen3.5-4B-GGUF --base-url=http://localhost:8080/v1
ソースのチェックアウトから実行する場合は、クライアントの先頭に uv run --extra client を付けてください。llama.cpp のその他のインストール方法については、インストールガイドを参照してください。
--jinja はモデルのチャットテンプレートを使用します。ツール呼び出しにはこれが必要です(現在の llama.cpp ではデフォルトです)。
--no-mmproj はビジョンプロジェクターを省略します。--base-url はサーバーの OpenAI 互換 API を指定し、--model は /v1/models に表示されるモデル名を指定します。
利用可能なツール
時刻はスイス現地時間です(時刻を参照)。locationを指定するすべてのツールでは、任意のnearも指定できます。名前が同じ場所が複数ある場合にのみ必要です(場所を参照)。
場所の隣にない地点の予報を返す場合、回答には予報地点の名前が含まれます(予報地点を参照)。
| ツール | 回答 |
|---|---|
forecast_daily(location, start_date, days) | 1~9日間の最低・最高気温、降雨、天気を絵文字付きで表示 |
forecast_rain(location, start, end) | 3時間ごとの降雨確率と降水量 |
forecast_temperature(location, start, end) | 時間ごとの気温、または指定した1時間の気温 |
forecast_sunshine(location, start, end) | 指定期間、または1時間の日照時間 |
forecast_wind(location, when) | 平均風速、突風、風向 |
forecast_cloud_cover(location, when) | 総雲量と下層・中層・上層の雲量 |
forecast_freezing_level(location, when) | 0 °Cの高度 |
measurements_current(location) | 場所の近くにある観測所の現在の観測値(観測値を参照) |
measurements_extremes(extreme) | 現在「最も暖かい」「最も寒い」「最も風が強い」「最も雨が多い」または「最も日照時間が長い」場所 |
astronomy_sun(location, date) | 日の出、日の入り、市民薄明 |
astronomy_moon(location, date) | 月の出、月の入り、月相、月の照らされている割合 |
current_date_and_time() | 今日の曜日と現在のスイス時刻 |
知っておくと便利なこと
時刻
- 時刻はスイスの時計時刻をISO 8601形式で示します。例:
"2026-09-23T14:00"。サーバーは夏時間または冬時間を適用します。 - 回答では、
2026-09-23T13:00+02:00のようにUTCオフセット付きで時刻を示します。 14:00と表示された時間ごとの値は、13:00から14:00までを対象とします。雲量と氷点の高度は、その時点の値です。- 予報の対象期間は今日から翌8日間です。
current_date_and_time()で今日の日付を取得できます。「明日」や「今夜」といった質問に必要です。
場所
- 場所には、
Zürich、Oerlikon、Titlis、Zürichseeなど、町、村、市街地、山頂、峠、湖、氷河、谷、鉄道駅といったswissNAMES3Dの地名を指定します。 - 大文字・小文字やアクセント記号は区別されません。また、
Genevaなど一部の英語名も使用できます。 Blauseeのように複数の場所に該当する名前には、nearが必要です。たとえば、ユーザーが意図する場所に隣接する村をnear="Riederalp"のように指定します。指定しない場合、ツールは同名の場所を規模の大きい順にすべて一覧表示し、それぞれを選ぶ呼び出し方と、所在する自治体および州も示します。'Blausee' is the name of 6 places. [...] The biggest first: location="Blausee", near="Blausee-Mitholz": district and lake, fewer than 20 people, 887 m, municipality Kandergrund, canton Bern location="Blausee", near="Ramiswil": settlement, fewer than 20 people, 683 m, municipality Mümliswil-Ramiswil, canton Solothurn ...- 自治体と州の名称は、
GenèveやGraubündenのようにswisstopoの現地語表記を使用します。これらは、起動時にswissBOUNDARIES3D GeoPackageがバックグラウンドでダウンロードされた後に表示されます。 - 不明な名前の場合、候補を最大10件表示します。たとえば、
DavosにはDavos DorfとDavos Platzが候補として表示されます。
予報地点
- 予報は、その場所の近くにあるMeteoSwissの予報地点に基づきます。予報地点が場所から1 kmを超えて離れている場合、または50 mを超えて高いか低い場合、回答のdata_fromにその地点名が表示されます。
- 気温は距離よりも高度による変化のほうが大きくなります。標準大気(ISO 2533)では、高度が100 m上がるごとに気温は0.65 °C下がります。
- そのため、5 km以内の地点のうち、距離と高度差の20倍を合計した値が最小の地点をサーバーが選択します。高度差100 mは距離2 kmとして計算されます。5 km以内に地点がない場合は、最も近い地点を選択します。
- 係数20は実際のデータで検証済みです。20以下では、湖や山頂の高度差による影響が大幅に小さくなり、人口1,000人以上のすべての町で3 km以内に予報地点が確保されます。
観測値
measurements_currentは、約160か所あるSwissMetNet観測所のうち、距離に標高差の20倍を加えた値が最小の3観測所から、過去1時間以内に気温を発表した最初の観測所を使用します。観測所の数は予報地点よりはるかに少ないため、観測所がその場所から遠かったり、標高が高かったり低かったりする場合があります。- すべての回答は、たとえば「Braunwald(1290 m)の観測値は、13.5 km離れ、標高が332 m低いMeteoSwissの観測所Elm(958 m)のものです。」のように、その旨を伝える文で始まります。
- 気温、湿度、露点、過去10分間の降雨量と日照時間、風、突風、風向、海面気圧に加えて、過去3時間の気温と気圧の変化、および過去1時間の降雨量、日照時間、最大突風を示します。
measurements_extremesは、気温または突風の上位5観測所を一覧表示します。降雨量が最も多い観測所については、雨の降った観測所の上位5か所を一覧表示し、スイス全体および各州で雨の降った観測所の数を示します。- 日照時間が最も長い観測所については、過去10分間の日照時間に基づき、MeteoSwissの日照用語で観測所を分類します。mostly sunny(8~10分、80~100%)、rather sunny(5~7分)、partly sunny(2~4分)、only a little sunshine(1分)、hardly any sunshine(0分)です。MeteoSwissの範囲は20%、50%、80%の地点で重なります。ちょうどその値に当たる観測所は、より日照時間の長い用語に分類されるため、2分(20%)はpartly sunnyになります。州は、各州の観測所の日照時間の平均順に並びます。
予報値は中央値です
- 気温と降雨量は、MeteoSwissが計算する多数の起こり得る結果の中央値であり、最も起こりやすい値ではありません。
- 中央値は合計しても一致しません。3時間ごとの各時間帯でにわか雨の可能性はあるものの低い場合、各時間帯は0 mmと表示されても、1日の中央値は0を上回ることがあります。
forecast_dailyは1日の降雨量を示し、forecast_rainは雨が降る確率と、雨の時間帯に予想される降雨量を示します。
キャッシュとダウンロード
- キャッシュはOSのキャッシュディレクトリに保存されます。macOSでは
~/Library/Caches/swiss-weather-mcp、Linuxでは~/.cache/swiss-weather-mcpなどです。SWISS_WEATHER_MCP_CACHE_DIRを設定すると、保存先を変更できます。 - 初回起動時に、swissNAMES3Dアーカイブ(約33 MB)とswissBOUNDARIES3D GeoPackage(約37 MB、展開後は約74 MB)をダウンロードします。
- MeteoSwissは1時間ごとに新しい予報実行を公開します。各時間別パラメーターは、すべての予報地点を含む約30~34 MBのファイルとして提供されます。デフォルトでは、新しい予報地点ごとにサーバーがそのファイルをダウンロードし、その地点の行だけを保持します。
--cache-all-forecast-pointsを指定すると、ファイル全体を保持するため、同じ実行中に別の場所を指定しても新たなダウンロードは不要です。ディスク容量は必要になりますが、1時間以内に多くの場所について問い合わせる場合に便利です。
LMStudioでの使用例
streamable-httpトランスポートレイヤーの使用
LMStudioでmcp.jsonファイルを設定します。
{
"mcpServers": {
"swiss_weather_mcp_server": {
"url": "http://localhost:8050/mcp/"
}
}
}
サーバーの実行に記載されているように、streamable-httpトランスポートを使用してMCPサーバーを実行します。
stdioトランスポートレイヤーの使用
LMStudioでmcp.jsonファイルを設定します。<path-to>を、which swiss-weather-mcp-serverが出力するパスを含むコマンドに置き換えます。
{
"mcpServers": {
"swiss_weather_mcp_server": {
"command": "<path-to>/swiss-weather-mcp-server"
}
}
}

リソース
ライセンス
Apache License 2.0に基づいてライセンスされています。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。