eo-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| CDSE_PASSWORD | No | Your Copernicus Data Space Ecosystem (CDSE) password for optional full-granule downloads. | |
| CDSE_USERNAME | No | Your Copernicus Data Space Ecosystem (CDSE) email/username for optional full-granule downloads. | |
| EARTHDATA_TOKEN | No | Your NASA Earthdata token for optional full-granule downloads. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| 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:
|
| environmental_site_auditA | Ergonomic Composite Environmental Site Audit ("Create with Compute" pattern). Produces a holistic environmental and climate scorecard for any city or region:
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:
|
| 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:
Or pass a custom declarative JSON specification defining steps:
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. |
| 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. |
| 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. |
| 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:
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. |
| 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. |
| 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. |
| 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:
|
| 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:
|
| 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:
|
| run_geospatial_scriptA | Execute an arbitrary agent-generated Python geospatial processing script.
The sandbox comes pre-loaded with Args: script_code: Valid Python code string to execute. Returns: JSON string with script execution status, stdout, stderr, and exported variables. |
| 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. |
| 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:
|
| analyze_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:
|
| 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:
|
| 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:
|
| 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:
|
| 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:
|
| 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. |
| 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. |
| 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. |
| 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:
|
| 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:
|
| 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:
|
| query_nasa_operaA | Search and inspect NASA JPL OPERA (Observational Products for End-Users from Remote Sensing Analysis) datasets. Supported Products:
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. |
| 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:
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. |
| 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. |
| query_spatial_sqlA | Execute spatial SQL queries on GeoJSON FeatureCollections or tabular geospatial metadata. Modeled after GeoLibre's DuckDB Spatial query panel. Supports:
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. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 29 tools
Most tools have clearly distinct purposes, but there is overlap between the bundled assess_location_hazard and individual hazard tools like simulate_sea_level_rise or detect_active_wildfires, which could cause misselection if an agent doesn't read descriptions carefully. Detailed descriptions mitigate ambiguity, so the set is mostly distinct.
Tool names mix verb-first patterns (detect_active_wildfires, analyze_coastal_erosion) with noun-first patterns (stac_search, query_nasa_opera) and some phrasal names (assess_location_hazard, run_pipeline). While readable, the inconsistency makes predicting tool names from purpose harder.
With 29 tools, the server exceeds the typical well-scoped range and feels heavy, even for a broad EO domain. Many hazard-specific tools could be consolidated under the bundled assess_location_hazard, reducing the surface area.
The tool set covers a wide range of Earth observation analyses, including multiple hazard types, spectral indices, terrain, exports, and custom script execution, with few obvious dead ends. Minor gaps like soil moisture or land cover classification exist, but the surface is comprehensive for its stated purpose.