Tool ReferenceOther
interactive_map_app
Weather & Hazard Map
Render an INTERACTIVE map (MCP App iframe): severe-weather contours, hurricane tracks, or custom GeoJSON, with pan/zoom, hover popups, legends, POI search, and time sliders.
**Routing:** if the MCP client supports MCP Apps (e.g. Claude Desktop / claude.ai), this is the PREFERRED tool for any map request ('show me a hail map', 'map this storm', 'plot these locations'). If the client cannot render MCP apps, use the static image tools on aa-s3 instead: generate_severe_weather_quicklook, generate_hurricane_quicklook, or generate_geojson_quicklook.
Pick one mode via `map_peril`:
**Severe weather** — `map_peril` in {HAIL, WIND_GUST, TORNADIC_STORM, RAINFALL, SNOWFALL, FREEZING_RAIN}. REQUIRES `date` (MM/DD/YYYY or YYYY-MM-DD). Optional `state` (two-letter) filters to one state; omit for CONUS.
On-demand severe-weather layers — SPC ground-truth storm reports (`spc_reports`) and NWS post-storm tornado damage surveys (`tor_survey`) — are OFF by default. Enable one ONLY when the user explicitly asks for that layer by name (e.g. 'show the NWS tornado surveys', 'add SPC reports'). A plain contour/map request — including 'show tornado contours' or 'map the tornadoes' — must NOT enable them; leave `tor_survey` and `spc_reports` off. When the user does ask, turn it on AT OPEN via `display_defaults` — e.g. display_defaults={"tor_survey": true} or {"spc_reports": true}. Do NOT open the map and then call set_map_display to enable it; that is a redundant round-trip.
To render pre-existing contours with this peril's native styling instead of re-fetching CONUS from Dexter, also pass `geojson_url` (Athenium S3 only) — e.g. the `clipped_geojson_url` returned by severe_weather_multiday_intensity for a single-day clip; `date` still labels the layer.
**Hurricane** — `map_peril=HURRICANE`. REQUIRES `storm_id` (ATCFID, e.g. 'AL092025'). Optional `initial_time` (YYYYMMDDHH, default 'latest') pins a specific forecast run; `forecast_type` is 'track' (default), 'wind' (adds wind swath), or 'precip'. Optional `ensemble` picks forecast tracks: 'official'=Athenium Official (default), 'ai_enhanced'=AI Enhanced, 'model_means'=per-system model means; comma-separate to combine (e.g. 'official,ai_enhanced,model_means'; legacy numeric codes 888/999/777 also accepted). The map always includes the storm's observed history trail and a current-position marker, plus a Saffir-Simpson intensity colorbar. Wind/precip swaths exist for official/ai_enhanced only, and both appear in the display manifest so they can be toggled onto an already-open map (user layer menu or set_map_display) without re-opening.
**Custom GeoJSON** — `map_peril=CUSTOM`. Pass geometry via `geojson_inline` (a GeoJSON FeatureCollection passed in-band — the default for Claude/user-authored geometry, ≤500 KB) OR `geojson_url` (URLs previously returned by this server's data tools only; other hosts are rejected). Optional `geojson_label` for the legend. Layer type is auto-detected from feature geometry, or set `layer_type='station_model'` for point observations to render meteorological station plots (wind barb + temp/dewpoint/pressure; expects station_historical_data field names like windSpeedKts, windDirectionDegrees, surfaceTemperatureFahrenheit — short aliases tempF/dewpointF/windDirDeg/windMph/gustMph/cloudPct also work).
**Data-driven coloring** (CUSTOM/station_model): `value_field` names a feature property to color by — numeric values get a continuous ramp; string/categorical values (e.g. 'LOW'/'HIGH') are auto-colored as categories sampled from the same ramp. `ramp` picks a registry ramp (cividis [default], viridis, turbo, RdYlBu, RdYlBu_r [blue→red, temperature convention], nws_reflectivity, flight_category); optional `domain` is [min, max] to fix a numeric scale range. A populated color legend is returned in the summary.
All modes accept optional `title`, `center_lat`, `center_lon`, `zoom`. Aliases accepted: tornado→TORNADIC_STORM, wind→WIND_GUST, rain→RAINFALL, snow→SNOWFALL, ice→FREEZING_RAIN, tc/tropical_cyclone→HURRICANE.
**Display manifest:** the result's `display.layers[]` lists every layer this map can show. `active:true` = currently on the map; `available:true` = a legal move you (or the user, via the map's layer menu) can toggle on; `available:false` entries carry an `unavailable_reason`. `user_touched:true` means the user set that layer manually — do not change those unless the user asks. To change what an OPEN map displays without re-opening it, call `set_map_display` with the returned `display.session` id; re-run this tool only for a different date/peril/storm. To SEED the display at open, pass `display_defaults` ({layer_id: bool}) — e.g. {"ui_title": false, "ui_search": false, "ui_time_slider": false} for a maximally clean map window, or {"hurricane_swath_wind": true} to open with an on-demand layer already active. Interface chrome ids: ui_search, ui_title, ui_time_slider. `time_defaults` seeds the time slider (bin/mode/show_all/playing/speed_ms) — e.g. {"playing": true, "mode": "cumulative", "speed_ms": 300} opens straight into an animation. Post-open, set_map_display also accepts `camera` ({bbox} or {center, zoom}) and `time` directives — combine them for zoomed animations.https://mcp.barocline.com/mcphttps://mcpkey.barocline.com/weather-risk/mcphttps://mcpoauth.barocline.com/mcpIdempotent
Parameters
| Name | Type | Required | Default |
|---|---|---|---|
map_peril | string | Yes | - |
date | string | No | "" |
state | string | No | "" |
storm_id | string | No | "" |
initial_time | string | No | "latest" |
forecast_type | string | No | "track" |
ensemble | string | No | "official" |
geojson_url | string | No | "" |
geojson_label | string | No | "" |
geojson_inline | object | null | No | null |
layer_type | string | No | "auto" |
value_field | string | No | "" |
ramp | string | No | "" |
domain | array | null | No | null |
title | string | No | "" |
center_lat | number | null | No | null |
center_lon | number | null | No | null |
zoom | integer | null | No | null |
display_defaults | object | null | No | null |
time_defaults | object | null | No | null |
Sample input
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "interactive_map_app",
"arguments": {
"map_peril": "value",
"date": "",
"state": "",
"storm_id": "",
"initial_time": "latest",
"forecast_type": "track",
"ensemble": "official",
"geojson_url": "",
"geojson_label": "",
"layer_type": "auto",
"value_field": "",
"ramp": "",
"title": ""
}
}
}{
"name": "interactive_map_app",
"arguments": {
"map_peril": "value",
"date": "",
"state": "",
"storm_id": "",
"initial_time": "latest",
"forecast_type": "track",
"ensemble": "official",
"geojson_url": "",
"geojson_label": "",
"layer_type": "auto",
"value_field": "",
"ramp": "",
"title": ""
}
}