mcpField
O
open-meteo-mcp-server

open-meteo-mcp-server

リモート
github.com/cyanheads地図・旅行11今日更新
リポジトリ

open-meteo-mcp-server について

open-meteo-mcp-serverは、天気や環境データを取得するMCPサーバーです。予報、過去データ、場所の検索を必要とするクライアント向けで、ステージ済みデータへの読み取り専用SQLにも対応します。

主な機能

  1. 01地名のジオコーディング
  2. 02予報と過去の気候データ
  3. 03海洋・大気質データ
  4. 04標高・アンサンブル・洪水・気候データ
  5. 05ステージ済みデータへの読み取り専用SQL

活用シーン

  1. 01地名を指定して予報を取得
  2. 021940年以降の気象データを確認
  3. 03海洋状況や大気質を確認
  4. 04ステージ済み気象データをSQLで照会

MCP 対応

天気、ジオコーディング、標高、データフレームを扱う12種類のツールをMCPクライアントに公開します。STDIOとStreamable HTTPに対応し、公開ホストサーバーもあります。

設定

リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。

エンドポイントhttps://open-meteo.caseyjhand.com/mcp
インストールコマンドをコピー
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。

パッケージ
npm@cyanheads/open-meteo-mcp-server0.5.0

ツール

11
パラメーター型必須説明
namestringはい検索する地名です。修飾語を付けない都市、地域、ランドマークを指定してください("Seattle"、"Mount Rainier")。地域や国の修飾語を含めず("Baoding Hebei" ではなく "Baoding")、country 入力を使って候補を絞り込みます。1~2 文字の現地文字による地名("서울"、"大阪")では、完全な行政区名("서울특별시"、"大阪市")またはローマ字表記("Seoul"、"Osaka")が必要です。language フィールドを参照してください。天気ツールには座標が必要です。この結果の lat/lon を使用してください。
countintegerいいえ返す結果の最大数(1~10)。デフォルトは 5 です。"Springfield" や "Portland" のような一般的な地名を区別するには、より多くの結果を返してください。
countrystringいいえ同名の場所を区別するための ISO 3166-1 alpha-2 国コード(例:"US"、"FR")。全世界を対象に検索する場合は省略してください。
languagestringいいえ地名の照合と返却に使用する言語(ISO 639-1、例:"en"、"de"、"zh")。API はこの言語のローカライズ済みインデックスに対して name を照合するため、name の文字体系に合わせて設定してください。例:"上海"には言語 "zh"、"Москва"には "ru"。3 文字以上のネイティブ文字による名前は正規化されたプレフィックスで照合されます。1~2 文字の名前はインデックス項目と完全一致する必要があるため、言語を設定するだけでは "서울" や "大阪" は見つかりません。完全な行政区名("서울특별시"、"大阪市")またはローマ字表記("Seoul"、"Osaka")で再試行してください。デフォルトは "en" です。認識可能な非ラテン文字(CJK、ハングル、キリル文字、アラビア文字、ギリシャ文字、ヘブライ文字、タイ文字、デーヴァナーガリー文字)によるクエリが "en" で見つからない場合、文字体系から推定した言語で 1 回再試行します。再試行で結果が得られた場合、レスポンスの effective_language にその言語が示されます。

詳細

翻訳後に原文が更新されています。最新の内容は原文をご確認ください。

@cyanheads/open-meteo-mcp-server

MCP を介して、地名のジオコーディング、世界各地の天気予報、過去の気候、海洋状況、大気質、地形標高を取得できます。STDIO または Streamable HTTP に対応しています。

12 個のツール

Version License Docker MCP SDK npm TypeScript Bun

Install in Claude Desktop Install in Cursor Install in VS Code

Framework

公開ホストサーバー: https://open-meteo.caseyjhand.com/mcp


概要

Open-Meteo の世界各地の気象情報を提供します。天気予報、1940 年までさかのぼる過去のデータ、海洋状況、大気質、確率アンサンブル、河川流量、気候予測に対応しています。地名で場所を検索し、時間別・日別の変数を取得して、大量の結果に対して SQL を実行できます。API キーは不要です。

ツール
ツール説明
openmeteo_search_locations地名から、国、地域、タイムゾーン、人口を含む優先順位付きの座標を特定します
openmeteo_get_forecast現在の状況と、最大 16 日先までの時間別・日別予報を取得します。過去 92 日分まで指定できます
openmeteo_get_historical再解析アーカイブから、1940 年から現在までの時間別・日別の履歴を取得します
openmeteo_get_marine波浪、うねり、海面の状況を取得します。最大 8 日先の予報、またはアーカイブ期間を指定できます
openmeteo_get_air_qualityモデル化された CAMS の汚染物質、花粉、AQI を取得します。現在の値、最大 7 日先の予報、またはアーカイブ期間を指定できます
openmeteo_get_elevation最大 100 組の座標について、Copernicus DEM の地形標高を取得します
openmeteo_get_ensemble超過確率と不確実性の分析に向けて、メンバーごとのアンサンブル予報を取得します(最大 64 メンバー、最大 35 日先)
openmeteo_get_floodGloFAS の河川流量予報(最大 210 日先)、または 1984 年以降の再解析データを取得します
openmeteo_get_climate最大 7 つのモデルによる、バイアス補正済みの日別 CMIP6 予測を取得します(1950~2050 年)
openmeteo_dataframe_describeDataCanvas に準備されたテーブルと列を一覧表示します
openmeteo_dataframe_query準備されたテーブルに対して、読み取り専用の SQL SELECT を実行します
openmeteo_dataframe_dropDataCanvas から準備済みのテーブルまたはビューを 1 つ削除します(オプトイン)

機能リファレンス

openmeteo_search_locations tool
  • 場所の名前は「Paris, France」ではなく、単独の name(「Paris」など)を指定します。任意で country(ISO 3166-1 alpha-2)と language(デフォルトは en)を指定できます。count は1~10で、デフォルトは5です。
  • 各結果には、座標、IANA timezone、country / country_code、admin1 / admin2、population、feature_code が含まれます。一致する場所がない場合は no_results エラーになります。
  • 上位の候補の人口が null または10万人未満の場合、notice で通知されます。これは、歴史的な別称(「Bangalore」「Calcutta」など)であることがよくあります。
  • en でネイティブスクリプトの検索に一致しなかった場合は、そのスクリプトが示す言語で1回再試行されます。再試行に成功すると、その言語が effective_language に示され(上海 → zh)、結果は現地語で返されます。

openmeteo_get_forecast tool
  • current_variables、hourly_variables、daily_variables のうち少なくとも1つを指定してください(各最大50項目)。forecast_days は1~16(デフォルトは7)、past_days は0~92(デフォルトは0)です。
  • 各タイムスタンプの hourly / daily レコードと、hourly_units / daily_units が返されます。current_variables を指定すると、15分間隔のデータ(interval 900)による current オブジェクトと current_units も追加されます。
  • 直近約5日間については、アーカイブのERA5コンポーネントに遅延があるため、openmeteo_get_historical より past_days を優先してください。

openmeteo_get_historical tool
  • start_date と end_date(YYYY-MM-DD、1940-01-01以降)が必須です。また、予報ツールと同じ名前の hourly_variables / daily_variables のうち、少なくとも1つを指定してください。
  • models を省略すると、Best Match(IFS HRES + ERA5 + ERA5-Land。データソースは日付によって異なります)が読み込まれます。models は最大8つ指定でき、データソースを固定できます。ERA5ファミリーは約5日遅れます。ecmwf_ifs に遅延はなく、cerra の対象範囲はヨーロッパのみです。
  • 出力には models と返された date_range が含まれます。2つ以上のモデルを指定すると、各列にはモデル名のサフィックスが付きます。

openmeteo_get_marine tool
  • 1回の呼び出しで指定できる期間は1つです。forecast_days は1~8(上流のデフォルトは7)で、past_days は0~92です。または、2022年以降にさかのぼるアーカイブ期間として start_date / end_date を指定します。両方を混在させると forecast_window_conflict エラーになり、日付を片方だけ指定すると date_range_incomplete エラーになります。
  • hourly_variables / daily_variables(波高、周期、方向、うねり、海面水温)のうち、少なくとも1つを指定してください。風雨から守られた水域では波高がほぼゼロになり、陸上の地点では null が返され(地点名は notice に記載されます)、外洋以外では ocean_current_velocity が null になります。

openmeteo_get_air_quality tool
  • 1回の呼び出しで指定できる期間は1つです。forecast_days は1~7(上流のデフォルトは5)で、past_days は0~92です。または、2022年8月以降のアーカイブ期間として start_date / end_date を指定します(us_aqi は1日後から開始します)。海洋ツールと同じく、forecast_window_conflict および date_range_incomplete の場合は拒否されます。
  • current オブジェクト(interval 3600)を返す current_variables、または hourly_variables のうち、少なくとも1つを指定してください。対象はPM2.5、PM10、NO2、SO2、O3、CO、粉じん、花粉、欧州および米国のAQIです。花粉のモデルデータが提供されるのは、花粉シーズン中のヨーロッパのみです。それ以外の地域では null が返され、対象は notice に記載されます。
  • data_source: "CAMS" は、すべての応答が観測所の測定値ではなく、モデルによるグリッドデータであることを示します。

