gee-mcp

gee-mcp

Enables downloading satellite imagery from Google Earth Engine as GeoTIFF files, supporting various datasets, bands, and region specification through natural language.

Category
Visit Server

README

GEE MCP Server

Python MCP server exposing a tool to download Google Earth Engine imagery as GeoTIFF.

Prerequisites

  • Google Earth Engine account approved
  • Python 3.10+
  • Local Earth Engine auth completed for the user account

Credentials

Server (GEE)

The server supports two auth methods. Use ONE of these:

  1. Service account key file (recommended)
  • Place gee-key.json in the project root (same folder as server.py).
  • The file should be a standard Google service account JSON with fields like type, project_id, private_key_id, private_key, client_email, client_id, etc.
  • Optionally set GEE_PROJECT in .env (or it will use project_id from the key file).
  1. Environment variables
  • Set the following in your environment (or .env if your launcher loads it):
GEE_PROJECT=your-gcp-project-id
GEE_SERVICE_ACCOUNT=service-account@your-project.iam.gserviceaccount.com
GEE_PRIVATE_KEY_PATH=C:\path\to\service-account.json
# Alternative to GEE_PRIVATE_KEY_PATH:
GOOGLE_APPLICATION_CREDENTIALS=C:\path\to\service-account.json

Notes:

  • The server automatically detects gee-key.json if present; otherwise it tries env vars, then default user auth.
  • Run earthengine authenticate once if you prefer user auth locally.

Client (LLM)

The client uses an LLM for prompt parsing. Create a .env in the project root with:

OPENAI_API_KEY=sk-...
# Optional, defaults to gpt-4o-mini
OPENAI_MODEL=gpt-4o-mini

Passing env to the server

When the client spawns the server (stdio), it forwards the most relevant GEE env vars if set:

  • GEE_PROJECT
  • GEE_SERVICE_ACCOUNT
  • GEE_PRIVATE_KEY_PATH
  • GOOGLE_APPLICATION_CREDENTIALS

If you rely on gee-key.json, no additional env configuration is required.

Setup

python -m venv .venv
. .venv/Scripts/activate  # on Windows PowerShell: .venv\Scripts\Activate.ps1
pip install -r requirements.txt

Authenticate Earth Engine (one-time):

earthengine authenticate

If running on a headless server, set service account credentials via env GOOGLE_APPLICATION_CREDENTIALS or use ee.ServiceAccountCredentials in code.

Run Server (MCP over stdio)

python server.py

The server exposes one tool:

  • download_satellite_image(DownloadParams) -> str: Downloads a GeoTIFF to a temp file and returns its absolute path.

DownloadParams

  • latitude (float)
  • longitude (float)
  • start_date (YYYY-MM-DD)
  • end_date (YYYY-MM-DD)
  • scale (int, meters, default 10)
  • buffer_m (int, default 1000)
  • bands (str, comma-separated; default B4,B3,B2)
  • dataset (str, default COPERNICUS/S2)

Run Client (CLI)

The CLI connects to the server over stdio, prompts for parameters, and calls the tool:

python client.py

MCP Client Config Example (Cursor / Claude Desktop)

Add a server entry similar to:

{
  "mcpServers": {
    "gee-mcp": {
      "command": "python",
      "args": ["server.py"],
      "env": {}
    }
  }
}

Notes

  • Ensure your date window and location intersect the dataset footprint.
  • For Sentinel-2, the tool prefers the least cloudy image automatically.
  • Large regions or small scales may produce big downloads; adjust buffer_m and scale accordingly.
  • Don't give too large region to download at once, the split function in server may fails.

Server functions and capabilities

Tools exposed

  • download_satellite_image(DownloadParams) -> { files: string[], message: string }
    • Downloads one or more GeoTIFFs from Google Earth Engine for a user-defined Area of Interest (AOI).

Inputs (DownloadParams)

  • Geographic input (provide exactly one):
    • latitude, longitude (float): point center; uses buffer_m to create AOI
    • bounding_box (number[4]): [min_lon, min_lat, max_lon, max_lat] (preferred for rectangles)
    • region_geojson (string): full GeoJSON for complex polygons
  • Temporal and data options:
    • start_date, end_date (YYYY-MM-DD)
    • dataset (string): default COPERNICUS/S2_SR_HARMONIZED
    • bands (string): comma-separated band names (default B4,B3,B2)
    • scale (int, meters): target resolution
    • buffer_m (int): only used with point input
    • max_cloud_cover (float, %): filter cap for Sentinel-2
    • image_count (int): number of least-cloudy images to download

Processing behavior

  • Sorts by cloud cover (Sentinel-2) and selects up to image_count images.
  • Saves files to download/ with capture date in filename.
  • Preflight size check and automatic tiling:
    • Estimates pixel count/bytes and splits AOI into quadrants when needed.
    • If a tile still exceeds GEE size limits, recursively splits further (limited depth) and/or increases scale (coarsens resolution) until the request fits.
  • Robust region handling:
    • Converts bounding_box to a rectangular polygon.
    • Uses AOI bounds as the download region.
  • Logging: detailed execution written to server.log (authentication, preflight, tiling, retries).

Outputs

  • Returns { files: [absolute_file_paths], message: string }.
    • May return multiple files when AOI is split or multiple dates are requested.
    • Message indicates if fewer images were available than requested, or if tiling/scale backoff occurred.

Limits and notes

  • Very large AOIs and/or small scale produce large requests; server will split tiles and increase scale automatically to satisfy GEE limits (~48 MB per request for thumbnails/downloads).
  • Cloud-cover filtering currently applies to Sentinel‑2 collections (field CLOUDY_PIXEL_PERCENTAGE).
  • If you need strict masking to the polygon footprint, consider adding an explicit clip(AOI) step before download.

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured