Skip to main content
Glama
IBM
by IBM

Chuk MCP STAC

Satellite Imagery Discovery & Retrieval MCP Server - A comprehensive Model Context Protocol (MCP) server for searching STAC catalogs, downloading satellite bands, and creating composites.

This is a demonstration project provided as-is for learning and testing purposes.

Python 3.11+

Features

This MCP server provides access to satellite imagery through STAC (SpatioTemporal Asset Catalog) APIs via twenty-one tools.

All tools return fully-typed Pydantic v2 models for type safety, validation, and excellent IDE support. All tools support output_mode="text" for human-readable output alongside the default JSON.

1. Catalog Discovery (stac_list_catalogs)

List available STAC catalogs:

  • Earth Search (AWS) and Planetary Computer (Microsoft)

  • Shows default catalog and available endpoints

2. Collection Browsing (stac_list_collections)

Browse collections in a catalog:

  • List all available satellite collections

  • Spatial and temporal extents

  • Collection descriptions and metadata

Search for satellite scenes:

  • Bounding box spatial queries

  • Date range filtering

  • Cloud cover thresholds

  • Collection filtering (Sentinel-2, Landsat, etc.)

  • Configurable result limits

4. Scene Details (stac_describe_scene)

Get detailed metadata for a scene:

  • Available bands and assets

  • CRS and projection info

  • Cloud cover, datetime, spatial extent

  • Filters out metadata-only assets

5. Scene Preview (stac_preview)

Get a preview/thumbnail URL for a scene:

  • Returns rendered_preview or thumbnail asset URL

  • Prefers rendered previews over thumbnails

  • Fast visual browsing without downloading full bands

6. Band Download (stac_download_bands)

Download specific bands from a scene:

  • Any combination of bands (red, green, blue, nir, etc.)

  • Hardware band aliases supported (B04, B08, SR_B4, etc.)

  • Optional bbox cropping in EPSG:4326

  • Output as GeoTIFF or PNG (auto-stretched)

  • SCL-based cloud masking (Sentinel-2 only)

7. RGB Composite (stac_download_rgb)

Download true-color RGB composites:

  • Convenience wrapper for red, green, blue bands

  • Automatic band resolution matching

  • PNG output for inline LLM rendering

8. Custom Composite (stac_download_composite)

Create multi-band composites:

  • Any band combination (e.g., false-color infrared: nir, red, green)

  • Named composites for easy identification

  • Cloud masking and PNG output support

9. Spectral Index (stac_compute_index)

Compute spectral indices for a scene:

  • NDVI, NDWI, NDBI, EVI, SAVI, BSI

  • Automatically selects required bands

  • Cloud masking (masked pixels → NaN)

  • Output as float32 GeoTIFF or stretched PNG

10. Mosaic (stac_mosaic)

Merge multiple scenes into a single raster:

  • Combines overlapping scenes

  • Standard merge (last) or quality-weighted (best pixel via SCL)

  • Per-scene cloud masking before merge

11. Time Series (stac_time_series)

Extract temporal band data:

  • Searches scenes across a date range

  • Downloads bands for each date

  • Concurrent downloads for performance

  • Cloud cover filtering

12. Server Status (stac_status)

Check server configuration:

  • Server version and storage provider

  • Default catalog

  • Artifact store availability

13. Capabilities (stac_capabilities)

List full server capabilities for LLM workflow planning:

  • Available catalogs and collections

  • Spectral indices with required bands

  • Band mappings by satellite platform

  • Tool count

14. Size Estimation (stac_estimate_size)

Estimate download size before committing to a full download:

  • Reads only COG headers (no pixel data transferred)

  • Per-band dimensions, dtype, and byte estimates

  • Warnings for large downloads (>=500MB, >=1GB)

15. Collection Intelligence (stac_describe_collection)

Get detailed collection metadata with LLM-friendly guidance:

  • Band wavelengths and resolutions

  • Recommended composite recipes

  • Supported spectral indices

  • Cloud masking info and usage guidance

16. Conformance Checking (stac_get_conformance)

Check which STAC API features a catalog supports:

  • Parses conformance URIs into feature flags

  • Core, item_search, filter, sort, fields, query, collections

17. Find Scene Pairs (stac_find_pairs)

Find before/after scene pairs for change detection:

  • Separate before and after date ranges

  • Computes spatial overlap percentage per pair

  • Caches all found scenes for follow-up download

18. Coverage Check (stac_coverage_check)

Verify cached scenes fully cover a target area:

  • Rasterizes bounding box into a 100x100 grid

  • Returns coverage percentage and uncovered areas

  • Ensures full spatial coverage before download

19. Queryable Properties (stac_queryables)

Fetch queryable properties from a STAC API:

  • Catalog-level or collection-scoped queryables

  • Property names, types, descriptions, and enum values

  • Enables advanced CQL2 filter construction

20. Temporal Composite (stac_temporal_composite)

Combine multiple scenes via per-pixel statistics:

  • Methods: median, mean, max, min

  • Reduces cloud contamination in time series

  • SCL-based cloud masking per scene before compositing

21. Zonal Statistics (stac_zonal_stats)

Read a raster's values within zones — the inference step after a fetch:

  • Per-zone n_valid / mean / std / min / max / median / p10 / p90

  • Zones as points + buffer_m (circular) or GeoJSON polygons, in any CRS

  • Optional background_m annulus → a local z-score (anomaly readout) for cropmark / feature detection

Related MCP server: Jupyter Earth MCP Server

Installation

uvx chuk-mcp-stac
# Install from PyPI
uv pip install chuk-mcp-stac

# Or clone and install from source
git clone <repository-url>
cd chuk-mcp-stac
uv sync --dev

Using pip (Traditional)

pip install chuk-mcp-stac

Usage

With Claude Desktop

Option 1: Run Locally with uvx

MacOS: ~/Library/Application Support/Claude/claude_desktop_config.json Windows: %APPDATA%/Claude/claude_desktop_config.json

{
  "mcpServers": {
    "stac": {
      "command": "uvx",
      "args": ["chuk-mcp-stac"]
    }
  }
}

Option 2: Run Locally with pip

{
  "mcpServers": {
    "stac": {
      "command": "chuk-mcp-stac"
    }
  }
}

Standalone

Run the server directly:

# With uvx (recommended - always latest version)
uvx chuk-mcp-stac

# With uvx in HTTP mode
uvx chuk-mcp-stac http

# Or if installed locally
chuk-mcp-stac
chuk-mcp-stac http

Or with uv/Python:

# STDIO mode (default, for MCP clients)
uv run chuk-mcp-stac
# or: python -m chuk_mcp_stac.server

# HTTP mode (for web access)
uv run chuk-mcp-stac http
# or: python -m chuk_mcp_stac.server http

STDIO mode is for MCP clients like Claude Desktop and mcp-cli. HTTP mode runs a web server on http://localhost:8002 for HTTP-based MCP clients.

Example Usage

Once configured, you can ask Claude questions like:

  • "Search for Sentinel-2 imagery over London from last month"

  • "Download an RGB composite of that scene"

  • "Show me a false-color infrared view using NIR, red, and green bands"

  • "Compute the NDVI for this scene with cloud masking"

  • "Create a mosaic of these overlapping scenes"

  • "Get a time series of NDVI data for this farm over the growing season"

  • "What collections are available on Earth Search?"

  • "Describe the Sentinel-2 collection — what bands and composites are available?"

  • "How big would downloading 4 bands from that scene be?"

  • "What STAC API features does Earth Search support?"

Demo Scripts

The examples/ directory contains 19 runnable demos covering all 21 tools. Each script is self-contained and produces a PNG output in examples/output/.

Core Tool Demos

Script

Network?

Tools Demonstrated

capabilities_demo.py

No

stac_capabilities, stac_status, stac_list_catalogs

collection_intel_demo.py

Yes

stac_describe_collection, stac_get_conformance, stac_estimate_size

colchester_from_space.py

Yes

stac_searchstac_download_rgbstac_compute_index

mosaic_demo.py

Yes

stac_searchstac_describe_scenestac_mosaic

time_series_demo.py

Yes

stac_time_seriesstac_download_bands

landsat_demo.py

Yes

stac_searchstac_download_bands (Landsat band aliases)

change_detection_demo.py

Yes

stac_find_pairsstac_previewstac_coverage_check

false_color_demo.py

Yes

stac_describe_collectionstac_download_composite

temporal_composite_demo.py

Yes

stac_list_collectionsstac_queryablesstac_temporal_composite

Real-World Showcase Demos

Script

Location

What It Shows

wildfire_scar_demo.py

California, USA

Park Fire burn scar — before/after RGB, NDVI, false-colour SWIR composite

uk_flooding_demo.py

Lincolnshire, UK

Storm Babet flooding — NDWI water index before/after with cloud masking