openmeteo_get_elevation tool
  • 最大100組の平行な latitudes[] / longitudes[] 配列を指定します。配列の長さが異なる場合は coordinate_count_mismatch エラーになります。
  • elevations[] は入力順に並び、各要素はCopernicus DEM(約90 m)から取得した { latitude, longitude, elevation_m } です。DEMに値がない場所(緯度90度)では elevation_m が null になりますが、呼び出し全体は失敗しません。
openmeteo_get_ensemble tool
  • hourly_variables/daily_variablesの少なくとも一方が必要です。forecast_daysは1~35(デフォルトは7)、past_daysは0~92です。ほとんどのモデルは16日以内に終了します(ncep_gefs05は約34日目まで実行されます)。それ以降の列はnullになり、データが終了する箇所はnoticeに記載されます
  • modelsには1つのアンサンブル名を指定します(例:ecmwf_ifs025_ensembleは51メンバー、gem_global_ensembleは21メンバー)。省略または空欄の場合はecmwf_ifs025_ensembleが選択され、modelに返されます
  • 各変数は最大64メンバー分の列(temperature_2m_member01、…)として返されます。member_countにはコントロールランは含まれません。対象範囲外で地域モデルを照会すると、再試行できない入力エラーになります。グローバルモデルに切り替えてください

openmeteo_get_flood tool
  • daily_variablesが必須です(最大20個)。すべて単位はm³/sです。river_dischargeに加え、統計値river_discharge_mean/_median/_min/_max/_p25/_p75を指定できます。これらの統計値が予測モードでばらつきを表すのは予測モードのみです(再解析ではriver_dischargeと同じ値が繰り返されます)
  • 1回の呼び出しにつき、モードは1つです。forecast_daysは1~210、または1984-01-01以降の再解析期間としてstart_date/end_dateを指定します。両方を混在させるとforecast_days_conflict、日付を片方だけ指定するとdate_range_incompleteで失敗します
  • 流量は、必ずしも最も近い川ではなく、5 km以内でモデル化された最も大きな川のデータを使用します。値が不自然な場合は、座標を約0.1°ずらしてください。GloFASの対象範囲外ではnullになります

openmeteo_get_climate tool
  • start_date/end_dateは1950-01-01~2050-12-31の範囲で指定し、daily_variablesは必須です(APIは日単位のみ対応)。CMIP6のmodelsは最大7つ指定できます。例:CMCC_CM2_VHR4、MRI_AGCM3_2_S
  • 2つ以上のモデルを指定すると、各変数名にモデル名が接尾辞として付きます。モデルが1つの場合、または省略した場合は、接尾辞のない名前が返されます。モデルに存在しない変数はnullになります

openmeteo_dataframe_describe tool
  • データがスピルされた天気ツールから返されたcanvas_idを受け取ります。各テーブルのname、kind、row_count、列(名前、型、null許容性)に加え、キャンバスのexpires_atを一覧表示します
  • キャンバスが無効な場合はcanvas_not_enabled、IDが不明または24時間のスライディングTTLを過ぎている場合はcanvas_not_foundで失敗します

openmeteo_dataframe_query tool
  • canvas_idと、ステージングされたtable_nameに対する読み取り専用のSELECTを指定します。rowsには最大100行が格納されます。ただし、行幅が広く、インライン出力上限の80,000文字を超える場合は、それより少ない行数になります(値が切り詰められることはありません)。row_countは正確な合計です。ORDER BYを指定し、OFFSET <rows.length>でページングしてください
  • 件数の取得に失敗するか5秒を超えると、行は引き続き返されますが、row_countは下限値となり、count_errorに理由(例:count_timeout)が記載されます
  • canvas_not_enabled、canvas_not_found、missing_table、system_catalog_access(システムカタログへのアクセスは禁止されています)、またはrow_too_large(最初の1行だけで上限を超える場合。列を減らすか、left()、substr()、list_slice()で値を短くしてください)で失敗します

openmeteo_dataframe_drop tool
  • デフォルトでは無効です。OPENMETEO_DATAFRAME_DROP_ENABLED=trueになるまでは無効として一覧表示されます
  • canvas_idと、openmeteo_dataframe_describeから取得した正確なtable_nameを指定します。そのテーブルまたはビューを1つ削除し、droppedとremaining_tablesを返します。ステージングされていない名前を指定するとdropped: falseが返されるため、同じ削除を繰り返しても安全です
  • canvas_not_enabled、canvas_not_found、またはinvalid_table_name(通常のSQL識別子ではない、または予約語)で失敗します

