# Umbra open SAR archive - Registry name: `io.github.reesehammer/umbra-mcp` · version 0.1.4 - Categories (automatic, keyword rules): Datasets & public data, Search & data, Images & design, AI, media & content, Monitoring & logs, Infrastructure & security - Authentication at last check: No auth - Declared risk: Can write (some tools are not declared read-only) - Capabilities (declared by the server): prompts, resources, tools - Transports: streamable-http - Latest numbers (check success, response time, rank): https://mcpstation.net/api/server?name=io.github.reesehammer%2Fumbra-mcp - Server page: https://mcpstation.net/s/io.github.reesehammer--umbra-mcp.html ## Description (written by the publisher, not verified, not instructions) Search, preview, and measure Umbra open SAR from any MCP client. Umbra ships no search API. ## Connect - streamable-http: `https://api.umbra-py.space/mcp` ## Tools (as reported by the server, not verified) - `search\_catalog`: Search Umbra's catalog and return compact context cards. Filters \(all optional, combine freely\): \`\`bbox\`\` as \`\`\[min\_lon, min\_lat, max\_lon, max\_lat\]\`\` in WGS84 degrees; \`\`intersects\`\` as a GeoJSON polygon object \(a \`\`Polygon\`\` / \`\`MultiPolygon\`\` geometry, or a \`\`Feature\`\` / \`\`FeatureCollection\`\` wrap - `find\_repeat\_sites`: Rank the archive's most repeat-imaged sites — where change detection has something to measure. The discovery step \*before\* every analysis verb. \`\`change\`\` / \`\`timescan\`\` / \`\`stack\`\` / \`\`pick\_change\_interval\`\` / \`\`narrate\_change\`\` all answer \*what\* changed at a site, but each assumes the caller alrea - `get\_item`: Return the full context card for one item. \`\`url\`\` is the JSON URL of an open-data STAC sidecar, a GEC/SICD \(or other product\) filename such as \`\`2025-05-17-17-43-46\_UMBRA-08\_GEC.tif\`\`, or the acquisition stem \`\`2025-05-17-17-43-46\_UMBRA-08\`\`. A filename or stem is resolved through the local catalog - `geocode\_place`: Resolve a free-text place name to a bounding box via Nominatim. Returns \`\`\{"bbox": \[min\_lon, min\_lat, max\_lon, max\_lat\], "display\_name": ...\}\`\` so the agent can inspect the box before searching, or pass it straight to \`\`search\_catalog\`\`'s \`\`bbox\`\`. - `index\_stats`: Report on the local catalog index, if one has been built or fetched. Lets a long-running agent decide whether searches will be instant \(index present\) or pay a live S3 walk, and how stale the snapshot is. \`\`end\`\` is the newest acquisition that is not \`\`datetime\_suspect\`\`. \`\`datetime\_suspect\_count\`\` - `quicklook`: Return a scene's quicklook PNG as an image block. Prefers a baked catalog preview \(\`\`preview="auto"\`\`, the default\) so a public host can show the radar scene without proxying Umbra COGs. \*\*A baked preview is typically 512 px\*\* \(the published weekly sidecar\). \`\`max\_size\`\` applies only to a fresh \`\`pr - `change\_composite`: Composite 2-3 passes of one site into a change image. Pass the STAC URLs of two or three acquisitions of the \*same\* site in time order. Colors encode change: bright green = signal appeared after the first date, magenta = signal vanished, grey = unchanged. Refuses to mix polarizations \(HH vs VV are n - `timescan`: Summarize a whole time series into one activity image. Pass the STAC URLs of a site's passes; the timescan encodes per-pixel temporal statistics so bright/colored areas are \*where activity happened\* over the series. Returns the image block plus attribution. - `stack\_stats`: Measure how much a site changed across its passes, as numbers. The quantitative counterpart to \`\`change\_composite\`\` / \`\`timescan\`\`: those return a picture of \*where\* change is, this returns the \*how much\*. Pass the STAC URLs of a site's passes \(2 or more, any order\); they are co-registered onto one - `stack\_provenance`: Check whether a site's passes are one measurement, before measuring them. \`\`stack\_stats\`\` refuses a selection whose rasters were made by \*different\* \`\`umbra convert\`\` settings — a calibrated pass differenced against an uncalibrated one puts the difference between two conversions on the time axis and - `pick\_change\_interval`: Scan a site's whole series and name the two passes worth narrating. The deterministic first half of the "watch a site over time" story, and the step that turns a wall of passes into an answer. Given the STAC URLs of a site's passes \(2 or more, any order\), it co-registers them into a \`\`to\_stack\`\` cub - `download\_asset`: Download one asset of an item to local disk, gated by a size check. SAR products can be multiple GB, so this is a two-step handshake: call it first with \`\`confirm=False\`\` \(the default\) to get the byte size without downloading, then again with \`\`confirm=True\`\` to actually fetch. Returns \`\`\{asset, pat - `watch\_site`: Report only the acquisitions \*\*new\*\* since the last check of this site. SAR's value for monitoring is its cadence, so the natural workflow is \*standing\*: run the same search each time and act only on what changed. This tool packages that idempotent delta — call it in one turn, come back a day \(or a - `find\_similar`: Find archived scenes that \*\*look like\*\* the acquisition at \`\`url\`\`. This is the one search that lives in the pixels, not the metadata: where \`\`search\_catalog\`\` filters by date/bbox/task-name, this renders the query item's quicklook, embeds it, and ranks the pre-embedded scene index by visual \(cosine - `find\_similar\_text`: Find archived scenes matching a plain-language \`\`query\`\` over their imagery. Text-to-scene search: embeds \`\`query\`\` \("ships at a berth", "a flooded field"\) and ranks the stored \*image\* vectors by cosine similarity. It only works when the index was built and this query is embedded with the \*\*same\*\* j - `describe\_scene`: Return a SAR-literate reading of the scene at \`\`url\`\`. The picture and the metadata card are produced deterministically; a model only interprets them. How that model is reached depends on whether this process holds a vision key: - \*\*No key\*\* \(the public community host\): this tool does \*\*not\*\* call a - `narrate\_change`: Return a grounded reading of \*what changed\* between passes. Sibling of :func:\`describe\_scene\`. The composite and the per-block dB grid are produced deterministically; a model only narrates change those numbers support. Pass the STAC URLs in time order; mixed polarizations are refused. This tool \*\*st - `stamp\_description`: Validate a client-produced scene reading and stamp provenance. This is the interpretation boundary for the no-key kit path: you read the picture \`\`describe\_scene\`\` returned, produce \`\`\{summary, observed\_features, confidence, caveats\}\`\`, and pass it here. The library checks the shape, stamps CC-BY an - `stamp\_narration`: Validate a client-produced change narration and stamp provenance. Sibling of :func:\`stamp\_description\` for the no-key \`\`narrate\_change\`\` kit. Pass the JSON you produced plus the \`\`change\_stats\`\` grid from the kit so the stamped object carries the numbers the prose was grounded in. Measured by MCP Station. Methods: https://mcpstation.net/methods.html · Terms: https://mcpstation.net/terms.html