eo-mcp
This server provides an MCP interface for planetary Earth observation, enabling AI agents and CLI users to discover, stream, and analyze free satellite data for environmental and hazard assessments.
Hazard Assessments: Run all-in-one hazard analyses (flood, wildfire, burn severity, coastal erosion, drought, urban heat, dark vessels) via
assess_location_hazard.Environmental Audits: Generate composite site scorecards with
environmental_site_audit(vegetation, water, topography, vulnerability).Custom Pipelines: Build/execute declarative multi-step EO pipelines with
run_pipeline, plus list/describe pre-built recipes.Spatial Discovery: Geocode place names to bboxes (
eo_geocode) and search STAC catalogs for scenes (stac_search).Spectral Indices: Compute NDVI, NDWI, NBR, EVI from COG streams (
calculate_spectral_index).Terrain & Elevation: Get elevation profiles and slope from Copernicus DEM (
get_elevation_profile).SAR Water Mapping: Detect surface water using Sentinel-1 radar backscatter (
detect_water_sar).Maritime Surveillance: Detect dark vessels with CA-CFAR radar and AIS correlation (
detect_dark_vessels).Coastal Dynamics: Quantify shoreline erosion rates with DSAS transects (
analyze_coastal_erosion).Sea Level Rise: Simulate inundation with flood-fill modeling (
simulate_sea_level_rise).Active Wildfires: Monitor hotspots and FRP from NASA FIRMS (
detect_active_wildfires).Atmospheric Emissions: Monitor NO₂, CH₄, SO₂, CO via Sentinel-5P and OpenAQ (
monitor_atmospheric_emissions).Drought Analysis: Assess reservoir shrinkage using JRC Global Surface Water (
analyze_reservoir_drought).Burn Severity: Calculate dNBR and classify severity (
calculate_burn_severity).Urban Heat Island: Compute LST and UHI intensity (
analyze_urban_heat_island).Crop Phenology: Track seasonal growth milestones (
monitor_crop_phenology).NASA OPERA Data: Query dswx, dist, rtc products (
query_nasa_opera).Credential Management: Configure/check optional provider credentials (
configure_credentials,get_credential_status), and generate CDSE granule downloads.Custom Scripts: Execute arbitrary Python geospatial scripts in a sandbox (
run_geospatial_script).Visualization & Export: Generate interactive maps (
export_interactive_map), GeoLibre projects (export_geolibre_project), and run spatial SQL on GeoJSON (query_spatial_sql).Tool Discovery: Progressively discover tools via
discover_eo_toolsand list supported collections.Rich CLI: Use the included CLI for all above operations with summary/geojson/csv outputs.
Provides tools for searching and accessing NASA's CMR STAC catalog, enabling discovery of MODIS and VIIRS satellite imagery for Earth observation.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@eo-mcp show NDVI for corn fields near Des Moines, Iowa from the latest Sentinel-2 pass"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
eo-mcp
The Open Source Model Context Protocol (MCP) for Planetary Earth Observation
Empower AI agents to autonomously discover, stream, and compute satellite analytics from free government archives.
Plugs directly into Claude Desktop, Cursor, Codex, Antigravity, and autonomous Python agent loops with zero vendor lock-in and zero proprietary API costs.
Website & Live Interactive Demo • LinkedIn Page • Quickstart • Tools Reference • Architecture
Why eo-mcp?
Proprietary platforms (like Planet Labs' agentic dashboard or Google Earth Engine) build walled gardens that trap users in closed user interfaces and expensive recurring subscription paywalls.
eo-mcp takes the opposite philosophy, modeled after open-source community standards:
100% Open Standards: Speaks standard Model Context Protocol (JSON-RPC 2.0). Works in Claude Desktop, Cursor IDE, VS Code, Open WebUI, and custom agent frameworks (LangChain, AutoGen, CrewAI).
Zero-Config Free Government Data: Instant out-of-the-box queries to AWS Earth Search, NASA CMR, and Copernicus public STAC endpoints for Sentinel-2, Landsat 8/9, and Copernicus DEM without needing API keys.
Cloud-Native COG Streaming: Never download a 1GB satellite granule again.
eo-mcpleverages HTTP range requests (/vsicurl/) to stream and compute band math on only the exact bounding box of your city, farm, or river in seconds (saving >98% bandwidth).Deterministic Scientific Visualization (Zero AI Hallucinations): 100% script-driven visual outputs (NumPy arrays, 256-color scientific LUT rasters, GeoJSON vectors, georeferenced GeoTIFFs, and self-contained interactive Leaflet web maps) computed directly from real satellite pixels and coordinates. Generative AI imagery tools (Midjourney, DALL-E, Nano Banana) are strictly prohibited.
Autonomous Agentic Script Runner: When standard tools aren't enough, agents can generate and run custom
rasterio,xarray, andgeopandasscripts inside an isolated geospatial sandbox.
Related MCP server: Gods Eye Geospatial MCP
Quickstart
100% Free & Zero-Config: You DO NOT need a Copernicus API key, ESA account, or paid subscription. Baseline satellite streams (Sentinel-2, Landsat, and Copernicus DEM) stream directly from open government cloud archives out-of-the-box.
0. Prerequisite: Install uv
eo-mcp is powered by Astral's uv for instant isolated execution:
macOS / Linux:
curl -LsSf https://astral.sh/uv/install.sh | shWindows (PowerShell):
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
1. Instant Run with uvx (Recommended)
Run directly from GitHub with zero installation or virtualenv setup:
uvx --from git+https://github.com/eo-mcp/eo-mcp eo-mcpOr run diagnostics to verify your environment and open STAC feeds:
uvx --from git+https://github.com/eo-mcp/eo-mcp eo-mcp doctorOr install locally from source:
git clone https://github.com/eo-mcp/eo-mcp.git
cd eo-mcp
uv run eo-mcp2. Configure Your AI Agent
Claude Desktop
Add this to your claude_desktop_config.json:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"eo-mcp": {
"command": "uvx",
"args": ["--from", "git+https://github.com/eo-mcp/eo-mcp", "eo-mcp"]
}
}
}Cursor IDE
Open Cursor Settings (
Ctrl+Shift+JorCmd+Shift+J).Navigate to Features > MCP.
Click + Add New MCP Server:
Name:
eo-mcpType:
commandCommand:
uvx --from git+https://github.com/eo-mcp/eo-mcp eo-mcp
Codex
Register eo-mcp into your Codex environment with a single command:
codex mcp add eo-mcp -- uvx --from git+https://github.com/eo-mcp/eo-mcp eo-mcpGoogle Antigravity
Add to your workspace or global .antigravity/mcp.json:
{
"mcpServers": {
"eo-mcp": {
"command": "uvx",
"args": ["--from", "git+https://github.com/eo-mcp/eo-mcp", "eo-mcp"]
}
}
}❓ Troubleshooting: Why is my AI asking for a Copernicus API key?
If Claude, Cursor, or ChatGPT asks you:"Please provide your Copernicus API key or credentials", that means eo-mcp is not yet running in your client!
When an MCP server has not been configured or failed to start, LLMs fall back to generic training data and mistakenly assume you need a paid or registered API key.
How to fix in 30 seconds:
Ensure
uvis installed and accessible in your terminal (uv --version).In Cursor, make sure
eo-mcpdisplays a green status indicator under Settings > Features > MCP.In Claude Desktop, look for the hammer icon (🔨) in the chat window to confirm
eo-mcptools are active.Test connectivity in your terminal with
uvx --from git+https://github.com/eo-mcp/eo-mcp eo-mcp doctor.
Supported Satellite Collections
Mission / Sensor | Resolution | Spectral Domain | Primary Applications | Free STAC Source |
Sentinel-2 L2A | 10m - 20m | Optical (12 Bands: VNIR/SWIR) | Vegetation Health (NDVI), Water Bodies (NDWI), Crops | AWS Earth Search / CDSE |
Landsat 8 & 9 (C2 L2) | 30m | Optical & Thermal (OLI-2/TIRS-2) | Burn Severity (NBR), Land Surface Temp (LST) | AWS Earth Search / USGS |
Copernicus DEM GLO-30 | 30m | Elevation (DSM) | Elevation Profiles, Slope, Aspect, Flood Basins | AWS Earth Search / CDSE |
Sentinel-1 GRD | 10m | C-Band SAR (VV/VH Radar) | All-Weather Flood Inundation & Soil Moisture | CDSE / Planetary Computer |
Sentinel-5P TROPOMI | 5.5km × 3.5km | Atmospheric Absorption | NO₂, SO₂, Carbon Monoxide, Methane, Aerosols | CDSE / Planetary Computer |
MODIS / VIIRS | 250m - 1km | Optical, Thermal & Fire | Active Wildfires, Global Daily Phenology | NASA CMR STAC |
Tools Reference & Architecture Patterns
eo-mcp adopts the modern Ergonomic Workflow and Progressive Tool Discovery architecture (pioneered by Neon Postgres and modern agentic coding clients like Codex, Claude Code, Cursor, and Antigravity):
Ergonomic Workflow Tools ("The Create with Compute Pattern"): Bundles multi-step satellite chains (geocoding → STAC discovery → cloud filtering → band math → hazard modeling) into single-turn calls. Eliminates 4–6 round trips and prevents LLM chaining errors.
Category Scoping & Lean Context Windows: Scope tools via
EO_MCP_PROFILEor--profile(workflows,hazards,climate,maritime,minimal) to reduce prompt bloat by up to 70%.Progressive Tool Discovery: Clients dynamically search and inspect tools via
discover_eo_tools.Code Mode Ergonomics: Pythonic imports (
from eo_mcp import assess_location_hazard, environmental_site_audit) allow autonomous agents in code execution sandboxes to run multi-step pipelines directly with zero JSON-RPC overhead.
🌟 Ergonomic Workflow Tools (High-Level Turnkey Operations)
1. assess_location_hazard(location: str, hazard_type: str, ...)
All-in-one disaster & climate hazard assessment. Accepts a natural language place name ("Valencia, Spain", "Rhodes, Greece") or bounding box. Automatically geocodes, queries open STAC catalogs, and runs specialized hazard modeling:
hazard_type="flood_inundation": Sea-level rise and storm surge inundation (EU Floods Directive).hazard_type="wildfire": Active thermal hotspots, FRP (MW), and EFFIS clustered perimeters.hazard_type="burn_severity": Multi-temporal dNBR and post-fire scar classification.hazard_type="coastal_erosion": Multi-year shoreline retreat rates (m/year) via perpendicular transects.hazard_type="drought": Freshwater reservoir depletion and desiccated dry margins.hazard_type="urban_heat": Land Surface Temperature (LST) and thermal hotspot gradients.hazard_type="dark_vessels": Sentinel-1 SAR ship detection and AIS correlation. Outputs: Formatted summary with ASCII preview maps, GIS-ready GeoJSON (format="geojson"), or CSV (format="csv").
2. environmental_site_audit(location: str, datetime_range: str = "2024-06-01/2024-08-31", format: str = "summary")
Comprehensive Regional Environmental Scorecard. In a single call, synthesizes:
Vegetation Vigor & Biomass: Sentinel-2 NDVI distribution and canopy vigor status.
Surface Water & Wetness: NDWI distribution and moisture index.
Topography & Terrain: Copernicus DEM GLO-30 elevation (min/mean/max) and slope gradients.
Vulnerability Indices: Integrated flood susceptibility and vegetative stress risk classification. Outputs: Executive JSON scorecard or GIS polygon GeoJSON.
3. run_pipeline(spec: str, location: str = None, format: str = "summary", parameters: str = None)
Zero-Infrastructure User-Defined Pipeline Orchestrator. Enables researchers, environmental agencies, and autonomous AI agents to build, configure, and execute custom multi-step Earth Observation processing pipelines:
Turnkey Compound Recipes:
compound_wildfire_runoff_risk: High-severity dNBR burn scars + Copernicus DEM slope gradient $\rightarrow$ Post-fire debris flow and runoff risk.coastal_storm_surge_infrastructure_exposure: Copernicus DEM + IPCC AR6 Sea Level Rise + storm surge $\rightarrow$ Submerged transport networks & isolated medical facilities.agricultural_drought_thermal_stress: Sentinel-2 NDVI canopy vigor + Landsat LST surface thermal anomalies + reservoir surface water shrinkage.maritime_environmental_patrol: Sentinel-1 SAR CFAR target detection + Live Baltic AIS transponders + low-backscatter oil slick screening.
Custom Declarative Pipelines: Accepts custom JSON specifications chaining primitives (
fetch_raster,spectral_index,terrain_analysis,inundation_model,wildfire_activity,burn_severity,maritime_sar_ais,exposure_overlay,compound_risk_synthesis).OpenStreetMap Critical Infrastructure Overlay: Automatically intersects hazard footprints with public roads, bridges, hospitals, fire stations, and ports via the public Overpass API with local spatial fallback.
Outputs: Comprehensive JSON report with ASCII hazard map, GIS-ready GeoJSON FeatureCollection (
format="geojson"), or CSV (format="csv").
4. list_pipeline_recipes() & describe_pipeline_recipe(recipe_name: str)
Inspect and introspect available compound hazard and multi-spectral processing recipes, their default parameters, and execution step definitions.
5. discover_eo_tools(category: str = None, query: str = None)
Progressive Tool Discovery. Allows agents to inspect available tool capabilities on demand without loading all 25 tool schemas upfront:
Categories:
workflows,core,spectral,hazards,climate,maritime,advanced.
🛠️ Primitives & Specialized Planetary Tools
4. eo_geocode(query: str) -> dict
Translates natural language place names (e.g. "Valencia, Spain", "Imperial Valley, CA", "Lake Chad") into standard WGS84 bounding boxes [min_lon, min_lat, max_lon, max_lat].
2. stac_search(bbox: list, datetime_range: str, collections: list, max_cloud_cover: float = 20.0) -> list
Searches free STAC catalogs for available satellite scenes matching the spatial area, cloud thresholds, and date window. Returns scene IDs, acquisition dates, cloud percentages, and direct asset URLs.
3. calculate_spectral_index(collection: str, index: str, bbox: list, date: str) -> dict
Streams the required bands over HTTP range requests and computes the requested index:
NDVI:
(B08 - B04) / (B08 + B04)(Vegetation vigor & biomass)NDWI:
(B03 - B08) / (B03 + B08)(Water body delineation & surface wetness)NBR:
(B08 - B12) / (B08 + B12)(Wildfire burn severity & scar mapping)EVI: Enhanced Vegetation Index (Atmospherically corrected canopy structure) Returns summary statistics (mean, min, max, std), histogram, and optional GeoTIFF/PNG export path.
4. get_elevation_profile(bbox: list, calculate_slope: bool = True) -> dict
Queries the gold-standard Copernicus DEM GLO-30 (30m) dataset. Extracts minimum/maximum/mean elevation, terrain slope gradients, and aspect orientation without downloading the global raster.
5. detect_water_sar(bbox: list, date: str, threshold_db: float = -16.0) -> dict
Extracts Sentinel-1 C-Band SAR radar backscatter (sigma0 in dB). Radar signals scatter away from calm surface water, producing distinct dark backscatter signatures unaffected by optical cloud cover.
6. run_geospatial_script(script_code: str) -> dict
Allows autonomous coding agents to write and execute arbitrary Python geospatial workflows in an isolated sandbox pre-loaded with rasterio, numpy, shapely, and scipy.
7. detect_dark_vessels(bbox: list, datetime_range: str, ais_source: str = "open_baltic_api", pfa_factor: float = 3.2, sea_state: str = "auto", format: str = "summary") -> str
Detects radar-reflective metallic ship hulls in Sentinel-1 SAR imagery using Sea-State Adaptive CA-CFAR (Cell-Averaging Constant False Alarm Rate) with local annular clutter sliding windows (guard and training rings) and automatic ocean surface roughness compensation (suppressing wave-crest false alarms in rough seas). Correlates radar targets with open public AIS feeds (Digitraffic Baltic Sea open API or user-supplied AIS records) to isolate uncooperative Dark Vessels (DARK_VESSEL), verified ships (TRUSTED), and spoofed signals (SPOOF_OR_ABSENT), with Signal-to-Clutter Ratio (SCR in dB) and bilge/oil slick discharge alerts (MSFD Descriptor 8).
Outputs: JSON summary, GIS-ready GeoJSON FeatureCollection (format="geojson"), or tabular CSV (format="csv").
8. analyze_coastal_erosion(bbox: list, historical_date_range: str, recent_date_range: str, transect_sample_step: int = 5, format: str = "summary") -> str
Quantifies multi-temporal coastal shoreline retreat and erosion rates ($\text{m/year}$) between two satellite observation dates using automated MNDWI water indexing on Sentinel-2 / Landsat scenes and perpendicular baseline transects (USGS DSAS methodology). Classifies coastal segments into critical erosion, stable, and accretion zones aligned with the EU Climate Adaptation Strategy.
Outputs: JSON summary, GIS-ready GeoJSON FeatureCollection (format="geojson"), or tabular CSV (format="csv").
9. simulate_sea_level_rise(bbox: list, water_level_rise_m: float = 1.0, storm_surge_m: float = 0.0, scenario: str = None, format: str = "summary") -> str
Simulates coastal inundation and storm surge flood risk using Copernicus DEM GLO-30 (30m) elevation and an 8-connected morphological flood-fill algorithm (hydro-connected bathtub model) preventing inland depression artifacts. Supports IPCC AR6 climate projections (SSP1-2.6, SSP2-4.5, SSP5-8.5) and EU Floods Directive hazard zoning.
Outputs: JSON summary with ASCII flood distribution map, GIS-ready GeoJSON FeatureCollection (format="geojson"), or tabular CSV (format="csv").
10. detect_active_wildfires(bbox: list, days: int = 2, source: str = "VIIRS_NOAA20_NRT", format: str = "summary") -> str
Queries open NASA FIRMS active fire feeds (VIIRS / MODIS) to monitor thermal anomalies, calculate Fire Radiative Power (FRP in MW), and cluster contiguous fire perimeters with EFFIS / Copernicus Emergency Management fire danger classifications (EXTREME, HIGH, MODERATE).
Outputs: JSON summary, GIS-ready GeoJSON FeatureCollection (format="geojson"), or tabular CSV (format="csv").
11. monitor_atmospheric_emissions(bbox: list, gas: str = "NO2", datetime_range: str = "2024-06-01/2024-06-30", format: str = "summary") -> str
Monitors tropospheric trace gases ($\text{NO}_2$, $\text{CH}_4$ Methane, $\text{SO}_2$, $\text{CO}$) from Sentinel-5P TROPOMI column densities and cross-references them against in-situ ground monitoring stations from the open OpenAQ public REST API for EU Ambient Air Quality Directive compliance.
Outputs: JSON summary, GIS-ready GeoJSON FeatureCollection (format="geojson"), or tabular CSV (format="csv").
12. analyze_reservoir_drought(bbox: list, historical_year: int = 2019, recent_year: int = 2024, format: str = "summary") -> str
Analyzes reservoir shrinkage and freshwater deficit using the EC Joint Research Centre (JRC) Global Surface Water archive and multi-temporal Sentinel-2 imagery. Quantifies surface water depletion ($\text{ha}$, $\text{km}^2$), transition breakdown (permanent water vs. desiccated dry margin), and drought severity classes for the EU Water Framework Directive.
Outputs: JSON summary, GIS-ready GeoJSON FeatureCollection (format="geojson"), or tabular CSV (format="csv").
13. calculate_burn_severity(bbox: list, pre_fire_date_range: str, post_fire_date_range: str, format: str = "summary") -> str
Quantifies post-fire damage using difference Normalized Burn Ratio ($dNBR$) and Relativized Burn Ratio ($RBR$) computed from pre- and post-fire Sentinel-2 L2A scenes (NIR Band 8 and SWIR22 Band 12). Maps spatial burn perimeters classified into USGS and European Forest Fire Information System (EFFIS) severity grades (HIGH_SEVERITY, MODERATE_HIGH, MODERATE_LOW, LOW_SEVERITY, UNBURNED).
Outputs: JSON summary, GIS-ready GeoJSON FeatureCollection (format="geojson"), or tabular CSV (format="csv").
14. analyze_urban_heat_island(bbox: list, datetime_range: str, format: str = "summary") -> str
Calculates Land Surface Temperature ($LST$ in °C) and Urban Heat Island ($UHI$) intensity gradients using Landsat-8/9 Thermal Infrared Sensor (TIRS Band 10: $10.895\ \mu\text{m}$) combined with NDVI Fractional Vegetation Cover (FVC) and Sobrino surface emissivity modeling. Detects extreme heat risk anomalies, thermal hotspots, and cool-island vegetative buffers.
Outputs: JSON summary with ASCII temperature distribution map, GIS-ready GeoJSON FeatureCollection (format="geojson"), or tabular CSV (format="csv").
15. monitor_crop_phenology(bbox: list, year: int = 2024, crop_type: str = None, format: str = "summary") -> str
Tracks multi-temporal agricultural canopy growth trajectories across the seasonal cycle using cloud-free Sentinel-2 observations. Extracts key phenological inflection milestones: Start of Season (SOS / greenup), Peak of Season (POS / maximum photosynthetic capacity), and End of Season (EOS / senescence). Compares seasonal canopy amplitude and vigor anomaly percentages against regional crop baselines.
Outputs: JSON summary, GIS-ready GeoJSON FeatureCollection (format="geojson"), or tabular CSV (format="csv").
16. configure_credentials(provider: str, username: str = None, password: str = None, token: str = None) -> dict
Dynamically configures or updates credentials for external satellite and data providers in-session (cdse, earthdata, planetary_computer, nasa_firms). Allows users and agents to unlock advanced authenticated features (such as direct granule downloads) on demand without restarting the server.
17. get_credential_status() -> dict
Inspects configured authentication status across all supported satellite catalog providers. Verifies whether zero-config public mode is active and safely displays masked status indicators.
18. download_copernicus_granule(product_id: str, output_dir: str = None, username: str = None, password: str = None) -> dict
Generates authenticated download manifests, OData API links, and curl commands for official Copernicus Data Space Ecosystem (CDSE) full-granule archive products (Sentinel-1, Sentinel-2, Sentinel-3, Sentinel-5P).
19. query_nasa_opera(bbox: list, datetime_range: str, product_type: str = "dswx", max_cloud_cover: float = 20.0, limit: int = 5, format: str = "summary") -> str
Discovers and inspects NASA JPL OPERA (Observational Products for End-Users from Remote Sensing Analysis) datasets via NASA CMR STAC:
dswx: 30m Dynamic Surface Water Extent from HLS (open water, partial water, inundated vegetation).dist: 30m Surface Disturbance alerts from HLS (vegetation loss, wildfire scars, deforestation).rtc: 30m Radiometric Terrain Corrected Sentinel-1 SAR (all-weather radar backscatter).
Outputs: JSON summary with direct COG asset URLs, or GIS-ready GeoJSON (format="geojson").
20. export_interactive_map(title: str, bbox: list, geojson: str = None, hazard_type: str = None, output_html_path: str = None) -> str
Generates a standalone, self-contained interactive MapLibre GL JS web application from hazard results. Features dark titanium glassmorphic styling, interactive feature popups, responsive bounding box fitting, and 3D perspective pitch toggling. Bridges headless agentic compute with interactive GeoLibre-compatible visualization.
21. export_geolibre_project(title: str, bbox: list, layers: str = None, output_json_path: str = None, basemap_theme: str = "dark") -> str
Exports a native .geolibre project configuration file. Enables one-click importing of eo-mcp hazard layers directly into GeoLibre Desktop (Tauri) or GeoLibre Web (geolibre.app).
22. query_spatial_sql(sql: str, geojson: str, table_name: str = "features") -> str
Executes spatial SQL queries against GeoJSON FeatureCollections and geospatial metadata. Modeled after GeoLibre's DuckDB Spatial engine. Supports standard SQL (SELECT, WHERE, GROUP BY, ORDER BY) and spatial functions (ST_Area, ST_Centroid, ST_Length, ST_Intersects).
23. analyze_coastal_water_quality(bbox: list, datetime_range: str = "2024-06-01/2024-06-30", collection: str = "sentinel-2-l2a", format: str = "summary") -> str
Assesses coastal water quality, eutrophication, harmful algal blooms (HABs), sedimentation, and industrial thermal effluent plumes. Computes:
Normalized Difference Chlorophyll Index (NDCI): $(B05 - B04) / (B05 + B04)$ for chlorophyll-a estimation and HAB risk alerts (
CRITICAL,ELEVATED,MODERATE,LOW) using Mishra & Mishra (2012).Normalized Difference Turbidity Index (NDTI): $(B04 - B03) / (B04 + B03)$ for water clarity using Lacaux et al. (2007).
Suspended Particulate Matter (SPM / TSS) Proxy: Single-band calibrated red reflectance model using Nechad et al. (2010).
Thermal Plume Anomaly Detection: Sea Surface Temperature (SST) elevation gradients ($\Delta T \ge 1.5^\circ\text{C}$).
Outputs: JSON summary report, GIS-ready RFC 7946 GeoJSON (format="geojson"), or tabular CSV (format="csv").
24. generate_script(task_type: str, prompt: str = None, bbox: list = None, datetime_range: str = None, mode: str = "standalone") -> str
Empowers AI agents and researchers to autonomously synthesize complete, runnable Python geospatial scripts:
mode="standalone": Generates self-contained, zero-dependency Python code that queries public STAC endpoints (pystac_client,rasterio,numpy,shapely) without requiringeo-mcpinstalled.mode="sdk": Generates modular Python scripts leveragingeo_mcpcore analytical engines.
Supported Task Types:coastal_water_quality,maritime_patrol,coastal_erosion,inundation_model,spectral_indices,wildfire_dnbr.
25. validate_script(script_code: str) -> str
Performs Abstract Syntax Tree (AST) static security analysis on agent-generated Python code. Validates syntax and strictly blocks prohibited modules (subprocess, os, shutil, socket, pty, ctypes) and dangerous executions (eval, exec, compile, __import__).
26. run_script(script_code: str, custom_context: str = None) -> str
Safely executes validated geospatial Python scripts inside an in-memory execution sandbox pre-loaded with numpy, rasterio, and shapely. Captures execution runtime, standard output, standard error, and returns structured result variables.
27. synthesize_pipeline_code(recipe_name: str, bbox: list, datetime_range: str = None, output_format: str = "standalone") -> str
Transpiles declarative compound hazard recipes into standalone, executable Python scripts ready for Google Colab, Jupyter Notebooks, or headless serverless pipelines.
Planetary Google Earth Engine (GEE) Tools
eo-mcp bridges client-side cloud-native COG streaming with server-side planetary Google Earth Engine compute, supporting 50+ years of satellite archives (Landsat 1 MSS in 1972 through Sentinel-2 today):
28. gee_init(project_id: str = None, service_account_key: str = None) -> str
Initializes the Earth Engine Python API session. Honors standard GCP credential resolution: direct parameters, service account JSON key, GEE_PROJECT or GOOGLE_APPLICATION_CREDENTIALS environment variables, or cached credentials from earthengine authenticate.
29. gee_catalog_search(query: str, limit: int = 10) -> str
Instant multi-term keyword search across 880+ GEE public datasets using a cached index. Searches titles, tags, IDs, and providers without network crawling latency.
30. gee_build_composite(year: int, location: str = None, bbox: list = None, aoi_geojson: str = None, season_start_month: int = 1, season_end_month: int = 12, method: str = "median", min_scenes: int = 3, max_cloud_cover: float = None) -> str
Builds a cloud-masked, harmonized multi-sensor composite using an automated fallback ladder across 50 years of archives. Automatically selects sensor priority by era (MSS, TM, ETM+, OLI, S2), unpacks QA bitmasks, harmonizes bands to standard names (Blue, Green, Red, NIR, SWIR1, SWIR2), and caches the result in an in-memory session registry returning a lightweight composite_id handle.
31. gee_compute_indices(composite_id: str, indices: list = None, expression: str = None, output_band_name: str = "custom_index") -> str
Computes spectral indices (NDVI, SAVI, EVI, NDMI, NBR, NDWI, NDBI, NDRE, CIre, GreenRed, BlueGreenNIR) or evaluates custom band-math expressions. Automatically validates sensor era band feasibility and reports skipped indices.
32. gee_thumbnail(composite_id: str, bands: list = None, min_val: float = 0.0, max_val: float = 0.3, palette: list = None, dimensions: int = 720) -> str
Generates an authentic high-resolution PNG thumbnail URL directly from Google Earth Engine. Follows the Deterministic Scientific Visual Mandate (Zero AI Hallucinations), rendering genuine satellite pixels.
33. gee_zonal_stats(composite_id: str, reducers: list = None, bands: list = None, scale: int = None) -> str
Computes multi-reducer summary statistics (mean, median, min, max, stdDev, sum, count) over the composite region in a single server-side reduction call.
34. gee_threshold_area(composite_id: str, band_name: str, operator: str, threshold: float, scale: int = None) -> str
Quantifies geodesic surface area in square kilometers ($km^2$) and square meters ($m^2$) meeting threshold criteria (e.g. NDWI > 0.1 for water or NDVI < 0.2 for barren soil) using ee.Image.pixelArea(), reporting coverage percentage of total region.
35. gee_mask_by_raster(composite_id: str, mask_dataset_id: str, mask_band: str, mask_min: float = None, mask_max: float = None) -> str
Applies an ancillary raster mask (Copernicus DEM elevation/slope, SRTM, or ESA WorldCover classes) to an active composite.
36. gee_sample_polygons(dataset_id: str = "ESA/WorldCover/v200", band: str = "Map", class_values: list = None, class_labels: list = None, location: str = None, bbox: list = None, points_per_class: int = 6, polygon_size_m: float = 180.0) -> str
Auto-generates labeled training polygons from categorical land cover products (e.g. ESA WorldCover) for machine learning classifiers, returning a GeoJSON FeatureCollection.
37. gee_audit_factuality(composite_id: str = None, sensor: str = None, year: int = None, reducer: str = None, indices: list = None) -> str
Audits Earth Observation workflows for critical scientific assumptions (TOA vs SR calibration, cross-sensor spectral offsets, temporal smoothing bias) and synthesizes a declarative Mermaid flowchart of the processing pipeline.
38. gee_execute_code(code: str) -> str
Execution escape hatch running arbitrary Python code with an initialized ee context for custom algorithms, returning stdout and structured result variables.
Rich Interactive CLI Tools
eo-mcp is also a full-featured operator CLI with Rich terminal tables, status badges, and GIS piping:
# Coastal water quality, eutrophication & harmful algal bloom (HAB) analysis
eo-mcp water-quality --bbox 22.70 38.80 22.95 38.95 --format summary
eo-mcp water-quality --bbox 22.70 38.80 22.95 38.95 --format geojson > water_quality.geojson
# Agentic script synthesis (generate standalone open-source Python code)
eo-mcp script generate --task coastal_water_quality --mode standalone -o water_script.py
eo-mcp script generate --task inundation_model --mode standalone -o flood_model.py
# AST security validation & sandboxed execution
eo-mcp script validate water_script.py
eo-mcp script run water_script.py
# Maritime surveillance & dark vessel tracking
eo-mcp dark-vessels --bbox 24.5 59.8 25.2 60.2 --format summary
eo-mcp dark-vessels --bbox 24.5 59.8 25.2 60.2 --format geojson > dark_vessels.geojson
# Shoreline erosion transects (m/year)
eo-mcp coastal-erosion --bbox -2.85 56.32 -2.75 56.38 --hist-date 2019-05-01/2019-08-31 --recent-date 2024-05-01/2024-08-31
# IPCC Sea Level Rise & Storm Surge Simulation with ASCII depth map
eo-mcp sea-level-rise --bbox 22.8 38.6 23.2 38.9 --scenario SSP5-8.5 --surge 0.5
# Active wildfires & FRP thermal perimeter clustering
eo-mcp wildfires --bbox -120.5 38.5 -120.0 39.0 --days 2
# Post-fire burn severity assessment (dNBR & EFFIS classification)
eo-mcp burn-severity --bbox -120.5 38.5 -120.0 38.8 --pre-date 2024-05-01 --post-date 2024-07-01
# Land Surface Temperature & Urban Heat Island analysis (LST in °C)
eo-mcp urban-heat --bbox 2.2 48.7 2.5 49.0 --date 2024-07-15
# Agricultural crop phenology & seasonal growth milestones (SOS/POS/EOS)
eo-mcp crop-phenology --bbox -119.5 36.2 -119.4 36.3 --year 2024 --crop Almonds
# Atmospheric gas emissions & OpenAQ ground stations
eo-mcp emissions --bbox 2.2 48.7 2.5 49.0 --gas NO2
# Reservoir drought depletion & water loss dynamics
eo-mcp drought --bbox -4.5 37.5 -4.0 38.0 --hist-year 2019 --recent-year 2024
# Compound hazard pipeline orchestration
eo-mcp pipeline list
eo-mcp pipeline run --recipe coastal_water_quality_eutrophication --location "Fthiotida, Greece" --format summary
# Inspect or configure provider credentials
eo-mcp auth
eo-mcp auth set --provider cdse --username user@example.com --password secretArchitecture
flowchart TD
subgraph Clients["AI Agent Clients"]
Claude["Claude Desktop"]
Cursor["Cursor IDE"]
Antigravity["Antigravity / Local LLMs"]
CLI_User["Operator CLI (`eo-mcp`)"]
end
subgraph Server["eo-mcp Server (FastMCP / JSON-RPC 2.0)"]
CLI["Rich Terminal CLI Engine"]
Router["Catalog Router & Geocoder"]
subgraph WorkflowTools["Ergonomic & Pipeline Orchestrator Tools"]
W1["run_pipeline"]
W2["list_pipeline_recipes"]
W3["assess_location_hazard"]
W4["environmental_site_audit"]
end
subgraph StandardTools["Standard Satellite Tools"]
T1["stac_search"]
T2["calculate_spectral_index"]
T3["get_elevation_profile"]
T4["detect_water_sar"]
T5["run_geospatial_script"]
end
subgraph PlanetaryTools["Planetary Hazard & Climate Tools"]
P1["detect_dark_vessels"]
P2["analyze_coastal_erosion"]
P3["simulate_sea_level_rise"]
P4["detect_active_wildfires"]
P5["monitor_atmospheric_emissions"]
P6["analyze_reservoir_drought"]
end
subgraph Core["Zero-Infrastructure Analysis Engines"]
COG["Windowed COG Streamer (/vsicurl/)"]
CFAR["CA-CFAR Radar & AIS Correlator"]
DSAS["MNDWI & DSAS Transect Engine"]
Bathtub["8-Connected Bathtub Flood Filler"]
FIRMS["Thermal Anomaly & FRP Clusterer"]
TROPOMI["S5P Column & OpenAQ Correlator"]
GSW["Surface Water Dynamics Engine"]
PipeEng["Declarative In-Memory Pipeline Engine"]
end
end
subgraph Archives["Free Zero-Config Public APIs & STAC Servers"]
AWS["AWS Earth Search STAC (S2, Landsat, Cop-DEM)"]
CDSE["Copernicus Dataspace (Sentinel-1, Sentinel-5P)"]
AIS_API["Digitraffic Baltic Live AIS API"]
NASA_API["NASA FIRMS Open Fire API"]
OPENAQ_API["OpenAQ Air Quality REST API"]
JRC_API["EC JRC Global Surface Water COGs"]
OSM_API["OpenStreetMap Overpass API (Public Infrastructure)"]
end
Clients -->|stdio / SSE / CLI| Server
CLI --> Router
Router --> WorkflowTools
Router --> StandardTools
Router --> PlanetaryTools
WorkflowTools --> Core
StandardTools --> Core
PlanetaryTools --> Core
Core --> Archives💻 User-Defined Pipeline CLI Quickstart
# 1. List available compound hazard recipes
eo-mcp pipeline list
# 2. Inspect recipe steps, parameters, and input/output contracts
eo-mcp pipeline describe coastal_storm_surge_infrastructure_exposure
# 3. Execute pre-built compound hazard recipe
eo-mcp pipeline run --recipe coastal_storm_surge_infrastructure_exposure --location "Valencia, Spain" --format summary
# 4. Export compound multi-hazard GIS layers (RFC 7946 GeoJSON)
eo-mcp pipeline run --recipe compound_wildfire_runoff_risk --location "Rhodes, Greece" --format geojson > wildfire_debris_flow.geojson
# 5. Execute custom user-defined JSON pipeline specification
eo-mcp pipeline run --spec my_pipeline.json --location "Venice, Italy" --format summaryCloud-Native COG Streaming (How it works)
Traditional GIS downloads entire satellite scenes (often 800MB to 1.5GB) before clipping to the study area. When interacting with an AI agent over the internet, downloading gigabytes of data per query creates latency and exhausts disk space.
eo-mcp uses Cloud Optimized GeoTIFF (COG) range streaming:
The server reads the COG header over HTTP (~10KB) to discover internal tile offsets and coordinate projection.
It translates the user's bounding box into pixel window coordinates.
It performs targeted HTTP
Range: bytes=...requests to pull only the pixels covering the bounding box.A typical query transfers 2 MB to 5 MB of data and completes in under 2 seconds.
Flexible Credential Management
eo-mcp is designed with a zero-friction, open-first philosophy:
Zero-Config Default (100% Free): Out of the box,
eo-mcpstreams satellite data from free open government cloud archives (AWS Earth Search, NASA CMR, Copernicus public STAC). No user registration, API keys, or credit cards are needed.First-Class Support for User Credentials: When users or enterprise agents need to access authenticated or proprietary features (such as direct Copernicus CDSE full-granule downloads, NASA Earthdata restricted collections, or Microsoft Planetary Computer signed tokens), credentials can be provided at any time:
Environment Variables (
.env):export CDSE_USERNAME="your-cdse-email" export CDSE_PASSWORD="your-cdse-password" export EARTHDATA_TOKEN="your-nasa-token" export PC_SDK_SUBSCRIPTION_KEY="your-pc-key" export FIRMS_MAP_KEY="your-firms-key"In-Session Dynamic Tool (
configure_credentials): AI agents can invokeconfigure_credentials(provider="cdse", username="...", password="...")dynamically during the conversation without restarting the server.CLI Credential Command:
eo-mcp auth set --provider cdse --username "user@example.com" --password "secret" eo-mcp auth
Scientific Foundation & Literature
All algorithms, spectral indices, radar clutter models, and environmental hazard metrics in eo-mcp are strictly grounded in canonical peer-reviewed scientific literature, geodetic standards, and European space policy frameworks (such as the EU Floods Directive 2007/60/EC, Marine Strategy Framework Directive MSFD Descriptor 8, and EU Climate Adaptation Strategy).
Detailed technical derivations, equations, calibration constants, and validation protocols are documented in docs/methodology/:
Domain & Tool | Methodology Document | Primary Scientific Literature | Policy & Standard Framework |
Optical Spectral Indices | • Rouse et al. (1974) [NASA SP-351]• Tucker (1979) DOI: 10.1016/0034-4257(79)90013-0• McFeeters (1996) DOI: 10.1080/01431169608948714• Gao (1996) DOI: 10.1016/S0034-4257(96)00067-3• Huete et al. (2002) DOI: 10.1016/S0034-4257(02)00096-2 | CEOS Cal/Val Standards | |
Maritime Radar & Dark Vessels | • Finn & Johnson (1968) CA-CFAR• Novak et al. (1993)• Crisp (2004) [DSTO-RR-0272]• Stasolla & Greidanus (2016) DOI: 10.1080/2150704X.2016.1226522• Pelich et al. (2019) DOI: 10.3390/rs11091078• Alpers & Hühnerfuss (1988) DOI: 10.1029/JC093iC04p03642 | MSFD Descriptor 8European Maritime Safety Agency (EMSA) | |
Coastal Erosion & Shorelines | • Xu (2006) MNDWI DOI: 10.1080/01431160600589179• Otsu (1979) DOI: 10.1109/TSMC.1979.4310076• Thieler et al. (2009) DOI: 10.3133/ofr20081278• Himmelstoss et al. (2018) DOI: 10.3133/ofr20181179• Vos et al. (CoastSat, 2019) DOI: 10.1016/j.envsoft.2019.104528 | EU Climate Adaptation StrategyUSGS DSAS Protocol | |
Sea Level Rise Inundation | • Poulter & Halpin (2008) DOI: 10.1080/13658810701371858• Gesch (2009, 2018) DOI: 10.3389/feart.2018.00230• Fox-Kemper et al. (IPCC AR6, 2021) DOI: 10.1017/9781009157896.011 | EU Floods Directive (2007/60/EC Art. 6)IPCC SSP Scenarios | |
Active Wildfires & FRP | • Schroeder et al. (VIIRS 375m, 2014) DOI: 10.1016/j.rse.2013.12.008• Giglio et al. (MODIS C6, 2016) DOI: 10.1016/j.rse.2016.02.054• Wooster (2003) DOI: 10.1016/S0034-4257(03)00070-1• Wooster et al. (2005) DOI: 10.1029/2005JD006318 | EFFIS European Forest Fire Information SystemNASA FIRMS | |
Post-Fire Burn Severity | • Key & Benson (FIREMON dNBR, 2006) [USDA GTR-RMRS-164]• Parks et al. (RBR, 2014) DOI: 10.3390/rs6031827 | USGS & EFFIS Burn Severity Scale | |
Tropospheric Emissions | • Veefkind et al. (TROPOMI, 2012) DOI: 10.1016/j.rse.2011.09.027• van Geffen et al. (2020) DOI: 10.5194/amt-13-1315-2020 | EU Ambient Air Quality Directive (2008/50/EC)EU Methane Regulation (2024/1787) | |
Surface Water & Drought | • Pekel, Cottam, Gorelick, & Belward (2016 Nature) DOI: 10.1038/nature20584 | Water Framework Directive (WFD 2000/60/EC)UN SDG Indicator 6.6.1 | |
Urban Heat Island & LST | • Valor & Caselles (1996) DOI: 10.1016/0034-4257(96)00039-9• Sobrino et al. (2004, 2008) DOI: 10.1016/j.rse.2004.02.003• Jiménez-Muñoz et al. (2009) DOI: 10.1109/TGRS.2008.2007125 | EU Green Deal Climate Resilience | |
Crop Phenology Dynamics | • Reed et al. (1994) DOI: 10.2307/3235884• Zhang et al. (2003) DOI: 10.1016/S0034-4257(02)00135-9• Jönsson & Eklundh (TIMESAT, 2004) DOI: 10.1016/j.cageo.2004.05.006 | Common Agricultural Policy (CAP)Agro-Climatic Monitoring | |
Topography & Radar Hydrology | • Horn (1981) DOI: 10.1109/PROC.1981.11918• Zevenbergen & Thorne (1987) DOI: 10.1002/esp.3290120107• Guth & Geoffroy (2021) DOI: 10.1111/tgis.12825• Twele et al. (2016) DOI: 10.1080/01431161.2016.1192304• Bioresita et al. (2018) DOI: 10.3390/rs10020217 | Copernicus DEM Validation Report (ESA, 2020)Copernicus Emergency Management Service (CEMS) |
For the complete formal bibliography and BibTeX database, inspect docs/methodology/references.md and docs/methodology/references.bib.
Contributing
eo-mcp is an open-source project by sounny.com to establish an open standard for agentic Earth Observation.
Contributions are warmly welcome!
License & Legal
Licensed under the Apache License, Version 2.0. See LICENSE for details.
Available Tools
29 toolsanalyze_coastal_erosionA
Quantify coastal shoreline retreat and erosion rates (m/year) between two observation dates using automated MNDWI waterlines and DSAS baseline transects conforming to USGS DSAS and EU Climate Adaptation standards. Zero-config: Multi-temporal analysis on open Sentinel-2 archives. No credentials or API keys required.
Args: bbox: Bounding box [min_lon, min_lat, max_lon, max_lat] in WGS84. historical_date_range: Baseline date range (e.g. '2019-05-01/2019-08-31'). recent_date_range: Comparison modern date range (e.g. '2024-05-01/2024-08-31'). transect_sample_step: Interval in pixels between perpendicular cross-shore transects (default 5). collection: Satellite collection name ('sentinel-2-l2a' or 'landsat-c2-l2'). format: Output format ('summary', 'geojson', or 'csv').
Returns: JSON or formatted string with transect measurements, End Point Rate (m/year), hazard classification, and eroding coastline percentage.
References:
Xu, H. (2006). International Journal of Remote Sensing, 27(14), 3025-3033. DOI: 10.1080/01431160600589179
Otsu, N. (1979). IEEE Transactions on Systems, Man, and Cybernetics, 9(1), 62-66. DOI: 10.1109/TSMC.1979.4310076
Thieler, E. R., et al. (2009). USGS Open-File Report 2008-1278. DOI: 10.3133/ofr20081278
Vos, K., et al. (2019). Environmental Modelling & Software, 122, 104528. DOI: 10.1016/j.envsoft.2019.104528
Inputs: bbox (required), recent_date_range (required), historical_date_range (required), format, +2 more. Returns: result
analyze_reservoir_droughtA
Analyze reservoir surface water shrinkage and drought dynamics using multi-temporal optical imagery and EC JRC Global Surface Water parameters. Zero-config: Multi-year surface water depletion analysis. No credentials or API keys required.
Args: bbox: Bounding box [min_lon, min_lat, max_lon, max_lat] in WGS84. historical_year: Baseline year (default 2019). recent_year: Comparison year (default 2024). format: Output format ('summary', 'geojson', or 'csv').
Returns: Historical vs modern water surface area (ha, km²), net water loss, percentage deficit, seasonal vs permanent transition breakdown, and drought severity classification.
References:
Pekel, J.-F., Cottam, A., Gorelick, N., & Belward, A. S. (2016). Nature, 540(7633), 418-422. DOI: 10.1038/nature20584
Inputs: bbox (required), format, recent_year, historical_year. Returns: result
analyze_urban_heat_islandA
Compute Land Surface Temperature (LST in °C) and map Urban Heat Island (UHI) microclimate hotspots using Landsat 8/9 Thermal Infrared (TIRS Band 10) and NDVI-derived surface emissivity. Zero-config: Streams public Landsat surface reflectance and thermal data without credentials.
Args: bbox: Bounding box [min_lon, min_lat, max_lon, max_lat] in WGS84. datetime_range: Acquisition date window during warm season (e.g. '2024-06-01/2024-08-31'). format: Output format ('summary', 'geojson', or 'csv').
Returns: JSON or formatted string with mean/min/max LST (°C), UHI intensity (delta °C), thermal hotspot area (ha), cool island buffer area, and thermal risk classification.
References:
Valor, E., & Caselles, V. (1996). Remote Sensing of Environment, 57(3), 167-184. DOI: 10.1016/0034-4257(96)00039-9
Sobrino, J. A., et al. (2004). Remote Sensing of Environment, 90(4), 434-440. DOI: 10.1016/j.rse.2004.02.003
Jiménez-Muñoz, J. C., et al. (2009). IEEE TGRS, 47(1), 339-349. DOI: 10.1109/TGRS.2008.2007125
Inputs: bbox (required), format, datetime_range. Returns: result
assess_location_hazardA
Ergonomic All-in-One Planetary Hazard Assessment ("Create with Compute" pattern).
Bundles geocoding, STAC discovery, optimal scene filtering, and specialized hazard modeling into a single turnkey call. Replaces 4-6 manual tool calls.
Args: location: City/region name ('Valencia, Spain', 'Rhodes, Greece') or bbox 'min_lon, min_lat, max_lon, max_lat'. hazard_type: Type of hazard to evaluate: - 'flood_inundation' / 'sea_level_rise': Sea-level rise and storm surge inundation (EU Floods Directive). - 'wildfire': Active fires, Fire Radiative Power (FRP), and perimeter clustering (EFFIS). - 'burn_severity': Multi-temporal dNBR and post-fire scar analysis (EFFIS/USGS). - 'coastal_erosion': Shoreline retreat rates in m/year via baseline transects (EU Climate Adaptation). - 'drought': Freshwater depletion and reservoir margin desiccation (EU Water Framework Directive). - 'urban_heat': Land surface temperature and urban heat island intensity. - 'dark_vessels': Radar vessel detection and AIS correlation (MSFD Descriptor 8). datetime_range: Optional date or date range string (e.g. '2024-07-01/2024-07-31'). format: Output format ('summary', 'geojson', or 'csv'). water_level_rise_m: Projected sea-level rise in meters for flood inundation (default 1.0m). storm_surge_m: Additional storm surge water elevation in meters (default 0.0m). scenario: Optional IPCC AR6 preset ('SSP1-2.6', 'SSP2-4.5', or 'SSP5-8.5'). days: Historical lookback days for active wildfire monitoring (default 2).
Returns: JSON string or formatted report with end-to-end hazard metrics and resolved location context.
References:
Fox-Kemper, B., et al. (2021). IPCC AR6 WGI Chapter 9. DOI: 10.1017/9781009157896.011
Key, C. H., & Benson, N. C. (2006). USDA Forest Service RMRS-GTR-164-CD, pp. LA 1-55.
Schroeder, W., et al. (2014). Remote Sensing of Environment, 143, 85-96. DOI: 10.1016/j.rse.2013.12.008
Thieler, E. R., et al. (2009). USGS Open-File Report 2008-1278. DOI: 10.3133/ofr20081278
Inputs: location (required), hazard_type (required), days, format, +4 more. Returns: result
calculate_burn_severityA
Quantify post-fire burn severity and vegetation destruction using the Normalized Burn Ratio Difference (dNBR) from pre-fire and post-fire Sentinel-2 (NIR B08 and SWIR22 B12) observations. Zero-config: Streams public COG tiles without credentials. Classifies according to USGS & EFFIS fire standards.
Args: bbox: Bounding box [min_lon, min_lat, max_lon, max_lat] in WGS84. pre_fire_date_range: Date range prior to the wildfire (e.g. '2023-06-01/2023-06-30'). post_fire_date_range: Date range immediately following the wildfire (e.g. '2023-08-01/2023-08-31'). collection: Satellite collection ('sentinel-2-l2a' or 'landsat-c2-l2'). format: Output format ('summary', 'geojson', or 'csv').
Returns: JSON or formatted string with mean/max dNBR, total burned area (ha), severity zone breakdown, and EFFIS damage rating.
References:
Key, C. H., & Benson, N. C. (2006). USDA Forest Service RMRS-GTR-164-CD, pp. LA 1-55.
Parks, S. A., Dillon, G. K., & Miller, C. (2014). Remote Sensing, 6(3), 1827-1844. DOI: 10.3390/rs6031827
Inputs: bbox (required), pre_fire_date_range (required), post_fire_date_range (required), format, +1 more. Returns: result
calculate_spectral_indexA
Autonomously stream satellite bands via Cloud-Optimized GeoTIFF HTTP range reads and compute a spectral index (NDVI, NDWI, NBR, or EVI) for an Area of Interest (AOI). Zero-config: Streams public COG bands via open HTTP range reads. No API keys or Copernicus account required.
Args: collection: Satellite collection name ('sentinel-2-l2a' or 'landsat-c2-l2'). index: Index name ('NDVI', 'NDWI', 'NBR', or 'EVI'). bbox: Bounding box [min_lon, min_lat, max_lon, max_lat] in WGS84. datetime_range: Target date or range (e.g. '2024-06-01/2024-06-30'). max_cloud_cover: Max allowed cloud cover percentage. Default is 15.0.
Returns: JSON string with summary statistics, pixel count, and ASCII spatial density visualization.
References:
Rouse et al. (1974), NASA SP-351, 1, 309-317.
Tucker, C. J. (1979). Remote Sensing of Environment, 8(2), 127-150. DOI: 10.1016/0034-4257(79)90013-0
McFeeters, S. K. (1996). International Journal of Remote Sensing, 17(7), 1425-1432. DOI: 10.1080/01431169608948714
Key, C. H., & Benson, N. C. (2006). USDA Forest Service RMRS-GTR-164-CD, pp. LA 1-55.
Inputs: bbox (required), index (required), collection (required), datetime_range (required), +1 more. Returns: result
configure_credentialsA
Dynamically configure optional credentials for government satellite providers (CDSE, NASA Earthdata, Planetary Computer, FIRMS). Optional: standard zero-config public access works out-of-the-box without credentials. Providing credentials unlocks official full-granule archive downloads and higher rate limits.
Args: provider: 'cdse' (Copernicus Data Space Ecosystem), 'earthdata' (NASA), 'planetary_computer' (Microsoft), or 'firms'. username: Username or email (required for CDSE). password: Password (required for CDSE). token_or_key: API token or subscription key (for Earthdata, Planetary Computer, or FIRMS).
Returns: JSON string with credential configuration status and verified capabilities.
Inputs: provider (required), password, username, token_or_key. Returns: result
describe_pipeline_recipeB
Retrieve the detailed configuration, parameters, and step sequence for a pipeline recipe.
Args: recipe_name: Name of the recipe (e.g. 'compound_wildfire_runoff_risk', 'coastal_storm_surge_infrastructure_exposure').
Returns: JSON string with recipe specification and step definitions.
Inputs: recipe_name (required). Returns: result
detect_active_wildfiresA
Detect active wildfires and thermal anomalies from open NASA FIRMS feeds (VIIRS / MODIS) and delineate clustered fire perimeters with Fire Radiative Power (MW) and fire danger classification. Zero-config: Uses open NASA FIRMS feeds. No credentials or API keys required.
Args: bbox: Bounding box [min_lon, min_lat, max_lon, max_lat] in WGS84. days: Observation lookback in days (1 to 10). Default is 2. source: Sensor product ('VIIRS_NOAA20_NRT', 'VIIRS_SNPP_NRT', or 'MODIS_NRT'). format: Output format ('summary', 'geojson', or 'csv').
Returns: Hotspot locations, Fire Radiative Power (MW), brightness temperature (K), clustered fire perimeters, and EFFIS fire danger rating.
References:
Schroeder, W., et al. (2014). Remote Sensing of Environment, 143, 85-96. DOI: 10.1016/j.rse.2013.12.008
Giglio, L., et al. (2016). Remote Sensing of Environment, 178, 31-41. DOI: 10.1016/j.rse.2016.02.054
Wooster, M. J. (2003). Remote Sensing of Environment, 86(1), 83-107. DOI: 10.1016/S0034-4257(03)00070-1
Inputs: bbox (required), days, format, source. Returns: result
detect_dark_vesselsA
Detect maritime vessels in Sentinel-1 SAR imagery and correlate them with open AIS transponder data to flag unreported 'Dark Vessels' conforming to European Maritime Security and MSFD Descriptor 8 standards. Zero-config: Queries public Sentinel-1 and open AIS telemetry without credentials or API keys.
Args: bbox: Bounding box [min_lon, min_lat, max_lon, max_lat] in WGS84. datetime_range: Date or date range (e.g. '2024-06-01/2024-06-30'). ais_source: 'open_baltic_api' to query live Finnish/Baltic public marine AIS endpoint, or 'custom'. pfa_factor: CFAR threshold sensitivity multiplier above ocean clutter standard deviation (default 3.2). sea_state: Ocean roughness condition ('calm', 'moderate', 'rough', or 'auto' for adaptive clutter tuning). custom_ais_records: Optional user-supplied list of AIS dicts ({mmsi, lat, lon, speed_knots, course_deg}). format: Output format ('summary', 'geojson', or 'csv').
Returns: Classified vessels: TRUSTED (AIS matched), DARK_VESSEL (SAR target with no AIS), and SPOOF_OR_ABSENT (AIS broadcast with no radar reflector), with oil slick alerts.
References:
Finn, H. M., & Johnson, R. S. (1968). RCA Review, 29(3), 414-464.
Crisp, D. J. (2004). DSTO Research Report DSTO-RR-0272.
Stasolla, M., & Greidanus, H. (2016). Remote Sensing Letters, 7(12), 1219-1228. DOI: 10.1080/2150704X.2016.1226522
Pelich, R., et al. (2019). Remote Sensing, 11(9), 1078. DOI: 10.3390/rs11091078
Alpers, W., & Hühnerfuss, H. (1988). Journal of Geophysical Research: Oceans, 93(C4), 3642-3648. DOI: 10.1029/JC093iC04p03642
Inputs: bbox (required), datetime_range (required), format, sea_state, +3 more. Returns: result
detect_water_sarA
Perform all-weather surface water and flood inundation mapping using Sentinel-1 C-band SAR radar backscatter. Zero-config: Runs out-of-the-box without requiring API keys or user credentials.
Args: bbox: Bounding box [min_lon, min_lat, max_lon, max_lat] in WGS84. datetime_range: Acquisition date range (e.g. '2024-06-01/2024-06-30'). threshold_db: Backscatter threshold in decibels below which pixels are classified as water. Default is -16.0 dB.
Returns: JSON string with detected surface water percentage and backscatter characteristics.
References:
Twele, A., et al. (2016). International Journal of Remote Sensing, 37(13), 2990-3004. DOI: 10.1080/01431161.2016.1192304
Bioresita, F., et al. (2018). Remote Sensing, 10(2), 217. DOI: 10.3390/rs10020217
Inputs: bbox (required), datetime_range (required), threshold_db. Returns: result
discover_eo_toolsA
Search and progressively discover eo-mcp tools across categories. Implements the client-side progressive discovery pattern (search, inspect, execute) recommended for modern MCP clients (Claude Code, Codex, Cursor, Antigravity).
Categories:
'workflows': Ergonomic multi-step tools (assess_location_hazard, environmental_site_audit).
'core': Fundamental spatial discovery and geocoding.
'spectral': Optical band indices (NDVI, NDWI, NBR, EVI) and SAR backscatter.
'hazards': Wildfire, flood inundation, burn severity, coastal erosion.
'climate': Urban heat, drought, crop phenology, atmospheric emissions.
'maritime': Dark vessel tracking, radar detection, and AIS correlation.
'advanced': Custom geospatial Python script runner and CDSE downloads.
Args: category: Optional category name to filter tools. query: Optional search keyword to filter tool names and descriptions.
Returns: JSON string listing available tools, categories, descriptions, and active profile.
Inputs: query, category. Returns: result
download_copernicus_granuleA
Generate an authenticated download URL and curl command to download an official full Sentinel/Copernicus product package from the Copernicus Data Space Ecosystem (CDSE). Requires CDSE credentials (username/password) configured via environment variables or configure_credentials().
Args: product_id: Official Copernicus Product UUID or name (e.g. 'S2A_MSIL2A_20240618T105631_N0510_R094_T31TDF_20240618T164223').
Returns: JSON string with verified download endpoint, authorization header, and execution instructions.
Inputs: product_id (required). Returns: result
environmental_site_auditA
Ergonomic Composite Environmental Site Audit ("Create with Compute" pattern).
Produces a holistic environmental and climate scorecard for any city or region:
Vegetation Vitality (NDVI stats & canopy vigor)
Surface Water & Moisture (NDWI stats)
Topography & Elevation Dynamics (Copernicus DEM min/mean/max/slope)
Thermal & Flood Hazard Vulnerability Indicators
Args: location: City/region name ('Valencia, Spain', 'Ames, Iowa') or bbox 'min_lon, min_lat, max_lon, max_lat'. datetime_range: Observation window for satellite pass search (default summer 2024). format: Output format ('summary' or 'geojson').
Returns: JSON string with executive environmental scorecard and multi-layer indicators.
References:
Tucker, C. J. (1979). Remote Sensing of Environment, 8(2), 127-150. DOI: 10.1016/0034-4257(79)90013-0
McFeeters, S. K. (1996). International Journal of Remote Sensing, 17(7), 1425-1432. DOI: 10.1080/01431169608948714
Guth, P. L., & Geoffroy, T. M. (2021). Transactions in GIS, 25(5), 2245-2261. DOI: 10.1111/tgis.12825
Inputs: location (required), format, datetime_range. Returns: result
eo_geocodeA
Geocode a natural language place name into a standard WGS84 bounding box.
Args: place_name: Location name, city, or geographic feature (e.g. 'Valencia, Spain', 'Lake Tahoe', 'Imperial Valley').
Returns: JSON string with resolved display_name, center coordinates, and [min_lon, min_lat, max_lon, max_lat] bbox.
Inputs: place_name (required). Returns: result
export_geolibre_projectA
Export a native GeoLibre project configuration file (.geolibre / .json). Allows one-click importing of eo-mcp analysis layers directly into GeoLibre Desktop (Tauri) or Web (geolibre.app).
Args: title: Project title. bbox: Bounding box [min_lon, min_lat, max_lon, max_lat]. layers: Optional JSON string of layer specifications or GeoJSON layer references. output_json_path: Optional destination file path (e.g. 'valencia_flood.geolibre'). basemap_theme: Basemap style ('dark', 'positron', 'voyager', 'satellite').
Returns: JSON string of GeoLibre project definition or file confirmation.
Inputs: bbox (required), title (required), layers, basemap_theme, +1 more. Returns: result
export_interactive_mapA
Generate a standalone interactive MapLibre GL JS HTML application from hazard results. Bridges eo-mcp planetary analytics with rich client-side GIS visualization (compatible with GeoLibre).
Features:
Dark titanium glassmorphic UI overlay
Interactive vector layers (points, polygons, lines) with attribute inspection popups
3D perspective pitch toggle and responsive bounding box fitting
Args: title: Title of the map application (e.g. 'Valencia Flood Inundation Assessment'). bbox: Bounding box [min_lon, min_lat, max_lon, max_lat] in WGS84. geojson: Optional GeoJSON FeatureCollection string (from any eo-mcp hazard tool). hazard_type: Optional hazard descriptor ('flood', 'wildfire', 'vessels', 'erosion', 'opera'). output_html_path: Optional file path to save HTML directly to disk.
Returns: Confirmation JSON with file path and status, or HTML content preview.
Inputs: bbox (required), title (required), geojson, hazard_type, +1 more. Returns: result
get_credential_statusA
Inspect the current status of all satellite provider credentials, zero-config mode, and active capabilities.
Returns: JSON string detailing configured accounts (masked for privacy) and unlocked satellite APIs.
Inputs: no named parameters. Returns: result
get_elevation_profileA
Extract digital elevation (in meters) and terrain slope from the gold-standard Copernicus DEM GLO-30. Zero-config: Queries Copernicus DEM GLO-30 from open AWS STAC. No API keys or credentials required.
Args: bbox: Bounding box [min_lon, min_lat, max_lon, max_lat] in WGS84. calculate_slope: If True, computes mean and maximum terrain slope in degrees.
Returns: JSON string with min, max, and mean elevation (m), slope statistics, and ASCII elevation contour map.
References:
Horn, B. K. P. (1981). Proceedings of the IEEE, 69(1), 14-47. DOI: 10.1109/PROC.1981.11918
Guth, P. L., & Geoffroy, T. M. (2021). Transactions in GIS, 25(5), 2245-2261. DOI: 10.1111/tgis.12825
European Space Agency. (2020). Copernicus DEM Validation Report v4.0.
Inputs: bbox (required), calculate_slope. Returns: result
list_pipeline_recipesA
List available pre-built compound hazard and multi-spectral pipeline recipes.
Returns: JSON string cataloging recipe names, descriptions, categories, and step counts.
Inputs: no named parameters. Returns: result
list_supported_collectionsA
List all supported open satellite collections, spatial resolutions, available spectral bands, and STAC sources.
Returns: JSON string detailing open data collections available in eo-mcp.
Inputs: no named parameters. Returns: result
monitor_atmospheric_emissionsA
Monitor atmospheric trace gas emissions (NO2, SO2, CO, CH4 Methane) using Sentinel-5P TROPOMI tropospheric column densities correlated with open OpenAQ ground station validation. Zero-config: Uses open Sentinel-5P & OpenAQ telemetry. No API keys or credentials required.
Args: bbox: Bounding box [min_lon, min_lat, max_lon, max_lat] in WGS84. gas: Target trace gas ('NO2', 'CH4', 'SO2', or 'CO'). Default is 'NO2'. datetime_range: Acquisition date window (e.g. '2024-06-01/2024-06-30'). format: Output format ('summary', 'geojson', or 'csv').
Returns: Tropospheric column densities (mean/max), plume detection status, EU directive compliance, and correlated ground station measurements.
References:
Veefkind, J. P., et al. (2012). Remote Sensing of Environment, 120, 70-83. DOI: 10.1016/j.rse.2011.09.027
van Geffen, J., et al. (2020). Atmospheric Measurement Techniques, 13(3), 1315-1335. DOI: 10.5194/amt-13-1315-2020
Inputs: bbox (required), gas, format, datetime_range. Returns: result
monitor_crop_phenologyA
Monitor agricultural crop phenology, growth trajectories, and vegetative anomalies across seasonal cycles. Tracks Start of Season (SOS), Peak of Season (POS), End of Season (EOS), and drought stress vs baseline. Zero-config: Automatically samples cloud-free Sentinel-2 observations across the agricultural calendar.
Args: bbox: Bounding box [min_lon, min_lat, max_lon, max_lat] in WGS84. year: Observation year (default 2024). crop_type: Optional crop descriptor (e.g. 'Wheat', 'Maize', 'Vineyard', 'Olives'). format: Output format ('summary', 'geojson', or 'csv').
Returns: JSON or formatted string with Start/Peak/End of Season dates, peak NDVI, seasonal biomass proxy, and crop vigor anomaly evaluation.
References:
Reed, B. C., et al. (1994). Journal of Vegetation Science, 5(5), 703-714. DOI: 10.2307/3235884
Zhang, X., et al. (2003). Remote Sensing of Environment, 84(3), 471-475. DOI: 10.1016/S0034-4257(02)00135-9
Jönsson, P., & Eklundh, L. (2004). Computers & Geosciences, 30(8), 833-845. DOI: 10.1016/j.cageo.2004.05.006
Inputs: bbox (required), year, format, crop_type. Returns: result
query_nasa_operaA
Search and inspect NASA JPL OPERA (Observational Products for End-Users from Remote Sensing Analysis) datasets.
Supported Products:
'dswx': Dynamic Surface Water Extent from HLS (30m). Delineates open water, partial water, and flooded vegetation.
'dist': Surface Disturbance Alert from HLS (30m). Detects vegetation loss, wildfire scars, and deforestation.
'rtc': Radiometric Terrain Corrected SAR from Sentinel-1 (30m). Normalized C-band backscatter for all-weather mapping.
Args: bbox: Bounding box [min_lon, min_lat, max_lon, max_lat] in WGS84. datetime_range: Observation date or range (e.g. '2024-06-01/2024-06-30'). product_type: Product line ('dswx', 'dist', 'rtc'). max_cloud_cover: Cloud cover threshold (0 - 100). limit: Max scenes to discover. format: Output format ('summary' or 'geojson').
Returns: JSON string containing discovered OPERA granules, asset URLs (COGs), and coverage metadata.
Inputs: bbox (required), datetime_range (required), limit, format, +2 more. Returns: result
query_spatial_sqlA
Execute spatial SQL queries on GeoJSON FeatureCollections or tabular geospatial metadata. Modeled after GeoLibre's DuckDB Spatial query panel.
Supports:
Standard SQL: SELECT, WHERE, GROUP BY, ORDER BY, LIMIT
Spatial Predicates: ST_Area, ST_Centroid, ST_Length, ST_Intersects
Args: sql: SQL query string (e.g. "SELECT id, severity, ST_Area(geom) as area_ha FROM features WHERE severity = 'HIGH'") geojson: GeoJSON FeatureCollection string (from any eo-mcp tool). table_name: Virtual table name (default 'features').
Returns: JSON string containing result columns, rows, and matched feature count.
Inputs: sql (required), geojson (required), table_name. Returns: result
run_geospatial_scriptA
Execute an arbitrary agent-generated Python geospatial processing script.
The sandbox comes pre-loaded with rasterio, numpy (as np), shapely,
and standard mathematical tools.
Args: script_code: Valid Python code string to execute.
Returns: JSON string with script execution status, stdout, stderr, and exported variables.
Inputs: script_code (required). Returns: result
run_pipelineA
Execute a declarative multi-step Earth Observation processing pipeline or pre-built recipe. Empowers users and AI agents to compose custom multi-hazard workflows without self-hosted infrastructure.
Pre-built Recipes:
'compound_wildfire_runoff_risk': Wildfire burn severity (dNBR) + DEM slope gradient -> Debris flow risk
'coastal_storm_surge_infrastructure_exposure': Copernicus DEM + SLR + surge -> OSM transport & hospital exposure
'agricultural_drought_thermal_stress': Sentinel-2 NDVI + Land Surface Temp + Surface water shrinkage
'maritime_environmental_patrol': Sentinel-1 SAR CFAR + Live Baltic AIS + Low-backscatter oil slick delineation
Or pass a custom declarative JSON specification defining steps:
'fetch_raster': Copernicus DEM or Sentinel-2 / Landsat windowed COG
'spectral_index': NDVI, NDWI, MNDWI, NBR
'terrain_analysis': Slope gradient, aspect, elevation stats
'inundation_model': 8-connected bathtub flood simulation
'wildfire_activity': NASA FIRMS active hotspots and perimeters
'burn_severity': Multi-temporal dNBR calculation
'maritime_sar_ais': SAR CFAR detection and AIS correlation
'exposure_overlay': Intersect hazard zone with OpenStreetMap roads and critical facilities
'compound_risk_synthesis': Weighted multi-hazard score and EU Directive alignment
Args: spec: Pre-built recipe name (e.g. 'compound_wildfire_runoff_risk') or JSON string containing pipeline definition. location: Optional location name ('Valencia, Spain') or bbox 'min_lon,min_lat,max_lon,max_lat'. format: Output format: 'summary' (JSON report with ASCII map), 'geojson' (RFC 7946), or 'csv'. parameters: Optional JSON string of parameter overrides (e.g. '{"water_level_rise_m": 1.8, "storm_surge_m": 0.5}').
Returns: Formatted summary JSON, GeoJSON FeatureCollection, or CSV string.
Inputs: spec (required), format, location, parameters. Returns: result
simulate_sea_level_riseA
Simulate coastal sea-level rise and storm surge inundation using Copernicus DEM GLO-30 and hydrologically connected flood-fill modeling conforming to the EU Floods Directive (2007/60/EC Art. 6). Zero-config: Streams Copernicus DEM GLO-30 from open AWS STAC. No API keys or credentials required.
Args: bbox: Bounding box [min_lon, min_lat, max_lon, max_lat] in WGS84. water_level_rise_m: Projected sea-level rise in meters (default 1.0m). storm_surge_m: Additional storm surge water elevation in meters (default 0.0m). scenario: Optional IPCC AR6 preset ('SSP1-2.6', 'SSP2-4.5', or 'SSP5-8.5'). format: Output format ('summary', 'geojson', or 'csv').
Returns: JSON or formatted string with submerged land area (ha, km²), percentage inundated, mean/max depth, hazard zone breakdown, and ASCII flood distribution map.
References:
Poulter, B., & Halpin, P. N. (2008). International Journal of Geographical Information Science, 22(2), 167-182. DOI: 10.1080/13658810701371858
Gesch, D. B. (2018). Frontiers in Earth Science, 6, 230. DOI: 10.3389/feart.2018.00230
Fox-Kemper, B., et al. (2021). IPCC AR6 WGI Chapter 9. DOI: 10.1017/9781009157896.011
Inputs: bbox (required), format, scenario, storm_surge_m, +1 more. Returns: result
stac_searchA
Search free STAC catalogs for available satellite scenes matching spatial, temporal, and cloud criteria. Zero-config: Queries public STAC endpoints with zero credentials or API keys required.
Args: collections: List of collection IDs, e.g. ['sentinel-2-l2a'] or ['landsat-c2-l2']. bbox: Bounding box [min_lon, min_lat, max_lon, max_lat] in WGS84 coordinates. datetime_range: RFC3339 date or date range string (e.g. '2024-06-01/2024-06-30' or '2024-05-15'). max_cloud_cover: Maximum allowed cloud cover percentage (0 - 100). Default is 20.0. catalog_url: STAC API root endpoint URL. Defaults to AWS Earth Search. limit: Maximum number of scenes to return. Default is 5.
Returns: JSON string listing discovered satellite scenes, dates, cloud cover, and asset keys.
Inputs: bbox (required), collections (required), datetime_range (required), limit, +2 more. Returns: result
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 29 tools
The specialist hazard tools are clearly distinguished by target and method, but assess_location_hazard, environmental_site_audit, and run_pipeline re-express many of the same operations as one-call workflows. An agent has to choose between composite and granular routes for the same analysis, though the detailed descriptions make the differences navigable.
Most tools follow a clear snake_case verb_noun pattern such as detect_dark_vessels, simulate_sea_level_rise, and export_interactive_map. A few names break the pattern like stac_search, eo_geocode, and environmental_site_audit, but this is a minor inconsistency rather than a chaotic mix.
29 tools is above the comfortable navigation range for an MCP surface, and the count is inflated by composite workflow tools that largely duplicate the specialist hazard analyzers. While the domain is broad, the same coverage could be achieved with a tighter, more clearly layered set.
The server covers the full advertised EO workflow: collection discovery, STAC search, geocoding, spectral and terrain analysis, each advertised hazard type, pipelines, credential management, raw granule download, and export and visualization options. There are no obvious dead ends for the stated hazard-monitoring domain.
Maintenance
Related MCP Connectors
Geospatial AI MCP server — satellite imagery, embeddings, weather, GNS governance
One API key, dozens of capabilities for your AI agent. Zero provider auth.
Environmental intelligence for AI agents — climate, carbon, methane. Quote-first, prepaid.
GIS tools for AI agents: 65 free tools + 8 paid (hazard/site-scouting/GeoJSON export)
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceProduction-ready satellite imagery analysis server that enables natural language queries for Earth observation data, including land cover classification, vegetation monitoring, water detection, change detection, and automated environmental reporting.MIT
- AlicenseBqualityCmaintenanceProvides sovereign geospatial awareness by wrapping open, non-US-dependent geospatial APIs for AI-agent situational awareness, environmental compliance, and disaster response.532 PyPIMIT
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to search, compare pricing, and order satellite imagery from 150+ satellites across 12+ providers via natural language.MIT
- AlicenseAqualityBmaintenanceEnables AI agents to query Earth observation data, satellite imagery, active fires, and weather via natural language, returning interactive maps and briefs.12MIT