機能

@cyanheads/mcp-ts-core を基盤としており、stdio および Streamable HTTP トランスポート、切り替え可能な認証(none / jwt / oauth)、交換可能なストレージ(in-memory、filesystem、Supabase、Cloudflare KV/R2/D1)、オプションの OpenTelemetry トレースに対応した構造化ログを備えています。

Open-Meteo 固有の機能:

  • 非商用利用では API キーは不要です。商用利用には Open-Meteo の有料 API ティアが必要です。
  • 列指向の API レスポンスを、*_units マップを含むタイムスタンプごとのレコードに再構成します。予報とアーカイブで同じ変数名を使用します。
  • 7 つの気象ツールでは DataCanvas へのスピルオーバーに対応しています。CANVAS_PROVIDER_TYPE=duckdb の場合、予算を超えた結果は DuckDB テーブルとして一時保存されます(レスポンスには canvas_id、table_name、truncated: true が含まれます)。既定の none の場合は、上限付きのプレビューを返し、truncated: true を設定します。
  • 過去データ、アンサンブル、気候の各ツールにおける models は許可リストではありません。そのため、Open-Meteo が後から追加するモデルも、サーバーを更新せずに利用できます。

エージェントに使いやすい出力:

  • ロケーション優先のワークフロー:openmeteo_search_locations は座標とともに IANA の timezone を返すため、あらゆる気象ツールの timezone 入力にそのまま指定できます(既定値は auto)。
  • 型付きの拒否理由:variable_wrong_cadence(正しいフィールド名を示します)、request_too_large(絞り込む入力項目を示します)、rate_limited を返します。最初に再試行されるのは Too many concurrent requests のみです。
  • リクエスト URL は、エラーデータにもクライアントから見えるログにも表示されません。
  • データだけでは分からない情報を、レスポンスごとに 1 件の notice で知らせます。提供されない変数名、データセットの対象範囲外での null、およびスピルオーバーした行の保存先が含まれます。

はじめに

公開ホストインスタンス

公開インスタンスは https://open-meteo.caseyjhand.com/mcp で利用できます。インストールは不要です。Streamable HTTP 経由で任意の MCP クライアントを接続してください。

{
  "mcpServers": {
    "open-meteo-mcp-server": {
      "type": "streamable-http",
      "url": "https://open-meteo.caseyjhand.com/mcp"
    }
  }
}
セルフホスト/ローカル

以下を MCP クライアントの設定ファイルに追加してください。

{
  "mcpServers": {
    "open-meteo-mcp-server": {
      "type": "stdio",
      "command": "bunx",
      "args": ["@cyanheads/open-meteo-mcp-server@latest"],
      "env": {
        "MCP_TRANSPORT_TYPE": "stdio",
        "MCP_LOG_LEVEL": "info"
      }
    }
  }
}

または、npx を使用します(Bun は不要です)。

{
  "mcpServers": {
    "open-meteo-mcp-server": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@cyanheads/open-meteo-mcp-server@latest"],
      "env": {
        "MCP_TRANSPORT_TYPE": "stdio",
        "MCP_LOG_LEVEL": "info"
      }
    }
  }
}

または、Docker を使用します。

{
  "mcpServers": {
    "open-meteo-mcp-server": {
      "type": "stdio",
      "command": "docker",
      "args": ["run", "-i", "--rm", "-e", "MCP_TRANSPORT_TYPE=stdio", "ghcr.io/cyanheads/open-meteo-mcp-server:latest"]
    }
  }
}

Streamable HTTP を使用する場合は、トランスポートを設定してサーバーを起動してください。

MCP_TRANSPORT_TYPE=http MCP_HTTP_PORT=3010 bun run start:http
# Server listens at http://localhost:3010/mcp
前提条件
  • Bun v1.4.0 以降(または Node.js v24+)。
  • API キーは不要です。非商用利用は無料で、API キーなしで利用できます。
  • 商用利用には Open-Meteo の有料 API ティア が必要です。
インストール
  1. リポジトリをクローンします:
git clone https://github.com/cyanheads/open-meteo-mcp-server.git
  1. ディレクトリに移動します:
cd open-meteo-mcp-server
  1. 依存関係をインストールします:
bun install

設定

すべての変数は任意です。

