mcpField
S
Swiss Weather

Swiss Weather

ローカル
github.com/cuolm地図・旅行12 日前に更新

Swiss Weather について

スイス各地の天気や天文情報を必要とする AI アプリ向けの MCP サーバーです。MeteoSwiss の予報と観測所の測定値にスイスの地名検索を組み合わせ、テスト用クライアントも含みます。

主な機能

  1. 01最長9日間の日別予報
  2. 02降雨、気温、日照、風の予報
  3. 03観測所の現在値と極値
  4. 04日の出、薄明、月の情報
  5. 05スイスの地名検索

活用シーン

  1. 01スイスの地点の天気予報を確認
  2. 02観測所の現在の測定値を比較
  3. 03観測所の現在の気象極値を確認
  4. 04指定日の太陽と月の時刻を調べる

MCP 対応

スイスの予報、測定値、地名検索、天文データを MCP クライアント向けのツールとして提供します。stdio と streamable HTTP のトランスポートに対応します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"cuolm-swiss-weather": {
"command": "uvx",
"args": [
"swiss-weather-mcp"
]
}
}
}
起動コマンドuvx swiss-weather-mcp

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
pypiswiss-weather-mcp0.4.0

ツール

12

掲載時のツール一覧 · 3 日前に更新

パラメーター型必須説明
daysintegerいいえ
nearanyいいえ同名の場所が複数ある場合に限ります。ユーザーが意図する場所の隣にある村を指定します。「Bettmeralp 近くの Blausee」の場合は、location に "Blausee"、near に "Bettmeralp" を指定します。それ以外の場合は省略します。
locationstringはい
start_datestringはい

詳細

Swiss Weather MCP サーバー

Logo PyPI License Release Tests

スイス国内のあらゆる場所の気象情報をAIアプリケーションに提供する、**Model Context Protocol(MCP)**サーバーです。

  • MeteoSwiss の地域別予報による本日から今後8日間の予報。毎時更新されます
  • 約160か所のSwissMetNet 気象観測所の観測データ。10分ごとに更新されます
  • swissNAMES3Dによる、町、地区、湖、山頂などのスイス国土地図上の地名
  • 任意の日について、任意の場所での太陽と月の出没時刻、市民薄明、月の位相と照らされている割合を計算します
  • テスト用の MCP クライアントを同梱

データソース。 このプロジェクトは MeteoSwiss の公式製品ではありません。

目次

プロジェクト構成

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"
    }
  }
}

LMStudioMCPServer

リソース

ライセンス

Apache License 2.0に基づいてライセンスされています。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

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