Skip to main content
Glama

groundstation

Earth data, agent-ready. A Development Seed labs prototype that puts the cloud-native geospatial stack in the hands of AI agents — and of anyone with a browser.

Ask a question about any place on Earth. groundstation finds the freshest satellite imagery, active fires and disaster alerts, and the weather, does the pixel math, and hands back an interactive map — through whichever door fits:

flowchart LR
    A["🗣 You, via Claude<br/>(MCP server + skill)"] --> T
    B["🖥 Web console<br/>(no terminal needed)"] --> T
    C["⏰ Scheduled briefings<br/>(nobody asks)"] --> T
    T["groundstation tools"] --> D["STAC catalogs<br/>Earth Search · NASA VEDA<br/>Planetary Computer"]
    T --> E["TiTiler<br/>tiles · previews · band math"]
    T --> F["EONET · GDACS · Open-Meteo<br/>events & weather"]
    T --> G["🗺 shareable map artifacts<br/>📄 decision-ready briefs"]

Everything runs against public, keyless endpoints — it demos anywhere, with nothing to sign up for.

the console scanning the Barotse Floodplain

Real examples (all real runs, real data)

"What's burning near Chelan County?" — one scan found the two active wildfires (Navarre Coulee, Chelan Hills), correlated them with 14 straight days of zero rain and a 33°C heat peak in the forecast, and pointed at the three sub-1%-cloud scenes from ignition day.

"How did vegetation change around Wenatchee?" — one compare_dates call matched two scenes from the same Sentinel-2 tile (10TFT, both ~1% cloud) and answered: NDVI 0.46 → 0.63 between May 28 and July 5, a +36% spring green-up, with a swipe map to see it.

"Watch these four places every morning." — the fleet sweep triaged Chelan ACT (fires + heat), Efate and Laredo WATCH, Barotse CALM ("NDVI 0.397 → 0.395, normal dry-season drift, not a distress signal"). On its second run the Chelan brief opened with "unchanged since this morning's earlier run" — it remembers yesterday and only makes noise about what's new.

NDVI swipe comparison over Portland

Related MCP server: SkyFi MCP Server

Quickstart

As a Claude Code plugin (easiest — brings the MCP server and the earth-data skill together; requires uv):

/plugin marketplace add dannybauman/groundstation
/plugin install groundstation@groundstation

First use after install takes a few seconds: uv builds the server's virtualenv on the first launch, so the tools appear a moment after Claude starts. If they don't show, run /mcp to confirm groundstation is connected — if it isn't, /reload-plugins or restart the session, and make sure uv is on your PATH.

Or skip the guessing and run the preflight:

scripts/doctor.sh

It walks the first-run chain in the order it actually breaks (uv, server env, CLI, plugin wiring, endpoints) and prints the exact fix for the first broken link. Setting up on a new machine or prepping a demo room? Run it before opening Claude.

As an MCP server directly:

git clone https://github.com/dannybauman/groundstation && cd groundstation && uv sync
claude mcp add groundstation -- uv --directory "$PWD" run groundstation

The web console:

uv run --group web groundstation-web   # open http://127.0.0.1:8765