変数説明デフォルト
OPEN_METEO_API_BASE_URL予報および標高 API のベース URL です。https://api.open-meteo.com
OPEN_METEO_ARCHIVE_BASE_URL過去データアーカイブ API のベース URL です。https://archive-api.open-meteo.com
OPEN_METEO_MARINE_BASE_URL海洋 API のベース URL です。https://marine-api.open-meteo.com
OPEN_METEO_AIR_QUALITY_BASE_URLCAMS 大気質 API のベース URL です。https://air-quality-api.open-meteo.com
OPEN_METEO_GEOCODING_BASE_URLジオコーディング API のベース URL です。https://geocoding-api.open-meteo.com
OPEN_METEO_ENSEMBLE_BASE_URLアンサンブル API のベース URL です。https://ensemble-api.open-meteo.com
OPEN_METEO_FLOOD_BASE_URLGloFAS 洪水 API のベース URL です。https://flood-api.open-meteo.com
OPEN_METEO_CLIMATE_BASE_URLCMIP6 気候 API のベース URL です。https://climate-api.open-meteo.com
CANVAS_PROVIDER_TYPEduckdb は予算を超えた気象データの結果を DataCanvas にステージングし、データフレームツールを有効にします。none は上限付きのプレビューを返します。none
OPENMETEO_DATAFRAME_DROP_ENABLEDtrue にすると openmeteo_dataframe_drop を呼び出せるようになります。それ以外の場合は無効として一覧に表示されます。false
MCP_TRANSPORT_TYPEトランスポート:stdio または http です。stdio
MCP_HTTP_PORTHTTP サーバーのポートです。3010
MCP_SESSION_MODEHTTP セッションモード:stateless、stateful、または auto です。stateless
MCP_AUTH_MODE認証:none、jwt、または oauth です。none
MCP_LOG_LEVELログレベル(debug、info、notice、warning、error)です。info
LOGS_DIRログファイルのディレクトリです(Node.js のみ)。<project-root>/logs
STORAGE_PROVIDER_TYPEストレージバックエンド:in-memory、filesystem、supabase、cloudflare-kv/r2/d1 です。in-memory
OTEL_ENABLEDOpenTelemetry を有効にします。false

任意のオーバーライドの全一覧については、.env.example を参照してください。

サーバーの実行

ローカル開発
  • 本番バージョンをビルドして実行する:

    # One-time build
    bun run rebuild
    
    # Run the built server
    bun run start:http
    # or
    bun run start:stdio
    
  • チェックとテストを実行する:

    bun run devcheck  # Lint, format, typecheck, security
    bun run test      # Vitest test suite
    
Docker
docker build -t open-meteo-mcp-server .
docker run --rm -p 3010:3010 open-meteo-mcp-server

Dockerfile のデフォルトは HTTP トランスポート、ステートレスセッションモードで、ログは /var/log/open-meteo-mcp-server に出力されます。OpenTelemetry のピア依存関係はデフォルトでインストールされます。省略するには、--build-arg OTEL_ENABLED=false を指定してビルドしてください。

プロジェクト構成

ディレクトリ用途
src/index.tscreateApp() のエントリーポイントです。ツールを登録し、Open-Meteo サービスと DataCanvas を初期化します。
src/configサーバー固有の環境変数を解析し、Zod で検証します。
src/mcp-server/tools/definitionsツール定義(*.tool.ts)を格納します。ツールごとに 1 ファイルです。
src/mcp-server/tools共通のツールヘルパーです。モデルカタログ、時間間隔の検証、列指向データの再構成、スピルオーバー、レスポンス通知が含まれます。
src/services/open-meteoOpen-Meteo API 用の HTTP クライアントです。リトライ、エラー分類、データ範囲不足の拒否を行います。
src/services/canvas-accessor.tsスピルに対応するツールで共通利用する DataCanvas アクセサーです。
tests/単体テスト、統合テスト、ファズテスト、スモークテストを格納します。

開発ガイド

開発ガイドラインとアーキテクチャルールについては、CLAUDE.md を参照してください。要点は次のとおりです。

  • ハンドラーは例外をスローし、フレームワークが捕捉します。ツールのロジックで try/catch を使わないでください。
  • リクエスト単位のロギングには ctx.log を、テナント単位のストレージには ctx.state を使用してください。
  • 新しいツールは src/index.ts の tools[] 配列に登録してください。
  • 外部 API の呼び出しはラップしてください。生データを検証し、ドメイン型に正規化してから、出力スキーマに沿って返します。不足しているフィールドを捏造してはいけません。

クレジット

気象データは Open-Meteo.com によるもので、CC BY 4.0 のライセンスで提供されています。

貢献

問題の報告を歓迎します。提出前にチェックとテストを実行してください。

bun run devcheck
bun run test

ライセンス

Apache-2.0 — 詳細は LICENSE を参照してください。

コメント

MCP は初めてですか?

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

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