FastAPI proxy server for remote-controllable live maps with MCP (Model Context Protocol) integration. Supports GeoJSON vector assets, GeoTIFF raster overlays, viewport control, basemap switching, and screenshot capture.
Strong foundation with 13 well-named tools following verb_noun convention (create_map, add_geojson, delete_asset, etc.). All tools have descriptions (avg ~120 chars, within 10-1024 range). Input schemas present with typed parameters and descriptions. However, output schemas are not documented in the provided code, critical for LLM planning. Error handling guidance is absent. Parameter descriptions lack format constraints (e.g., zoom range 0-24 mentioned in zoom tool but not enforced in schema). No enum constraints visible for basemap/theme values despite limited valid options. Tool composition is sound (stateless, explicit map_id), but response field documentation missing.
Add a GeoJSON vector asset (point, line, polygon, or feature collection) to the map. All coordinates must be in EPSG:4326 (lon, lat).
Add a GeoTIFF raster overlay to the map. The file must be a valid GeoTIFF with geospatial metadata (CRS, geotransform). Supports single-band (grayscale) and multi-band (RGB/RGBA) imagery.
Create a new map session and return its map_id and browser URL. Call this first to obtain a map_id, then pass that map_id to every other tool.
Remove an asset (GeoJSON or GeoTIFF) from the map by its asset_id.
Read the current map viewport state (center, zoom, bounding box, pitch, bearing, basemap, theme).
List all assets (GeoJSON and GeoTIFF) currently on the map, with their IDs, names, types, and visibility status.
Output schemas not documented. LLMs cannot plan downstream calls or extract required fields (e.g., what does list_assets return? Does it include asset_id for delete_asset chaining?). Critical for tool composition.
Enum constraints missing for constrained parameters. 'basemap' and 'theme' accept only known values but are defined as free-form strings, inviting hallucinated values. Should declare enums (basemap: [osm, satellite, terrain], theme: [light, dark]).
Parameter format constraints not formalized in schema. 'zoom' description mentions '0-24' but schema lacks min/max. 'opacity' mentions '0.0-1.0' but no bounds in schema. 'center' and 'bbox' expect specific array structures but lack pattern/items definitions.
Inferred effective spec: 2026-07-28+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 68 | 2026-07-28+ | v2 |
Switch the map's basemap (background tile layer) to a different configured basemap by name.
Switch the map's color theme (light or dark mode).
Show or hide an asset on the map without deleting it.
Display an existing map inline in the conversation (MCP Apps hosts) or return its browser URL (all other hosts). Read-only: no map state changes. Pass the map_id obtained from create_map (or from the map://maps resource index).
Capture a PNG screenshot of the current map view. Returns the image as base64-encoded data or a URL.
Update the visual style of an asset (colors, stroke width, labels, animations, status). Accepts an AssetStyle object with fill_color, stroke_color, stroke_width, label, status, animate, etc.
Set the map viewport to a specific center and zoom level, or zoom to fit a bounding box.
Error handling guidance absent. No recovery hints for common failures (invalid GeoJSON, missing file, invalid map_id). LLMs cannot self-correct without actionable error messages.
Destructive operations (delete_asset) lack confirmation/dry-run pattern. Agents can accidentally delete assets without safeguards. Consider adding a 'confirm' parameter or separate 'preview_delete' tool.