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-mcpshow 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
| Name | Required | Description | Default |
|---|---|---|---|
| bbox | Yes | ||
| format | No | summary | |
| collection | No | sentinel-2-l2a | |
| recent_date_range | Yes | ||
| transect_sample_step | No | ||
| historical_date_range | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the disclosure burden and does so well: it states that no credentials are needed, identifies the automated processing methods, and lists the returned measurements and classifications. It stops short of discussing failure modes or operational constraints, though none are obviously critical for this analysis tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well structured with a clear lead sentence, an Args block, a Returns block, and references. The references add scientific authority but are the least actionable part for an agent; overall the length is reasonable for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a six-parameter tool with no schema-level descriptions, the description supplies everything needed to invoke it: argument semantics, examples, defaults, output content, and authentication status. The presence of an output schema further reduces the need to document return structure, and nothing required for a correct call is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description is the only source of parameter meaning; it fully compensates by documenting all six parameters, including bbox order and CRS, date-range format examples, transect step units, collection options, and output formats. This is exactly the value the schema lacks.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific action and object: 'Quantify coastal shoreline retreat and erosion rates (m/year) between two observation dates', and reinforces it with the method (MNDWI waterlines, DSAS transects). This is clearly distinct from sibling tools like simulate_sea_level_rise or detect_water_sar, and the pair of date ranges anchors the exact workflow.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear applicable context: multi-temporal analysis on open Sentinel-2 archives, zero-config, no credentials required, and a before/after date-range scenario. It does not explicitly state when not to use it or name alternative tools, so it falls short of a full routing guide.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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
| Name | Required | Description | Default |
|---|---|---|---|
| bbox | Yes | ||
| format | No | summary | |
| recent_year | No | ||
| historical_year | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the burden. It states the tool is zero-config and requires no credentials, which is useful, but does not disclose potential rate limits, data sources beyond the reference, or any limitations (e.g., reliance on cloud-free imagery). The description mentions the reference but not what happens with no data available.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is structured with a clear intro, arguments, returns, and references. It is front-loaded with the core purpose and zero-config note. Every sentence adds value: the 'Returns' section informs the user of the output fields, and the reference adds scientific credibility. No fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema is present, so the description doesn't need to explain return format in detail, but it does anyway. It covers all parameters, zero-config requirements, and provides the data source reference. For a moderately complex tool with 4 parameters, this is complete. Missing details like coordinate range are minor given the schema's existence.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must explain parameters. It does explain bbox, historical_year, recent_year, and format in simple terms, but it doesn't specify allowed values for format (summary, geojson, csv) or coordinate range for bbox. It adds meaning over the schema, which is good, but could be more explicit.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool analyzes reservoir surface water shrinkage and drought dynamics using multi-temporal optical imagery, and names the specific EC JRC Global Surface Water parameters. It distinguishes itself from related tools like detect_water_sar by focusing on multi-year drought analysis rather than single-time water detection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions 'Zero-config' and 'No credentials required', which implies ease of use without alternatives. It does not explicitly state when not to use it, but given the tool's unique focus on drought dynamics, the context is clear. It could name a sibling alternative but is not misleading.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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
| Name | Required | Description | Default |
|---|---|---|---|
| bbox | Yes | ||
| format | No | summary | |
| datetime_range | No | 2024-06-01/2024-08-31 |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It explicitly discloses the zero-config behavior, 'Streams public Landsat surface reflectance and thermal data without credentials,' and describes the return shape. It does not mention rate limits or side effects, but the tool is an analysis operation on public data and the disclosed auth/streaming behavior is materially useful.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and zero-config behavior, then cleanly structured into Args, Returns, and References. The References section with three full citations is arguably unnecessary for tool invocation, which keeps it from a 5, but the overall length and formatting are still reasonable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a fairly complex remote-sensing tool, the description covers the data source, authentication behavior, all parameters, and expected outputs (mean/min/max LST, UHI intensity, hotspot area, classification). The presence of an output schema and defaults in the input schema further reduces missing information, so an agent has enough to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must fully document parameters. It does: bbox is defined as '[min_lon, min_lat, max_lon, max_lat] in WGS84,' datetime_range has a concrete example, and format enumerates all three allowed values ('summary', 'geojson', or 'csv'). This exceeds what the input schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence states a specific verb+resource: '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.' This clearly distinguishes it from sibling EO tools because no other sibling is described as an LST/UHI analysis. It also names the exact data source and method, leaving no ambiguity about the tool's purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear usage context: use this tool when you need LST/UHI outputs from Landsat data, with examples such as 'Acquisition date window during warm season (e.g. '2024-06-01/2024-08-31').' It does not explicitly name alternatives or when-not conditions, but the context is strong enough for an agent to choose this tool over unrelated siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| format | No | summary | |
| location | Yes | ||
| scenario | No | ||
| hazard_type | Yes | ||
| storm_surge_m | No | ||
| datetime_range | No | ||
| water_level_rise_m | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry full behavioral disclosure. It explains the internal pipeline (geocoding, discovery, filtering, modeling) and return format, and lists method references. Yet it omits key operational traits like requiring pre-configured credentials (a configure_credentials sibling exists), potential latency or rate limits, and whether large data downloads occur, leaving gaps for a complex tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-organized: purpose paragraph, args list, returns section, and references. It front-loads the aggregating purpose and then details each parameter, which is appropriate given the tool's complexity and 0% schema coverage. The references section adds scientific credibility but is arguably non-essential for invocation, making it slightly verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's 8 parameters, no annotations, and an output schema, the description covers the parameter set thoroughly, provides examples, and states return format. Missing are prerequisites like 'configure_credentials must be called first' and potential error behavior, which would elevate it to a 5. Overall it is nearly complete for a turnkey analytical tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description is the only source. It documents all 8 parameters, including location format examples, an enumerated list of hazard_type values not present in the schema, datetime_range format, output format enum, defaults for water_level_rise_m/storm_surge_m, IPCC scenario presets, and the days lookback default. This makes the tool callable without external docs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description declares an 'Ergonomic All-in-One Planetary Hazard Assessment' that bundles geocoding, STAC discovery, scene filtering, and specialized hazard modeling into a single call. This clearly distinguishes it from specialized siblings like simulate_sea_level_rise or analyze_coastal_erosion, and the verb 'assess' plus resource (location/hazard) is explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the tool 'Replaces 4-6 manual tool calls' and bundles geocoding, STAC discovery, filtering, and modeling, which strongly implies use when a complete end-to-end hazard assessment is needed. However, it does not explicitly name sibling specialized tools or state when to prefer them instead, so the guidance is contextual but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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
| Name | Required | Description | Default |
|---|---|---|---|
| bbox | Yes | ||
| format | No | summary | |
| collection | No | sentinel-2-l2a | |
| pre_fire_date_range | Yes | ||
| post_fire_date_range | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations supplied, the description carries the full disclosure burden and adds significant value: it states zero-config access, streams public COG tiles without credentials, names the exact spectral bands, and describes the output. It does not discuss caveats such as cloud cover or data availability, leaving some behavioral detail implicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with a one-sentence purpose and then organized into Args/Returns sections, making it scannable. The academic references add credibility but are not needed for tool invocation, introducing a minor amount of bloat.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Considering the tool has five parameters, no annotations, and an output schema that already exists, the description covers all call-relevant details: required and optional parameters, output content, standards, and access mode. An agent has everything needed to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, yet the description explains all five parameters with concrete examples: bbox format in WGS84, date range patterns (e.g., '2023-06-01/2023-06-30'), allowed collection values, and allowed format values. It fully compensates for the bare schema and clarifies optional defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence uses a specific verb 'Quantify' and names the exact resource ('post-fire burn severity and vegetation destruction'), method ('Normalized Burn Ratio Difference (dNBR)'), and data source ('Sentinel-2 NIR B08 and SWIR22 B12'). This clearly distinguishes the tool from siblings such as detect_active_wildfires or calculate_spectral_index.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description establishes precise application context: post-fire assessment using pre- and post-fire date ranges and classification to USGS/EFFIS standards. It does not explicitly name alternative tools or exclusion scenarios, so it stops one step short of full guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| bbox | Yes | ||
| index | Yes | ||
| collection | Yes | ||
| datetime_range | Yes | ||
| max_cloud_cover | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It does disclose the no-auth streaming approach ('Streams public COG bands via open HTTP range reads') and the return format ('JSON string with summary statistics, pixel count, and ASCII spatial density visualization'). However, it doesn't disclose failure modes such as behavior when the AOI has no data, what happens when cloud_cover filtering excludes all scenes, or performance implications for large bboxes. Decent but incomplete disclosure for a computational tool with zero annotation safety coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose and Args section are well-structured and front-loaded. However, the References block (four academic citations: Rouse, Tucker, McFeeters, Key & Benson) adds substantial bulk with zero value for tool invocation — an agent doesn't need literature citations to call the tool correctly. That section could be trimmed without losing any operational information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the 5-parameter complexity, 0% schema coverage, and zero annotations, the description is quite complete: it covers purpose, all parameter values/formats/defaults, and the return shape (though an output schema also exists). The main gaps are operational edge cases (empty AOI, all-scenes-filtered-by-cloud-cover, and error behavior), but the core information needed for a correct call is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% — the schema properties have no descriptions and no enums. The description fully compensates by documenting every one of the 5 parameters with concrete values and formats: collection ('sentinel-2-l2a' or 'landsat-c2-l2'), index ('NDVI', 'NDWI', 'NBR', or 'EVI'), bbox ('[min_lon, min_lat, max_lon, max_lat] in WGS84'), datetime_range ('2024-06-01/2024-06-30' example), and max_cloud_cover (default 15.0). This gives the agent everything the schema omits.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence states a specific verb+resource: 'compute a spectral index (NDVI, NDWI, NBR, or EVI) for an Area of Interest'. It names the exact indices and collections supported, which distinguishes it clearly from compute siblings like calculate_burn_severity (focused on burn severity) and detect_water_sar (water detection). No ambiguity about what this tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description highlights 'Zero-config... No API keys or Copernicus account required', which implies this is the tool to use when credentials are absent, but it never explicitly names alternatives or gives when-to-use/when-not-to-use conditions. An agent must infer that, e.g., detect_dark_vessels or analyze_urban_heat_island are the right tools for other analyses rather than being routed to them. The zero-config note is a benefit statement, not a routing rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| password | No | ||
| provider | Yes | ||
| username | No | ||
| token_or_key | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the behavioral disclosure burden. It discloses the return format (JSON status with verified capabilities) and the benefits of providing credentials, but it does not state whether credentials are persisted, whether they overwrite existing settings, or how verification works. For a state-changing configuration tool, these are meaningful gaps, though the term 'configure' implies mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently organized: purpose, optionality, provider-specific argument details, and return value. Every sentence carries needed information, and the critical provider-argument coupling is presented in a scannable list. No filler or redundant restatement of the schema is present.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero annotations and zero schema description coverage, the description provides robust context: provider-specific requirements, the public-access alternative, the unlock benefits, and the return format. It is slightly incomplete around persistence, error handling, and whether existing credentials are replaced, but the core invocation model is fully covered and an output schema exists to describe return structure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description fully compensates: it maps each provider value to its real-world service, specifies that username/password are required for CDSE, and defines token_or_key as an API token or subscription key for the other providers. This information is entirely absent from the input schema and is essential for correct invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb-resource pairing—'Dynamically configure optional credentials'—and enumerates the four supported providers (CDSE, NASA Earthdata, Planetary Computer, FIRMS). It distinguishes itself from the sibling get_credential_status by focusing on configuration rather than reading status, and the optionality framing clarifies exactly what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear context for when configuration matters: 'Providing credentials unlocks official full-granule archive downloads and higher rate limits,' and explicitly notes that public access works without credentials. It implies the alternative is to skip configuration for public access, but it doesn't name other tools or state a direct when-not-to-use condition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| recipe_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It describes the tool as a read-only operation ('Retrieve'), which is consistent with the lack of destructive hints, but it doesn't disclose any side effects (e.g., whether it runs an analysis or just returns stored config), rate limits, authentication needs, or what happens if the recipe doesn't exist. This is a significant gap for a tool with no annotation support.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with the core purpose in the first sentence. It includes a brief Args and Returns section for structure, with no filler or redundant phrasing. It could be slightly more compact, but it's efficient and well-organized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-parameter tool, the description is fairly complete. It explains what it returns (JSON string with recipe specification and step definitions) and provides examples. However, given the lack of annotations, it would benefit from clarifying whether it requires any sampling or validation and what the error behavior is. Since the output schema exists, return value details are partially covered, but the description's brief mention of return is still helpful. Overall, adequate but missing a bit of behavioral context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It does mention 'recipe_name' and provides two concrete examples, which adds meaning beyond the schema's bare property name. However, it doesn't explain the format (e.g., must match a recipe from 'list_pipeline_recipes'), which would help, so it partially compensates but is not fully sufficient.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves detailed configuration, parameters, and step sequence for a pipeline recipe, which is a specific verb-resource pair. It is distinct from siblings like 'list_pipeline_recipes' (which likely lists recipes) and 'run_pipeline' (which executes), but it doesn't explicitly name these alternatives, so it's not a perfect 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by stating it retrieves configuration and parameters, which is appropriate when you need details of a specific recipe. However, it doesn't explicitly state when to use this over 'list_pipeline_recipes' (e.g., when you need the full recipe specification, not just a list) or when not to use it. No exclusions or alternatives are mentioned, so it's clear but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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
| Name | Required | Description | Default |
|---|---|---|---|
| bbox | Yes | ||
| days | No | ||
| format | No | summary | |
| source | No | VIIRS_NOAA20_NRT |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It discloses the absence of required credentials and the open NASA FIRMS data source, which is useful. However, it does not mention side effects, rate limits, network dependence, or whether the operation is strictly read-only, though 'detect' implies it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The operational part is structured well with Args and Returns sections, and the main purpose is front-loaded. However, three full academic citations with DOIs add substantial length and do not directly help an agent select or invoke the tool, so the description is not optimally concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given four parameters, no schema descriptions, and no annotations, the description covers all required invocation details: parameter semantics, defaults, no-auth behavior, and expected returns. The output schema exists and covers return structure, so the missing details like output format specifics are not a serious gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the Args block fully compensates by explaining every parameter: bbox order and WGS84 coordinate system, days range (1 to 10) and default, allowed source products, and allowed output formats. This is exactly the kind of semantic detail an agent needs beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb-resource pair: 'Detect active wildfires and thermal anomalies from open NASA FIRMS feeds (VIIRS / MODIS)', and further narrows scope by mentioning clustered perimeters, Fire Radiative Power, and fire danger classification. This clearly distinguishes it from fire-related siblings like calculate_burn_severity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear usage context: it is for active wildfire detection from NASA FIRMS and emphasizes 'Zero-config' and 'No credentials or API keys required.' It does not explicitly name alternatives or exclusions, but the context is strong enough for an agent to select it over non-fire detection tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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
| Name | Required | Description | Default |
|---|---|---|---|
| bbox | Yes | ||
| format | No | summary | |
| sea_state | No | auto | |
| ais_source | No | open_baltic_api | |
| pfa_factor | No | ||
| datetime_range | Yes | ||
| custom_ais_records | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full behavioral burden. It does disclose several traits: zero-config, no credentials, public data usage, and the output categories (TRUSTED, DARK_VESSEL, SPOOF_OR_ABSENT) with oil slick alerts. However, it does not mention potential limitations (e.g., detection accuracy, processing time, error handling, or dependence on AIS availability). It also includes references to algorithm papers, which are not behavioral disclosures. Given the lack of annotations, a 3 is appropriate—it provides useful context but not a complete behavioral profile.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (purpose, args, returns, references) and front-loads the core purpose in the first sentence. However, it includes a list of five academic references that are not necessary for an agent to invoke the tool correctly—these add noise. The overall length is justified by the parameter details, but the references could be pruned to improve conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (7 parameters, no schema descriptions) and the presence of an output schema, the description covers all necessary input semantics, returns a summary of output categories, and mentions behavioral aspects like zero-config. It explains the purpose, parameters, and expected output formats. Nothing critical for calling the tool is missing—bbox format, date range syntax, AIS source options, and output choices are all specified. The output schema, not shown, likely provides the detailed return structure, so the description's return text is supplementary.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With schema description coverage at 0%, the description must fully compensate, and it does. The 'Args:' section explains every parameter in plain language: bbox with coordinate order and datum, datetime_range with example, ais_source with options, pfa_factor with meaning (CFAR threshold), sea_state with options, custom_ais_records with required fields, and format with output formats. This is a textbook example of compensating for an undocumented schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a precise statement of functionality: 'Detect maritime vessels in Sentinel-1 SAR imagery and correlate them with open AIS transponder data to flag unreported ‘Dark Vessels’'. This clearly specifies the resource (SAR + AIS data) and the action (detection and correlation), and distinctly separates it from siblings like detect_water_sar (water vs vessels). It also adds the compliance context (MSFD Descriptor 8), which is a useful, specific qualifier.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description notes 'Zero-config: Queries public Sentinel-1 and open AIS telemetry without credentials or API keys', which implies it is for users without credentials, but it never explicitly says 'use this tool when you need to detect dark vessels' or contrasts with alternatives. No when-not or exclusion criteria are given. The usage context is only implicitly conveyed via the zero-config mention; there is no direct guidance on when this tool is more appropriate than other vessel-detection utilities.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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
| Name | Required | Description | Default |
|---|---|---|---|
| bbox | Yes | ||
| threshold_db | No | ||
| datetime_range | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the behavioral disclosure burden. It clearly states that the tool runs with zero configuration, requires no credentials, classifies pixels below a decibel threshold as water, and returns a JSON string with water percentage and backscatter characteristics. This goes beyond the bare function name and gives useful behavioral context, though it does not mention edge cases or limitations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded with the core purpose and zero-config behavior. The Args and Returns sections are compact and directly useful. The references add methodological credibility but are not strictly necessary for tool invocation, so it is concise but not perfectly lean.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with three parameters, no annotations, and a schema with zero description coverage, the description covers everything needed to invoke it correctly: required inputs, optional threshold with default, return format, and the underlying method. An agent can confidently call this tool with just bbox and datetime_range based on the provided guidance.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, but the description fully compensates by explaining each parameter: bbox format and coordinate system, datetime_range with an explicit example, and threshold_db with its meaning and default value. This adds essential semantic meaning that the JSON schema alone does not provide.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Perform all-weather surface water and flood inundation mapping using Sentinel-1 C-band SAR radar backscatter.' This clearly distinguishes it from sibling tools like detect_dark_vessels or assess_location_hazard by naming the exact task and data source. It is not a tautology and provides enough specificity for an agent to know what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when this tool is relevant: all-weather water and flood mapping with SAR. It also highlights a practical condition: zero-config and no API keys needed, which helps an agent decide to use it without credential setup. It does not explicitly name alternatives or exclusions, so it misses the highest bar, but the guidance is clear enough for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | ||
| category | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. It discloses the tool's read-only discovery behavior, explains how query and category filters behave, and states that the return value is a JSON string listing tools, categories, descriptions, and the active profile. It does not discuss error cases or side effects, but this appears to be a safe search tool, so the gap is minor.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well structured: a one-sentence summary, a brief contextual note about progressive discovery, a category list, and an Args/Returns section. It is longer than necessary due to the category examples, but each part earns its place by making the tool's contents immediately understandable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that an output schema exists and there are only two optional parameters, the description is complete enough for safe invocation: it explains the purpose, both parameters, the valid categories, and the response shape. It could mention behavior when no arguments are supplied, but the optional/default schema makes that reasonably clear.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and there are no enums, so the description must compensate. It does so thoroughly: 'category' is described as an optional category filter, 'query' is described as an optional keyword filter for tool names and descriptions, and the valid category values are enumerated. This gives the agent everything needed to use the parameters correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a specific verb and resource: 'Search and progressively discover eo-mcp tools across categories.' It clearly identifies what the tool does and differentiates it from the domain-specific sibling tools by positioning it as a discovery/metadata tool. The category list with tool examples further reinforces the tool's scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains that this tool implements the client-side progressive discovery pattern (search, inspect, execute) recommended for MCP clients, which clearly signals when it should be used: as the first step before selecting and invoking domain tools. It does not explicitly name alternatives or state when not to use it, but the context is strong enough for an agent to infer correct usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| product_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden and does a good job: it reveals credential requirements, that the tool generates a URL and curl command rather than necessarily downloading directly, and that the return is a JSON string with a verified endpoint, authorization header, and execution instructions. It does not cover error cases or rate limits, but the core behavior is transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-organized: an action-oriented opening sentence, a credential prerequisite, an Args section, and a Returns section. Every sentence contributes useful information without redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with an output schema, the description is largely complete: it explains the parameter format, credential prerequisite, and return contents. Missing details include what happens if credentials are absent or invalid and how the returned curl command should be executed, but these are reasonable gaps given the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema only provides a string property with no description, so the description adds crucial meaning: product_id is an official Copernicus UUID or product name, and it gives a concrete real-world example format. This fully compensates for the 0% schema description coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb and resource: generate an authenticated download URL and curl command for a full Sentinel/Copernicus product package from CDSE. It distinguishes itself from siblings like stac_search or query_nasa_opera by focusing specifically on product-package download with credentials.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: use this when you need to download an official Copernicus granule, and it explicitly notes the prerequisite of CDSE credentials configured via environment variables or configure_credentials(). It does not explicitly name alternatives or exclusions, but the purpose is specific enough for an agent to route correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | summary | |
| location | Yes | ||
| datetime_range | No | 2024-06-01/2024-08-31 |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the burden of behavioral disclosure. It explains that the tool computes a composite scorecard, returns a JSON string, and references specific indices and DEM data. However, it does not disclose potential execution cost/time, data availability limitations, whether any resources are created, or what happens when a location cannot be resolved.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a numbered indicator list and clear Args/Returns sections, making it easy to parse. The academic references and the 'Create with Compute' phrasing add some noise but do not prevent efficient use.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-parameter tool with an output schema, the description covers the input semantics, default behavior, return type, and the four analytical layers. It is slightly incomplete in not distinguishing use cases from sibling tools and not explaining the 'Create with Compute' pattern, but overall it provides enough for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description fully compensates by explaining all three parameters: location includes named examples and bbox syntax, datetime_range is described as an observation window with a default, and format lists the allowed output values. This goes well beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Produces a holistic environmental and climate scorecard for any city or region' and enumerates four concrete indicator groups (NDVI, NDWI, DEM, thermal/flood hazard). This clearly distinguishes it from specialized sibling tools like detect_water_sar or calculate_spectral_index.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'holistic environmental and climate scorecard' implies this is for broad multi-layer audits rather than single-metric analysis, which gives some context. However, the description never explicitly states when to use this tool versus siblings such as assess_location_hazard, analyze_urban_heat_island, or detect_water_sar, and it offers no exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| place_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It describes the return format (display_name, center, bbox) which is useful, but it does not state that the operation is read-only, nor does it mention any failure modes, rate limits, or authentication needs. For a geocoding tool, read-only behavior is likely obvious, but the description could be more explicit about non-mutating nature and error handling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, starting with the core action in the first sentence. It then neatly separates Args and Returns. Every sentence adds value, with no fluff. It is front-loaded with the main purpose and structured for quick scanning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with a single parameter and a described return format, the description is complete. It explains the input and output sufficiently for an agent to call it correctly. The presence of an output schema (not shown) further reduces the need to describe the return value in detail. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides no description for place_name (coverage 0%), so the description must compensate. It does so thoroughly: 'Location name, city, or geographic feature' plus three examples ('Valencia, Spain', 'Lake Tahoe', 'Imperial Valley'). This gives the agent clear guidance on what input is acceptable, far beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool geocodes a place name into a WGS84 bounding box. It uses a specific verb (geocode) and resource (place name), and gives concrete examples. It stands out distinctly from all sibling tools, none of which are geocoding-related, so no confusion arises.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage: when you have a place name and need a bounding box or coordinates. However, it does not explicitly state when to use this tool versus alternatives, nor does it provide any exclusions or mention that it is the go-to for geocoding among siblings. Since there are no similar siblings, this is not a critical gap, but the guidance is only implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| bbox | Yes | ||
| title | Yes | ||
| layers | No | ||
| basemap_theme | No | dark | |
| output_json_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry behavioral disclosure. It does reveal key behavior: optional output_json_path means it can write a file or return JSON, and it lists basemap choices and return shape. However, it does not mention side effects such as file overwriting, required credentials, or whether any external state is modified.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is neatly structured: one-sentence purpose, bullet-style Args, and one-sentence Returns. Every line adds information and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given five parameters and no annotations, the description covers the purpose, all parameter semantics, and return behavior, which is largely sufficient. It falls short only on edge behaviors like overwrite semantics and permission requirements, and it does not route the agent away from export_interactive_map.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the Args section documents all five parameters with meaningful detail: bbox order `[min_lon, min_lat, max_lon, max_lat]`, layers as JSON string or GeoJSON references, an example output path, and enumerated basemap themes. This fully compensates for the empty schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb ('Export') and a specific resource ('native GeoLibre project configuration file'), then names the exact target applications (GeoLibre Desktop Tauri / Web). The GeoLibre-specific resource and target apps distinguish it from the sibling export_interactive_map, so an agent can select it without schema inspection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives an explicit use context: one-click importing of eo-mcp analysis layers into GeoLibre, and it defines the output target. It stops short of naming alternatives or when-not-to-use conditions, so it is clear but not a full routing guide.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| bbox | Yes | ||
| title | Yes | ||
| geojson | No | ||
| hazard_type | No | ||
| output_html_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of behavioral disclosure. It discloses side effects (optional 'save HTML directly to disk'), output form ('Confirmation JSON with file path and status, or HTML content preview'), and expected output characteristics. It does not discuss overwrite behavior or permissions, but for a generation/export tool this is reasonably transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well structured: a purpose sentence, a short feature list, an Args block, and a Returns block. It is not overly long, but the feature bullets (especially 'dark titanium glassmorphic UI overlay') are more promotional than necessary for tool invocation. Still, every section earns a place in helping the agent understand behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given five parameters, zero schema descriptions, and no annotations, the description covers all essential invocation details: required vs optional args, coordinate format, GeoJSON source, and return behavior. An output schema exists, so return values need not be deeply explained. Missing context is mainly the effect of hazard_type on rendering and any file overwrite semantics, but an agent can call this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate entirely, and it does. It gives the exact bbox order ([min_lon, min_lat, max_lon, max_lat]), states WGS84, provides a title example, explains that geojson comes from eo-mcp hazard tools, lists example hazard_type values, and clarifies output_html_path's purpose. This is strong parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Generate a standalone interactive MapLibre GL JS HTML application from hazard results.' This clearly identifies both the action and the output. It does not explicitly contrast itself with the sibling export_geolibre_project, so it stops short of full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states that the tool generates maps 'from hazard results' and accepts GeoJSON 'from any eo-mcp hazard tool,' which implies when it should be used. However, it gives no explicit when-not-to-use guidance or comparison to alternatives such as export_geolibre_project.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It usefully states that the result is a JSON string, accounts are masked for privacy, and it reports configured accounts plus unlocked APIs. This goes beyond a generic status description, though it could further clarify what 'zero-config mode' means or how failures are reported.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two focused sentences, front-loading the main purpose and then clearly noting the return format. Every sentence adds value, and there is no redundant restatement of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter status tool with an output schema, the description is complete: it explains what is inspected, what the result contains, and that sensitive data is masked. No critical operational detail is missing for an agent to invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there is no parameter-semantics burden on the description. The schema coverage is effectively complete, and the description adds relevant context about the output content without needing to explain parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Inspect' and clearly identifies the resource: 'current status of all satellite provider credentials, zero-config mode, and active capabilities.' This makes the tool's read-only purpose distinct from siblings like configure_credentials.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for checking credential/configuration status, but it does not explicitly state when to prefer this tool over configure_credentials or other siblings. Context such as 'before configuring credentials' or 'to verify setup' would improve routing, but the purpose is clear enough to infer usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| bbox | Yes | ||
| calculate_slope | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description takes on the behavioral burden and largely succeeds: it discloses the access mechanism (AWS STAC), explicitly states that no credentials are required, and summarizes the JSON return payload including slope statistics and an ASCII map. It falls short of 5 by omitting operational constraints such as bbox size limits or rate restrictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose and organized with Args and Returns sections, making it scan well. The three references at the end add scholarly credibility but do not help an AI agent invoke the tool correctly, which prevents a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter tool with an output schema, the description is mostly complete: it names the data source, explains no-auth access, documents both parameters, and summarizes the return value. It omits potential constraints such as bbox size/area limits and does not explicitly state the default for calculate_slope, though the schema provides that default.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must supply parameter meaning, and it does: bbox is specified as [min_lon, min_lat, max_lon, max_lat] in WGS84, and calculate_slope is explained as computing mean and maximum slope in degrees. This fully compensates for the minimal schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific action ('Extract') and a precise resource ('digital elevation (in meters) and terrain slope' from 'Copernicus DEM GLO-30'). This is clearly distinct from sibling EO tools like calculate_spectral_index or download_copernicus_granule without needing to inspect schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides some useful context: it is zero-config, queries an open AWS STAC, and requires no API keys. However, it does not explicitly state when to choose this tool over alternatives like download_copernicus_granule, nor does it describe exclusions, leaving usage mostly implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose the primary behavior ('List') and the return format ('JSON string cataloging...'). However, it does not explicitly address side effects, authentication needs, or whether the list is static or dynamic—though 'List' implies read-only, it is not stated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler. The core purpose is front-loaded, and the return format is given in a clearly separated second sentence. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 0-parameter listing tool with an output schema, the description is nearly complete: it names the resource and specifies the JSON return contents. The only contextual gap is not pointing agents to describe_pipeline_recipe for recipe-level details, which would help navigation among sibling tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes 0 parameters, so parameter semantics are trivially covered by the empty input schema. The baseline of 4 for 0-parameter tools applies; the description adds no parameter information, but none is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and a specific resource ('pre-built compound hazard and multi-spectral pipeline recipes'), making it immediately distinct from siblings like run_pipeline or describe_pipeline_recipe. It also states the return content, reinforcing what the tool is for.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to choose this tool over alternatives such as describe_pipeline_recipe (for details on a specific recipe) or list_supported_collections (for datasets). The description implies a browsing use case but never states exclusions or conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It clearly states the return format as a JSON string and enumerates the content, which gives an agent a concrete expectation. It does not mention side effects, but 'List' inherently implies a read-only operation, making this reasonably transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: one purpose line and one return line. It is front-loaded with the main action and uses no filler, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool, the description is complete: it states what is listed, the return type, and the scope ('available in eo-mcp'). An output schema exists, so the agent can rely on it for exact structure. No critical operational detail is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so schema coverage is trivially 100% and no parameter description is needed. The description adds no parameter details because there is nothing to add; baseline 4 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: it lists supported open satellite collections, spatial resolutions, spectral bands, and STAC sources. However, it does not explicitly distinguish itself from related siblings like stac_search or discover_eo_tools, so it misses the sibling-differentiation aspect of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intended use is implied by the description—call it when you need to know which collections are supported—but there is no explicit when-to-use vs. alternatives guidance. No exclusions or comparisons to sibling tools are provided, leaving usage context to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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
| Name | Required | Description | Default |
|---|---|---|---|
| gas | No | NO2 | |
| bbox | Yes | ||
| format | No | summary | |
| datetime_range | No | 2024-06-01/2024-06-30 |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses the data sources, that no API keys are needed, that it correlates satellite measurements with ground stations, and what outputs are produced. It does not cover rate limits, latency, or failure behavior, which keeps it just short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is well-structured and front-loaded, with the core purpose in the first line followed by a compact Args/Returns breakdown. Minor redundancy in the Zero-config sentence and the appended references add a small amount of nonessential weight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with four parameters, no annotations, and moderate scientific complexity, the description covers the main context: purpose, data sources, credential-free access, return contents, and parameter semantics. It could still explain what each output format yields and mention limitations like temporal availability.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but this description compensates fully by documenting every parameter: bbox order and CRS, gas choices and default, datetime_range format with an example, and format options. This goes well beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Monitor atmospheric trace gas emissions' using Sentinel-5P TROPOMI and OpenAQ validation, and names the exact gases (NO2, SO2, CO, CH4). This clearly distinguishes it from sibling monitoring/detection tools such as detect_active_wildfires or monitor_crop_phenology.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The tool's intended use is implied strongly by the purpose and the 'Zero-config' line, which tells agents no credentials are required. However, it never explicitly states when to prefer this tool over alternatives or what conditions would make a sibling tool more appropriate, so guidance is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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
| Name | Required | Description | Default |
|---|---|---|---|
| bbox | Yes | ||
| year | No | ||
| format | No | summary | |
| crop_type | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It does add context by noting 'Automatically samples cloud-free Sentinel-2 observations' and 'Zero-config,' which tells the agent the tool handles data selection. However, it does not mention any limitations, processing time, data availability constraints, or whether the operation is purely read-only in terms of external side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections: purpose, args, returns, references. The essential information is front-loaded. The scientific references at the end add credibility but do not help an agent select or invoke the tool, so they keep it from a perfect conciseness score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has an output schema and only one required parameter, the description is largely complete: it covers all parameters, the return summary, and the automatic Sentinel-2 sampling behavior. However, it omits details like valid year ranges, bbox size limits, or error conditions, which would be useful for an agent handling edge cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description's Args section fully compensates. It explains bbox format (WGS84 coordinates), year default, crop_type examples, and format enum values ('summary', 'geojson', 'csv'). This gives the agent everything needed to set each parameter correctly, far beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Monitor agricultural crop phenology, growth trajectories, and vegetative anomalies across seasonal cycles.' It further specifies exact outputs (SOS, POS, EOS, drought stress vs baseline), making it clearly distinct from sibling tools like calculate_spectral_index or analyze_reservoir_drought. An agent can confidently recognize this as the tool for crop growing-cycle analysis.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description conveys clear context: use this tool when you need to monitor crop phenology, seasonal growth, or vegetative anomalies. The 'Zero-config' note suggests it is a turnkey option, but it does not explicitly mention when not to use it or name alternative tools, so it stops short of full guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| bbox | Yes | ||
| limit | No | ||
| format | No | summary | |
| product_type | No | dswx | |
| datetime_range | Yes | ||
| max_cloud_cover | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states the return format (JSON string with granules, asset URLs, coverage metadata) and describes what the tool does, but it does not mention pagination, error behavior, authentication requirements, or any side effects. It is read-only in nature but this is not explicitly stated, and the description lacks deeper behavioral detail that would be expected without annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections for Supported Products, Args, and Returns. It is front-loaded with the purpose and each section is concise, providing necessary detail without verbosity. The only minor excess is the repetition of '30m' in product descriptions, which is not wasted but could be considered slightly redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (6 parameters, 3 product types, output schema present), the description is nearly complete. It covers the product catalog, parameter semantics, and return type. The presence of an output schema means the description need not detail return values, but it still provides a high-level description of the return. Missing elements include any mention of authentication, rate limits, or data availability constraints, but these are minor for a query tool of this nature.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must fully compensate. The description includes an explicit 'Args:' section that explains each of the six parameters (bbox, datetime_range, product_type, max_cloud_cover, limit, format) with clear meaning, units, and examples for datetime_range. This is comprehensive and adds substantial value beyond the bare schema definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it searches and inspects NASA JPL OPERA datasets, and enumerates the three supported product types (dswx, dist, rtc) with their specific purposes. This is a specific verb+resource with a defined scope that distinguishes it from generic STAC search tools and other sibling detection tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no explicit guidance on when to use this tool versus alternatives like stac_search or detect_water_sar. It lists the products it supports but does not mention exclusions or alternative conditions that would route an agent to a different tool. The usage context is only implicit from the product descriptions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| sql | Yes | ||
| geojson | Yes | ||
| table_name | No | features |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral disclosure burden. It discloses the supported SQL subset, spatial predicates, and the JSON return shape, which is substantial. It does not explicitly state whether execution is read-only/in-memory or describe error behavior, but the query semantics are clearly scoped.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact, front-loaded with purpose, and organized into Supports, Args, and Returns sections. The example SQL query is illustrative rather than padding, and every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
All three parameters are explained, the input data source is specified, supported operations are enumerated, and the return format is defined. For a self-contained query tool with no annotation coverage, an agent has everything needed to select and invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the Args section fully compensates. The sql parameter includes a concrete example, geojson specifies a GeoJSON FeatureCollection sourced from eo-mcp tools, and table_name explains the virtual table concept and its default value. Every parameter's meaning is clear.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Execute spatial SQL queries on GeoJSON FeatureCollections or tabular geospatial metadata.' It then enumerates the supported SQL and spatial predicates, making the tool's function unambiguous and distinguishing it from the many geospatial analysis siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear context: use this tool when you need SQL-style filtering, grouping, ordering, or spatial calculations over GeoJSON produced by any eo-mcp tool. It does not explicitly name alternative tools to avoid or state when-not-to-use conditions, so it stops short of the strongest guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| script_code | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of disclosing behavior. It usefully mentions the sandbox environment, pre-loaded libraries, and JSON response containing status, stdout, stderr, and exported variables. However, it omits safety and limitation details for arbitrary code execution, such as sandbox restrictions, timeouts, or filesystem/network access.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the main purpose. The Args and Returns sections are concise and directly useful, with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter arbitrary-code tool, the environment and return contract cover most operational needs, and an output schema exists for return details. The main gap is the lack of explicit sandbox limitations, but the description is otherwise reasonably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does: script_code is defined as 'Valid Python code string to execute,' and the preloaded libraries give concrete context about what the code can use. It does not explain the export mechanism precisely, but the single parameter is sufficiently clarified.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Execute an arbitrary agent-generated Python geospatial processing script.' It effectively distinguishes this from sibling pipeline tools like run_pipeline and list_pipeline_recipes by emphasizing arbitrary agent-generated code rather than predefined recipes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this tool is for free-form Python execution, but it does not explicitly name alternatives or exclusion conditions. An agent must infer when to use run_geospatial_script versus run_pipeline or other sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| spec | Yes | ||
| format | No | summary | |
| location | No | ||
| parameters | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It explains what happens (pipeline execution, returns a formatted summary, GeoJSON, or CSV) and notes there is no self-hosted infrastructure. However, it does not disclose side effects, compute/quota implications, or failure behavior, which would be useful for an execution tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long, but the length is justified by a complex tool: purpose, recipes, step vocabulary, args, and returns are clearly separated. A short opening sentence front-loads the core purpose, and the enumerated lists are scannable; some marketing phrasing like 'Empowers users and AI agents' adds little.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex tool with 0% schema coverage and no annotations, the description covers the essentials: valid recipe names, available pipeline steps, parameter formats, and return types. It does not specify detailed schemas for custom JSON steps or error/edge-case behavior, but the provided output schema and sibling tools reduce that gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the Args section fully compensates: spec is explained with recipe names and JSON-structure options, location gives both a name and bbox format, format enumerates the three output options, and parameters provides a concrete JSON override example. This exceeds what the bare schema offers.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence uses a specific verb-resource combination: 'Execute a declarative multi-step Earth Observation processing pipeline or pre-built recipe.' It clearly separates the tool from single-step EO tools and from discovery siblings like list_pipeline_recipes by framing it as execution of a full pipeline.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides strong contextual guidance: it lists four ready-made recipes and explains that a custom declarative JSON can be supplied instead. It does not explicitly name alternatives or say when not to use this tool, but the recipe/step lists make the intended use obvious.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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
| Name | Required | Description | Default |
|---|---|---|---|
| bbox | Yes | ||
| format | No | summary | |
| scenario | No | ||
| storm_surge_m | No | ||
| water_level_rise_m | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the data source, streaming from open AWS STAC, lack of credentials, modeling approach, and output formats. It omits potential performance limitations or edge-case behavior, but it provides substantial behavioral context beyond the bare schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The opening sentence is specific and front-loaded, and the Args/Returns structure is easy to parse. The references add credibility but are not strictly operational; still, the description is efficiently organized and not bloated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no schema descriptions and no annotations, the description covers required inputs, optional parameters, return fields, and methodology. It does not mention bbox size limits, processing time, or failure modes, but it is complete enough for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description fully compensates by explaining every parameter: bbox order, water_level_rise_m and storm_surge_m units and defaults, scenario allowed values, and format options. This goes well beyond the sparse schema information.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action: 'Simulate coastal sea-level rise and storm surge inundation using Copernicus DEM GLO-30 and hydrologically connected flood-fill modeling.' It is clear about the resource and method. However, it does not explicitly distinguish this from sibling tools such as assess_location_hazard or analyze_coastal_erosion, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for coastal flood simulation with zero-config and EU Floods Directive compliance, and it notes no API keys are required. It does not explicitly state when to use this tool versus alternatives or provide exclusions, so guidance is only implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| bbox | Yes | ||
| limit | No | ||
| catalog_url | No | https://earth-search.aws.element84.com/v1 | |
| collections | Yes | ||
| datetime_range | Yes | ||
| max_cloud_cover | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does disclose the zero-credential/no-auth behavior and, in the Returns line, the response shape (JSON of scenes, dates, cloud cover, asset keys). But for an external network tool it omits explicit disclosure of outbound network dependency, latency, rate limits, and failure behavior - exactly the context an agent needs before invoking a third-party API.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with a front-loaded one-sentence purpose, a terse zero-config note, then clearly labeled Args and Returns sections. The detail in Args is justified for a six-parameter external API tool, and every section earns its place without fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter external STAC search with an output schema, the description covers purpose, auth model, all parameter semantics, and return format - the essentials for correct invocation. It falls short only on operational disclosures (error handling, rate limits, latency) that would round out full completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% (properties carry only titles, no descriptions), so the description must compensate - and it does. The Args section documents all six parameters with formats, examples, and coordinate systems (e.g., bbox in WGS84, datetime_range RFC3339 with examples, max_cloud_cover 0-100). Minor gaps: bbox doesn't state it needs exactly 4 numbers and collections isn't cross-referenced to list_supported_collections for valid IDs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb-resource pair ('Search free STAC catalogs for available satellite scenes') and names the three filtering criteria (spatial, temporal, cloud), which clearly distinguishes it from siblings like list_supported_collections (list only) and download_copernicus_granule (download vs search). No ambiguity about what this tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'Zero-config: Queries public STAC endpoints with zero credentials or API keys required' note implicitly tells an agent this is the right tool for public, credential-free data access and implies credentialed data belongs elsewhere. However, it never names alternatives or gives explicit when-to-use / when-not-to-use guidance against siblings like query_nasa_opera or query_spatial_sql, leaving routing partially to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
29 tool updates
v0.1.0- First observed
analyze_coastal_erosion - First observed
analyze_reservoir_drought - First observed
analyze_urban_heat_island - First observed
assess_location_hazard - First observed
calculate_burn_severity - First observed
calculate_spectral_index - First observed
configure_credentials - First observed
describe_pipeline_recipe - First observed
detect_active_wildfires - First observed
detect_dark_vessels - First observed
detect_water_sar - First observed
discover_eo_tools - First observed
download_copernicus_granule - First observed
environmental_site_audit - First observed
eo_geocode - First observed
export_geolibre_project - First observed
export_interactive_map - First observed
get_credential_status - First observed
get_elevation_profile - First observed
list_pipeline_recipes - First observed
list_supported_collections - First observed
monitor_atmospheric_emissions - First observed
monitor_crop_phenology - First observed
query_nasa_opera - First observed
query_spatial_sql - First observed
run_geospatial_script - First observed
run_pipeline - First observed
simulate_sea_level_rise - First observed
stac_search
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
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)
Live space data for AI agents - rocket launches, ISS passes, launch news. Free, no auth.
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
- AlicenseBqualityBmaintenanceProvides sovereign geospatial awareness by wrapping open, non-US-dependent geospatial APIs for AI-agent situational awareness, environmental compliance, and disaster response.539 PyPIMIT

Planet MCPofficial
AlicenseNot gradedqualityCmaintenanceEnables AI agents to interact with the Planet API for satellite imagery ordering, subscriptions, and data management through natural language.17Apache 2.0- AlicenseNot gradedqualityDmaintenanceEnables AI agents to search, compare pricing, and order satellite imagery from 150+ satellites across 12+ providers via natural language.MIT