NASA Earthdata

by datalayer

8 stars
667 downloads
Not rated
GitHub Website

About

Provides a bridge to NASA's Earthdata platform for searching and retrieving Earth science datasets and data granules based on keywords, temporal ranges, and geographic boundaries.

Details

Author
datalayer
Repository
datalayer/earthdata-mcp-server
GitHub stars
8
Downloads
667
License
BSD 3-Clause "New" or "Revised" License
Categories
Cloud Service, Other, AI, Design, Developer Tools, Search, Infrastructure, Frontend
Tags
#visualization, #integration

- Dataset discovery on NASA Earthdata
- Granule search with temporal and bounding box filters
- Flexible download workflow with explicit execution modes

<div>
<a href="https://www.loom.com/share/c2b5b05f548d4f1492d5c107f0c48dbc">
<p>Analyzing Sea Level Rise with AI-Powered Geospatial Tools and Jupyter - Watch Video</p>
</a>
<a href="https://www.loom.com/share/c2b5b05f548d4f1492d5c107f0c48dbc">

</a>
</div>

Setting up with Highlight

This MCP is not yet compatible with Highlight’s one-click setup. However, you can still use it with Highlight by following these steps:

  1. Download and install Highlight from highlightai.com/download
  2. Navigate to the plugins tab and select "Add Custom Plugin"
  3. Configure the plugin with the settings below
    Plugin Name NASA Earthdata
    Command (node, npx, python, etc.) docker
    Arguments
    • Argument 1 run
    • Argument 2 -i
    • Argument 3 --rm
    • Argument 4 datalayer/earthdata-mcp-server:latest
    Environment
    • EARTHDATA_PASSWORD your_password
    • EARTHDATA_USERNAME your_username

    Please refer to the README for specific instructions on how to obtain API keys or other required environment variables.

  4. Enable "Start Automatically" if you want the plugin to start when Highlight launches

From the repository

pip install earthdata-mcp-server

search_earth_datasets

Search for datasets on NASA Earthdata. Input: search_keywords (str): Keywords to search for in the dataset titles, count (int): Number of datasets to return, temporal (tuple): (Optional) Temporal range in the format (date_from, date_to), bounding_box (tuple): (Optional) Bounding box in the format (lower_left_lon, lower_left_lat, upper_right_lon, upper_right_lat). Returns: List of dataset abstracts.

search_earth_datagranules

Search for data granules on NASA Earthdata. Input: short_name (str): Short name of the dataset, count (int): Number of data granules to return, temporal (tuple): (Optional) Temporal range in the format (date_from, date_to), bounding_box (tuple): (Optional) Bounding box in the format (lower_left_lon, lower_left_lat, upper_right_lon, upper_right_lat). Returns: List of data granules.

download_earth_data_granules

Search and optionally download granules with explicit modes. Input: folder_name (str): Local folder name to save the data, short_name (str): Short name of the Earth dataset to download, count (int): Number of data granules to download, temporal (tuple): (Optional) Temporal range in the format (date_from, date_to), bounding_box (tuple): (Optional) Bounding box in the format (lower_left_lon, lower_left_lat, upper_right_lon, upper_right_lat), mode (str): One of 'manifest', 'download', 'script', max_manifest_items (int): Max items returned in 'manifest' mode.

download_analyze_global_sea_level

Generates a workflow that starts with 'download_earth_data_granules' in 'script' mode. Intended to be executed in a composed notebook/runtime stack (via mcp-compose).

sealevel_rise_dataset

Search for datasets related to sea level rise worldwide. Input: start_year (int): Start year to consider, end_year (int): End year to consider. Returns: Prompt correctly formatted.

ask_datasets_format

To ask about the format of the datasets. Returns: Prompt correctly formatted.

The server offers 3 Earthdata tools.

Claude Desktop / Cursor

Paste into your MCP client config file to install this server.

{
    "mcpServers": {
        "nasa earthdata": {
            "env": {
                "EARTHDATA_PASSWORD": "your_password",
                "EARTHDATA_USERNAME": "your_username"
            },
            "args": [
                "run",
                "-i",
                "--rm",
                "datalayer/earthdata-mcp-server:latest"
            ],
            "command": "docker"
        }
    }
}

Linux

{
    "env": {
        "EARTHDATA_PASSWORD": "your_password",
        "EARTHDATA_USERNAME": "your_username"
    },
    "args": [
        "run",
        "-i",
        "--rm",
        "--network=host",
        "datalayer/earthdata-mcp-server:latest"
    ],
    "command": "docker"
}

Macos

{
    "env": {
        "EARTHDATA_PASSWORD": "your_password",
        "EARTHDATA_USERNAME": "your_username"
    },
    "args": [
        "run",
        "-i",
        "--rm",
        "datalayer/earthdata-mcp-server:latest"
    ],
    "command": "docker"
}

Windows

{
    "env": {
        "EARTHDATA_PASSWORD": "your_password",
        "EARTHDATA_USERNAME": "your_username"
    },
    "args": [
        "run",
        "-i",
        "--rm",
        "datalayer/earthdata-mcp-server:latest"
    ],
    "command": "docker"
}

