nasa-power-mcp-server について
nasa-power-mcp-server は、再生可能エネルギー、建築、農業気候の分析向けに、NASA POWER の過去の太陽・気象データを提供します。地点、地域、複数地点のクエリに対応し、大きな結果はデータセットとして一時保存して読み取り専用 SQL で調べられます。
主な機能
- 01地点の時系列と気候値を取得
- 02ネイティブグリッド地域の検索と地点比較
- 03パラメーターとリファレンス情報の検索
- 04大規模データセットの一時保存と制限付きSQLクエリ
- 05データソースの単位と科学的な出典情報を返却
活用シーン
- 01太陽光・風力資源の過去データの評価
- 02地点間の気象パターンの比較
- 03建築または農業気候パラメーターの調査
- 04一時保存した大規模データセットの分析
MCP 対応
stdio または Streamable HTTP 経由で、NASA POWER の検索を含む9種類のツールを MCP クライアントに提供します。任意でデータセットの確認、SQL クエリ、削除も行えます。Streamable HTTP のホスト済みインスタンスもあります。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://nasa-power.caseyjhand.com/mcpclaude mcp add --transport http cyanheads-nasa-power https://nasa-power.caseyjhand.com/mcp{"mcpServers":{"cyanheads-nasa-power":{"type":"http","url":"https://nasa-power.caseyjhand.com/mcp"}}}Cursor で開く{"servers":{"cyanheads-nasa-power":{"type":"http","url":"https://nasa-power.caseyjhand.com/mcp"}}}VS Code で開く{"mcpServers":{"cyanheads-nasa-power":{"type":"http","url":"https://nasa-power.caseyjhand.com/mcp"}}}{"mcpServers":{"cyanheads-nasa-power":{"serverUrl":"https://nasa-power.caseyjhand.com/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
8このツールにパラメーターはありません。
詳細
@cyanheads/nasa-power-mcp-server
MCP を介して NASA POWER の太陽光、風力、建築、農業気候学データを照会します。STDIO または Streamable HTTP に対応しています。
公開ホスト型サーバー: https://nasa-power.caseyjhand.com/mcp
概要
NASA POWER は、再生可能エネルギー、持続可能な建築、農業気候学向けの過去の太陽光および気象観測データを提供します。地点ごとの時系列データや気候値を取得し、ネイティブグリッドの地域データを調べ、出典の単位と来歴を添えてラベル付き地点を比較できます。NASA アカウントや API キーは不要です。
ツール
| ツール | 説明 |
|---|---|
nasa_power_get_timeseries | 1 地点の時間別、日別、または月別の観測データ |
nasa_power_get_climatology | 傾斜面の太陽光プロファイルを含む、地点ごとの月別および年別の気候値 |
nasa_power_get_region | 境界で指定したネイティブグリッド領域の 1 パラメーター |
nasa_power_compare_locations | ラベル付きの 2~10 地点について、共通の観測データと季節別の要約 |
nasa_power_search_parameters | コミュニティ/解像度の全パラメーター辞書を検索 |
nasa_power_list_reference | プリセット、コミュニティ、対象範囲、欠損値、風力面、データフレームの使用方法 |
nasa_power_dataframe_describe | ステージングされたスキーマ、単位、有効期限、来歴を確認 |
nasa_power_dataframe_query | 明示的に指定したキャンバストークンに対して、範囲を制限した読み取り専用 SQL を実行 |
nasa_power_dataframe_drop | オプトイン方式で、名前を指定したステージング済みテーブルを 1 つ削除 |
デフォルトでは 8 個のツールが有効です。NASA_POWER_DATAFRAME_DROP_ENABLED=true にすると、9 個目のツールが有効になります。
機能リファレンス
nasa_power_get_timeseries ツール
latitude/longitudeとtemporalResolution:hourlyとdailyでは包含的なstartDate/endDateを指定し、monthlyではstartYear/endYearを指定します。selectionは名前付きのpreset(デフォルトはsolar_pv)または明示的なparametersで、補正分を含めて、有効なコードは時間単位では最大15個、それ以外では最大20個です。community(RE、SB、AG。デフォルトはRE)、units(metric、imperial)、timeStandard(LST、UTC)。任意のsiteElevationを指定するとPSCが追加されます。windElevation(10~300メートル)とwindSurfaceを併せて指定するとWSCが追加されます。airportgrass、airportice、vegtype_1を含む17個すべての正規 NASA エイリアスについては、nasa_power_list_referenceのトピックwind_surfacesを使用します。植生のアンダースコアはそのまま保持されます。metadata、parameters、expansions、omittedParameters、summaries、rows、正確なrowCount、およびdataset(ステージングされない限り null)を返します。ステージングが必要な場合、任意のcanvas_idを指定するとキャンバスを再利用します。
nasa_power_get_climatology ツール
- 点座標と、同じ選択および補正を指定します。任意の
startYearとendYearはセットで指定し、省略した場合はソースプロダクトの期間が使われます。temporalResolutionは入力できません。 - 小規模なプロファイルはインラインで返されます。大規模なプロファイルでは、上限付きプレビューと完全な
datasetハンドルが返されます。任意のcanvas_idを指定すると、既存のワークスペースを再利用します。DuckDB がない場合、インライン出力に収まるよう、選択範囲を狭めてください。SI_EF_TILTED_SURFACEと、これとは別のSI_TILTED_AVG、SI_TILTED_MIN、SI_TILTED_MAXのグループは、実際に返されたメンバーのみをexpansionsに列挙します。数値の角度と N/S の方位テキストも含まれます。グループが省略されるのは、そのメンバーが一つも返されない場合のみです。
nasa_power_get_region ツール
latitudeMin/latitudeMaxとlongitudeMin/longitudeMaxの順序付き範囲に対して、1つのparameterを指定します。各軸の範囲は2~10度です(それ以外はinvalid_region)。日付変更線をまたぐ地域は、別々の呼び出しに分割してください。temporalResolutionはdaily、monthly、climatologyのいずれかです。地点補正はサポートされていません。- 日別の地域データには日付範囲が必要で、月別の地域データには年範囲が必要です。地域の気候値には年フィールドを指定できず、ソースの事前計算期間が報告されます。任意の地点年範囲を指定するには
nasa_power_get_climatologyを使用してください。 - セルタグ付きの
rows、cellCount、期間ごとのsummariesを返します。min/mean/maxはセルを等重みで集計した値であり、面積加重ではありません。ステージング用に任意のcanvas_idを指定するとキャンバスを再利用します。 - 概要の応答サイズ上限を超える場合、すべてのセル間概要を含む
summaryDataset、正確なsummaryCount、レコード全体を単位とするインラインプレビューが返されます。テーブルはsummaryIndexの順にクエリしてください。SQL のunits: nullは、省略されたソース単位を復元します。観測値と概要は一緒に登録され、相互に関連付けられた出所情報が保持されます。
nasa_power_compare_locations ツール
- 2~10個の
locationsを指定します。それぞれに座標と1~120文字のlabelが必要です。選択、補正、期間は全地点で共通です。temporalResolutionのデフォルトはclimatologyです。hourly、daily、monthlyも使用できます。 - 地点ごとの出所情報を含む成功地点の
locations、地点タグ付きのrows、年別および暦季節別のsummariesを返します。一部の地点でエラーが発生した場合は、partial: trueを含むfailedエントリーも返します。すべての地点で失敗した場合はall_locations_failedを返します。possibleSharedGridCellは、複数の地点が同じグリッドセルを共有している可能性を示します。 - 任意の
sort(parameter、directionはasc/desc)を指定すると、既知の単位が一致する数値パラメーターで並べ替えます。ステージング用に任意のcanvas_idを指定するとキャンバスを再利用します。 - 概要が応答サイズの上限を超える場合、
summaryDatasets.bucketsとsummaryDatasets.locationsが完全な SQL テーブルを示します。インライン概要はレコード全体を単位とするプレビューになり、各地点にはsummaryCountが含まれます。summaryIndexの順にクエリしてください。地点概要テーブルにはlocationIdが含まれます。SQL のunits: nullは既知の単位ではなく、省略されたソース単位を表します。
nasa_power_search_parameters ツール
community(デフォルトはRE)、temporalResolution(デフォルトはdaily)、任意のfilter(最大256文字)、offset、および正の整数のlimit(デフォルトは20。上限は実質100で、上限適用時に通知されます)。- 大文字と小文字を区別しない
filterの各トークンは、ソート後のページネーションを行う前に、辞書全体にあるコード、名前、定義のいずれかに一致する必要があります。空のフィルターを指定すると、辞書を閲覧できます。entries、total、hasMore、truncatedはページの情報を示します。
nasa_power_list_reference ツール
topic:presets(デフォルト)、communities、coverage、missing_data、wind_surfaces、dataframesのいずれかです。- 型付きの
entries、guidance、documentationUrls、verifiedOnを返します。プリセットはsolar_pv、wind_turbine、building_hvac、agroclimatology、water_balanceです。building_hvacは時間単位では利用できません。agroclimatologyは、時間単位以外の解像度でT2M_MAXとT2M_MINを追加します。月別/気候値の極値は引き続きソース集計値であり、日別レコードの再構成や、計算による有効積算温度の算出は行われません。
nasa_power_dataframe_describe ツール
- データを生成したレスポンスに含まれる
canvas_idが必須です。任意のtableを指定すると、検査対象を1つのテーブルに限定できます。 - キャンバスとテーブルの有効期限、ソース単位付きのSQL列、元の科学的な
provenanceを返します。指定したキャンバス内のテーブルのみが表示されます。
nasa_power_dataframe_query ツール
canvas_idと、sql内の読み取り専用SELECT文1つが必須です(最大16,384文字)。正の整数のrowLimitはデフォルトで100、上限は1,000です。上限を超えるリクエストには、実質上限の通知が表示されます。ファイル、書き込み、システムカタログへのアクセスは禁止されています。columns、rows、rowCount、shownCount、truncated、countSemantics(exactまたはmaterialized_prefix)を返します。SQLの制限時間は10秒です。構造化出力とレンダリング済み出力は、それぞれ40,000文字以内である必要があります。- SQLの誤りでは、識別子や変換値を制限付きで保持し、復旧方法を案内します。運用上の障害には汎用メッセージを使用し、エンジンのパスやネイティブの原因は含めません。
nasa_power_dataframe_drop ツール
canvas_idと正確なtableが必須です。NASA_POWER_DATAFRAME_DROP_ENABLED=trueによってのみ有効になります。- テーブルが存在しない場合、他のテーブルによってキャンバスが維持されていれば
dropped: falseを返します。最後のテーブルを削除すると、そのキャンバスも終了してスロットが解放されます。その後のdescribe、query、dropの呼び出しではcanvas_not_foundが返されます。
特長
@cyanheads/mcp-ts-core を基盤としており、stdio および Streamable HTTP トランスポート、プラグイン可能な認証(none/jwt/oauth)、切り替え可能なストレージ(in-memory、filesystem、Supabase、Cloudflare KV/R2/D1)、オプションの OpenTelemetry トレーシングに対応した構造化ログを提供します。
POWER 固有の特長:
- 観測対象は地点の測定値や予報ではなく、過去のグリッドデータです。気象データは1981年、太陽データは1984年、時間別データは2001年から利用できます。ソースの設定や公開までの遅延によって、利用可能なデータはさらに制限されます。
- 上流へのリクエストは常に1件のみで、開始間隔は少なくとも2秒、再試行回数には上限があり、呼び出し全体の期限は55秒です。NASA はリクエスト数の上限を数値で公表していません。参照データのキャッシュ期間は24時間、観測データは10分です。
- ソースの欠損値は
nullに変換され、ゼロは測定値として保持されます。月別の年間キーと気候値のANNは、月別の観測値とは区別されます。LST のラベルには UTC オフセットがありません。 T_ZONESとTM_ZONESは、SQL の列メタデータも含め、数値の気候帯コードをvalueKind: categoricalとして保持します。これらには算術的な要約や比較用のソート指標はなく、いずれかを指定した明示的な数値ソートは拒否されます。
エージェントに適した出力:
- 科学的な出典情報 — ソース API バージョン、データセット識別子、エンドポイント、アクセス時刻を結果に含めます。返された単位を維持し、NASA POWER の出典を明記してください。
- 明示的な欠損 —
omittedParametersによって、系列が存在しない場合と欠損値を区別します。観測値の算術平均や暦上の季節区分は、気候平年値、年間収量、水収支ではありません。 - 完全なデータセット — インライン出力はそれぞれ40,000文字以内です。より大きなデータセットでは、最大20行のプレビューと
datasetハンドルを添えて、すべての行をステージングします。対応外または大きすぎるリクエストは、上流データの先頭部分を上限で切り詰めて返すのではなく、対象を絞り込む方法を案内して失敗します。
ステージングには DuckDB が必要で、1データセットあたり最大250,000行、64個のパラメータ列、シリアライズ後の行データ32 MiBに対応します。キャンバスはプロセス内でのみ有効な機能です。返されたトークンを明示的に渡し、後続の呼び出しは同じプロセスにルーティングしてください。テーブルは30分後に期限切れとなり、キャンバスあたりのテーブル数は8個です。デフォルトでは、キャンバスあたりのアイドル時間は1時間、絶対時間は6時間、テナントあたりのキャンバス数は4個、プロセスあたりは8個で、キャンバスあたりのエンジンメモリは256 MiBです。運用者は、以下でキャンバスの容量、メモリ、存続期間をこれより小さく設定できます。エンジンメモリの上限は、RSS 全体や一時ディスク使用量を制限しません。
はじめに
公開ホストインスタンス
公開インスタンス https://nasa-power.caseyjhand.com/mcp を利用できます。インストールは不要です。Streamable HTTP 経由で、任意の MCP クライアントから接続してください。
{
"mcpServers": {
"nasa-power-mcp-server": {
"type": "streamable-http",
"url": "https://nasa-power.caseyjhand.com/mcp"
}
}
}
セルフホスト/ローカル
MCP クライアントの設定ファイルに、以下を追加してください。
{
"mcpServers": {
"nasa-power-mcp-server": {
"type": "stdio",
"command": "bunx",
"args": ["@cyanheads/nasa-power-mcp-server@latest"],
"env": { "MCP_TRANSPORT_TYPE": "stdio" }
}
}
}
または、npx を使用する方法(Bun は不要です):
{
"mcpServers": {
"nasa-power-mcp-server": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@cyanheads/nasa-power-mcp-server@latest"],
"env": { "MCP_TRANSPORT_TYPE": "stdio" }
}
}
}
または、Docker を使用する方法:
{
"mcpServers": {
"nasa-power-mcp-server": {
"type": "stdio",
"command": "docker",
"args": ["run", "-i", "--rm", "-e", "MCP_TRANSPORT_TYPE=stdio", "ghcr.io/cyanheads/nasa-power-mcp-server:latest"]
}
}
}
Streamable HTTP を使用する場合は、トランスポートを設定してサーバーを起動してください。
MCP_TRANSPORT_TYPE=http MCP_HTTP_PORT=3010 bun run start:http
# Server listens at http://127.0.0.1:3010/mcp
前提条件
- Bun v1.4.0 以降(または Node.js v24+)。
- npm と Docker は、対応プラットフォーム上でネイティブ DuckDB 依存関係を通常どおりインストールします。ステージングと SQL はデフォルトで有効です。すべての結果をインラインにするには、
CANVAS_PROVIDER_TYPE=noneを設定してください。 - ポータブルな Claude Desktop MCPB バンドルでは
CANVAS_PROVIDER_TYPE=noneに固定されており、インライン結果に対応します。大きすぎるリクエストは対象を絞り込むか、分析には npm/Docker を使用してください。
インストール
- リポジトリをクローンします:
git clone https://github.com/cyanheads/nasa-power-mcp-server.git
- ディレクトリに移動します:
cd nasa-power-mcp-server
- 依存関係をインストールします:
bun install
- 環境を設定します:
cp .env.example .env
# edit .env to change transport, logging or canvas settings
設定
| 変数 | 説明 | デフォルト |
|---|---|---|
NASA_POWER_DATAFRAME_DROP_ENABLED | ステージング済みテーブルを明示的に削除する機能を公開します。 | false |
CANVAS_PROVIDER_TYPE | duckdb は npm/Docker で SQL を実行するために大きな結果をステージングし、none は結果をインラインで保持します。MCPB では none に固定されています。 | duckdb |
CANVAS_DEFAULT_MEMORY_LIMIT_MB | キャンバスごとのエンジンメモリ。整数で、64 MiB 以上です。合計 RSS や一時ディスク容量ではありません。 | 256 |
CANVAS_MAX_CANVASES_PER_TENANT | テナントごとのキャンバス上限(正の整数)。auth-none の呼び出し元は同じテナントを共有します。 | 4 |
NASA_POWER_MAX_CANVASES_PER_PROCESS | 保留中およびクリーンアップに失敗した予約分を含む、プロセスごとのキャンバス上限(正の整数)。 | 8 |
CANVAS_TTL_MS | 正の整数で指定する、スライド式キャンバス有効期間(ミリ秒)。 | 3600000 |
CANVAS_ABSOLUTE_CAP_MS | スライド式 TTL 以上の、キャンバスの絶対有効期間(ミリ秒)。 | 21600000 |
MCP_TRANSPORT_TYPE | stdio または http。 | stdio |
MCP_HTTP_HOST / MCP_HTTP_PORT | HTTP のバインドアドレスとポート。 | 127.0.0.1 / 3010 |
MCP_AUTH_MODE | none、jwt、または oauth。 | none |
MCP_LOG_LEVEL | 最低ログレベル。 | info |
OTEL_ENABLED | OpenTelemetry を有効にします。 | 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 # Lints, formats, type-checks, and more bun run test # Runs the test suite
Docker
docker build -t nasa-power-mcp-server .
docker run --rm -p 127.0.0.1:3010:3010 nasa-power-mcp-server
イメージは、ステートレスセッションモードでポート 3010 の HTTP をデフォルトとして使用し、/var/log/nasa-power-mcp-server にログを出力します。OpenTelemetry のピア依存関係はデフォルトでインストールされます。省略するには、--build-arg OTEL_ENABLED=false を指定してビルドしてください。ループバック外のクライアントから接続する場合は、デプロイ境界で認証と TLS を設定してください。
プロジェクト構成
| パス | 用途 |
|---|---|
src/index.ts | 9 つのツール登録、上限付きキャンバス設定、サービスのシャットダウン |
src/config | ワークロードの上限と、サーバー固有の環境変数の解析 |
src/mcp-server/tools/definitions | ツールの契約と比較のオーケストレーション |
src/services/power | リクエスト間隔を調整する NASA クライアント、正規化、プリセット、科学的な要約 |
src/services/canvas | 明示的なトークンによるステージング、SQL、データの来歴、受付上限 |
scripts | ビルド、検証、パッケージ化、リリース用ツール |
tests | オフラインでの契約テストとネイティブ統合テスト |
開発ガイド
開発ガイドラインとアーキテクチャ上のルールについては、CLAUDE.md を参照してください。要点は次のとおりです。
- ハンドラーは例外をスローし、フレームワークが捕捉します — ツールのロジック内で
try/catchを使わないでください - ロギングには
ctx.logを、キャンセルにはctx.signalを使用してください - 新しいツールは
src/index.tsのcreateApp()配列に登録してください - 外部 API 呼び出しをラップしてください。生データを検証 → ドメイン型に正規化 → 出力スキーマを返す、の順に処理します。欠落フィールドを捏造せず、ソースの単位と年間期間の区別を保持してください
content[]とstructuredContentには、同じ完全なデータを格納してください
コントリビューション
イシューを歓迎します。提出前にチェックとテストを実行してください。
bun run devcheck
bun run test
ライセンス
このプロジェクトは Apache 2.0 License の下でライセンスされています。詳細は LICENSE ファイルを参照してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。