coastal_erosion_demo.py

Yorkshire, UK

Holderness coast retreat — 2019 vs 2024 NDWI coastline comparison

crop_health_demo.py

Cambridgeshire, UK

Wheat phenology — cloud-masked NDVI across growing season

dubai_growth_demo.py

Dubai, UAE

Urban expansion — 2022 vs 2024 NDBI built-up index

vegas_f1_demo.py

Las Vegas, USA

F1 race infrastructure — summer vs race week NDBI comparison

amazon_deforestation_demo.py

Rondônia, Brazil

Dry season NDVI time series tracking deforestation

lake_chad_demo.py

Chad/Nigeria

Seasonal water extent — NDWI wet vs dry season

singapore_port_demo.py

Singapore

Port activity — RGB time series across 6 months

alps_snow_demo.py

Mont Blanc, Alps

Snow cover — custom NDSI winter vs summer

cd examples
python capabilities_demo.py        # no network required
python colchester_from_space.py     # full search → download → render pipeline
python wildfire_scar_demo.py        # before/after burn scar comparison

Tool Reference

All tools accept an optional output_mode parameter ("json" default, or "text" for human-readable output). Download tools that produce GeoTIFF output automatically generate a PNG preview (preview_ref in the response).

{
  "bbox": [0.85, 51.85, 0.95, 51.92],        # [west, south, east, north]
  "collection": "sentinel-2-c1-l2a",           # optional
  "date_range": "2024-06-01/2024-08-31",       # optional
  "max_cloud_cover": 20,                        # 0-100, optional
  "max_items": 10,                              # optional
  "catalog": "earth_search"                     # optional
}

stac_download_bands

{
  "scene_id": "S2B_...",                        # from search results
  "bands": ["red", "green", "blue", "nir"],     # common names or aliases (B04, SR_B4)
  "bbox": [0.85, 51.85, 0.95, 51.92],          # optional crop
  "output_format": "geotiff",                   # "geotiff" or "png"
  "cloud_mask": false                            # Sentinel-2 only
}

stac_download_rgb

{
  "scene_id": "S2B_...",
  "bbox": [0.85, 51.85, 0.95, 51.92],          # optional crop
  "output_format": "png",                        # "geotiff" or "png"
  "cloud_mask": false                            # Sentinel-2 only
}

stac_download_composite

{
  "scene_id": "S2B_...",
  "bands": ["nir", "red", "green"],             # false-color infrared
  "composite_name": "false_color_ir",           # optional label
  "bbox": [0.85, 51.85, 0.95, 51.92],          # optional crop
  "output_format": "geotiff",                   # "geotiff" or "png"
  "cloud_mask": false                            # Sentinel-2 only
}

stac_compute_index

{
  "scene_id": "S2B_...",
  "index_name": "ndvi",                         # ndvi, ndwi, ndbi, evi, savi, bsi
  "bbox": [0.85, 51.85, 0.95, 51.92],          # optional crop
  "cloud_mask": true,                            # mask clouds with NaN
  "output_format": "geotiff"                    # "geotiff" or "png"
}

stac_mosaic

{
  "scene_ids": ["S2B_001", "S2B_002"],
  "bands": ["red", "green", "blue"],
  "bbox": [0.85, 51.85, 0.95, 51.92],          # optional
  "method": "last",                              # "last" or "quality" (SCL-based)
  "output_format": "geotiff",                   # "geotiff" or "png"
  "cloud_mask": false                            # per-scene masking before merge
}

stac_time_series

{
  "bbox": [0.85, 51.85, 0.95, 51.92],
  "bands": ["red", "nir"],
  "date_range": "2024-01-01/2024-12-31",
  "collection": "sentinel-2-c1-l2a",            # optional
  "max_cloud_cover": 10,                         # optional
  "max_items": 50,                               # optional
  "catalog": "earth_search"                      # optional
}

stac_estimate_size

{
  "scene_id": "S2B_...",
  "bands": ["red", "green", "blue", "nir"],
  "bbox": [0.85, 51.85, 0.95, 51.92]            # optional crop
}

stac_describe_collection

{
  "collection_id": "sentinel-2-l2a",
  "catalog": "earth_search",                     # optional
  "output_mode": "text"                          # optional: "json" or "text"
}

stac_get_conformance

{
  "catalog": "earth_search",                     # optional
  "output_mode": "json"                          # optional: "json" or "text"
}

Development

Setup

# Clone the repository
git clone <repository-url>
cd chuk-mcp-stac

# Install with uv (recommended)
uv sync --dev

# Or with pip
pip install -e ".[dev]"

Running Tests

make test              # Run tests
make test-cov          # Run tests with coverage
make coverage-report   # Show coverage report

Code Quality

make lint      # Run linters
make format    # Auto-format code
make typecheck # Run type checking
make security  # Run security checks
make check     # Run all checks

Building

make build         # Build package
make docker-build  # Build Docker image

Deployment

Fly.io

Deploy to Fly.io with a single command:

# First time setup
fly launch

# Deploy updates
fly deploy

Docker

# Build the image
docker build -t chuk-mcp-stac .

# Run the container
docker run -p 8002:8002 chuk-mcp-stac

Architecture

Built on top of chuk-mcp-server, this server uses:

  • Async-First: Native async/await with sync rasterio wrapped in asyncio.to_thread()

  • Type-Safe: Pydantic v2 models with extra="forbid" for all responses

  • Efficient I/O: Cloud-Optimized GeoTIFF (COG) reading with windowed access

  • Smart Caching: LRU scene cache (200 entries), TTL client cache (300s), in-memory raster cache (100 MB LRU)

  • Band Resolution Matching: Automatic bilinear resampling when bands differ in resolution

  • Band Aliases: Hardware names (B04, SR_B4) resolved to common names at entry

  • Artifact Storage: Pluggable storage via chuk-artifacts (memory, filesystem, S3)

  • CRS Handling: Automatic EPSG:4326 to native CRS reprojection for bbox queries

  • Cloud Masking: SCL-based masking for Sentinel-2 (integer → 0, float → NaN)

  • Spectral Indices: NDVI, NDWI, NDBI, EVI, SAVI, BSI with automatic band selection

  • PNG Output: 2nd-98th percentile stretch for visual inspection and LLM rendering

  • Auto-Preview: PNG preview auto-generated alongside every GeoTIFF download (preview_ref)

  • Temporal Compositing: Pixel-by-pixel statistical composites (median, mean, max, min)

  • Quality Mosaics: SCL-based best-pixel selection for quality-weighted merges

  • Progress Callbacks: Optional progress reporting for long-running operations

  • PC Auth: Automatic Planetary Computer asset signing when package is installed

  • Dual Output: All 21 tools support output_mode="text" for human-readable responses

See ARCHITECTURE.md for design principles and data flow diagrams. See SPEC.md for the full tool specification with parameter tables. See ROADMAP.md for development status and planned features.

Supported Catalogs

Catalog

Collections

URL

Earth Search (AWS)

Sentinel-2, Landsat, NAIP, MODIS

earth-search.aws.element84.com

Planetary Computer (Microsoft)

Sentinel-2, Landsat, MODIS

planetarycomputer.microsoft.com

USGS Landsat Look

Landsat

landsatlook.usgs.gov

Also supports Sentinel-1 SAR (VV/VH) and Copernicus DEM GLO-30 collections.

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

  1. Fork the repository

  2. Create your feature branch (git checkout -b feature/amazing-feature)

  3. Commit your changes (git commit -m 'Add amazing feature')

  4. Push to the branch (git push origin feature/amazing-feature)

  5. Open a Pull Request

License

Apache License 2.0 - See LICENSE for details.

Acknowledgments

Available Tools

24 tools
stac_capabilitiesA

List server capabilities: catalogs, collections, and band info.

Returns a comprehensive overview of what this server can do, including supported catalogs, satellite collections, band names per platform, and available spectral indices with required bands.

Args: output_mode: Response format - "json" (default) or "text"

Returns: JSON with catalogs, collections, band mappings, and spectral indices

Tips for LLMs: - Call this FIRST to understand what the server can do before planning any analysis workflow - Use band_mappings to know which band names to pass to download tools - Use spectral_indices to see which indices are available and what bands they require - Typical workflow: stac_capabilities → stac_search → stac_describe_scene → stac_download_bands or stac_compute_index - Collections: sentinel-2-l2a (optical, 10m), landsat-c2-l2 (optical, 30m), sentinel-1-grd (SAR radar, 10m), cop-dem-glo-30 (elevation, 30m)

Example: caps = await stac_capabilities()