<!--
~ Copyright (c) 2023-2024 Datalayer, Inc.
~
~ BSD 3-Clause License
-->

Datalayer

Become a Sponsor

🪐 ✨ Earthdata MCP Server

PyPI - Version
smithery badge
Unit Tests
Lint and Type Check

Earthdata MCP Server is a Model Context Protocol (MCP) server implementation that provides tools to interact with NASA Earth Data.

This server is intentionally Earthdata-only.

If you need notebook/runtime tools, compose this server with jupyter-mcp-server using mcp-compose.

Key Features

- Dataset discovery on NASA Earthdata
- Granule search with temporal and bounding box filters
- Flexible download workflow with explicit execution modes

<div>
<a href="https://www.loom.com/share/c2b5b05f548d4f1492d5c107f0c48dbc">
<p>Analyzing Sea Level Rise with AI-Powered Geospatial Tools and Jupyter - Watch Video</p>
</a>
<a href="https://www.loom.com/share/c2b5b05f548d4f1492d5c107f0c48dbc">

</a>
</div>

Getting Started

Local install

pip install earthdata-mcp-server

Docker with Claude Desktop

{
  "mcpServers": {
    "earthdata": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "datalayer/earthdata-mcp-server:latest"
      ],
      "env": {
        "EARTHDATA_USERNAME": "your_username",
        "EARTHDATA_PASSWORD": "your_password"
      }
    }
  }
}

Linux host networking

{
  "mcpServers": {
    "earthdata": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "--network=host",
        "datalayer/earthdata-mcp-server:latest"
      ],
      "env": {
        "EARTHDATA_USERNAME": "your_username",
        "EARTHDATA_PASSWORD": "your_password"
      }
    }
  }
}

Tools

The server offers 3 Earthdata tools.

search_earth_datasets

- Search for datasets on NASA Earthdata.
- Input:
- search_keywords (str): Keywords to search for in the dataset titles.
- count (int): Number of datasets to return.
- temporal (tuple): (Optional) Temporal range in the format (date_from, date_to).
- bounding_box (tuple): (Optional) Bounding box in the format (lower_left_lon, lower_left_lat, upper_right_lon, upper_right_lat).
- Returns: List of dataset abstracts.

search_earth_datagranules

- Search for data granules on NASA Earthdata.
- Input:
- short_name (str): Short name of the dataset.
- count (int): Number of data granules to return.
- temporal (tuple): (Optional) Temporal range in the format (date_from, date_to).
- bounding_box (tuple): (Optional) Bounding box in the format (lower_left_lon, lower_left_lat, upper_right_lon, upper_right_lat).
- Returns: List of data granules.

download_earth_data_granules

- Search and optionally download granules with explicit modes.
- Authentication: Requires NASA Earthdata Login credentials (see authentication guide)
- Input:
- folder_name (str): Local folder name to save the data.
- short_name (str): Short name of the Earth dataset to download.
- count (int): Number of data granules to download.
- temporal (tuple): (Optional) Temporal range in the format (date_from, date_to).
- bounding_box (tuple): (Optional) Bounding box in the format (lower_left_lon, lower_left_lat, upper_right_lon, upper_right_lat).
- mode (str): One of:
- manifest: Returns granule metadata only.
- download: Downloads files directly on server side.
- script: Returns Python code to execute elsewhere.
- max_manifest_items (int): Max items returned in manifest mode.

How download works

download_earth_data_granules always starts by searching for granules with your filters, then behaves based on mode:

1. manifest
- Returns a structured preview (items) with IDs, titles, and links.
- Does not write files.
- Best first step for validating query scope.
2. download
- Authenticates with Earthdata using environment credentials.
- Downloads matching granules directly to folder_name on the server runtime.
- Returns downloaded file paths.
3. script
- Returns executable Python code that performs the same search + download.
- Best option when execution should happen in a notebook/runtime controlled by another MCP server.

Recommended download strategy

1. Use mode="manifest" first to inspect results safely.
2. Use mode="script" when you want notebook-driven execution via mcp-compose + jupyter-mcp-server.
3. Use mode="download" only when server-side file writes are intended.

For a full composition example with mcp-compose, see download workflow docs.

Prompts

1. download_analyze_global_sea_level
- Generates a workflow that starts with download_earth_data_granules in script mode.
- Intended to be executed in a composed notebook/runtime stack (via mcp-compose).

2. sealevel_rise_dataset
- Search for datasets related to sea level rise worldwide.
- Input:
- start_year (int): Start year to consider.
- end_year (int): End year to consider.
- Returns: Prompt correctly formatted.

3. ask_datasets_format
- To ask about the format of the datasets.
- Returns: Prompt correctly formatted.

Building

# or run docker build -t datalayer/earthdata-mcp-server .
make build-docker

If you prefer, you can pull the prebuilt images.

make pull-docker
No reviews yet — be the first

Sign in to leave a review

Use Google, GitHub, or an email account so ratings stay tied to real people.

Email sign in

No reviews posted yet.