Skip to main content
Glama

stac-eo-mcp

CI PyPI Python License: MIT MCP server Downloads Ruff uv

An MCP server that lets AI agents (Claude Desktop, Claude Code, Cursor) search satellite imagery in STAC catalogs and measure vegetation, water and burn indices on Sentinel-2 scenes, without downloading whole images.

Ask "How green was Villa Borghese in Rome during 2025?" and the agent finds the scenes, reads only the pixels inside your area, masks clouds and answers with numbers, a map and a trend.

Features

  • Two public catalogs: Microsoft Planetary Computer (assets signed automatically) and Element84 Earth Search. No account or API key needed.

  • Windowed reads: only the bbox is read from Cloud-Optimized GeoTIFFs with odc-stac, at 10 m in the scene's UTM grid.

  • Correct reflectance: applies the Sentinel-2 processing baseline 04.00 offset (−1000 DN), from asset metadata when present, otherwise from the baseline. Both catalogs give identical numbers for the same scene.

  • Cloud masking with SCL, reported as valid_pixel_pct. Tile cloud cover often differs from your area (a "9.7% cloudy" tile can be 100% cloudy over your bbox), so this matters.

  • LLM-friendly output: statistics, dates and file paths only; never raster arrays. Footprints are simplified. Errors say what went wrong and what to try next.

  • Safe by default: area and scene-count limits stop accidental large downloads.

Related MCP server: groundstation

Tools

Tool

What it does

list_collections(catalog?)

Collections in a catalog, with one-sentence descriptions

search_scenes(collection, bbox, date_range, max_cloud_cover?, limit?, catalog?)

Scenes newest first: id, date, cloud cover, footprint, preview link

get_scene_details(collection, item_id, catalog?)

Key metadata and the list of assets

compute_index(item_id, index, bbox, save?, catalog?)

NDVI / NDWI / NBR on one scene: min, max, mean, std, % valid pixels; optional PNG / GeoTIFF

time_series(index, bbox, date_range, max_cloud_cover?, catalog?)

Mean index per acquisition date, cloudy dates skipped with a reason, plus a trend summary

Resources: stac://indices (formulas, bands, interpretation, cloud mask classes) and stac://catalogs (catalogs, defaults and limits). Prompt: analyze_vegetation(bbox, months=6), a guided vegetation analysis.

Conventions: bbox is [west, south, east, north] in WGS84 degrees; date_range is "YYYY-MM-DD/YYYY-MM-DD".

Install

Requires uv. The server runs locally over stdio; nothing to deploy.

uvx stac-eo-mcp   # runs the server (it waits for an MCP client on stdin)

Claude Desktop

Add to claude_desktop_config.json (Settings → Developer → Edit Config):

{
  "mcpServers": {
    "stac-eo-mcp": {
      "command": "uvx",
      "args": ["stac-eo-mcp"],
      "env": {
        "STAC_EO_MCP_OUTPUT_DIR": "/Users/you/stac-eo-mcp-output"
      }
    }
  }
}

If Claude Desktop cannot find uvx, use its full path (which uvx).

Claude Code

claude mcp add stac-eo-mcp -- uvx stac-eo-mcp
# with options:
claude mcp add stac-eo-mcp -e STAC_EO_MCP_CATALOG=earth-search -- uvx stac-eo-mcp

Cursor

.cursor/mcp.json:

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

Configuration

All optional, via environment variables:

Variable

Default

Meaning

STAC_EO_MCP_CATALOG

planetary-computer

Default catalog (planetary-computer or earth-search)

STAC_EO_MCP_OUTPUT_DIR

~/stac-eo-mcp-output

Where PNG / GeoTIFF files are written

STAC_EO_MCP_MAX_AREA_KM2

100

Largest bbox for pixel reads

STAC_EO_MCP_MAX_SCENES

24

Most dates read by time_series (more are sampled evenly)

STAC_EO_MCP_MAX_SEARCH_LIMIT

50

Most scenes returned by search_scenes

STAC_EO_MCP_LOG_LEVEL