ParametersJSON Schema
NameRequiredDescriptionDefault
output_modeNojson

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It explains the tool is read-only (listing capabilities) and details the return structure. However, it does not explicitly state that it does not modify server state, but this is clear from context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is somewhat lengthy but well-structured with sections (Args, Returns, Tips, Example). The first sentence delivers the core purpose, and every section adds value. Minor redundancy in the returns section listing what's in the JSON.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite no output schema, the description fully explains the return values (catalogs, collections, band mappings, spectral indices) and provides a typical workflow and example. It completely covers what an agent needs.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description fully compensates by documenting the only parameter 'output_mode' with allowed values (json/text) and default, adding meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'List server capabilities: catalogs, collections, and band info.' It distinguishes itself from sibling tools (e.g., stac_search, stac_describe_scene) by being a top-level discovery tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'Tips for LLMs' section explicitly advises calling this tool first, provides a typical workflow, and explains when to use it vs. other tools. This is exemplary guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stac_compute_indexA

Compute a spectral index (e.g., NDVI, NDWI) for a scene.

Automatically downloads the required bands, computes the index formula, and stores the result as a single-band float32 raster.

Supported indices:

  • ndvi: Vegetation (NIR - Red) / (NIR + Red)

  • ndwi: Water (Green - NIR) / (Green + NIR)

  • ndbi: Built-up (SWIR16 - NIR) / (SWIR16 + NIR)

  • evi: Enhanced Vegetation 2.5*(NIR - Red) / (NIR + 6Red - 7.5Blue + 1)

  • savi: Soil-Adjusted Vegetation ((NIR - Red) / (NIR + Red + 0.5)) * 1.5

  • bsi: Bare Soil ((SWIR16 + Red) - (NIR + Blue)) / ((SWIR16 + Red) + (NIR + Blue))

Args: scene_id: Scene identifier from a previous search index_name: Index to compute (ndvi, ndwi, ndbi, evi, savi, bsi) bbox: Optional crop bbox in EPSG:4326 [west, south, east, north] cloud_mask: Apply SCL-based cloud masking before computation (Sentinel-2 only) output_format: Output format - "geotiff" (default) or "png" output_mode: Response format - "json" (default) or "text"

Returns: JSON with artifact_ref and value_range for the computed index

Tips for LLMs: - Use stac_capabilities to see all available indices and required bands - Interpretation guide: - NDVI: >0.6 dense vegetation, 0.2-0.6 moderate, <0.2 bare/water - NDWI: >0 water, <0 land; useful for flood mapping - NDBI: >0 built-up, <0 natural land cover - EVI: similar to NDVI but corrects for atmospheric and soil effects - SAVI: like NDVI but better in areas with sparse vegetation - BSI: >0 bare soil, <0 vegetated - Only works for optical collections (Sentinel-2, Landsat) - Enable cloud_mask=True for cleaner results with Sentinel-2 data - For temporal change analysis, compute the same index on multiple dates and compare value_range

Example: ndvi = await stac_compute_index( scene_id="S2B_...", index_name="ndvi", bbox=[0.85, 51.85, 0.95, 51.92] )

ParametersJSON Schema
NameRequiredDescriptionDefault
bboxNo
scene_idYes
cloud_maskNo
index_nameYes
output_modeNojson
output_formatNogeotiff

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It explains that the tool automatically downloads required bands, computes the index formula, and stores the result as a single-band float32 raster. It also describes the return format (JSON with artifact_ref and value_range). No contradictions with annotations (none provided). Could mention potential storage implications, but overall transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is somewhat lengthy with full formulas and tips, but it is well-structured: summary, supported indices list, args, returns, tips, example. Every section adds value, though a few details (like exact formulas) could be condensed if redundancy is avoided.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 6 parameters, no output schema, and no annotations, the description is comprehensive. It explains inputs, outputs, usage context, and provides interpretation tips. It feels complete for an AI agent to invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

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 provides detailed parameter descriptions: scene_id, index_name with list and formulas, bbox format, cloud_mask explanation, output_format vs output_mode, and interpretation guides. This adds significant meaning beyond the raw schema, making it easy for an AI to use correctly.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool computes a spectral index like NDVI or NDWI for a scene. It specifies the verb 'compute' and the resource 'spectral index', distinguishing it from sibling tools like 'stac_download_bands' or 'stac_temporal_composite'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides usage context such as 'Only works for optical collections (Sentinel-2, Landsat)' and suggests using 'stac_capabilities' to see available indices. It advises enabling 'cloud_mask=True' for cleaner results and notes temporal change analysis. However, it does not explicitly state when not to use this tool or mention alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stac_coverage_checkA

Check if cached scenes fully cover a requested bounding box.

Rasterizes the target bbox into a grid and checks which cells are covered by the provided scenes. Useful for planning mosaics to ensure gap-free coverage.

Args: bbox: Target bounding box [west, south, east, north] in EPSG:4326 scene_ids: Scene identifiers (must be cached from prior stac_search calls) output_mode: Response format - "json" (default) or "text"

Returns: JSON with coverage percentage and uncovered areas

Tips for LLMs: - Call this before stac_mosaic to verify scenes fully cover your area of interest - If coverage is less than 100%, search for more scenes or widen the date range to find additional tiles - Scenes must have been found by a prior stac_search call

Example: check = await stac_coverage_check( bbox=[0.8, 51.8, 1.0, 51.95], scene_ids=["S2B_...", "S2A_..."] )

ParametersJSON Schema
NameRequiredDescriptionDefault
bboxYes
scene_idsYes
output_modeNojson

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It explains the rasterization process and output format, but doesn't mention read-only nature or other behavioral traits like rate limits. Still transparent enough for safe use.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured with Args, Returns, Tips, and Example. Each section is useful, though slightly verbose. Front-loaded with the main purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema, but description explains the JSON return format with coverage percentage and uncovered areas. Adequately complete for the tool's purpose.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so description fully compensates by explaining bbox format (EPSG:4326), scene_ids requirement (cached from stac_search), and output_mode default. Adds meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Check if cached scenes fully cover a requested bounding box,' using a specific verb and resource. This distinguishes it from siblings like stac_mosaic and stac_search.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit usage guidance: 'Call this before stac_mosaic to verify scenes fully cover your area of interest' and tips for handling insufficient coverage. Also specifies scenes must be from prior stac_search.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stac_describe_collectionA

Get detailed information about a STAC collection.

Returns band wavelengths, recommended composites, supported spectral indices, cloud masking info, and LLM-friendly usage guidance.

For known collections (Sentinel-2, Landsat, Sentinel-1, DEM), provides rich metadata including band names needed for download tools. Unknown collections still return live STAC metadata.

Args: collection_id: Collection identifier. Options: sentinel-2-l2a, sentinel-2-c1-l2a, landsat-c2-l2, sentinel-1-grd, cop-dem-glo-30 catalog: Catalog name (default: earth_search). Options: earth_search, planetary_computer, usgs output_mode: Response format - "json" (default) or "text"

Returns: JSON with band details, composites, spectral indices, and guidance

Tips for LLMs: - Call this to discover band names before using stac_download_bands - The composites field lists pre-defined band combinations (e.g., true_color = [red, green, blue]) - The spectral_indices field shows which indices this collection supports - The llm_guidance field contains domain-specific usage advice - Check cloud_mask_band — if None, the collection is non-optical (SAR radar or DEM) and cloud_mask=True will fail

Example: detail = await stac_describe_collection( collection_id="sentinel-2-l2a" )

ParametersJSON Schema
NameRequiredDescriptionDefault
catalogNo
output_modeNojson
collection_idYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full behavioral disclosure. It describes the return content for known collections (rich metadata) and unknown collections (live STAC metadata). It also mentions the output_mode parameter and warns about cloud_mask_band being None for non-optical collections. This is transparent about what the tool does and does not do.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a clear first line, bullet-like list of returns, then sections for Args, Returns, and Tips. Every sentence adds value—there is no verbosity or redundancy. It is front-loaded with the core purpose, then progressively elaborates.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having no output schema and 3 parameters, the description covers what an agent needs: expected return content (band details, composites, indices, guidance), handling of unknown collections, parameter options, and integration tips with sibling tools (e.g., stac_download_bands). It also addresses an edge case (cloud_mask_band None). This is comprehensive for the tool's relatively simple role.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description fully compensates by listing each parameter with its options (e.g., collection_id options: sentinel-2-l2a, landsat-c2-l2, etc.; catalog options: earth_search, planetary_computer, usgs; output_mode options: json or text). This adds significant meaning beyond the schema's basic type/required information.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description begins with a clear statement of purpose: 'Get detailed information about a STAC collection.' It specifies what is returned (band wavelengths, composites, spectral indices, etc.) and distinguishes from sibling tools by focusing on collections (vs. scenes or listings). The verb 'describe' and object 'collection' are specific and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description includes a 'Tips for LLMs' section that explicitly recommends calling this tool before using stac_download_bands, and advises checking cloud_mask_band for non-optical collections. This provides clear usage context but does not directly compare with alternative sibling tools (e.g., stac_search or stac_list_collections) nor state when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stac_describe_sceneA

