Open-Meteo MCP Server について
Open-Meteo MCP Server は、無料の Open-Meteo 天気 API に LLM からアクセスできるようにする MCP サーバーです。天気予報、過去の気象データ、大気質、海洋・洪水情報を扱い、API キーは不要です。
主な機能
- 01予報・履歴・大気質・気候データを扱う 17 のツール
- 02DWD ICON、GFS、ECMWF などモデル別の予報
- 03stdio またはステートレスな Streamable HTTP で動作
- 04エンドポイントごとに TTL を設定できるインメモリキャッシュ
- 05エンドポイントをセルフホストの Open-Meteo に向けられる設定
活用シーン
- 01特定地点の過去の気温と降水量の取得
- 02複数の気象モデルによる数日先の予報の比較
- 03大気質指数、紫外線指数、花粉量の確認
MCP 対応
本プロジェクトは MCP サーバーであり、17 の天気関連ツールを MCP クライアントに公開します。サーバー側の指示により、モデルが適切なツールを選択できるよう支援します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Open-Meteo MCP Server
あらゆる LLM に正確な気象データを提供します:予報、1940 年までさかのぼる過去のデータ、大気質、海洋状況、洪水、気候予測。
無料の Open-Meteo API を利用する Model Context Protocol サーバーです。Claude Desktop、Claude Code、または任意の MCP クライアントに接続して、自然な言葉で質問できます:
What were the temperatures in London during January 2023?
Compare the ICON and GFS ensemble forecasts for Berlin over the next 5 days.
Give me the current European AQI, UV index and pollen levels in Paris.
API キーは不要です。Open-Meteo は非商用利用であれば無料です。
機能
- 17 個のツールで、予報、ERA5 の過去データ、大気質、海洋、洪水、季節予報、アンサンブル、CMIP6 気候データに加え、ジオコーディングと標高データを利用できます
- モデルごとの予報:DWD ICON、NOAA GFS、Météo-France、ECMWF、JMA、MET Norway、Environment Canada GEM に対応します
- LLM 向けに構築:厳格な入力スキーマ、どの質問にどのツールが答えるかをモデルに伝えるサーバー指示、25,000 文字を上限とするコンパクトな JSON レスポンスを備えています
- 2 種類のトランスポート:ローカルクライアント向けの stdio と、API キー認証、レート制限、オリジンチェックを備えたリモートデプロイ向けのステートレスな Streamable HTTP に対応します
- メモリ内レスポンスキャッシュ:エンドポイントごとに TTL を設定できるため、同じ質問を繰り返しても Open-Meteo に再度アクセスしません
- セルフホストに対応:すべての Open-Meteo エンドポイントを独自のインスタンスに向けられます
はじめに
Node.js 22 以降が必要です。事前のインストールは不要です。初回実行時に npx がサーバーを取得します。
Claude Desktop
claude_desktop_config.json にサーバーを追加します:
{
"mcpServers": {
"open-meteo": {
"command": "npx",
"args": ["-y", "-p", "open-meteo-mcp-server", "open-meteo-mcp-server"]
}
}
}
Claude Code
claude mcp add open-meteo -- npx -y -p open-meteo-mcp-server open-meteo-mcp-server
その他の MCP クライアント
stdio サーバーを起動できるクライアントであれば、同じコマンドで利用できます:npx -y -p open-meteo-mcp-server open-meteo-mcp-server。また、npm install -g open-meteo-mcp-server でグローバルにインストールし、open-meteo-mcp-server を実行することもできます。
ヒント
すべてのデータツールでは座標が必要です。地名を使って質問すると、モデルはまず
geocodingを呼び出して地名を解決します。
ツール
| カテゴリー | ツール | 回答する内容 |
|---|---|---|
| コア | weather_forecast | 位置に最適なモデルを選択し、最大16日先までの予報を取得します。past_days を指定すると、直近の過去(最大92日)も取得できます |
weather_archive | 1940年から昨日までの過去の天気(ERA5再解析) | |
air_quality | PM2.5、PM10、オゾン、NO₂、花粉、欧州および米国のAQI、UV指数 | |
marine_weather | 波高、周期、波向、うねり、海面水温 | |
geocoding | 地名または郵便番号から座標を取得します | |
elevation | 座標地点の標高 | |
| モデル | dwd_icon_forecast | DWD ICON(ドイツ、ヨーロッパを高解像度で予測) |
gfs_forecast | NOAA GFS(全球、北米を高解像度で予測) | |
meteofrance_forecast | Météo-France AROMEおよびARPEGE | |
ecmwf_forecast | ECMWF IFSおよびAIFS | |
jma_forecast | 気象庁 | |
metno_forecast | MET Norway(北欧諸国) | |
gem_forecast | Environment Canada GEM | |
| 高度な機能 | ensemble_forecast | アンサンブルメンバー間の予報の不確実性。models の指定が必須です |
seasonal_forecast | 数週間先から約7か月先までの見通し | |
climate_projection | 1950年から2050年までのCMIP6気候予測 | |
flood_forecast | GloFASによる河川流量 |
通常は weather_forecast を使用します。モデル固有のツールは、特定のモデルが指定された場合や、各モデルを1回ずつ呼び出して比較する場合に使用します。
レスポンス
timezoneを設定しない場合、時刻はGMTです。timezone: "auto"を指定すると、位置の現地時間が使用されます。- 系列内の
nullは、その時刻の値がモデルにないことを意味し、ゼロを意味するものではありません。 - 25,000文字を超えるレスポンスでは、系列の対応関係を保つため、
hourly/daily/minutely_15配列が同じ比率で短縮され、truncated: trueとtruncation_messageが追加されます。すべてのデータを取得するには、日付範囲または変数を絞り込んでください。
変数とパラメーターの全一覧は、各ツールの入力スキーマとOpen-Meteoのドキュメントに記載されています。
リモートデプロイ
TRANSPORT=http を設定すると、stdioの代わりに /mcp でStreamable HTTP経由のMCPを提供します。
TRANSPORT=http HOST=0.0.0.0 PORT=3000 API_KEY=your-secret-key npx open-meteo-mcp-server
クライアントは各リクエストでキーを送信します。Authorization: Bearer <key> または X-API-Key: <key> として指定してください。コンテナのプローブ用に、GET /health はキーなしで {"status":"ok"} を返します。
トランスポートはステートレスです。各 POST /mcp は個別に処理され、セッションIDは発行されません。また、GET/DELETE /mcp は 405 を返します。ツールは呼び出し間で状態を保持しないため、クライアント側で失われるものはありません。
重要
サーバーはデフォルトで
127.0.0.1にバインドされるため、ローカルマシンからのみアクセスできます。リモート接続を受け入れるにはHOST=0.0.0.0を設定し、その場合は必ずAPI_KEYも設定してください。設定しないと、サーバーはオープンモードで動作します。
Docker
ビルド済みイメージがGitHub Container Registryで公開されています。このイメージはすでに 0.0.0.0 にバインドされます。
docker run -d --name open-meteo-mcp -p 3000:3000 \
-e API_KEY=your-secret-key \
ghcr.io/cmer81/open-meteo-mcp:latest
タグは、v 接頭辞を除いたnpmのバージョンに従います。latest、2.5.1、2.5、2 があります。
リポジトリには docker-compose.yml(ビルド済みイメージ)と docker-compose.dev.yml(ソースからビルド)もあります。.env.example を .env にコピーして設定してください。
claude.aiのトラフィック
すべてのclaude.aiユーザーは、Anthropicの送信元範囲 160.79.104.0/21 からリモートサーバーにアクセスします。この範囲には専用のレート制限プール(RATE_LIMIT_ANTHROPIC_RPM)が割り当てられるため、全員が1つのIPごとの上限を共有することはありません。リバースプロキシの背後で運用する場合は、実際のクライアントIPが認識されるよう、プロキシを TRUSTED_PROXIES に登録してください。
設定
すべての変数は任意です。
サーバー
| 変数 | デフォルト | 説明 |
|---|---|---|
TRANSPORT | stdio | Streamable HTTP の場合は http |
PORT | 3000 | HTTP ポート |
HOST | 127.0.0.1 | バインドするインターフェース。0.0.0.0 はリモート接続を受け付けます |
OPEN_METEO_CACHE_MAX_BYTES | 20000000 | シリアライズされた JSON のバイト数で表したレスポンスキャッシュのサイズ。0 にすると無効になります |
キャッシュでは、予報とアンサンブルを 15 分間、空気質と海洋を 30 分間、洪水を 1 時間、季節予報を 6 時間、過去データと気候データを 24 時間、ジオコーディングを 7 日間、標高を 30 日間保持します。終了日が直近 5 日以内の過去データの期間は、Open-Meteo が引き続きデータを補完しているため、1 時間のみ保持します。失敗したリクエストはキャッシュされません。
メモ
キャッシュサイズの計算にはシリアライズされた JSON を使用しますが、メモリ内の解析済みオブジェクトはその約 1.2~2.6 倍のサイズになります。デフォルトのサイズでキャッシュをいっぱいにすると、ヒープを約 50 MB 消費します。
HTTP セキュリティ
| 変数 | デフォルト | 説明 |
|---|---|---|
API_KEY | 未設定(公開) | すべての /mcp リクエストで必要なキー |
RATE_LIMIT_RPM | 60 | クライアント IP ごとの 1 分あたりのリクエスト数。IPv6 クライアントは /56 ごとにグループ化されます |
RATE_LIMIT_ANTHROPIC_RPM | 600 | claude.ai の全トラフィックで共有される 1 分あたりのリクエスト数 |
TRUSTED_PROXIES | 未設定 | X-Forwarded-For を信頼する IP または CIDR のカンマ区切りリスト |
ALLOWED_ORIGINS | 空 | 許可するブラウザーオリジンのカンマ区切りリスト。一覧にない Origin ヘッダーを含むリクエストには 403 を返します(DNS リバインディング対策)。ヘッダーのないリクエストには影響しません |
カスタム Open-Meteo インスタンス
各エンドポイントの接続先は、たとえばセルフホストした Open-Meteo に変更できます。
| 変数 | デフォルト |
|---|---|
OPEN_METEO_API_URL | https://api.open-meteo.com |
OPEN_METEO_ARCHIVE_API_URL | https://archive-api.open-meteo.com |
OPEN_METEO_AIR_QUALITY_API_URL | https://air-quality-api.open-meteo.com |
OPEN_METEO_MARINE_API_URL | https://marine-api.open-meteo.com |
OPEN_METEO_SEASONAL_API_URL | https://seasonal-api.open-meteo.com |
OPEN_METEO_ENSEMBLE_API_URL | https://ensemble-api.open-meteo.com |
OPEN_METEO_GEOCODING_API_URL | https://geocoding-api.open-meteo.com |
OPEN_METEO_FLOOD_API_URL | https://flood-api.open-meteo.com |
OPEN_METEO_CLIMATE_API_URL | https://climate-api.open-meteo.com |
Claude Desktop では、サーバーエントリーの env キーを使ってこれらを渡します。
スキル
skills/ ディレクトリには、適切なツールとパラメーターを選ぶ際にアシスタントを支援する SKILL.md ガイドが 2 つあります。
| スキル | 用途 |
|---|---|
open-meteo | 日常的な気象情報:予報、過去データ、空気質、海洋、標高 |
open-meteo-advanced | 特定のモデル、アンサンブルの不確実性、季節予報、気候予測 |
Claude Code の場合は、~/.claude/skills/ にコピーします。
cp -r skills/open-meteo skills/open-meteo-advanced ~/.claude/skills/
Claude Desktop の場合は、該当する SKILL.md を会話にアップロードします。
開発
git clone https://github.com/cmer81/open-meteo-mcp.git
cd open-meteo-mcp
npm install
npm run build
| コマンド | 説明 |
|---|---|
npm run dev / npm run dev:http | 自動リロードを有効にしてソースから実行します(stdio / HTTP) |
npm test | 単体テスト(ネットワークはモック) |
npm run typecheck / npm run lint | 型チェックと Biome によるリント |
npm run smoke | 実際の MCP クライアントを介して、ライブ API に対して 17 個すべてのツールを呼び出します。事前のビルドが必要です |
npm run eval | LLM の使いやすさを測るベンチマークです。下記を参照してください |
Claude Desktop からローカルビルドを使うには、"command": "node" と "args": ["/path/to/open-meteo-mcp/dist/index.js"] を指定します。
評価
evals/evaluation.xmlでは、このサーバーのツールだけを与えられたLLMが、現実的な質問に回答できるかを確認します。14問の質問は、安定したデータ(ERA5アーカイブ、CMIP6予測、ジオコーディング、標高)に基づいているため、期待される回答が変わることはありません。
pip install -r evals/scripts/requirements.txt
export ANTHROPIC_API_KEY=... # or put it in .env
npm run build && npm run eval
npm run eval -- --no-server-instructions # baseline without the server instructions
警告
評価では、質問ごとに実際のAnthropic APIを呼び出し、クレジットを消費します。これは手動で行う確認であり、CIの一部ではありません。
貢献を歓迎します。CONTRIBUTING.mdをご覧ください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。