INFO

Log level; logs go to stderr only

Example conversation

You: How did vegetation in Villa Borghese, Rome (bbox 12.47, 41.905, 12.50, 41.925) change during 2025?

Claude calls time_series(index="ndvi", bbox=[12.47, 41.905, 12.5, 41.925], date_range="2025-01-01/2025-12-31")

Claude: I analysed 24 of the 51 Sentinel-2 dates in 2025 (sampled evenly); 22 had enough clear pixels. Mean NDVI stays between 0.28 and 0.39, typical of a park mixed with city blocks:

Date

Mean NDVI

2025-01-04

0.37

2025-05-01

0.35

2025-07-03

0.28 (minimum)

2025-09-28

0.35

2025-11-05

0.39 (maximum)

The summer dip and autumn recovery is the usual Mediterranean pattern: dry-season stress in July, regrowth after the autumn rains. 10 July and 16 October were skipped (fully cloudy over the park even though the tiles reported under 30% cloud).

You: Show me the map for the end of July.

Claude calls search_scenes(...), then compute_index(item_id="S2A_MSIL2A_20250730T100051_R122_T33TTG_20250730T153414", index="ndvi", bbox=[...], save="png")

Claude: 30 July is 91% clear, mean NDVI 0.32 (max 0.90 on the park's tree cover, negative on the Tiber). Map saved to ~/stac-eo-mcp-output/S2A_MSIL2A_20250730T…_ndvi_c75d9e23.png.

Other questions that work well:

  • "Find Sentinel-2 scenes under 10% cloud over Lake Trasimeno in August 2025 and compute NDWI on the clearest one."

  • "Compare NBR before and after a wildfire": two compute_index calls; dNBR = NBRpre − NBRpost.

  • "Which collections does Earth Search have?"

How it works

agent ──MCP/stdio──▶ server.py ──▶ analysis.py ──▶ catalog.py  (pystac-client: search, signing, band names)
                                         │
                                         ├──────▶ raster.py   (odc-stac window read, PNG/GeoTIFF)
                                         └──────▶ indices.py  (numpy: reflectance, SCL mask, stats)
  • models.py validates inputs (WGS84 bbox, ISO dates, limits) and defines compact outputs.

  • indices.py is pure numpy and fully unit-tested on synthetic arrays.

  • Blocking I/O runs in worker threads; time_series reads up to 4 scenes in parallel.

  • Where two Sentinel-2 tiles overlap, time_series keeps one scene per day (best bbox coverage, then lowest cloud cover).

Development

git clone https://github.com/bbrauzzi/stac-eo-mcp && cd stac-eo-mcp
uv sync
uv run pytest            # fast tests (no network)
uv run pytest -m slow    # live tests against both catalogs (~1-2 min)
uv run ruff check . && uv run ruff format --check .
npx @modelcontextprotocol/inspector -e STAC_EO_MCP_OUTPUT_DIR=/tmp/out uv run stac-eo-mcp  # MCP Inspector (pass env with -e)
uv run python scripts/make_readme_figures.py             # regenerate the README figures

Limitations

  • Indices are Sentinel-2 L2A only; search and details work on any collection.

  • Bounding boxes crossing the antimeridian are not supported.

  • The mask keeps snow/ice pixels (SCL class 11); exclude snowy periods for vegetation work.

License

MIT. Sentinel-2 data: Copernicus Sentinel data, processed by ESA.

Available Tools

5 tools
compute_indexA
Idempotent

Compute NDVI, NDWI or NBR on one Sentinel-2 L2A scene, reading only the bbox window.

Clouds, shadows and no-data are masked with the SCL layer. Returns min, max, mean, std
and the share of valid pixels, plus file paths when `save` is set. No raster data is
returned. Area is limited (default 100 km²).
NameRequiredDescriptionDefault
bboxYes[west, south, east, north] in WGS84 degrees, e.g. [12.47, 41.9, 12.5, 41.92]
saveNoAlso write the index map to the output foldernone
indexYesSpectral index: ndvi (vegetation), ndwi (water), nbr (burn).
catalogNoSTAC catalog. Defaults to the server's configured catalog.
item_idYesSentinel-2 L2A scene id from search_scenes

Output Schema

NameRequiredDescription
bboxYes
noteNo
indexYes
statsYes
item_idYes
outputsNoformat -> file path
datetimeYes
resolution_mNo

TDQS

A4.4/5.0
Behavior4/5

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

Adds real behavioral detail beyond the annotations: cloud/shadow/no-data masking via SCL, an area cap (default 100 km²), and an explicit statement that no raster data is returned unless save is set. The annotations already cover read-only/destructive/idempotency semantics, though the description does not mention open-world or rate/permission behavior.

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?

Three short sentences, front-loaded with what is computed, followed by masking, return shape, and the area constraint. No filler or 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?

With an output schema present and annotations covering safety semantics, the key gaps an agent needs (masking behavior, returned statistics, no-raster default, area cap) are all covered. Only edge behavior such as failure modes when the bbox exceeds the area limit or the scene lacks SCL is left implicit.

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 100%, so the baseline is 3; the description still adds value by tying bbox to a window-only read, tying save to returned file paths, and flagging the area limit that constrains bbox size. It does not add detail the schema lacks for catalog or index enums, which is fine.

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?

States a specific verb (compute) and resource (spectral index over a Sentinel-2 L2A scene) and names the concrete outputs (NDVI, NDWI, NBR). It also pins the scope to a bbox window and a single scene, which cleanly separates it from siblings like search_scenes and time_series.

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?

Implies the prerequisite chain by saying item_id comes from search_scenes and that only one scene is processed, which steers an agent away from using it for multi-scene or series work. It does not explicitly name time_series as the alternative for multi-date analysis or 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.

get_scene_detailsB
Read-onlyIdempotent

Key metadata and the list of assets (bands, previews, metadata files) of one scene.

NameRequiredDescriptionDefault
catalogNoSTAC catalog. Defaults to the server's configured catalog.
item_idYesScene id from search_scenes
collectionYesCollection id the scene belongs to

Output Schema

NameRequiredDescription
idYes
bboxNo
assetsYes
datetimeYes
collectionYes
propertiesYes

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so safety behavior is covered. The description adds that the result includes metadata and asset types (bands, previews, metadata files), which is useful context beyond annotations, but it does not add deeper behavioral details such as auth requirements or rate limits.

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 a single front-loaded sentence with no wasted words, immediately stating the core content and scope. It is appropriately sized for a simple detail-fetch tool.

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 an output schema, full parameter descriptions, and read-only/idempotent annotations, the description provides enough context for an agent to understand what the tool returns. The main incomplete area is the lack of explicit routing guidance versus sibling tools.

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?

Schema description coverage is 100%, so all three parameters are already documented in the schema, including defaults and meanings. The description adds no parameter-specific syntax or semantic detail beyond what the schema provides, so baseline 3 is appropriate.

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

Purpose4/5

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

The description clearly states it returns metadata and asset lists for a single scene, which is a specific resource and output scope. It does not explicitly distinguish itself from sibling tools like search_scenes, but the singular 'one scene' implies the distinction.

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

Usage Guidelines2/5

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

There is no explicit guidance on when to use this tool versus search_scenes or list_collections, nor are prerequisites or exclusions stated. Usage must be inferred from the phrase 'of one scene' and the schema's note that item_id comes from search_scenes.

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

list_collectionsA
Read-onlyIdempotent

List the collections available in a STAC catalog, with a one-sentence description.

Use the returned ids as `collection` in search_scenes and get_scene_details.
NameRequiredDescriptionDefault
catalogNoSTAC catalog. Defaults to the server's configured catalog.

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already cover safety (readOnlyHint, idempotentHint) and scope (openWorldHint), so the description only needs to add workflow context. It does: the result is a lightweight id + one-sentence-description listing, and those ids are the canonical input for sibling tools — useful planning information not present in annotations. It omits any mention of network/catalog-specific caveats or result size.

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?

Two short sentences, purpose first, chaining guidance second — every clause earns its place with no repetition of schema or annotation content.

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 one-parameter, optional-argument, output-schema-backed read tool with annotations, the description supplies purpose and the downstream workflow, which is the main thing an agent needs. The only gap is that it doesn't hint at catalog selection behavior, which the schema covers adequately.

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?

Schema coverage is 100% and the single `catalog` parameter is fully documented with an enum and a default-behavior note. The description never mentions the catalog parameter, so it adds nothing beyond the schema; baseline 3 applies.

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?

States a specific verb and resource ('List the collections available in a STAC catalog') plus what each entry contains ('a one-sentence description'). The second sentence ties the output ids to specific sibling tools, so an agent can immediately distinguish this discovery tool from search_scenes and get_scene_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 tells the agent what to do with the result ('Use the returned ids as `collection` in search_scenes and get_scene_details'), which effectively establishes this as the discovery step before searching or fetching details. It stops short of any exclusion, e.g. when to skip listing and search directly, or how to choose between the two catalogs.

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

search_scenesA
Read-onlyIdempotent

Search scenes intersecting a bbox in a date range, newest first.

Returns id, date, cloud cover, a simplified footprint and a preview image link. Cloud cover is for the whole tile, not the bbox.

NameRequiredDescriptionDefault
bboxYes[west, south, east, north] in WGS84 degrees, e.g. [12.47, 41.9, 12.5, 41.92]
limitNoMaximum scenes to return (1-50)
catalogNoSTAC catalog. Defaults to the server's configured catalog.
collectionYesCollection id, e.g. 'sentinel-2-l2a' (alias 'sentinel-2' works)
date_rangeYesISO interval 'YYYY-MM-DD/YYYY-MM-DD', e.g. '2025-04-01/2025-09-30'
max_cloud_coverNoMaximum scene cloud cover in percent (0-100). Omit for no filter.

Output Schema

NameRequiredDescription
scenesYes
catalogYes
returnedYes
collectionYes

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already cover read-only, idempotent, and open-world behavior, so the bar is lower. The description still adds real context beyond them: result ordering (newest first), the shape of returned records, and the important caveat that cloud cover applies to the whole tile rather than the bbox — a non-obvious semantic detail an agent would otherwise get wrong.

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?

Three short sentences, front-loaded with the core operation, then return shape, then the one caveat that matters. No restated parameter definitions and no filler.

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 6-parameter search with annotations and an output schema, the description covers scope, ordering, and the cloud-cover caveat. It omits what happens on an empty result and any pagination/limit behavior, but nothing essential to a correct first call is missing.

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 100%, so baseline is 3; the description earns above that by clarifying that max_cloud_cover is a tile-level property that does not mean mask-free pixels over the requested bbox, which the schema text does not convey. It adds nothing about limit or catalog, which remain schema-only.

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

Purpose4/5

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

States a specific verb and resource ('search scenes') with the two key scoping axes (bbox, date range) and an ordering guarantee ('newest first'). It does not name any sibling to distinguish itself from, so it falls short of the 5 tier, but an agent can still tell this apart from get_scene_details or list_collections by the resource and scope.

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

Usage Guidelines3/5

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

The bbox+date-range framing implies the search use case, but there is no explicit when-to-use/when-not guidance and no reference to alternatives like get_scene_details for a single known scene or list_collections for discovering collections. Usage is inferable rather than stated.

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

time_seriesA
Read-onlyIdempotent

Mean of an index over a bbox for each Sentinel-2 acquisition date in a range.

One scene per day, cloudy dates skipped with a reason, sampled evenly when there are more dates than the server limit (default 24). Includes a summary (mean, min/max date, change from first to last). Can take 10-60 s for long ranges.

NameRequiredDescriptionDefault
bboxYes[west, south, east, north] in WGS84 degrees, e.g. [12.47, 41.9, 12.5, 41.92]
indexYesSpectral index: ndvi (vegetation), ndwi (water), nbr (burn).
catalogNoSTAC catalog. Defaults to the server's configured catalog.
date_rangeYesISO interval 'YYYY-MM-DD/YYYY-MM-DD', e.g. '2025-04-01/2025-09-30'
max_cloud_coverNoMaximum scene cloud cover in percent (0-100). Omit for no filter.

Output Schema

NameRequiredDescription
bboxYes
noteNo
indexYes
pointsYesOne point per date, oldest first
skippedNo
summaryNo
date_rangeYes
scenes_foundYesScenes matching the search, before de-duplication
dates_analysedYes

TDQS

A4/5.0
Behavior4/5

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

Adds substantial context beyond the annotations: one scene per day, cloudy dates dropped with a reason, even sampling when dates exceed the server limit (default 24), and a 10-60 s latency expectation. Only the response's concrete field structure and failure modes are left unspecified, and an output schema exists.

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 compact sentences, with the core definition front-loaded and the operational caveats (sampling limit, latency) following. No filler, though the sampling sentence is dense enough to require a second read.

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 read-only, open-world tool with a full output schema, the description covers everything an agent needs to decide and set expectations: temporal granularity, cloudy-date handling, result-count capping, and runtime. Return-value details are correctly deferred to the output schema.

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?

Schema description coverage is 100%, so bbox, index, catalog, date_range and max_cloud_cover are already documented, establishing a baseline of 3. The description adds only indirect meaning (cloudy dates are skipped, so max_cloud_cover affects sample count) and never explains the dates-sampling parameter interaction.

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?

States a specific verb (mean of an index) over concrete resources (bbox, Sentinel-2 acquisition dates) with temporal scope, which cleanly separates it from compute_index (single computation) and search_scenes (scene listing). The output shape ('mean ... for each date') is stated in the first line.

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

Usage Guidelines3/5

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

Usage is implied by the stated output shape – an agent can infer 'use this when you need a temporal profile rather than one value' – but no alternative tool (compute_index, search_scenes) is named and no exclusions or prerequisites are given. The reader must infer when-to-use from siblings.

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.

  1. 5 tool updatesv0.1.0
    • First observedcompute_index
    • First observedget_scene_details
    • First observedlist_collections
    • First observedsearch_scenes
    • First observedtime_series

TDQS

A4/5.0

Scored across 5 tools

Disambiguation5/5

Each tool targets a distinct stage of the STAC workflow: catalog browsing, scene search, scene metadata, single-scene index computation, and multi-date time series. The only potential overlap is compute_index vs. time_series, but their scopes (one scene vs. a date range) and descriptions make the boundary clear.

Naming Consistency4/5

Four of five names follow a clear verb_noun pattern (list_collections, search_scenes, get_scene_details, compute_index). The outlier is time_series, a noun phrase with no verb, but it remains readable and predictable in context.

Tool Count5/5

Five tools are well-scoped for a focused STAC/EO server, covering discovery, retrieval, and two levels of analysis without filler. Each tool earns its place and the surface is neither thin nor bloated.

Completeness4/5

The core read-only EO workflow is covered: collections, scene search, scene details, and index computation/aggregation. Minor gaps exist, such as no dedicated collection-detail tool, no explicit cloud-cover filter in search_scenes, and no asset download/read tool.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    B
    maintenance
    Enables AI assistants to search and access geospatial datasets through STAC (SpatioTemporal Asset Catalog) APIs. Supports querying satellite imagery, weather data, and other geospatial assets with spatial, temporal, and attribute filters.
    11
    20
    MIT
  • F
    license
    B
    quality
    D
    maintenance
    A Python MCP server for discovering and analyzing Sentinel-2 L2A imagery, enabling AI agents to search scenes, check quality, and compute spectral indices like NDVI, NDWI, and NBR from remote COG windows.
    4
    -
  • F
    license
    Not graded
    quality
    D
    maintenance
    Turns the AWS Registry of Open Data and public STAC catalogs into agent-callable tools for dataset search, STAC queries, and NDVI/NDBI/land-cover analysis on Sentinel-2 imagery.
    -