Get detailed information about a specific scene.

Shows all available assets/bands, properties, CRS, and download URLs. The scene must have been returned by a previous stac_search call.

Args: scene_id: Scene identifier from a search result (use scene_id from stac_search) output_mode: Response format - "json" (default) or "text"

Returns: JSON with full scene details including all assets, CRS, and properties

Tips for LLMs: - Call this after stac_search to see available bands before downloading - The assets list shows every downloadable band and its resolution - Use the band keys (e.g., red, nir, scl) in stac_download_bands - Check cloud_cover to decide if the scene is usable

Example: detail = await stac_describe_scene( scene_id="S2B_MSIL2A_20240715T105629_N0510_R094_T31UCR_20240715T143301" )

ParametersJSON Schema
NameRequiredDescriptionDefault
scene_idYes
output_modeNojson

TDQS

A4.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It explains what is returned but does not disclose behavioral traits like read-only nature, authentication, or error handling. Adequate but not thorough.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured with purpose, args, returns, tips, and example. No unnecessary sentences; every part adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 2 parameters and no output schema, the description covers purpose, inputs, expected output, and usage context. Includes tips linking to stac_download_bands, making it complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description compensates fully: explains scene_id as a search result identifier and output_mode as format with default. Adds meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Get detailed information' and the resource 'scene'. It distinguishes from siblings like stac_describe_collection and stac_search by focusing on a single scene's details.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states prerequisite ('scene must have been returned by a previous stac_search call') and provides context for when to use ('after stac_search'). Does not explicitly exclude scenarios but offers clear guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stac_download_bandsA

Download specific bands from a scene as a GeoTIFF or PNG.

Reads band COGs via HTTP, windows to the requested bbox, and stores the result in chuk-artifacts. The bbox should be in EPSG:4326 — CRS reprojection to the raster's native CRS is handled automatically.

Args: scene_id: Scene identifier from a previous stac_search call bands: Band names to download. Common names: - Sentinel-2: red, green, blue, nir, swir16, swir22, rededge1-3, scl - Landsat: red, green, blue, nir08, swir16, swir22, coastal, qa_pixel - Sentinel-1: vv, vh - DEM: data bbox: Optional crop bbox in EPSG:4326 [west, south, east, north]. Strongly recommended to avoid downloading full tiles output_format: "geotiff" (default, lossless, for analysis) or "png" (8-bit lossy with percentile stretch, for preview/display) cloud_mask: Apply SCL-based cloud masking (Sentinel-2 only). Masked pixels become 0 (integer) or NaN (float) output_mode: Response format - "json" (default) or "text"

Returns: JSON with artifact_ref, shape, dtype, and optional preview_ref

Tips for LLMs: - Use stac_describe_scene first to see available band names - Always provide a bbox to limit download size - Use output_format="png" when the user wants to see the image - GeoTIFF preserves full radiometric precision for analysis - A PNG preview is auto-generated alongside GeoTIFF downloads - For RGB visualisation, prefer stac_download_rgb (simpler) - For spectral indices, prefer stac_compute_index (automatic)

Example: result = await stac_download_bands( scene_id="S2B_...", bands=["red", "nir"], bbox=[0.85, 51.85, 0.95, 51.92] )

ParametersJSON Schema
NameRequiredDescriptionDefault
bboxNo
bandsYes
scene_idYes
cloud_maskNo
output_modeNojson
output_formatNogeotiff

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It discloses that it reads COGs via HTTP, windows to bbox, stores in chuk-artifacts, handles CRS reprojection, auto-generates PNG preview. It does not explicitly mention limits or auth, but adequately covers the core behavior. Minor gap in listing potential 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections (intro, Args, Returns, Tips, Example). While somewhat verbose, every sentence adds value. The front-loading of the main purpose and tips makes it efficient. Could be slightly more concise, but clarity is excellent.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (6 params, no output schema, no annotations), the description covers all necessary context: parameter semantics, return value format, usage tips, and a concrete example. It compensates for the missing schema descriptions and output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

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 provides detailed explanations for all six parameters, including examples for band names per satellite, bbox format, output format choices, cloud mask scope, and output mode. This adds significant meaning beyond the raw schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Download specific bands from a scene as a GeoTIFF or PNG.' The verb 'download' and resource 'bands from a scene' are specific. It distinguishes from siblings by explicitly mentioning alternatives like stac_download_rgb and stac_compute_index.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'Tips for LLMs' section provides explicit guidance: use stac_describe_scene first, always provide a bbox, prefer png for viewing, geotiff for analysis, and prefer sibling tools for RGB or indices. It clearly states when to use this tool vs alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stac_download_compositeA

Download a multi-band composite from a scene.

Creates a composite from any combination of bands. Band order determines RGB channel mapping (first=R, second=G, third=B).

Args: scene_id: Scene identifier from a previous stac_search call bands: Band names for the composite (order = R,G,B channels). Common recipes: - ["nir", "red", "green"] — false colour infrared (vegetation=red) - ["swir16", "nir", "red"] — agriculture (crops=bright green) - ["swir16", "swir22", "red"] — geology/minerals composite_name: Label for the composite (e.g., "false_color_ir") bbox: Optional crop bbox in EPSG:4326 [west, south, east, north] output_format: "geotiff" (default, lossless) or "png" (8-bit preview) cloud_mask: Apply SCL-based cloud masking (Sentinel-2 only) output_mode: Response format - "json" (default) or "text"

Returns: JSON with artifact_ref for the composite

Tips for LLMs: - Use stac_describe_collection to see pre-defined composite recipes - Band order matters: first band → Red, second → Green, third → Blue - For true-colour RGB, use stac_download_rgb instead (simpler) - For single-value analysis, use stac_compute_index (e.g., NDVI)

Example: false_color = await stac_download_composite( scene_id="S2B_...", bands=["nir", "red", "green"], composite_name="false_color_ir" )

ParametersJSON Schema
NameRequiredDescriptionDefault
bboxNo
bandsYes
scene_idYes
cloud_maskNo
output_modeNojson
output_formatNogeotiff
composite_nameNocustom

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so description carries full burden. Discloses band order mapping, cloud_mask limitation (Sentinel-2 only), output formats, and return format. Lacks explicit statements on side effects or auth needs, but overall transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured with sections (Description, Args, Returns, Tips, Example). Slightly long but every sentence adds value. Could be slightly more concise, but appropriate for complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema and no annotations, description covers parameters, usage, return format, and alternatives. Lacks error handling or invalid input behavior, but sufficient for agent invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has 0% description coverage, so description must compensate. It explains all parameters: scene_id from search, bands with examples, composite_name, bbox, output_format, cloud_mask, output_mode. Adds recipes and tips beyond schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Download a multi-band composite from a scene' and explicitly distinguishes from siblings like stac_download_rgb and stac_compute_index, making the purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit guidance: 'For true-colour RGB, use stac_download_rgb instead' and 'For single-value analysis, use stac_compute_index'. Also suggests using stac_describe_collection to see recipes, offering alternatives and context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stac_download_rgbA

Download a true-color RGB composite from a scene.

Convenience wrapper around stac_download_bands that automatically selects red, green, blue bands. This is the simplest way to get a visual satellite image.

Args: scene_id: Scene identifier from a previous stac_search call bbox: Optional crop bbox in EPSG:4326 [west, south, east, north]. Strongly recommended to avoid downloading full tiles output_format: "geotiff" (default, lossless) or "png" (8-bit lossy, suitable for inline display by LLMs) cloud_mask: Apply SCL-based cloud masking (Sentinel-2 only) output_mode: Response format - "json" (default) or "text"

Returns: JSON with artifact_ref for the RGB composite

Tips for LLMs: - Use output_format="png" when the user wants to see the image — PNG can be rendered inline - GeoTIFF preserves full 16-bit precision but cannot be displayed inline - For false-color composites (e.g., NIR/Red/Green), use stac_download_composite instead - Only works for optical collections (Sentinel-2, Landsat) that have red, green, blue bands

Example: rgb = await stac_download_rgb(scene_id="S2B_...", output_format="png")