Or just ask. With the plugin installed (or the repo's skills/ linked into ~/.claude/skills), "demo groundstation", "is groundstation running", "open the field tests" and "brief me on Lisbon" all run through the groundstation skill, no commands to remember.

A brief, or the morning sweep:

uv run briefing/brief.py --place "Chelan County, Washington" --days 10
uv run briefing/brief.py --fleet briefing/fleet.json                  # + --slack-webhook <url> to deliver

Updating

New tools don't reach an existing install on their own. Plugin installs are cached per version, so an installed copy stays exactly as it was until the plugin version changes and you update it.

claude plugin marketplace update groundstation
claude plugin update groundstation@groundstation

Then restart Claude Code. If you installed with claude mcp add instead, git pull in your clone and restart.

Not sure which copy you're running? scripts/doctor.sh says so, and prints the update command when the copy Claude runs is behind this one.

Things to ask it

  • "Find the clearest Sentinel-2 scene of Lake Chelan from the past two weeks, tell me what's burning nearby, and give me a map I can share."

  • "How much surface water is on the Barotse Floodplain right now vs early March? Use NDWI, give me numbers and a swipe map."

  • "What does NASA VEDA have on the Caldor fire? Put the burn severity layer over a current scene."

  • "Show the newest NAIP aerial imagery of Des Plaines, Illinois with ESA WorldCover land cover as a toggle layer."

  • "Any active flood alerts along the Rio Grande between El Paso and Laredo? Alerts, week-ahead rain, latest usable imagery, one map."

  • "Compare vegetation in the Yirgacheffe coffee region between January and now, and tell me which scenes you'd trust."

  • "Brief me on Efate, Vanuatu: open alerts, the week ahead, the most recent cloud-free scene, all on a map."

  • "Give me a 3D fly-through of Torres del Paine."

  • "Make me a postcard of that I could post."

First search_datasets call takes ~20–30s while collection lists cache; everything after is instant.

What an agent gets

Tool

What it does

Backed by

geocode / reverse_geocode

place name ↔ coordinates + bbox, retries descriptive phrases

Gazet (a no-LLM fuzzy index over Overture divisions and Natural Earth, gated on similarity), Nominatim fallback

list_catalogs / search_datasets / describe_collection

find the right data across catalogs

Earth Search, NASA VEDA, Planetary Computer

search_imagery

recent items, cloud filtering, place names accepted

STAC APIs

preview_item / tile_url_template

browser-openable previews and XYZ tiles

titiler.xyz, VEDA raster API, PC data API

compute_statistics

band math over an item — NDVI is (nir-red)/(nir+red)

TiTiler statistics

compare_dates

"what changed?" in one call: same-tile scenes, index delta, swipe map

all of the above

render_map

self-contained interactive HTML maps; two rasters → automatic swipe compare

MapLibre + live tiles

render_map_3d

terrain fly-throughs: imagery draped over real relief, exaggeration slider, orbit

MapLibre terrain + keyless AWS Terrarium tiles

render_postcard

durable share cards: embedded pixels, attribution baked in, nothing expires

TiTiler previews

active_events / weather_summary

open fires/floods/storms + past & coming week

NASA EONET, GDACS, Open-Meteo

Every artifact carries a Stack panel: the pipeline that made it, in order (place, catalog, data, pixels, draw, next look), only the components that actually ran, Development Seed's own badged and listed first, and the islands it exercised. docs/stack.md is the curated source, and adding a tool is one entry with a when rule.

The paired skill in skills/earth-data/ carries the judgment layer: which catalog for what, asset conventions, index-layer recipes, "always end spatial answers with a map."

Earth briefs you

The briefing engine inverts the interaction — instead of you asking the right question, Earth reports in: fresh scenes, events, weather, an NDVI change signal against last month, a CALM/WATCH/ACT alert level, and suggested next steps, as a shareable HTML page. It keeps per-AOI memory so "what changed" means changed since the last run, fleet mode writes a triaged morning-sweep index, and --slack-webhook delivers the summary where people already look. Cron it and it runs while nobody's watching.

Scheduled sweeps

briefing/run.sh is the unattended entrypoint (unix only): it takes a lock so overlapping runs skip cleanly, appends everything to briefing/state/run.log, and runs the fleet. Every brief is checked by evals/brief_checks.py before posting — failing briefs are withheld from the Slack message and the post says "N of M areas, K withheld by checks" rather than pretending. A CALM day after a WATCH day says so in the brief, guaranteed, not just prompted.

Dry-run first, then schedule:

SLACK_WEBHOOK_URL=https://hooks.slack.com/... bash briefing/run.sh --slack-dry-run

cron (every morning at 7):

0 7 * * * SLACK_WEBHOOK_URL=https://hooks.slack.com/... /path/to/groundstation/briefing/run.sh

launchd (macOS): save as ~/Library/LaunchAgents/org.groundstation.sweep.plist, then launchctl load it.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist SYSTEM "file://localhost/System/Library/DTDs/PropertyList.dtd">
<plist version="1.0"><dict>
  <key>Label</key><string>org.groundstation.sweep</string>
  <key>ProgramArguments</key><array>
    <string>/bin/bash</string><string>/path/to/groundstation/briefing/run.sh</string>
  </array>
  <key>EnvironmentVariables</key><dict>
    <key>SLACK_WEBHOOK_URL</key><string>https://hooks.slack.com/...</string>
  </dict>
  <key>StartCalendarInterval</key><dict><key>Hour</key><integer>7</integer><key>Minute</key><integer>0</integer></dict>
</dict></plist>

Local models

Brief synthesis can run on a local OpenAI-compatible endpoint (Ollama, LM Studio) instead of claude -p:

GROUNDSTATION_LLM=auto \
GROUNDSTATION_LOCAL_URL=http://localhost:11434/v1 \
GROUNDSTATION_LOCAL_MODEL=qwen3.5-9b \
uv run briefing/brief.py --place "Chelan County, Washington"

GROUNDSTATION_LLM is claude (default), local, or auto. The local path preflights the endpoint and the prompt size, and on any failure falls through to claude -p, then to the deterministic data-only brief — the chain never produces nothing. Synthesis is the only task that goes local: it's bounded completion work, which small models do well. The agent loop's tool-calling never will — small models tend to describe tool calls instead of making them. Reasoning and boundaries: docs/adr-local-models.md.

Be a good neighbor: titiler.xyz

All tiling, previews, and pixel math ride titiler.xyz by default — a free, shared community endpoint that Development Seed runs as a demo. It rate-limits (HTTP 429) under heavy use, and a day of agent runs or a room full of people scanning places can hit that. Built-in mitigations: map artifacts carry scene footprint bounds so browsers never request out-of-footprint tiles, and statistics use small max_size reads.

When to use your own tiler — fleet briefings on a schedule, field-test-style batch runs, live demos to an audience, anything sustained:

docker compose up -d titiler                          # TiTiler is DevSeed OSS — one container (see compose.yml)
export GROUNDSTATION_TITILER=http://localhost:8000    # everything routes there

Any TiTiler deployment with the /stac router works (a hosted one, eoAPI's raster service, your own cloud instance). titiler.xyz is for kicking the tires; your own endpoint is for real work.

One caveat we learned in the field: some Earth Search collections (NAIP, Landsat) sit in requester-pays buckets. titiler.xyz carries AWS credentials for those; a local TiTiler returns 500s on them unless you provide your own AWS credentials (see compose.yml) — or just use Planetary Computer's copies of those datasets.

Reliability

Three layers of checks, because a generative product without evals is a demo, not a tool:

  • uv run evals/unit_checks.py — offline, deterministic; runs in CI on every push

  • uv run evals/run_evals.py — 10 live checks against the real endpoints (on-demand + weekly CI)

  • uv run evals/brief_checks.py — grounding checks on generated briefs: required sections, alert level, dates cited, and every claimed event must exist in the input data (hallucination guard)

More

  • docs/examples.md — the field test: twenty example prompts actually run through the agent, graded, with the improvements each round produced; visual walkthrough at /docs/field-test.html when the console is running

  • docs/architecture.md — how it all fits together, design decisions, and what's deliberately not built

  • Deep exploration hands off to stac-map (Pete Gadomski), which renders COGs client-side via deck.gl-raster (Kyle Barron); tiling and pixel math ride TiTiler

  • A Development Seed labs prototype, July 2026

Available Tools

12 tools
active_eventsA

Current natural events and disaster alerts, optionally filtered to a bbox.

Combines NASA EONET (wildfires, storms, volcanoes, floods...) and GDACS global disaster alerts. bbox is [w, s, e, n]. Returns compact event lists with coordinates suitable for mapping.

ParametersJSON Schema
NameRequiredDescriptionDefault
bboxNo
daysNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations, description carries full burden. It discloses data sources (EONET, GDACS), return format (compact event lists with coordinates), and bbox behavior. Does not mention rate limits or auth, but as a read-only tool this is sufficient.

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 sentences, each adding value. Front-loaded with purpose, then details. No unnecessary words.

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 two parameters, bbox filtering combining two sources, and presence of output schema, the description fully covers what the agent needs to know.

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 compensates by explaining bbox format as '[w, s, e, n]' and days default of 30. Provides context 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 it returns 'Current natural events and disaster alerts' with optional bbox filter, citing specific sources (NASA EONET, GDACS) and distinguishing from siblings like weather_summary or geocode.

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?

Mentions optional bbox filtering and explains bbox format, but does not explicitly state when to use vs. alternatives or provide exclusions.

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

compare_datesA

Compare two time windows over a place: matched scenes, index delta, swipe map.

The most common Earth question is "what changed?" — this answers it in one call. Windows are RFC3339 ranges ("2026-06-01T00:00:00Z/2026-06-30T23:59:59Z"); window_after defaults to the last 14 days, window_before to roughly one month earlier. Picks Sentinel-2 scenes from the SAME MGRS tile (best AOI coverage, lowest cloud), computes the expression's stats for both dates, and writes a side-by-side swipe map. Returns scenes, means, delta, and map_path.

ParametersJSON Schema
NameRequiredDescriptionDefault
bboxNo
labelNo
placeNo
expressionNo(nir-red)/(nir+red)
window_afterNo
window_beforeNo
max_cloud_coverNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

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 the full burden. It explains the scene selection strategy (same MGRS tile), computation of expression stats, and output (scenes, means, delta, map_path). It does not mention side effects like file creation but sufficiently describes core 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?

The description is compact with a summary line followed by elaboration. It is front-loaded with purpose and contains no redundant sentences, making it efficient for an agent.

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 (7 optional parameters, output schema exists), the description covers the main workflow, output structure, and defaults. It misses edge cases but is adequate for typical usage.

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 the RFC3339 format for windows, defaults, and expression default. It adds context about SAME MGRS tile selection and algorithm, though does not detail each parameter individually.

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 compares two time windows over a place and returns matched scenes, index delta, and a swipe map. It uses a specific verb-resource pair and distinguishes from siblings like compute_statistics which likely handles single windows.

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 positions this as solving 'what changed?' and provides default window behaviors, implying use for change detection. However, it does not explicitly state when not to use it or suggest alternatives.

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

compute_statisticsB

Compute pixel statistics (min/max/mean/std/histogram) for a STAC item.

expression is band math over asset names, e.g. "(nir-red)/(nir+red)" for NDVI on Sentinel-2 (Earth Search asset names). Optionally clip to an AOI GeoJSON Feature. Backed by TiTiler /stac/statistics.

ParametersJSON Schema
NameRequiredDescriptionDefault
assetsNo
catalogYes
item_idYes
expressionNo
aoi_geojsonNo
collection_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3/5.0
Behavior2/5

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

No annotations are provided, so the description bears full responsibility for behavioral disclosure. It mentions the backend (TiTiler /stac/statistics) and implies a read-only operation, but does not explicitly state read-only nature, authentication needs, rate limits, or potential side effects. This is insufficient given the lack of annotations.

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 concise, consisting of three sentences that front-load the purpose. Every sentence adds value: the first states purpose, second explains expression, third mentions AOI and backend. No fluff, though the third sentence could be integrated.

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?

The tool has 6 parameters (3 required) and an output schema. The description covers the core functionality and some parameters, but does not explain the output structure or provide usage patterns beyond the expression example. With an output schema present, the burden is lower, but additional context on return values or pagination would improve completeness.

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?

Schema coverage is 0%, so the description must significantly compensate. It explains the expression parameter with a concrete example and notes the aoi_geojson parameter, but does not describe other parameters like assets, catalog, item_id, or collection_id. The STAC context is implicit, but the assets parameter remains unexplained, leaving gaps.

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 the tool computes pixel statistics (min/max/mean/std/histogram) for a STAC item, with specific mention of band math expression and optional AOI clipping. It distinguishes the tool's purpose from siblings like search_datasets or describe_collection, though not explicitly contrasting.

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 description provides context for when to use the tool (computing statistics on STAC items) and mentions optional features like expression and AOI. However, it lacks explicit guidance on when not to use it or alternatives among siblings, leaving some ambiguity.

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

describe_collectionB

Get a collection's description, extent, and asset/band layout.

ParametersJSON Schema
NameRequiredDescriptionDefault
catalogYes
collection_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

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

The description implies a read operation but provides no additional behavioral context such as permissions, side effects, or error conditions. For a tool with no annotations, this is adequate but minimal.

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?

Single sentence with 10 words, no filler, and front-loaded with the verb and resource. Every word is necessary.

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?

The tool is simple with two parameters and an output schema exists, covering return values. The description adequately captures the tool's function, though it could mention that both parameters are required.

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?

The schema has 0% description coverage, and the tool description does not explain the parameters 'catalog' and 'collection_id' beyond their names. No additional meaning is provided.

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 uses a specific verb 'Get' and clearly states the resource (collection's description, extent, and asset/band layout). It distinguishes the tool's purpose from sibling tools like 'list_catalogs' but does not explicitly differentiate from similar tools like 'preview_item'.

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?

No guidance on when to use this tool versus alternatives. The description does not mention any prerequisites, exclusions, or context-specific usage.

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

geocodeA

Resolve a place name to coordinates and a bounding box.

Tries Development Seed's Gazet small-model geocoder first, then falls back to OSM Nominatim. Use concise names ("Barotse Floodplain", "Chelan County") rather than long phrases. Returns {name, lat, lon, bbox: [w, s, e, n], source}.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, description fully discloses fallback strategy and return structure (name, lat, lon, bbox, source). Does not mention rate limits or error handling, but output format is clearly specified.

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?

Description is concise (4 lines) with clear sections: purpose, fallback, usage tip, output. Every sentence adds value with 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?

Tool has single parameter and output schema. Description covers all key aspects: purpose, method (with fallback), usage hint, and return fields. Complete for a simple geocoding tool, though error behavior not addressed.

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 0% (no description for 'query' parameter). Description adds guidance to use concise names, but does not specify expected format (e.g., country, commas). Partially compensates but could be more 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?

Description clearly states the tool resolves a place name to coordinates and bounding box, using explicit verb and resource. No sibling tool performs geocoding, so no differentiation needed.

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?

Provides specific usage advice (use concise names) and explains fallback behavior (Gazet then Nominatim). Could be more explicit about when to use versus alternatives, but siblings do not compete.

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

list_catalogsA

List the STAC catalogs this server can search, with what each is good for.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior2/5

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

No annotations provided, so description carries full burden. Only states it lists catalogs with descriptions; no mention of caching, pagination, read-only nature, or any side effects. Minimal behavioral disclosure.

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?

Single sentence with no redundant words. Front-loaded with verb and resource. Efficient and clear.

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 zero parameters and presence of output schema, description is complete enough. It explains what the tool does and adds value by noting it includes what each catalog is good for. Could mention output format but not necessary.

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?

Input schema is empty (0 parameters), so no parameter documentation needed. Description adds no parameter info, which is appropriate.

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?

Clearly states it lists STAC catalogs and their utility. Verb 'List' specifies action, resource is 'STAC catalogs', and adds 'with what each is good for' for extra context. Distinguishes from siblings like search_datasets or describe_collection.

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?

Implies usage for discovering available catalogs, but no explicit when-to-use or when-not-to-use compared to siblings. The list of siblings is provided but no guidance on selection.

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

preview_itemA

Get a browser-openable PNG preview URL for a STAC item.

Routes to the right raster backend per catalog: titiler.xyz for Earth Search, NASA VEDA's raster API, or Planetary Computer's signing data API. Optional rescale like "0,3000" for non-visual assets.

ParametersJSON Schema
NameRequiredDescriptionDefault
assetsNo
catalogYes
item_idYes
rescaleNo
max_sizeNo
collection_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/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 routing to different backends per catalog and optional rescale. Does not mention errors, auth, or destructive effects, but adds useful behavioral context.

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 sentences, each conveying essential information: purpose, routing, and rescale. No unnecessary words, front-loaded structure.

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?

Tool has 6 parameters and an output schema. Description covers main purpose and routing but lacks details on most parameters. Output schema provides return type, but description should ideally explain key parameters like assets and max_size. Slightly below adequate.

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?

Schema description coverage is 0%. Description only explains rescale with an example. The other 5 parameters (assets, catalog, collection_id, item_id, max_size) are not described, which is insufficient for a tool with 6 parameters.

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?

Clearly states it provides a browser-openable PNG preview URL for a STAC item. Routes are detailed per catalog (Earth Search, NASA VEDA, Planetary Computer). Distinguishes from siblings like render_map or tile_url_template by focusing on item-level preview.

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?

Does not explicitly state when to use this over siblings. No directives for when not to use or mention of alternatives. Usage is implied but lacks explicit guidance.

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

render_mapA

Write a self-contained interactive HTML map and return its file path.

layers is a list of: {"type": "item", "name": ..., "catalog": ..., "collection_id": ..., "item_id": ..., "assets": [...], "rescale": "0,3000", "colormap_name": ..., "expression": "(nir-red)/(nir+red)"} # expression for index layers {"type": "raster", "name": ..., "tiles": "https://..{z}/{x}/{y}.."} {"type": "geojson", "name": ..., "data": , "color": "#hex"} Item layers resolve to the right tiling backend automatically. The HTML is shareable: MapLibre + live tile URLs, no server of ours required.

compare: True renders two raster layers as a draggable swipe (before/after), False stacks them as toggleable overlays. Default None auto-decides: swipe only when both rasters come from the SAME collection (a comparison), overlay when they differ (e.g. burn severity over imagery — pass opacity ~0.75).

ParametersJSON Schema
NameRequiredDescriptionDefault
bboxYes
titleYes
layersYes
compareNo
out_pathNo
subtitleNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/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. It mentions the HTML is shareable and no server is needed, and describes layer types and compare logic. However, it does not disclose side effects like file overwriting (out_path default null implies temporary file?), permissions, or cleanup. The description gives moderate transparency but has gaps.

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 concise with clear bullet points for layer types. It front-loads the main purpose and uses structured examples. While it could be slightly shorter, every sentence adds value and the organization aids readability.

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 complexity (6 parameters, 3 required) and no annotations, the description covers the main behavior and layer types. It mentions the return value (file path) but output schema likely exists. However, it lacks guidance for 'bbox' and 'out_path', and does not explain what happens when 'compare' is not set. Completeness is adequate but not thorough.

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 0%, so the description must compensate. It provides detailed structure for the 'layers' parameter (examples of each type) and explains 'compare' behavior. However, it does not describe 'bbox', 'title', 'subtitle', or 'out_path' in any detail. Thus, it adds significant value for some parameters but misses others.

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: 'Write a self-contained interactive HTML map and return its file path.' The verb 'write' and resource 'interactive HTML map' are specific, and the outcome is clearly stated. This distinguishes it from sibling tools like 'preview_item' or 'tile_url_template' which do not write full HTML maps.

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 description provides some usage guidelines, especially for the 'compare' parameter (swipe vs overlay) and explains that item layers auto-resolve. However, it does not explicitly state when to use this tool versus alternatives in the sibling list, such as 'preview_item' for quick previews. The context is helpful but lacks explicit when-not-to-use or alternative comparisons.

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

search_datasetsA

Find dataset collections matching keywords, across all catalogs or one.

Case-insensitive match against collection id, title, description, and keywords. Returns up to 20 hits with {catalog, id, title, summary}.

ParametersJSON Schema
NameRequiredDescriptionDefault
catalogNo
keywordsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/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 transparency burden. It discloses case-insensitive matching, the specific fields searched, the maximum return count (20), and the response schema. It does not cover pagination, ordering, or empty result behavior, but for a simple search tool the disclosure is fairly 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 three concise sentences. The first sentence states the core purpose, the second adds detail on matching behavior, and the third specifies output. No extraneous words; every sentence earns its place.

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 simplicity and the presence of an output schema (though not shown), the description covers essential aspects: search scope, matching logic, result limit, and returned fields. It does not mention sorting or relevance, but for a basic search tool the information provided is sufficient for correct usage.

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 explain parameters. It effectively describes 'keywords' as the search term and 'catalog' as an optional filter: 'across all catalogs or one' implies null means all, string means one. This adds meaningful context beyond the schema's type definitions.

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: finding dataset collections by keywords across all catalogs or a specific one. It specifies the matching fields (id, title, description, keywords) and the return structure (up to 20 hits with catalog, id, title, summary). This is specific and distinguishes it from sibling tools like search_imagery.

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 description implies when to use the tool (for keyword-based dataset search) and hints at scope (all catalogs or one). However, it does not explicitly state when not to use it or mention alternatives among siblings (e.g., list_catalogs for browsing, search_imagery for imagery). Usage guidance is adequate but lacks explicit exclusions or comparisons.

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

search_imageryA

Search a STAC catalog for imagery/data items.

Provide either bbox [w, s, e, n] or a place name (geocoded for you). datetime_range is RFC3339, e.g. "2026-06-01T00:00:00Z/2026-07-09T00:00:00Z". Returns compact items sorted newest first; feed self_url/ids into preview_item, compute_statistics, or render_map.

ParametersJSON Schema
NameRequiredDescriptionDefault
bboxNo
limitNo
placeNo
catalogYes
collectionsYes
datetime_rangeNo
max_cloud_coverNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It discloses that returns are compact items sorted newest first. It does not mention read-only nature, auth needs, or rate limits, but provides some behavioral context.

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 concise with three sentences, front-loading the main purpose and key parameters. Every sentence adds value without fluff.

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 7 parameters, 2 required, and no schema descriptions, the description is incomplete. It explains half the params and mentions output usage, but lacks details on catalog, collections, limit, max_cloud_cover. Output schema exists, so returns are covered.

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 0%, so description must add meaning. It explains bbox format, place geocoding, and datetime_range RFC3339. However, it misses limit, catalog, collections, max_cloud_cover. Partial 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 'Search a STAC catalog for imagery/data items' with specific verb and resource. It distinguishes from siblings like search_datasets and preview_item by mentioning the output can be fed into them.

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?

It explicitly specifies providing either bbox or place name, and datetime_range format. It also indicates using output for downstream tools. However, no explicit when-not-to-use or alternatives are mentioned.

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

tile_url_templateB

XYZ tile URL template ({z}/{x}/{y}) for a STAC item, for web maps.

For index layers (NDVI etc.) pass expression over asset names, e.g. "(nir-red)/(nir+red)" with rescale="-1,1" and colormap_name="rdylgn" — supported on earth-search; ignored for veda/planetary-computer.

ParametersJSON Schema
NameRequiredDescriptionDefault
assetsNo
catalogYes
item_idYes
rescaleNo
expressionNo
collection_idYes
colormap_nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior2/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 the output is a tile URL template but lacks details on error conditions, limitations, or behavior when inputs are invalid. The output schema exists but is not referenced.

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 concise with three sentences, front-loading the main purpose and parameter examples without unnecessary fluff.

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

Completeness2/5

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

Given 7 parameters and 0% schema description coverage, the description only partially explains three parameters. It lacks coverage of required parameters and the role of assets, making it incomplete for an agent to use effectively without additional context.

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?

The description adds meaning to 'expression', 'rescale', and 'colormap_name' by explaining their use in index layers. However, it does not explain the required parameters like 'catalog', 'collection_id', 'item_id', or the optional 'assets' parameter, leaving gaps.

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 that the tool generates an XYZ tile URL template for a STAC item, specifically for web maps. It distinguishes from sibling tools like 'render_map' by focusing on tile URL generation and providing usage examples for index layers.

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 description gives specific usage guidance for index layers with expressions, rescale, and colormap, and notes catalog-specific support differences. However, it does not explicitly compare to alternatives or indicate when not to use this tool.

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

weather_summaryA

Recent and forecast weather for a point (Open-Meteo, no key needed).

Returns daily max/min temperature, precipitation, max wind speed, and dominant wind direction (degrees, meteorological: 0=N, 90=E — the direction wind comes FROM) for past_days back and 7 days ahead. Wind direction matters for smoke, ash, and plume dispersal questions.

ParametersJSON Schema
NameRequiredDescriptionDefault
latYes
lonYes
past_daysNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations, the description fully discloses the behavior: it returns daily max/min temperature, precipitation, max wind speed, and dominant wind direction. It explains the wind direction convention (meteorological degrees) and specifies the time range (past_days back and 7 days ahead).

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 succinct with three sentences: the first states the purpose, the second details the output, and the third gives a use case. 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?

Given the presence of an output schema, the description adequately covers the tool's functionality, input parameters, and key details like data source. It provides sufficient context for an agent to decide when to use it.

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%, but the description adds meaning by explaining the effect of 'past_days' (controls how many days back to include) and implies lat/lon are coordinates. It does not detail lat/lon format but the schema requires them.

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 provides 'Recent and forecast weather for a point' and lists the specific fields returned (temperature, precipitation, wind speed, wind direction). It distinguishes itself from sibling tools by focusing on weather data.

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 explains that no API key is needed and notes that wind direction is important for smoke, ash, and plume dispersal questions, giving context on when to use this tool. However, it does not explicitly state alternatives or exclusions.

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. 12 tool updatesv0.1.0
    • First observedactive_events
    • First observedcompare_dates
    • First observedcompute_statistics
    • First observeddescribe_collection
    • First observedgeocode
    • First observedlist_catalogs
    • First observedpreview_item
    • First observedrender_map
    • First observedsearch_datasets
    • First observedsearch_imagery
    • First observedtile_url_template
    • First observedweather_summary

TDQS

A4/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose: events, change detection, statistics, catalog metadata, geocoding, preview, map rendering, dataset search, imagery search, tile URL generation, and weather. No two tools appear to do the same thing, and descriptions clarify boundaries.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern with lowercase and underscores (e.g., active_events, compare_dates, search_imagery). No mixing of conventions.

Tool Count5/5

12 tools is well-scoped for the Earth observation domain: covering discovery, search, analysis, visualization, and weather. Each tool earns its place without redundancy or overwhelming number.

Completeness5/5

The tool set covers the full lifecycle for the intended use: finding data (search_datasets, search_imagery, list_catalogs), accessing metadata (describe_collection), analyzing (compute_statistics, compare_dates), visualizing (preview_item, render_map, tile_url_template), and integrating external data (active_events, weather_summary, geocode). No obvious gaps.

Maintenance

ActivityActive
ResponsivenessNo issues

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
    Enables AI agents to interact with SkyFi's geospatial data services for ordering satellite imagery, searching data catalogs, checking pricing and feasibility, and monitoring areas of interest.
    11
    MIT
  • F
    license
    Not graded
    quality
    Not graded
    maintenance
    Enables AI agents to search, order, and monitor satellite and geospatial imagery through SkyFi's API, including archive searches, pricing estimates, and order tracking.
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    Production-ready satellite imagery analysis server that enables natural language queries for Earth observation data, including land cover classification, vegetation monitoring, water detection, change detection, and automated environmental reporting.
    MIT

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/dannybauman/groundstation'

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