🪐 ✨ Earthdata MCP Server について
Earthdata MCP Server は、NASA Earthdata のデータセットとグラニュールを検索するための MCP サーバーです。単独で動作するほか、reactor_mcp_server ホスト上のツールセットとしても利用でき、地球科学データを扱う研究者や開発者に適しています。
主な機能
- 01キーワードによる NASA Earthdata のデータセット検索
- 02時間範囲と領域によるグラニュール検索
- 03manifest、download、script の 3 つの取得モード
- 04reactor_mcp_server のツールセットとして動作
活用シーン
- 01キーワードと地域で海面上昇関連のデータセットを探す
- 02ダウンロード前に manifest モードで検索結果を確認する
- 03ノートブックのランタイムで実行する Python コードを生成する
MCP 対応
本プロジェクトは MCP サーバーであり、データセット検索、グラニュール検索、ダウンロードのツールとプロンプトを MCP クライアントに公開します。stdio または streamable HTTP で接続します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
🪐 ✨ Earthdata MCP Server
Earthdata MCP Server は、NASA Earth Data とやり取りするためのツールを提供する Model Context Protocol (MCP) サーバーの実装です。
これは reactor_mcp_server の拡張として構築されているため、2 通りの方法で動作します。
- 単体で動作:
earthdata-mcp-server startは Earthdata ツールのみを stdio またはストリーミング可能な HTTP 経由で提供します。 - ツールセットとして動作: 任意の
reactor_mcp_serverホストと並べてインストールすると、それを要求するクライアントに対してオプトインのearthdataツールセットとして検出され、提供されます:/mcp?earthdata。Datalayer MCP Server は、ノートブックやサンドボックスと並べてこの方法で提供します。
このサーバーは意図的に Earthdata 専用です。ノートブックやランタイムのツールについては、それらと同じホスト上で並べて提供するか、mcp-compose を使って jupyter-mcp-server と組み合わせてください。
主な機能
- NASA Earthdata でのデータセット検出
- 時間フィルターとバウンディングボックスフィルターを使用したグラニュール検索
- 明示的な実行モードを備えた柔軟なダウンロードワークフロー
はじめに
ローカルインストール
pip install earthdata-mcp-server
# stdio, for a client that launches the server
earthdata-mcp-server start
# streamable HTTP, at http://localhost:4040/mcp
earthdata-mcp-server start --transport streamable-http --port 4040
| オプション | 環境変数 | デフォルト |
|---|---|---|
--transport | TRANSPORT | stdio (または streamable-http) |
--host | HOST | 0.0.0.0 |
--port | PORT | 4040 |
reactor MCP ホスト上のツールセットとして
pip install earthdata-mcp-server "reactor_mcp_server[server]"
reactor-mcp-server --port 4040
http://localhost:4040/mcp?earthdata に接続するクライアントは、インストールされている他のものと並べて Earthdata ツールを取得します。/toolsets はホストが提供するものの一覧を表示します。コードでは次のようになります。
from reactor_mcp_server import build_host, create_mcp_app
from earthdata_mcp_server import EarthdataExtension
app = create_mcp_app(build_host([EarthdataExtension()]), path="/mcp")
EarthdataExtension(default=True) は、何も指定しないクライアントに対してツールセットを提供します。
Claude Desktop での Docker
{
"mcpServers": {
"earthdata": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e", "EARTHDATA_USERNAME",
"-e", "EARTHDATA_PASSWORD",
"datalayer/earthdata-mcp-server:latest"
],
"env": {
"EARTHDATA_USERNAME": "your_username",
"EARTHDATA_PASSWORD": "your_password"
}
}
}
}
Linux ホストのネットワーキング
{
"mcpServers": {
"earthdata": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"--network=host",
"-e", "EARTHDATA_USERNAME",
"-e", "EARTHDATA_PASSWORD",
"datalayer/earthdata-mcp-server:latest"
],
"env": {
"EARTHDATA_USERNAME": "your_username",
"EARTHDATA_PASSWORD": "your_password"
}
}
}
}
ツール
earthdata ツールセットは 3 つのツールを提供します。いずれも認証情報を必要としません。ただし、mode="download" の download_earth_data_granules は NASA Earthdata Login を必要とします。デフォルトの manifest モードと script モードは匿名で動作します。
search_earth_datasets
- NASA Earthdata でデータセットを検索します。
- 入力:
- search_keywords (str): データセットのタイトル内で検索するキーワード。
- count (int): 返すデータセットの数。
- temporal (tuple): (オプション) (date_from, date_to) 形式の時間範囲。
- bounding_box (tuple): (オプション) (lower_left_lon, lower_left_lat, upper_right_lon, upper_right_lat) 形式のバウンディングボックス。
- 戻り値: データセットの概要のリスト。
search_earth_datagranules
- NASA Earthdata でデータグラニュールを検索します。
- 入力:
- short_name (str): データセットのショートネーム。
- count (int): 返すデータグラニュールの数。
- temporal (tuple): (オプション) (date_from, date_to) 形式の時間範囲。
- bounding_box (tuple): (オプション) (lower_left_lon, lower_left_lat, upper_right_lon, upper_right_lat) 形式のバウンディングボックス。
- 戻り値: データグラニュールのリスト。
download_earth_data_granules
- 明示的なモードを指定して、グラニュールの検索とオプションのダウンロードを行います。
- 認証: NASA Earthdata のログイン認証情報が必要なのは
mode="download"のみです(認証ガイドを参照)。manifestモードとscriptモードは匿名で動作します。 - 入力:
- folder_name (str): データを保存するローカルフォルダー名。
- short_name (str): ダウンロードする Earth データセットのショートネーム。
- count (int): ダウンロードするデータグラニュールの数。
- temporal (tuple): (オプション) (date_from, date_to) 形式の期間。
- bounding_box (tuple): (オプション) (lower_left_lon, lower_left_lat, upper_right_lon, upper_right_lat) 形式のバウンディングボックス。
- mode (str): 次のいずれか:
manifest: グラニュールのメタデータのみを返します。download: サーバー側で直接ファイルをダウンロードします。script: 別の場所で実行する Python コードを返します。
- max_manifest_items (int):
manifestモードで返される項目の最大数。
ダウンロードの仕組み
download_earth_data_granules は常に、指定したフィルターでグラニュールを検索することから始まり、その後 mode に応じて動作します:
manifest- ID、タイトル、リンクを含む構造化されたプレビュー(
items)を返します。 - ファイルは書き込みません。
- クエリの範囲を検証するための最適な最初のステップです。
- ID、タイトル、リンクを含む構造化されたプレビュー(
download- 環境の認証情報を使用して Earthdata で認証します。
- 一致するグラニュールをサーバーのランタイム上の
folder_nameに直接ダウンロードします。 - ダウンロードされたファイルパスを返します。
script- 同じ検索 + ダウンロードを実行する実行可能な Python コードを返します。
- 別の MCP サーバーが制御するノートブック/ランタイムで実行する場合に最適なオプションです。
推奨されるダウンロード戦略
- まず
mode="manifest"を使用して、安全に結果を確認します。 mcp-compose+jupyter-mcp-serverを介したノートブック駆動の実行を行う場合は、mode="script"を使用します。- サーバー側でのファイル書き込みを意図している場合にのみ、
mode="download"を使用します。
mcp-compose を使用した完全なコンポジション例については、ダウンロードワークフローのドキュメントを参照してください。
プロンプト
-
download_analyze_global_sea_levelscriptモードのdownload_earth_data_granulesから始まるワークフローを生成します。- コンポジションされたノートブック/ランタイムスタック(
mcp-compose経由)で実行することを意図しています。
-
sealevel_rise_dataset- 世界中の海面上昇に関連するデータセットを検索します。
- 入力:
start_year(int): 対象とする開始年。end_year(int): 対象とする終了年。
- 戻り値: 正しくフォーマットされたプロンプト。
-
ask_datasets_format- データセットのフォーマットについて質問するためのものです。
- 戻り値: 正しくフォーマットされたプロンプト。
開発
make dev # editable install with the test, lint and typing extras
make test
make lint
リリースはタグをプッシュすることで作成されます。RELEASE.mdを参照してください。
ビルド
# or run `docker build -t datalayer/earthdata-mcp-server .`
make build-docker
必要に応じて、ビルド済みイメージをプルすることもできます。
make pull-docker
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。