ParametersJSON Schema
NameRequiredDescriptionDefault
bboxNo
scene_idYes
cloud_maskNo
output_modeNojson
output_formatNogeotiff

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It states it is a convenience wrapper, automatically selects bands, applies cloud masking optionally, and returns JSON with artifact_ref. It does not mention side effects (likely none), but is transparent about constraints (optical only). Minor gap: no explicit mention of idempotency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured with summary, args, returns, and tips. Every sentence serves a purpose. The 'Tips for LLMs' is slightly long but adds practical value. Could be slightly more concise, but overall effective.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, description explains return format (JSON with artifact_ref). It covers parameters, usage context, and tips. Missing explicit error handling or prerequisites beyond optical collections, but still fairly complete for a 5-parameter tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so description must compensate. It describes scene_id, bbox (strongly recommended), output_format (geotiff vs png with use cases), cloud_mask (SCL-based, Sentinel-2 only), and output_mode (json or text). It adds value beyond schema, e.g., why bbox is important and when to use PNG. However, output_mode's options are not fully detailed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it downloads a true-color RGB composite from a scene, distinguishing it from stac_download_bands (convenience wrapper) and stac_download_composite (false-color). The verb 'download' and resource 'RGB composite' are specific and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly provides when to use (RGB visual) and when not (false-color -> use stac_download_composite). Includes tips for LLMs on output_format choices, and states it only works for optical collections. This is comprehensive guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stac_estimate_sizeA

Estimate download size for bands from a scene (no pixel data read).

Reads only COG headers to determine dimensions, dtype, and estimated file size. Use this before large downloads to understand how much data will be transferred.

Args: scene_id: Scene identifier from a previous search bands: Band names to estimate (e.g., ["red", "green", "blue", "nir"]) bbox: Optional crop bbox in EPSG:4326 [west, south, east, north] output_mode: Response format - "json" (default) or "text"

Returns: JSON with per-band size details and total estimate

Tips for LLMs: - Call this BEFORE large downloads to check feasibility - If estimated_mb > 500, suggest a smaller bbox or fewer bands - No pixel data is read — only COG headers, so this is very fast - Use the per-band breakdown to see which bands are largest (e.g., 10m bands are ~4x larger than 20m bands) - Useful for planning stac_mosaic or stac_temporal_composite where multiple scenes multiply the total data volume

Example: estimate = await stac_estimate_size( scene_id="S2B_...", bands=["red", "nir"], bbox=[0.85, 51.85, 0.95, 51.92] )

ParametersJSON Schema
NameRequiredDescriptionDefault
bboxNo
bandsYes
scene_idYes
output_modeNojson

TDQS

A4.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses that no pixel data is read (only COG headers), making it very fast. It describes the return format (JSON with per-band size details) and provides tips about band size comparisons. While thorough, it does not address error handling or edge cases, which would push it to 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured: a one-line summary, followed by Args, Returns, Tips for LLMs, and an Example. Every sentence adds value, and the structure is front-loaded with the core purpose. It is concise yet comprehensive.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (4 params, 2 required, no output schema, no annotations), the description is complete. It covers all parameters, return values, use cases, and tips for integration with sibling tools (mosaic, composite). The example rounds out the completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

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 explains each parameter: scene_id, bands (with examples), bbox (format and CRS), and output_mode (default and alternatives). The example further clarifies usage. This adds substantial meaning beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Estimate download size for bands from a scene (no pixel data read).' It specifies reading only COG headers to determine dimensions, dtype, and estimated file size. This distinguishes it from download tools and sibling tools like stac_download_bands.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance on when to use: 'Use this before large downloads to understand how much data will be transferred.' Tips for LLMs further instruct: 'Call this BEFORE large downloads to check feasibility' and recommend actions if estimated_mb > 500. It also mentions planning for stac_mosaic or stac_temporal_composite, offering context for alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stac_find_pairsA

Find before/after scene pairs for change detection.

Searches two date ranges and matches scenes by spatial overlap, useful for detecting changes between time periods (e.g., flood damage, urban growth, deforestation, seasonal vegetation change).

Args: bbox: Bounding box [west, south, east, north] in EPSG:4326 before_range: Before date range "YYYY-MM-DD/YYYY-MM-DD" after_range: After date range "YYYY-MM-DD/YYYY-MM-DD" collection: STAC collection (default: sentinel-2-l2a). Options: sentinel-2-l2a, sentinel-2-c1-l2a, landsat-c2-l2, sentinel-1-grd, cop-dem-glo-30 max_cloud_cover: Maximum cloud cover percentage 0-100 (default: 20). Ignored for non-optical collections (sentinel-1-grd, cop-dem-glo-30). catalog: Catalog name (default: earth_search). Options: earth_search, planetary_computer, usgs output_mode: Response format - "json" (default) or "text"

Returns: JSON with matched scene pairs sorted by overlap percentage

Tips for LLMs: - Best for change detection workflows: find pairs, then download the same bands for before/after scenes and compare - For flood mapping: use sentinel-1-grd (SAR sees through clouds) with before_range = dry season, after_range = flood event - For vegetation change: use sentinel-2-l2a, then compute NDVI for each scene in the pair - Higher overlap_percent means better spatial coverage for comparison - Follow up with stac_download_bands or stac_compute_index on each scene in the pair

Example: pairs = await stac_find_pairs( bbox=[0.8, 51.8, 1.0, 51.95], before_range="2024-01-01/2024-03-31", after_range="2024-07-01/2024-09-30" )

ParametersJSON Schema
NameRequiredDescriptionDefault
bboxYes
catalogNo
collectionNo
after_rangeYes
output_modeNojson
before_rangeYes
max_cloud_coverNo

TDQS

A4.6/5.0
Behavior4/5

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 describes the output format (JSON with matched pairs sorted by overlap percentage), notes that max_cloud_cover is ignored for non-optical collections, and explains the default values for collection, catalog, and output_mode. It lacks details on rate limits, authentication, or potential side effects, but these are not critical for a read-only search tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-organized with clear sections (main description, Args, Returns, Tips for LLMs, Example). It is concise yet comprehensive, front-loading the purpose and use case. Every sentence adds value, and the 'Tips for LLMs' section is particularly useful without being verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 7 parameters (3 required), no output schema, and no annotations, the description provides complete context: parameter explanations, output format, practical use-case guidance, and an example. It adequately prepares an agent to use the tool correctly in a change detection workflow.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 0%, yet the 'Args' section in the description provides detailed explanations for every parameter: bbox format, date format for ranges, collection options, max_cloud_cover range and behavior, catalog options, and output_mode options. It also includes the default for max_cloud_cover and clarifies that it is ignored for non-optical collections. This adds substantial meaning beyond the raw schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly defines the tool's purpose: 'Find before/after scene pairs for change detection.' It explains the mechanism (searches two date ranges, matches by spatial overlap) and gives concrete use cases (flood damage, urban growth, deforestation, seasonal vegetation change). This clearly distinguishes it from sibling tools like stac_search or stac_compute_index.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'Tips for LLMs' section provides explicit guidance on when to use the tool (change detection workflows) and offers specific use-case recipes (flood mapping with sentinel-1-grd, vegetation change with sentinel-2-l2a). It also suggests follow-up tools (stac_download_bands, stac_compute_index). However, it does not explicitly state when not to use this tool or mention alternative tools for non-change-detection needs.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stac_get_artifactA

Retrieve a stored artifact and save it as a local file for viewing.

Downloads the artifact bytes from the artifact store and writes them to a local file. Returns the file path so the image can be opened in any viewer.

Args: artifact_ref: Artifact ID from a previous download tool call (the artifact_ref or preview_ref value) output_mode: Response format - "json" (default) or "text"

Returns: JSON with file_path, mime type, size, and artifact metadata

Tips for LLMs: - Use the preview_ref (PNG) from download results for quick viewing - Use the artifact_ref (GeoTIFF) for full-resolution geospatial data - The file is saved to a temporary directory and can be opened with any image viewer or GIS application - PNG files can be opened with: open (macOS) - GeoTIFF files can be opened with QGIS, rasterio, or similar

Example: result = await stac_get_artifact( artifact_ref="a7c666e6555548aea2d5351cc65bf173" ) # Returns: {"file_path": "/tmp/stac_artifacts/a7c666...png", ...}

ParametersJSON Schema
NameRequiredDescriptionDefault
output_modeNojson
artifact_refYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It explains that the file is saved locally and returns metadata, but does not specify cleanup or potential side effects. Still, it provides sufficient behavioral context for safe invocation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured: summary, args, returns, tips, example. It is somewhat lengthy but every sentence contributes value. Concise enough for a tool with two parameters.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description fully describes return values (file_path, mime type, size, metadata) and provides an example. Both parameters are explained. Completeness is high for this tool's complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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 explains artifact_ref as 'Artifact ID from a previous download tool call' and distinguishes between preview_ref and artifact_ref. output_mode is mentioned with defaults. This adds significant meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Retrieve a stored artifact and save it as a local file for viewing.' It specifies the verb (retrieve/save) and resource (artifact), distinguishing it from sibling tools that handle downloads of bands or composites.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'Tips for LLMs' section provides guidance on when to use preview_ref vs artifact_ref, and mentions the file is saved to a temporary directory. However, it lacks explicit exclusion criteria or comparison with alternative tools, so it's not a perfect 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stac_get_conformanceA

Check which STAC API features a catalog supports.

Reads the catalog's conformance URIs and matches them against known STAC API conformance classes to determine feature support (core, item_search, filter, sort, fields, query, collections).

Args: catalog: Catalog name (default: earth_search). Options: earth_search, planetary_computer, usgs output_mode: Response format - "json" (default) or "text"

Returns: JSON with feature support flags and raw conformance URIs

Tips for LLMs: - Rarely needed — most workflows don't require conformance checking - Useful for debugging when a catalog doesn't support expected features - Check for "query" support if advanced filtering is needed

Example: conformance = await stac_get_conformance(catalog="earth_search")

ParametersJSON Schema
NameRequiredDescriptionDefault
catalogNo
output_modeNojson

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It explains the internal behavior (reads conformance URIs, matches against known classes) and return format (JSON with flags and raw URIs). It implies a read-only, non-destructive operation, which is accurately disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is approximately 100 words, well-structured with sections (main, Args, Returns, Tips, Example). Each sentence serves a purpose—no redundancy. It is concise yet informative.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations, no output schema, and 2 parameters, the description is remarkably complete: it covers purpose, parameters, return value, usage guidance, and provides an example. Missing details like error handling are minor; overall, it enables correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, but the description fully compensates. It enumerates allowed values for 'catalog' ('earth_search', 'planetary_computer', 'usgs'), default for 'output_mode' ('json'), and options ('text'). This adds meaning beyond the empty schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it checks which STAC API features a catalog supports, using a specific verb ('check') and resource ('catalog's conformance URIs'). It distinguishes from sibling tools like stac_capabilities and stac_search by focusing on feature support detection.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'Tips for LLMs' section explicitly states it's 'Rarely needed' and provides specific use cases (debugging, checking query support), guiding when to use and when not to. This is explicit guidance beyond typical descriptions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stac_list_catalogsA

List all known STAC catalogs.

Returns pre-configured catalog endpoints that can be searched. Each catalog hosts different satellite collections.

Args: output_mode: Response format - "json" (default) or "text"

Returns: JSON with catalog names and endpoint URLs

Tips for LLMs: - Use stac_capabilities instead for a full overview including collections, bands, and indices - Default catalog is earth_search (AWS Element 84) - planetary_computer requires no API key (auto-authenticated)

Example: catalogs = await stac_list_catalogs()

ParametersJSON Schema
NameRequiredDescriptionDefault
output_modeNojson

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, but the description fully discloses that it is a read-only list operation returning JSON with catalog names and URLs. No hidden side effects or contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with Args, Returns, Tips, and Example sections. While slightly wordy, all content is relevant and earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema and simple functionality, the description sufficiently explains the return format (JSON with catalog names and endpoint URLs) and provides usage examples, making it complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The only parameter 'output_mode' is well described with allowed values ('json' or 'text') and default, compensating for the lack of schema descriptions (0% coverage).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it lists all known STAC catalogs and returns pre-configured endpoints. It distinguishes itself from sibling tools like stac_capabilities by noting that stac_capabilities provides a fuller overview.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly advises to use stac_capabilities for a full overview, mentions default catalog and auto-authentication for planetary_computer, giving clear context for when to use this tool vs alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stac_list_collectionsA

List available collections in a STAC catalog.

Queries the catalog's live API to discover all hosted collections with titles, descriptions, and spatial/temporal extents.

Args: catalog: Catalog name (default: earth_search). Options: earth_search, planetary_computer, usgs output_mode: Response format - "json" (default) or "text"

Returns: JSON list of collections with titles, descriptions, and extents

Tips for LLMs: - Use this to discover what data is available in a specific catalog - For detailed band/composite info on a collection, follow up with stac_describe_collection - Different catalogs host different collections — if a collection isn't found, try another catalog

Example: collections = await stac_list_collections(catalog="earth_search")

ParametersJSON Schema
NameRequiredDescriptionDefault
catalogNo
output_modeNojson

TDQS

A4.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so the description carries full burden. It states it queries the live API (read-only), but does not mention authentication, rate limits, or error handling. Disclosure is adequate but could be more comprehensive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured: short purpose, clear sections for args/returns/tips, and an example. Every sentence adds value without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a listing tool with no output schema, the description covers input parameters, return format (JSON list with titles, descriptions, extents), and usage context. It is complete given the tool's simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

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 adds default values, options, and explanations for both parameters, providing significant meaning beyond the raw schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'List available collections in a STAC catalog', specifying the verb and resource. It differentiates from sibling tools by explicitly mentioning follow-up with stac_describe_collection for detailed info.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit when-to-use guidance ('discover what data is available'), alternative catalogs, and a related tool for deeper detail (stac_describe_collection). Also suggests trying other catalogs if a collection is not found.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stac_mapA
Read-only

Visualise STAC scene search results as a multi-layer footprint map. Scenes appear as bounding-box polygons, grouped by collection, with cloud cover, acquisition date, and thumbnail URL in the popup. Run stac_search first, then pass the scene_ids here.

ParametersJSON Schema
NameRequiredDescriptionDefault
basemapNosatellite
scene_idsNo

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds behavioral context beyond the readOnlyHint annotation by detailing the map's visual elements (polygons, grouping, popup content). It confirms the tool is read-only and visual, consistent with the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences efficiently convey purpose, visual output, and usage prerequisite. No redundant information, but could briefly mention the basemap parameter for completeness without adding much length.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 2 parameters and no output schema, the description covers the main use case and prerequisite. However, it omits the basemap parameter and scene_ids format, leaving gaps for an agent to fully invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description should compensate. It mentions scene_ids and how to pass them ('pass the scene_ids here') but does not explain the format (e.g., comma-separated or array) nor the basemap parameter. This leaves ambiguity for the agent.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool visualizes STAC scene search results as a multi-layer footprint map, specifying what appears (bounding-box polygons grouped by collection) and details in popups. This distinguishes it from sibling tools like stac_mosaic or stac_pairs_map.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly instructs to run stac_search first and then pass scene_ids, providing a clear prerequisite and usage flow. It implies when to use this tool (after a search) but does not explicitly state when not to use alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stac_mosaicA

Create a mosaic from multiple scenes.

Combines overlapping scenes into a single seamless raster. Useful when your area of interest spans multiple satellite tiles.

Args: scene_ids: List of scene identifiers to mosaic (from stac_search) bands: Bands to include (e.g., ["red", "green", "blue"]) bbox: Output bounding box [west, south, east, north] in EPSG:4326. Defaults to union of all scenes if not specified output_format: "geotiff" (default, lossless) or "png" (8-bit preview) cloud_mask: Apply SCL-based cloud masking per scene before merge (Sentinel-2 only) method: Merge method: - "last" (default): later scenes overwrite earlier in overlap areas - "quality": SCL-based best-pixel selection — picks the clearest pixel from overlapping scenes (Sentinel-2 only) output_mode: Response format - "json" (default) or "text"

Returns: JSON with artifact_ref for the mosaic raster

Tips for LLMs: - Use stac_coverage_check first to verify scenes cover the target area - Use method="quality" for cloud-free mosaics from Sentinel-2 data - Use method="last" for quick mosaics or non-optical data - For temporal compositing (e.g., seasonal median), use stac_temporal_composite instead

Example: mosaic = await stac_mosaic( scene_ids=["S2B_001", "S2B_002"], bands=["red", "green", "blue"], method="quality" )

ParametersJSON Schema
NameRequiredDescriptionDefault
bboxNo
bandsYes
methodNolast
scene_idsYes
cloud_maskNo
output_modeNojson
output_formatNogeotiff

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description fully discloses behavior: combines scenes, defaults (bbox union, method='last'), Sentinel-2 limitations for cloud_mask and quality method, and output format. Discloses that output is JSON with artifact_ref.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured with intro, parameter list, tips, and example. All sentences add value, but parameter explanations are slightly verbose. Still appropriate for the complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers all 7 parameters, required and optional, explains behavior, provides usage guidelines, tips, and an example. Output format is described. Complete for a tool with no annotations or output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has 0% description coverage, but the tool description explains every parameter in detail, including defaults and usage examples. Completely compensates for missing schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Create a mosaic from multiple scenes' and explains it combines overlapping scenes into a seamless raster. It distinguishes from siblings like stac_temporal_composite by specifying it's for when area spans multiple tiles.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Includes explicit 'Tips for LLMs' that advise using stac_coverage_check first, choosing method='quality' for cloud-free mosaics, and redirecting to stac_temporal_composite for temporal compositing. Provides clear when-to-use and alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stac_pairs_mapA
Read-only

Visualise before/after scene pairs from stac_find_pairs as a two-layer map. Blue = before, red = after. Toggle layers to compare footprint coverage between time periods.

ParametersJSON Schema
NameRequiredDescriptionDefault
basemapNosatellite
after_scene_idsNo
before_scene_idsNo

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, indicating no side effects. The description adds behavioral detail: it renders a two-layer map with toggling capability for comparing coverage. This goes beyond the annotation by specifying visual behavior and interaction, without contradicting the read-only nature.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is exceptionally concise with two sentences, front-loading the core purpose and key details (colors, layer toggling). Every word adds value, no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity (visualization only), the description is largely complete for an agent to understand its role and basic usage. It could be improved by noting parameter formats (e.g., comma-separated IDs) or the basemap default, but such details are secondary for map generation purposes.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description must compensate. It indirectly explains that before_scene_ids and after_scene_ids come from stac_find_pairs, but does not describe valid formats, constraints, or the basemap parameter's possible values. The meaning is partially inferred from the tool name and context, but explicit parameter guidance is missing.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool visualizes before/after scene pairs from stac_find_pairs as a two-layer map with specific colors (blue=before, red=after) and action (toggle layers to compare). This specific verb+resource combination distinguishes it from siblings like stac_map (general map) and stac_find_pairs (search).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage after stac_find_pairs by referencing scene pairs from that tool. It explains the map's purpose and layer comparison, providing clear context. However, it does not explicitly state when not to use it or mention alternatives, though the sibling tools are listed elsewhere.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stac_previewA

Get a preview/thumbnail URL for a scene.

Returns the URL of the scene's thumbnail or rendered preview image. Much faster than downloading full bands — useful for quick browsing.

The scene must have been returned by a previous stac_search call.

Args: scene_id: Scene identifier from a search result (use scene_id from stac_search) output_mode: Response format - "json" (default) or "text"

Returns: JSON with preview_url for the scene's thumbnail

Tips for LLMs: - Use for quick visual checks before committing to full band downloads - The preview URL is a remote image that can be displayed directly - Not all scenes have thumbnails — check for errors in the response

Example: preview = await stac_preview(scene_id="S2B_...")

ParametersJSON Schema
NameRequiredDescriptionDefault
scene_idYes
output_modeNojson

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It discloses the return format (preview_url), response modes (json/text), and that not all scenes have thumbnails. It is transparent about the operation being a quick preview, but could mention potential failure mode details (e.g., network issues).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with intro, details, tips, and example. Each sentence is informative; no waste. Slightly verbose but justified by the tips section. Front-loaded with purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 2 parameters, no output schema, and many siblings, the description is complete: explains prerequisites, return values, and usage limitations. It covers all necessary context for an AI agent to use the tool effectively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, but the description fully explains both parameters: scene_id as from stac_search, output_mode with default and options. It provides an example, adding semantic clarity well beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it retrieves a preview/thumbnail URL for a scene, distinguishing it from siblings like stac_download_bands (full band download) and stac_search (scene discovery). It emphasizes speed advantage, giving a specific verb+resource purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly notes the scene must come from a prior stac_search call, and advises using it for quick visual checks before full downloads. Tips mention checking for errors if no thumbnail exists, providing clear when-to-use and when-not-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stac_queryablesA

Fetch queryable properties from a STAC API.

Returns the properties that can be used in search queries, including their types and allowed values. Useful for understanding what filtering options are available.

Args: catalog: Catalog name (default: earth_search). Options: earth_search, planetary_computer, usgs collection: Optional collection to scope queryables (e.g., "sentinel-2-l2a" for collection-specific properties) output_mode: Response format - "json" (default) or "text"

Returns: JSON with queryable property names, types, and descriptions

Tips for LLMs: - Rarely needed — stac_search handles common filters automatically - Useful when debugging why searches return unexpected results - Different catalogs support different queryable properties

Example: queryables = await stac_queryables( catalog="earth_search", collection="sentinel-2-l2a" )

ParametersJSON Schema
NameRequiredDescriptionDefault
catalogNo
collectionNo
output_modeNojson

TDQS

A4.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description explains the return format and behavior (e.g., different catalogs support different properties) but does not explicitly mention that the tool is read-only or any side effects. However, the overall 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with sections for purpose, args, returns, tips, and an example. It is concise and front-loaded with the most important information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

All relevant context is provided: purpose, parameters, return value, usage tips, and an example. No output schema exists, but the description covers the necessary details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Despite 0% schema description coverage, the description fully explains each parameter: catalog options, collection example, and output_mode formats. This compensates entirely for the missing schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Fetch queryable properties from a STAC API' and explains the return value, distinguishing it from sibling tools like stac_search which handles actual searches.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'Tips for LLMs' section explicitly states when to use this tool ('rarely needed', 'useful when debugging') and names stac_search as an alternative, providing clear usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stac_statusA

Get server status and configuration.

Returns information about the server version, available catalogs, and artifact store status. Use this to verify the server is running and check storage configuration.

Args: output_mode: Response format - "json" (default) or "text"

Returns: JSON with server status including version, storage provider, and default catalog

Tips for LLMs: - Call stac_capabilities instead if you need to plan a workflow (it returns collections, bands, and indices too) - Check artifact_store_available before attempting downloads

Example: status = await stac_status()

ParametersJSON Schema
NameRequiredDescriptionDefault
output_modeNojson

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It describes return values (version, storage provider, default catalog) and hints at behavior (check artifact_store_available). However, it does not explicitly state that the operation is read-only or safe.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured with clear sections (Args, Returns, Tips, Example). Every sentence adds value, and the total length is appropriate for the tool's complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple status tool with no output schema, the description adequately explains return values and includes a usage tip. It could mention error handling or the 'text' output format behavior, but overall is sufficiently complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema has one parameter (output_mode) with type and default but no description. The description does not explain the parameter's allowed values or impact on output format, nor does it describe any other parameter aspects. Despite 0% schema coverage, the description fails to compensate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states 'Get server status and configuration' and lists the returned information, clearly distinguishing it from siblings by directing users to stac_capabilities for workflow planning.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit usage context: 'Use this to verify the server is running and check storage configuration.' Also includes tips for when to use alternatives (stac_capabilities) and when to check artifact_store_available before downloads.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stac_temporal_compositeA

Create a temporal composite by combining multiple scenes statistically.

Searches for scenes in the date range, downloads bands from each, then combines them pixel-by-pixel using a statistical method. Useful for creating cloud-free composites from cloudy time series.

Args: bbox: Area of interest [west, south, east, north] in EPSG:4326 bands: Bands to composite (e.g., ["red", "green", "blue"]) date_range: Date range "YYYY-MM-DD/YYYY-MM-DD" method: Statistical method - "median" (default), "mean", "max", "min" collection: STAC collection (default: sentinel-2-l2a) max_cloud_cover: Maximum cloud cover 0-100 (default: 20) max_items: Maximum scenes (default: 10) catalog: Catalog name (default: earth_search) cloud_mask: Apply SCL cloud masking per scene before compositing output_format: Output format - "geotiff" (default) or "png" output_mode: Response format - "json" (default) or "text"

Returns: JSON with artifact_ref for the temporal composite

Tips for LLMs: - Method selection: - "median" (default): best for cloud-free composites — robust to outliers from clouds/shadows - "mean": smooth average, good for general baselines - "max": captures peak values (e.g., peak NDVI in a growing season) - "min": captures minimum values (e.g., lowest water extent) - Enable cloud_mask=True with Sentinel-2 for best results — masks clouds before compositing so they don't affect the statistics - Use a 2-3 month date range for seasonal composites - For per-date outputs instead of a single composite, use stac_time_series - Cloud cover filter is automatically skipped for non-optical collections (sentinel-1-grd, cop-dem-glo-30) - max_items defaults to 10 — increase for denser temporal sampling

Example: composite = await stac_temporal_composite( bbox=[0.85, 51.85, 0.95, 51.92], bands=["red", "green", "blue"], date_range="2024-06-01/2024-08-31", method="median" )

ParametersJSON Schema
NameRequiredDescriptionDefault
bboxYes
bandsYes
methodNomedian
catalogNo
max_itemsNo
cloud_maskNo
collectionNo
date_rangeYes
output_modeNojson
output_formatNogeotiff
max_cloud_coverNo

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Since no annotations are provided, the description carries the full burden. It explains the compositing workflow, automatic cloud filter skipping for non-optical collections, and default values. However, it does not mention whether the tool is read-only or has any side effects, which would be helpful.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with purpose, process, Args, Returns, Tips, and Example sections. It is front-loaded with the main purpose. While somewhat lengthy, every sentence adds value and the structure aids readability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (11 parameters, no output schema, no annotations), the description provides thorough coverage: explains output format, gives example usage, and offers practical tips. It could be more explicit about error handling, but overall it is complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema coverage, the description fully compensates by documenting all 11 parameters in the Args section, including formats (bbox, date_range), defaults (method, max_items), and domain knowledge (e.g., method options with guidance, cloud_mask rationale).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description starts with a clear statement: 'Create a temporal composite by combining multiple scenes statistically.' It explains the process of searching, downloading, and combining scenes, and distinguishes itself from sibling tool stac_time_series for per-date outputs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance on when to use this tool ('creating cloud-free composites from cloudy time series') and when not to ('For per-date outputs instead of a single composite, use stac_time_series'). It includes detailed tips for method selection and enables cloud_mask for best results.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stac_time_seriesA

Extract a time series of band data over an area.

Searches for all scenes in the date range, downloads the requested bands for each, and returns references to the full temporal stack.

Args: bbox: Area of interest [west, south, east, north] bands: Bands to extract (e.g., ["red", "nir"]) date_range: Date range "YYYY-MM-DD/YYYY-MM-DD" collection: STAC collection (default: sentinel-2-l2a) max_cloud_cover: Maximum cloud cover 0-100 (default: 20) max_items: Maximum scenes to include (default: 50) catalog: Catalog name (default: earth_search) output_mode: Response format - "json" (default) or "text"

Returns: JSON with per-date artifact references

Tips for LLMs: - Use for monitoring change over time (vegetation growth, flood extent, urban expansion) - Pair with stac_compute_index on each date's artifact for temporal index analysis (e.g., NDVI over a growing season) - Keep bbox small — each date downloads full band data - Use max_cloud_cover=10 for cleaner optical time series - For a single cloud-free image from a date range, use stac_temporal_composite with method="median" instead - max_items limits the number of dates; set higher for dense temporal sampling or lower to reduce download volume - Cloud cover filter is automatically skipped for non-optical collections (sentinel-1-grd, cop-dem-glo-30)

Example: ts = await stac_time_series( bbox=[0.85, 51.85, 0.95, 51.92], bands=["red", "nir"], date_range="2024-01-01/2024-12-31", max_cloud_cover=10 )

ParametersJSON Schema
NameRequiredDescriptionDefault
bboxYes
bandsYes
catalogNo
max_itemsNo
collectionNo
date_rangeYes
output_modeNojson
max_cloud_coverNo

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description bears full responsibility. It describes the search and download process, notes that cloud cover filtering is skipped for non-optical collections, and implies read-only behavior. Some details like error handling or performance guarantees are missing, but overall it is thorough.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is relatively long but well-structured with sections (Args, Returns, Tips, Example). The main purpose is front-loaded, and each sentence contributes value. Minor redundancy in tips (e.g., repeating max_items explanation) could be trimmed, but still efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (8 parameters, no output schema, no annotations), the description is complete. It covers the tool's operation, usage constraints, return format, and includes a realistic example. No critical gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description includes a detailed 'Args' section and 'Tips' that explain each parameter's purpose, default values, and behavior (e.g., max_cloud_cover 0-100, default 20). This adds significant meaning beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Extract a time series of band data over an area,' which is a specific verb and resource. It distinguishes from siblings like stac_temporal_composite, which produces a single composite image.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance on when to use this tool (monitoring change over time) and when not to (single cloud-free image, recommending stac_temporal_composite). It also includes tips on bbox size, cloud cover, and max_items.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stac_zonal_statsA

Read out a raster's values within zones — the inference step after a fetch.

Given a stored raster artifact (e.g. an NDVI index from stac_compute_index, or any GeoTIFF from stac_download_bands) and target zones, return per-zone statistics (n_valid, mean, std, min, max, median, p10, p90).

Zones are either circular buffers around points, or GeoJSON polygons:

  • points: [[x, y], ...] centres in zones_crs, each summarised within buffer_m.

  • geojson: a geometry / Feature / FeatureCollection (polygons) in zones_crs.

Pass background_m (> buffer_m) to also get a LOCAL ANOMALY readout: each point's mean is compared to the surrounding annulus (buffer_m..background_m) and reported as a z-score, with anomalous set when |z| >= z_threshold. This is the direct "is the signal at this location anomalous vs its surroundings?" answer — e.g. a cropmark/soil-mark over a buried feature in an NDVI raster.

Args: artifact_id: A GeoTIFF raster artifact (NOT a PNG preview). points: Zone centres [[x, y], ...] in zones_crs (e.g. BNG eastings/northings). buffer_m: Circular zone radius in metres (raster must be projected). background_m: Outer annulus radius in metres → enables the z-score readout. geojson: Alternative polygon zones (geometry/Feature/FeatureCollection). zones_crs: CRS of points/geojson, e.g. "EPSG:27700" (BNG) or "EPSG:4326". labels: Optional labels for points (e.g. HER refs). band: 1-based band index to read. z_threshold: |z| at/above which a point is flagged anomalous (default 2.0). output_mode: "json" or "text".

Returns: Per-zone statistics, plus a local z-score when background_m is given.

ParametersJSON Schema
NameRequiredDescriptionDefault
bandNo
labelsNo
pointsNo
geojsonNo
buffer_mNo
zones_crsNoEPSG:4326
artifact_idYes
output_modeNojson
z_thresholdNo
background_mNo

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It discloses return of per-zone statistics and optional z-score anomaly detection, explains the logic, and notes the raster must be a GeoTIFF. Side effects and auth are not mentioned, but the read-only nature is implied.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a summary, zone explanation, anomaly section, and parameter list. It is front-loaded with purpose. While long, every sentence adds value. Minor redundancy in zone explanation but overall efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 10 parameters, no output schema, and no annotations, the description covers all parameters, return values, and usage context. It mentions projection requirements and anomaly detection logic. Lack of explicit return format is compensated by clear per-zone statistics mention.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so description compensates fully. Each parameter is explained: points format, buffer_m meaning, geojson types, zones_crs examples, background_m enabling anomaly detection, etc. This adds substantial meaning beyond the schema types.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool reads raster values within zones, specifying it as the inference step after fetch. It distinguishes between buffer and polygon zones and gives concrete examples (NDVI index, GeoTIFF). This is specific and differentiates from sibling tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context on when to use (after fetch, with stored raster artifacts) and explains two zone input modes. It implicitly excludes PNG previews and gives anomaly detection use case. While it doesn't explicitly name alternatives, the context makes usage clear.

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. Dates show when Glama detected each change.

  1. 24 tool updatesv0.1.0
    • First observedstac_capabilities
    • First observedstac_compute_index
    • First observedstac_coverage_check
    • First observedstac_describe_collection
    • First observedstac_describe_scene
    • First observedstac_download_bands
    • First observedstac_download_composite
    • First observedstac_download_rgb
    • First observedstac_estimate_size
    • First observedstac_find_pairs
    • First observedstac_get_artifact
    • First observedstac_get_conformance
    • First observedstac_list_catalogs
    • First observedstac_list_collections
    • First observedstac_map
    • First observedstac_mosaic
    • First observedstac_pairs_map
    • First observedstac_preview
    • First observedstac_queryables
    • First observedstac_search
    • First observedstac_status
    • First observedstac_temporal_composite
    • First observedstac_time_series
    • First observedstac_zonal_stats

TDQS

A4.4/5.0
Disambiguation5/5

Each tool serves a distinct purpose: capabilities overview, search, metadata description, various download modes (bands, RGB, composites), index computation, mosaicking, temporal compositing, time series extraction, zonal statistics, change detection pairs, coverage checking, size estimation, preview, artifact retrieval, and conformance checking. No two tools have overlapping functionality that would confuse an agent.

Naming Consistency4/5

All tool names start with 'stac_' and use lowercase with underscores. However, there is inconsistency: many use verb_noun (e.g., stac_compute_index, stac_download_bands), while others use just nouns (e.g., stac_capabilities, stac_search, stac_map). The pattern is generally clear but not perfectly uniform.

Tool Count4/5

With 24 tools, the server covers the full range of satellite imagery operations from discovery to analysis. While slightly on the higher side, each tool serves a specific need in the workflow, and the count is appropriate for the domain's complexity.

Completeness5/5

The tool surface covers the complete lifecycle: capabilities discovery, search, metadata inspection, multiple download options (bands, composites, RGB), index computation, mosaicking, temporal compositing, time series, change detection, zonal statistics, size estimation, and preview. No obvious gaps for a STAC client.

Maintenance

ActivitySlowing
ResponsivenessUnresponsive

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    A Model Context Protocol server that enables efficient discovery and retrieval of NASA Earth Data for geospatial analysis.
    26
    BSD 3-Clause
  • F
    license
    Not graded
    quality
    D
    maintenance
    MCP server for accessing SPEAR model output from various sources (AWS, STAC API, local) and integrating with AI assistants like Claude Desktop or a SPEAR Climate Chatbot.
    -

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/IBM/chuk-mcp-stac'

If you have feedback or need assistance with the MCP directory API, please join our Discord server