Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, email [email protected] and we’ll put it right.

Smarter Weather

REMOTE · MCP.SMARTERWEATHER.COM · 2 COMPONENTS · SCANNED AUG 3

Smarter Weather MCP: forecasts, alerts, outlooks, observations, AQI, grids, and map imagery.

+5 this week 73 Trust /100
Trust breakdown (6 categories)

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score →

Endpoint Security74
Transport & Reachability100
Schema Quality & AI Usability74
  • 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 9445 tokens (~277/item across 34 items; 31 tools + 3 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management27
  • Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 99% of tool parameters carry a description.Partial
  • Structured output schemas are declared (87% of tools); any adoption earns full credit.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
  • Supports UI / widget rendering.Pass
Install

Add this component to your MCP client. Where a client-specific snippet is available, pick your client below and copy it straight into your config; otherwise use the connection detail shown.

remote · mcp.smarterweather.com

# add to Claude Code
claude mcp add --transport http smarterweather-weather https://mcp.smarterweather.com/mcp
# ~/.codex/config.toml
[mcp_servers.smarterweather-weather]
url = "https://mcp.smarterweather.com/mcp"
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "smarterweather-weather": {
      "type": "remote",
      "url": "https://mcp.smarterweather.com/mcp",
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add smarterweather-weather --url https://mcp.smarterweather.com/mcp --transport streamable-http
# ~/.hermes/config.yaml
mcp_servers:
  smarterweather-weather:
    url: "https://mcp.smarterweather.com/mcp"
// mcp.json
{
  "mcpServers": {
    "smarterweather-weather": {
      "type": "http",
      "url": "https://mcp.smarterweather.com/mcp"
    }
  }
}

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 2 Aug 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 20 to 23. That category is still filling its 30-day observation window: 6 days of observed history at the previous scan, 7 at this one. The score rises as the window fills, whether or not the server changes.

  • 31 Jul 26 +3
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 30 Jul 26 0
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 29 Jul 26 0
    • Tool “get_forecast_discussion” rewrote its description, which is the text the model reads security
    • Tool “get_outlooks” rewrote its description, which is the text the model reads security
    • Tool “get_lightning_activity” rewrote its description, which is the text the model reads security
    • Schema quality: excellent → good functional
    • Server version: 0.0.0.94 → 0.0.0.98 functional
    • New tool “get_climate_normals” functional
    • “get_forecast_discussion” added an optional parameter “day” cosmetic
    • “get_forecast_discussion” reworded the description of “type” cosmetic
    • “get_outlooks” reworded the description of “include_narrative” cosmetic
    • “get_outlooks” reworded the description of “hazard” cosmetic
    • “get_outlooks” reworded the description of “day” cosmetic
  • 28 Jul 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 3 to 7. That category is still filling its 30-day observation window: 1 days of observed history at the previous scan, 2 at this one. The score rises as the window fills, whether or not the server changes.

  • 27 Jul 26 0
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 26 Jul 26 68

    First indexed and scored.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 3 Aug 2026 · Probed https://mcp.smarterweather.com/mcp

TLS valid

Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .

Subject Issuer Valid from Valid until Key Signature Serial
CN=mcp.smarterweather.com CN=Amazon RSA 2048 M01,O=Amazon,C=US 24 Jun 2026 7 Jan 2027 RSA 2048 SHA256-RSA d5cbd2b33185e147ebdc9f1b7435deb
SANs: mcp.smarterweather.com
CN=Amazon RSA 2048 M01,O=Amazon,C=US (CA) CN=Amazon Root CA 1,O=Amazon,C=US 23 Aug 2022 23 Aug 2030 RSA 2048 SHA256-RSA 77312380b9d6688a33b1ed9bf9ccda68e0e0f
CN=Amazon Root CA 1,O=Amazon,C=US (CA) CN=Starfield Services Root Certificate Authority - G2,O=Starfield Technologies\, Inc.,L=Scottsdale,ST=Arizona,C=US 25 May 2015 31 Dec 2037 RSA 2048 SHA256-RSA 67f944a2a27cdf3fac2ae2b01f908eeb9c4c6
DNSSEC insecure

Validation of mcp.smarterweather.com. Not signed

Zone DS Keys Algorithms Outcome
. trust_anchor 20326, 38696 8, 8 Verified
com. present 19718 13 Verified
smarterweather.com. absent Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation
Authentication No authorisation required

The endpoint answered without asking for a token. Anyone who knows the URL can reach it.

Result No authorisation required
HTTP status 200
Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://mcp.smarterweather.com/mcp Verified 200
http (plaintext) http://mcp.smarterweather.com/mcp HTTPS enforced 301 https://mcp.smarterweather.com/mcp
MCP tools — 31 exposed · ~9,367 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability.

Tool Tokens
compare_locations ~168

Compare forecast variables across multiple locations side-by-side in one batched call. Returns a distilled per-location series matrix for direct comparison -- prefer this over N sequential forecast calls. Locations accept place names directly. Example: {"locations": [{"location": "Denver"}, {"location": "Boulder, CO"}], "variables": ["temperature_2m", "precipitation_probability"], "hours": 48}.

NameTypeReqDescription
dataset_idstringDataset override. Default: auto-resolved NBM per location.
hoursintegerForecast hours. Default 24.
locationsarrayyesLocations to compare (2-10). Each takes location OR lat/lon, optional label.
variablesarrayyesStandard variable names (e.g. temperature_2m, precipitation).
NameTypeReqDescription
comparisonsarrayyes
hoursnumberyes
variablesarrayyes

No examples provided.

describe_dataset ~96

Variables available in a dataset, with standard names, units, descriptions, and the time range of available data. Use before query_dataset to discover valid variable names. Example: {"dataset_id": "nbm_conus"}.

NameTypeReqDescription
dataset_idstringyesPipeline dataset identifier (e.g. "nbm_conus", "mrms_reflectivity_conus"). Discover valid values with list_datasets; inspect variables with describe_dataset.
NameTypeReqDescription
dataset_idstringyes
detailobjectyes

No examples provided.

find_best_window ~348

Find the optimal time window for an activity based on weather criteria. Scans the forecast and returns daylight-aware periods matching all conditions. Criteria are expressed in the selected `units` system (default imperial: °F, mph, miles, feet). Example: {"location": "Boulder, CO", "criteria": {"min_temperature": 55, "max_wind_speed": 15, "max_precipitation_probability": 20}, "hours": 72, "activity_duration_hours": 3}.

NameTypeReqDescription
activity_duration_hoursintegerMinimum consecutive hours meeting criteria. Default 2.
criteriaobjectyesWeather criteria defining acceptable conditions (all optional).
daylight_onlybooleanOnly consider daylight hours (sunrise to sunset). Default true.
hoursintegerHours to search. Default 72.
latnumberLatitude in decimal degrees (-90 to 90). Most tools also accept a `location` place-name string instead of lat/lon.
locationstringFree-text place: city ("Denver"), city+state ("Portland, OR"), US ZIP ("50219"), or "lat,lon" ("39.74,-104.99"). Provide either this OR explicit lat+lon, not both.
lonnumberLongitude in decimal degrees (-180 to 180). For continental US use negative values (west of the prime meridian).
unitsstringUnit system for all values in the request and response: imperial (°F, mph, inches), metric (°C, km/h, mm), or si (K, m/s, mm). Defaults to imperial.
NameTypeReqDescription
activity_duration_hoursnumberyes
criteria_appliedobjectyes
daylight_onlybooleanyes
locationobjectyes
messagestring
sun_timesarray
unitsstringyes
windowsarrayyes

No examples provided.

get_air_quality ~316

AirNow air quality at a location (CONUS): current overall AQI plus per-pollutant detail (PM2.5, ozone, PM10 concentrations) and the AirNow AQI forecast. AQI scale: 0-50 good, 51-100 moderate, 101-150 unhealthy for sensitive groups, 151-200 unhealthy, 201-300 very unhealthy, 301+ hazardous. pollutants=["aqi"] (default) is the cheap headline call; add pollutant keys or include_forecast=true when the user digs in. Example: {"location": "Boise", "pollutants": ["aqi", "pm25"], "include_forecast": true}.

NameTypeReqDescription
include_forecastbooleanAlso return the AirNow next-day AQI forecast.
latnumberLatitude in decimal degrees (-90 to 90). Most tools also accept a `location` place-name string instead of lat/lon.
locationstringFree-text place: city ("Denver"), city+state ("Portland, OR"), US ZIP ("50219"), or "lat,lon" ("39.74,-104.99"). Provide either this OR explicit lat+lon, not both.
lonnumberLongitude in decimal degrees (-180 to 180). For continental US use negative values (west of the prime meridian).
pollutantsarrayWhich measurements to return. aqi = combined AQI index. Default: ["aqi"].
NameTypeReqDescription
currentarrayyes
forecastarray
locationobjectyes
widgetobjectsw-ui-spec widget block rendered by the MCP Apps weather widget (ui://weather-widget/v1/index.html). Additive; safe to ignore.

No examples provided.

get_alerts ~245

Active NWS watches, warnings, and advisories. Location mode returns all alerts in effect at a point (severity, urgency, certainty, timing, headline, description, instructions); an empty result means no active alerts -- not a failure. alert_id mode returns full detail (including geometry) for one alert previously returned by this tool. Examples: {"location": "Miami"} or {"alert_id": "urn:oid:2.49.0.1.840..."}.

NameTypeReqDescription
alert_idstringAlert identifier for detail mode. When set, location is ignored.
latnumberLatitude in decimal degrees (-90 to 90). Most tools also accept a `location` place-name string instead of lat/lon.
locationstringFree-text place: city ("Denver"), city+state ("Portland, OR"), US ZIP ("50219"), or "lat,lon" ("39.74,-104.99"). Provide either this OR explicit lat+lon, not both.
lonnumberLongitude in decimal degrees (-180 to 180). For continental US use negative values (west of the prime meridian).
NameTypeReqDescription
alertobject
alert_idstring
alerts
locationobject
widgetobjectsw-ui-spec widget block rendered by the MCP Apps weather widget (ui://weather-widget/v1/index.html). Additive; safe to ignore.

No examples provided.

get_climate_normals ~311

Day-of-year climate normals (NCEI 1991-2020 30-year averages) for a US location, from the nearest station with a record. Returns normal high, normal low, and normal mean for each date in the window, plus the station and how far away it is. Use this whenever a question needs a baseline rather than a forecast: "is this warm for October?", "what is a typical high here in January?", "how does this week compare to normal?". Pair it with get_forecast to say how far above or below normal the coming days run. Covers dates by day of year, so it answers for any date, past or future -- these are long-period averages, not a forecast and not observed history for a specific year.

NameTypeReqDescription
daysintegerRange length in days when start/end are omitted; the window opens today (default 14).
endstringInclusive range end as YYYY-MM-DD. Must be supplied with start.
latnumberyesLatitude in decimal degrees (-90 to 90). Most tools also accept a `location` place-name string instead of lat/lon.
lonnumberyesLongitude in decimal degrees (-180 to 180). For continental US use negative values (west of the prime meridian).
startstringInclusive range start as YYYY-MM-DD. Must be supplied with end.
unitstringUnit system for the normals. Default imperial (°F).

No output schema declared.

No examples provided.

get_climate_records ~274

NWS daily climate data: type=reports returns CLI daily climate reports (observed high/low/precip vs normals per station); type=records returns RER record event reports (record highs/lows/rainfall actually set). Filter by wfo (3-letter office, e.g. DMX), station, date (YYYY-MM-DD), start/end range, or hours lookback. Examples: {"type": "records", "hours": 48} or {"type": "reports", "wfo": "DMX", "date": "2026-07-04"}.

NameTypeReqDescription
datestringSingle date, YYYY-MM-DD.
endstringRange end date, YYYY-MM-DD.
hoursintegerLookback window in hours (1-168) when no date/range is given.
record_typestringRecord type filter (records only), e.g. HIGH, LOW, RAIN.
startstringRange start date, YYYY-MM-DD.
stationstringStation identifier filter (reports only).
typestringyesreports = CLI daily climate reports; records = RER record events.
wfostringWFO office filter (e.g. DMX, OUN).
NameTypeReqDescription
resultsobjectyes
typestringyes

No examples provided.

get_current_conditions ~214

Current weather right now at a location from two independent sources in one call: the RTMA gridded analysis (exact-point values, updated sub-hourly) and the nearest METAR station observation (ground truth with raw METAR, flight category). Use the analysis for point-accurate values and the station for verification. For a forecast, use get_forecast. Example: {"location": "Pella, IA"}.

NameTypeReqDescription
latnumberLatitude in decimal degrees (-90 to 90). Most tools also accept a `location` place-name string instead of lat/lon.
locationstringFree-text place: city ("Denver"), city+state ("Portland, OR"), US ZIP ("50219"), or "lat,lon" ("39.74,-104.99"). Provide either this OR explicit lat+lon, not both.
lonnumberLongitude in decimal degrees (-180 to 180). For continental US use negative values (west of the prime meridian).
NameTypeReqDescription
analysisyes
locationobjectyes
nearest_stationyes

No examples provided.

get_forecast ~441

Complete weather overview for a location: current conditions, daily forecast (day/night periods, SPC threats, severity, CAPE, UV), active alerts, and convective outlooks in one call. Data is pre-aggregated across NBM, HRRR, GFS, RTMA, and SPC and unit-converted server-side. This is the primary weather tool; reach for lower-level tools only when you need raw observations or a specific dataset. Accepts a place name directly. Examples: {"location": "Denver"} or {"location": "Portland, OR", "days": 5} or {"lat": 41.4, "lon": -92.9}.

NameTypeReqDescription
daysintegerNumber of forecast days (1-14). Default 10.
detail_levelstringstandard: compact response (~5-10KB); daily includes day_precip_probability / night_precip_probability when available (precip_probability is max of day/night). detailed: also preserves CAPE, UV, full…
includestringComma-separated sections: current, daily, hourly, alerts, outlooks. Default "current,daily,alerts,outlooks". Use get_hourly_forecast for hourly detail.
latnumberLatitude in decimal degrees (-90 to 90). Most tools also accept a `location` place-name string instead of lat/lon.
locationstringFree-text place: city ("Denver"), city+state ("Portland, OR"), US ZIP ("50219"), or "lat,lon" ("39.74,-104.99"). Provide either this OR explicit lat+lon, not both.
lonnumberLongitude in decimal degrees (-180 to 180). For continental US use negative values (west of the prime meridian).
unitsstringUnit system for all values in the request and response: imperial (°F, mph, inches), metric (°C, km/h, mm), or si (K, m/s, mm). Defaults to imperial.
NameTypeReqDescription
data_statusobjectPresent only when the platform reports degraded/outage data sources: overall state, a caveat note, and the affected sources. Absent means no advisory was available -- not a freshness guarantee. See g…
forecastobjectyes
locationobjectyes
unitsstringyes
widgetobjectsw-ui-spec widget block rendered by the MCP Apps weather widget (ui://weather-widget/v1/index.html). Additive; safe to ignore.

No examples provided.

get_forecast_discussion ~470

Expert forecaster text products. type=afd: Area Forecast Discussion (WFO forecasters explain reasoning, uncertainty, model disagreements). type=hwo: Hazardous Weather Outlook (7-day hazard summary). type=mcd: SPC Mesoscale Discussions (real-time severe weather analysis). type=swo: SPC convective outlook discussion (why the risk areas are drawn where they are). type=fwd: SPC fire weather discussion. type=ero: WPC excessive rainfall / flash flood discussion. The last three are national products -- they need no location, and `day` selects the outlook day for swo and fwd. summary_only=true returns the pipeline LLM summary without the full body (much smaller). Examples: {"location": "Des Moines", "type": "afd"} or {"type": "swo", "day": 2, "summary_only": true}.

NameTypeReqDescription
dayintegerOutlook day for type=swo or type=fwd (1-8). Ignored for the other types; WPC files ERO days 1-3 under one product.
latnumberLatitude in decimal degrees (-90 to 90). Most tools also accept a `location` place-name string instead of lat/lon.
limitintegerNumber of recent products (1-10). Default 1 (latest).
locationstringFree-text place: city ("Denver"), city+state ("Portland, OR"), US ZIP ("50219"), or "lat,lon" ("39.74,-104.99"). Provide either this OR explicit lat+lon, not both.
lonnumberLongitude in decimal degrees (-180 to 180). For continental US use negative values (west of the prime meridian).
summary_onlybooleanReturn only the LLM summary + sections, omitting the full body text.
typestringyesProduct type: afd (WFO discussion), hwo (hazard outlook), mcd (SPC mesoscale), swo (SPC convective outlook), fwd (SPC fire weather), ero (WPC excessive rainfall).
wfostringWFO identifier override (e.g. BOU). Default: resolved from the location.
NameTypeReqDescription
locationobject
productsarrayyes
typestringyes

No examples provided.

get_forecast_distribution ~345

Probabilistic forecast guidance from NBM for one aspect of the weather: percentile ranges (p10-p90), exceedance probabilities, and ensemble spread. Aspects: precip (PoP, QPF + percentiles), snow (accumulation percentiles, >1/2/4in probabilities, snow level), ice (freezing rain, accretion), temperature (temp/dewpoint + stddev), wind (speed/gust percentiles), severe (hail/tornado/damaging-wind probabilities), aviation (LIFR/IFR/MVFR visibility + ceiling probabilities), confidence (ensemble stddev; low spread = settled forecast). Examples: {"location": "Denver", "aspect": "snow", "hours": 72} or {"lat": 32.9, "lon": -97.0, "aspect": "severe"}.

NameTypeReqDescription
aspectstringyesWhich distribution family to return (see tool description).
hoursintegerForecast hours (1-264). Default varies by aspect (48-72).
latnumberLatitude in decimal degrees (-90 to 90). Most tools also accept a `location` place-name string instead of lat/lon.
locationstringFree-text place: city ("Denver"), city+state ("Portland, OR"), US ZIP ("50219"), or "lat,lon" ("39.74,-104.99"). Provide either this OR explicit lat+lon, not both.
lonnumberLongitude in decimal degrees (-180 to 180). For continental US use negative values (west of the prime meridian).
NameTypeReqDescription
aspectstringyes
hoursnumberyes
locationobjectyes
seriesarrayyes

No examples provided.

get_forecast_skill ~663

How accurate our forecasts have actually been near a location, measured against observed analysis truth. Returns bias (positive = the model runs high), mean absolute error, RMSE, and a skill score against local climatology, per model, weather variable, and forecast lead time; for probability forecasts, the Brier score and a reliability breakdown. Use this to qualify a forecast rather than assert it -- "NBM has been running 1.8F warm at 3-day leads near you, so treat that 72 as around 70" -- and to answer "how much should I trust this forecast", "is the model biased here", or "how accurate were you last month". Evidence is reported at three scopes side by side: the exact point (strongest, slowest to accumulate), the ~50km neighborhood, and the ~300km region. Prefer the most specific scope that has samples. Metrics below minimumSamples observations are withheld and listed under insufficientHistory with their count -- say that history is still accumulating rather than treating thin numbers as evidence. Coverage is a rolling recent window over verified US variables, not all of history. Entries are per model and their samples are not matched, so never conclude that one model beats another by comparing their numbers here. Each entry states the truth field it was measured against -- one designated analysis per variable -- so never compare numbers carrying different truth values either.

NameTypeReqDescription
latnumberLatitude in decimal degrees (-90 to 90). Most tools also accept a `location` place-name string instead of lat/lon.
lead_hoursintegerNarrow to the lead time being asked about, in hours; the containing lead bucket is selected for you (60 gives the 48-72h bucket). Use the lead of the forecast you are qualifying: ~24 for tomorrow, ~7…
locationstringFree-text place: city ("Denver"), city+state ("Portland, OR"), US ZIP ("50219"), or "lat,lon" ("39.74,-104.99"). Provide either this OR explicit lat+lon, not both.
lonnumberLongitude in decimal degrees (-180 to 180). For continental US use negative values (west of the prime meridian).
modelstringNarrow to one model, e.g. nbm.
truthstringMeasure against a named truth source instead of the default one for each variable, e.g. urma. Only pass this if the user asked which analysis was used or named one; the default is already the designa…
unitstringUnits for the error magnitudes. Default imperial (bias/MAE/RMSE in °F, mph, in).
variablestringNarrow to one variable, e.g. temperature_2m, dew_point_2m, wind_speed_10m, wind_gusts_10m, cloud_cover, precipitation, precipitation_probability. Omit for everything measured at the location.
NameTypeReqDescription
cellsobject
insufficientHistoryarrayyes
locationobjectyes
minimumSamplesnumberyes
skillarrayyes
trackedbooleanyesWhether this exact coordinate is one the verification pipeline tracks.
unitsstringyes

No examples provided.

get_growing_degree_days ~481

Growing Degree Units (GDU / GDD) for a US location (CONUS, Alaska, Hawaii), computed from daily max/min temperatures. Pass a crop id (e.g. "corn", "soybean", "wheat") to use calibrated base/upper thresholds, or crop="custom" with base_temp_c (and optional upper_temp_c / method). Without season_start you get per-day GDU across the forecast horizon; WITH season_start (YYYY-MM-DD) you get the cumulative season-to-date total (observed history + today + forecast) plus a per-day cumulative series -- the number a grower tracks against crop milestones. Answers "how many growing degree days has my corn accumulated since May 1?" and "what's the GDU forecast this week?".

NameTypeReqDescription
base_temp_cnumberCustom base threshold in °C. Required when crop="custom".
cropstringyesCrop id from the catalog (e.g. "corn", "soybean", "wheat") or "custom" to supply your own thresholds via base_temp_c.
day_definitionstringDaily boundary: "nws" (default; NBM MaxT/MinT period extremes) or "local_calendar" (midnight-to-midnight local day).
daysintegerForecast horizon in days (default 10).
include_milestonesbooleanInclude the crop's growth-stage GDU milestones in the response.
latnumberyesLatitude in decimal degrees (-90 to 90). Most tools also accept a `location` place-name string instead of lat/lon.
lonnumberyesLongitude in decimal degrees (-180 to 180). For continental US use negative values (west of the prime meridian).
methodstringGDU method for custom crops. Defaults from whether upper_temp_c is set.
season_startstringSeason/planting start as YYYY-MM-DD (local date). Presence switches the response to a cumulative season-to-date GDU total. Must be within the ~180-day observed window.
unitstringUnit system for GDU + temps. Default imperial (°F-days).
upper_temp_cnumberCustom upper cutoff in °C (enables the modified method). Optional.

No output schema declared.

No examples provided.

get_hourly_forecast ~323

Blended hourly forecast: temperature, feels-like, humidity, wind, precipitation probability/amount, conditions, and icon per hour. Snapped to the current hour so hourly[0] is "now". Timestamps are UTC ISO 8601; convert to the local timezone before presenting. Accepts a place name directly. Example: {"location": "Chicago", "days": 2}.

NameTypeReqDescription
daysintegerDays of hourly data (1-7). Default 2 (48 hours).
detail_levelstringstandard: compact hourly data (sampled past 24h). detailed: preserves CAPE, ceiling, UV, gust, thunderstorm probability for the first 48h.
latnumberLatitude in decimal degrees (-90 to 90). Most tools also accept a `location` place-name string instead of lat/lon.
locationstringFree-text place: city ("Denver"), city+state ("Portland, OR"), US ZIP ("50219"), or "lat,lon" ("39.74,-104.99"). Provide either this OR explicit lat+lon, not both.
lonnumberLongitude in decimal degrees (-180 to 180). For continental US use negative values (west of the prime meridian).
unitsstringUnit system for all values in the request and response: imperial (°F, mph, inches), metric (°C, km/h, mm), or si (K, m/s, mm). Defaults to imperial.
NameTypeReqDescription
data_statusobjectPresent only when the platform reports degraded/outage data sources: overall state, a caveat note, and the affected sources. Absent means no advisory was available -- not a freshness guarantee. See g…
forecastobjectyes
locationobjectyes
unitsstringyes
widgetobjectsw-ui-spec widget block rendered by the MCP Apps weather widget (ui://weather-widget/v1/index.html). Additive; safe to ignore.

No examples provided.

get_lightning_activity ~225

Real-time lightning near a location: GLM satellite flash count (30km/10min) and MRMS ground-truth lightning density + 30-minute probability. The summary field is ready-to-use. A zero flash count means no lightning inside that window -- report it as a quiet observation scoped to the window in `scope`, never as a data gap. Only call when storms may be active or the user asks about lightning. Example: {"location": "Tampa"}.

NameTypeReqDescription
latnumberLatitude in decimal degrees (-90 to 90). Most tools also accept a `location` place-name string instead of lat/lon.
locationstringFree-text place: city ("Denver"), city+state ("Portland, OR"), US ZIP ("50219"), or "lat,lon" ("39.74,-104.99"). Provide either this OR explicit lat+lon, not both.
lonnumberLongitude in decimal degrees (-180 to 180). For continental US use negative values (west of the prime meridian).
NameTypeReqDescription
lightningobjectyes
locationobjectyes
scopestringyesArea and time window searched, so a zero count is unambiguous to report.

No examples provided.

get_map_snapshot ~522

Render a weather map image for visual analysis. Simple form: pass `product` (a viz-catalog product_id like "mrms_qpe_01h_pass2_conus", "goes_truecolor_conus", "spc_day1_categorical", or "nexrad_l3:{SITE}:{PRODUCT}" for single-site radar, e.g. "nexrad_l3:TLX:N0B") plus a location and zoom (5=regional, 8=metro, 10=city). Composed form: pass `scene` -- a declarative scene document layering basemap + multiple weather products + active alerts + storm features + inline GeoJSON in one image (layers draw bottom-to-top, under basemap labels). Example scene: {"scene":"1.0","view":{"center":{"lat":43.8,"lon":-91.2},"zoom":8},"layers":[{"type":"weather","product":"goes_truecolor_conus"},{"type":"weather","product":"nexrad_l3:ARX:N0B"},{"type":"alerts","filter":{"events":["Tornado Warning"]},"onError":"skip"}]}. Alert filters (all optional, AND-combined): `ids` (specific alerts), `events`, `severities`, `minSeverity` (Extreme>Severe>Moderate>Minor>Unknown). Returns the rendered image plus per-layer resolved valid times.

NameTypeReqDescription
heightinteger
latnumberLatitude in decimal degrees (-90 to 90). Most tools also accept a `location` place-name string instead of lat/lon.
locationstringFree-text place: city ("Denver"), city+state ("Portland, OR"), US ZIP ("50219"), or "lat,lon" ("39.74,-104.99"). Provide either this OR explicit lat+lon, not both.
lonnumberLongitude in decimal degrees (-180 to 180). For continental US use negative values (west of the prime meridian).
opacitynumberWeather layer opacity
productstringviz-catalog product_id or nexrad_l3:{SITE}:{KEY} (simple form)
sceneobjectFull scene document (composed form). When set, product/location/zoom are ignored.
timeintegerUnix seconds; frame closest to this time (default: latest)
widthinteger
zoomnumberMap zoom (simple form)

No output schema declared.

No examples provided.

get_observations ~274

METAR surface observations from weather stations: temperature, wind, visibility, ceiling, flight category, raw METAR. Nearest mode (default) returns the closest N stations to a location; station mode returns history for a specific ICAO identifier. Examples: {"location": "Denver", "n": 3} or {"station": "KJFK", "hours": 6}.

NameTypeReqDescription
hoursintegerHours of history in station mode (1-24).
latnumberLatitude in decimal degrees (-90 to 90). Most tools also accept a `location` place-name string instead of lat/lon.
locationstringFree-text place: city ("Denver"), city+state ("Portland, OR"), US ZIP ("50219"), or "lat,lon" ("39.74,-104.99"). Provide either this OR explicit lat+lon, not both.
lonnumberLongitude in decimal degrees (-180 to 180). For continental US use negative values (west of the prime meridian).
nintegerNumber of nearest stations (1-10). Default 1. Ignored in station mode.
stationstringICAO station identifier (e.g. KJFK). Switches to station-history mode.
NameTypeReqDescription
locationobject
observationsobjectyes
stationstring

No examples provided.

get_outlooks ~403

Hazard outlooks affecting a location. hazard=severe returns SPC convective outlooks (Day 1-8 categorical risk + tornado/wind/hail probabilities); hazard=fire returns SPC fire weather outlooks; hazard=rain returns WPC Excessive Rainfall Outlook polygons (days 1-3); hazard=heat returns the NWS HeatRisk index at the point (0 none .. 4 extreme, days 1-3). include_narrative=true adds the forecaster discussion for severe (SWO), fire (FWD), or rain (QPF/QPFERD; one PIL for all days). An empty result means no outlook covers the point -- not a failure. Examples: {"location": "Moore, OK", "hazard": "severe", "include_narrative": true} or {"location": "Phoenix", "hazard": "heat"}.

NameTypeReqDescription
dayintegerOutlook day for the narrative filter (1-8). Default 1.
hazardstringHazard family: severe = SPC convective, fire = SPC fire weather, rain = WPC excessive rainfall, heat = NWS HeatRisk index. (Winter/WSSI is a planned expansion.)
include_narrativebooleanInclude the forecaster narrative for the requested day (severe, fire, and rain).
latnumberLatitude in decimal degrees (-90 to 90). Most tools also accept a `location` place-name string instead of lat/lon.
locationstringFree-text place: city ("Denver"), city+state ("Portland, OR"), US ZIP ("50219"), or "lat,lon" ("39.74,-104.99"). Provide either this OR explicit lat+lon, not both.
lonnumberLongitude in decimal degrees (-180 to 180). For continental US use negative values (west of the prime meridian).
NameTypeReqDescription
daynumberyes
hazardstringyes
heat_riskarray
locationobjectyes
narrative
outlooksarrayyes

No examples provided.

get_period_totals ~435

Aggregate a weather variable over one or more time periods. Returns server-computed totals, maxima, minima, or averages per period. Period start/end times should use the user's local timezone boundaries (not UTC midnight). Response includes the converted value and unit per period. Ideal for questions like "total rainfall today and tomorrow" or "peak wind speed this weekend". Accepts a place name directly. Example: {"location": "Portland, OR", "variable": "precipitation", "aggregation": "sum", "periods": [{"start": "2026-07-08T07:00:00Z", "end": "2026-07-09T07:00:00Z", "label": "Today"}]}.

NameTypeReqDescription
aggregationstringAggregation function. Default sum. Use sum for precipitation/snowfall, max for temperature/wind, min for low temperatures, avg for humidity/cloud cover.
dataset_idstringDataset override. Default: auto-resolved NBM for the location.
latnumberLatitude in decimal degrees (-90 to 90). Most tools also accept a `location` place-name string instead of lat/lon.
locationstringFree-text place: city ("Denver"), city+state ("Portland, OR"), US ZIP ("50219"), or "lat,lon" ("39.74,-104.99"). Provide either this OR explicit lat+lon, not both.
lonnumberLongitude in decimal degrees (-180 to 180). For continental US use negative values (west of the prime meridian).
periodsarrayyesTime periods to aggregate over (1-14).
unitsstringUnit system for all values in the request and response: imperial (°F, mph, inches), metric (°C, km/h, mm), or si (K, m/s, mm). Defaults to imperial.
variablestringyesStandard variable name (e.g. precipitation, snowfall, temperature_2m, wind_speed_10m, cape).
NameTypeReqDescription
aggregationstringyes
locationobjectyes
messagestring
periodsarrayyes
variablestringyes

No examples provided.

get_platform_status ~150

Current data-freshness status of the weather platform: overall state, per-source states (ok / degraded / outage / no_signal), open incidents with cause attribution (provider outage vs internal processing delay), and active provider advisories. Use this when a user asks whether data is current, when other tools return surprisingly stale data, or before presenting time-critical weather. If a source is degraded or in outage, tell the user their data may be stale rather than presenting it as live. No inputs. Refreshed about every 5 minutes.

NameTypeReqDescription
include_okbooleantrue: list every monitored source including healthy ones. false (default): only sources that are not ok, keeping the response compact.
NameTypeReqDescription
advisoriesarray
generated_atstringWhen the status document was generated (UTC).
notestring
overallstringyesWorst state across customer-facing data sources; "unknown" when status is unavailable.
sourcesarray

No examples provided.

get_population_exposure ~183

National population-exposure headline for a risk-zone outlook product: how many people are inside risk bands at or above min_level. Powers headlines like "~57M people under major heat risk tomorrow". hazard=heat covers NWS HeatRisk days 1-3 (levels: 1 minor, 2 moderate, 3 major, 4 extreme). Pass product_id directly for other risk-zone products. Example: {"hazard": "heat", "min_level": 3}.

NameTypeReqDescription
hazardstringHazard family (expands the day-1..3 product set). Currently: heat (HeatRisk).
min_levelintegerMinimum risk level to count (>=). Default 1 (any elevated risk).
product_idstringExplicit risk-zone product ID (overrides hazard), e.g. heatrisk_day1_conus.
NameTypeReqDescription
min_levelnumberyes
summariesarrayyes

No examples provided.

get_sounding ~286

Nearest RAOB (radiosonde) vertical soundings to a point. Each sounding carries: profile (pressure-indexed thermodynamics: pressure_hpa, height_m, temperature_c, dewpoint_c, wind arrays), wind_profile (height-indexed winds for hodographs/shear), and derived indices (sbcape/mucape/mlcape + cin, lifted_index, k_index, total_totals, pwat_mm, freezing_level_m, lcl/lfc/el, bulk_shear_0_6km_kt). Soundings launch at 00Z/12Z so data can be hours old. Example: {"location": "Norman, OK"}.

NameTypeReqDescription
latnumberLatitude in decimal degrees (-90 to 90). Most tools also accept a `location` place-name string instead of lat/lon.
locationstringFree-text place: city ("Denver"), city+state ("Portland, OR"), US ZIP ("50219"), or "lat,lon" ("39.74,-104.99"). Provide either this OR explicit lat+lon, not both.
lonnumberLongitude in decimal degrees (-180 to 180). For continental US use negative values (west of the prime meridian).
nintegerNumber of nearest soundings (1-5). Default 1.
NameTypeReqDescription
locationobjectyes
soundingsobjectyes

No examples provided.

get_sounding_chart ~265

Render the nearest RAOB (radiosonde) sounding as a Skew-T log-P + hodograph chart image for visual analysis: temperature/dewpoint traces, wind barbs, height-banded hodograph, and a derived-indices table (CAPE/CIN, lifted index, PWAT, shear, LCL). Soundings launch at 00Z/12Z so data can be hours old. Use get_sounding for the raw profile numbers. Example: {"location": "Norman, OK"}.

NameTypeReqDescription
latnumberLatitude in decimal degrees (-90 to 90). Most tools also accept a `location` place-name string instead of lat/lon.
locationstringFree-text place: city ("Denver"), city+state ("Portland, OR"), US ZIP ("50219"), or "lat,lon" ("39.74,-104.99"). Provide either this OR explicit lat+lon, not both.
lonnumberLongitude in decimal degrees (-180 to 180). For continental US use negative values (west of the prime meridian).
scalenumberRaster scale factor (2 = retina; higher = larger image payload)
unitstringTemperature axis display unit

No output schema declared.

No examples provided.

get_storm_cells ~249

Radar-identified storm cells near a location, merging NEXRAD Level III algorithm output from the nearest radar site: storm tracks (cell position, movement, forecast positions), hail index (probability of hail/severe hail + max expected size), mesocyclone detections (rotation), and TVS (tornado vortex signatures). Use during active convection to see what the radar algorithms flag. An empty result means no detected cells -- common outside active storms. Example: {"location": "Norman, OK"}.

NameTypeReqDescription
includearrayWhich detection families to include. Default: all.
latnumberLatitude in decimal degrees (-90 to 90). Most tools also accept a `location` place-name string instead of lat/lon.
locationstringFree-text place: city ("Denver"), city+state ("Portland, OR"), US ZIP ("50219"), or "lat,lon" ("39.74,-104.99"). Provide either this OR explicit lat+lon, not both.
lonnumberLongitude in decimal degrees (-180 to 180). For continental US use negative values (west of the prime meridian).
NameTypeReqDescription
detectionsobjectyes
locationobjectyes
summarystringyesReady-to-use one-liner. States explicitly when nothing was detected.
tracksobject

No examples provided.

get_storm_reports ~243

Recent NWS Local Storm Reports (LSRs) -- verified reports of tornadoes, hail, damaging winds, flooding near a location. Use to confirm severe weather occurrence or assess reported damage. Example: {"location": "Wichita", "hours": 12, "type": "H"}.

NameTypeReqDescription
hoursintegerLookback window in hours (1-24). Default 6.
latnumberLatitude in decimal degrees (-90 to 90). Most tools also accept a `location` place-name string instead of lat/lon.
locationstringFree-text place: city ("Denver"), city+state ("Portland, OR"), US ZIP ("50219"), or "lat,lon" ("39.74,-104.99"). Provide either this OR explicit lat+lon, not both.
lonnumberLongitude in decimal degrees (-180 to 180). For continental US use negative values (west of the prime meridian).
typestringReport type filter: T=tornado, H=hail, W=wind, F=flood, D=damage, S=snow.
NameTypeReqDescription
hoursnumberyes
locationobjectyes
reportsobjectyes

No examples provided.

get_time_context ~235

Complete temporal context for a location: local time, timezone, 14-day calendar with day names and Today/Tomorrow offsets, sunrise/sunset/solar times (from the weather pipeline's astro product), and moon phase. Use whenever you need to reason about dates, times, or daylight for a location -- including "what time is sunset?", "is it dark there now?", or "what day of the week is the 4th-day forecast?". Accepts a place name directly. Example: {"location": "Seattle"}.

NameTypeReqDescription
latnumberLatitude in decimal degrees (-90 to 90). Most tools also accept a `location` place-name string instead of lat/lon.
locationstringFree-text place: city ("Denver"), city+state ("Portland, OR"), US ZIP ("50219"), or "lat,lon" ("39.74,-104.99"). Provide either this OR explicit lat+lon, not both.
lonnumberLongitude in decimal degrees (-180 to 180). For continental US use negative values (west of the prime meridian).
NameTypeReqDescription
calendararrayyes
current_timeobjectyes
daylightobjectyes
locationobjectyes
moonobjectyes

No examples provided.

get_tropical ~130

Active NHC (National Hurricane Center) tropical systems: forecast cones, track lines, forecast points, coastal watches/warnings, and 7-day Tropical Weather Outlook formation areas -- Atlantic + East Pacific. Each feature carries a kind (cone | track | points | watch_warning | outlook_area) plus storm name, intensity, and timing properties. include_geometry=true adds full GeoJSON geometries (large). An empty result means no active tropical activity. Example: {} or {"include_geometry": true}.

NameTypeReqDescription
include_geometrybooleanInclude full GeoJSON geometries (cone/track polygons). Default false.
NameTypeReqDescription
activebooleanyes
feature_countnumberyes
featuresarrayyes

No examples provided.

list_datasets ~228

Discover the datasets (model grids, analyses, observations) available at a location, with per-dataset freshness (data age, latest model run). Datasets vary by domain (CONUS/Alaska/Hawaii). Use this to find dataset_id values for query_dataset and describe_dataset, or to assess whether data is current before making decisions. Example: {"location": "Anchorage"}.

NameTypeReqDescription
include_freshnessbooleanInclude per-dataset data age and run times. Default true.
latnumberLatitude in decimal degrees (-90 to 90). Most tools also accept a `location` place-name string instead of lat/lon.
locationstringFree-text place: city ("Denver"), city+state ("Portland, OR"), US ZIP ("50219"), or "lat,lon" ("39.74,-104.99"). Provide either this OR explicit lat+lon, not both.
lonnumberLongitude in decimal degrees (-180 to 180). For continental US use negative values (west of the prime meridian).
NameTypeReqDescription
datasetsobjectyes
freshnessobject
locationobjectyes

No examples provided.

query_dataset ~521

Raw time series from a specific dataset for specific variables at a point. Power-user access to any gridded product (NBM, HRRR, GFS, RTMA, MRMS, air quality, ...). Time modes: hours (next N hours, default 24), time_start+time_end (explicit ISO-8601 window), or latest=true (single most-recent value). reference_time pins a specific model run, and each returned series reports the run that served it (reference_time, or reference_times when a series mixes runs) — check it before comparing two runs, since a run older than about 48 hours may no longer be available. For blended forecasts use get_forecast instead. Examples: {"location": "Denver", "dataset_id": "hrrr_surface", "variables": ["temperature_2m"], "hours": 18} or {"lat": 41.4, "lon": -92.9, "dataset_id": "rtma_conus", "variables": ["temperature_2m"], "latest": true}.

NameTypeReqDescription
dataset_idstringDataset to query. Default: the NBM dataset for the location domain (nbm_conus/nbm_alaska/nbm_hawaii). Discover options with list_datasets.
hoursintegerForecast/lookahead hours from now (1-264). Default 24 when no other time mode set.
latnumberLatitude in decimal degrees (-90 to 90). Most tools also accept a `location` place-name string instead of lat/lon.
latestbooleanReturn only the most recent value (analysis datasets like RTMA/MRMS).
locationstringFree-text place: city ("Denver"), city+state ("Portland, OR"), US ZIP ("50219"), or "lat,lon" ("39.74,-104.99"). Provide either this OR explicit lat+lon, not both.
lonnumberLongitude in decimal degrees (-180 to 180). For continental US use negative values (west of the prime meridian).
reference_timestringPin a specific model run (ISO 8601). Default: latest run.
time_endstringISO 8601 window end (with time_start).
time_startstringISO 8601 window start (with time_end).
variablesarrayyesStandard variable names (e.g. temperature_2m, precipitation). Discover with describe_dataset.
NameTypeReqDescription
locationobjectyes
seriesarrayyes

No examples provided.

reverse_geocode ~132

Resolve coordinates to a human-readable place (city, state, county, timezone). Use when you have lat/lon but need a display name or the local timezone. Example: {"lat": 39.74, "lon": -104.99} -> Denver, Colorado, America/Denver.

NameTypeReqDescription
latnumberyesLatitude in decimal degrees (-90 to 90). Most tools also accept a `location` place-name string instead of lat/lon.
lonnumberyesLongitude in decimal degrees (-180 to 180). For continental US use negative values (west of the prime meridian).
NameTypeReqDescription
latnumberyes
lonnumberyes
placeobjectyes

No examples provided.

search_locations ~191

Resolve a place query to candidate locations with coordinates. Accepts city names ("Denver"), city+state ("Portland, OR" via query), ZIP codes ("50219"), or partial input with fuzzy=true for autosuggest-style matching ("bost" -> Boston). Returns ranked candidates with lat/lon. Most weather tools accept a `location` string directly and geocode internally -- use this tool only to disambiguate ("which Springfield?") or to present location choices to the user. Example: {"query": "Springfield"} returns all major Springfields ranked by population.

NameTypeReqDescription
fuzzybooleanAutosuggest mode for partial/misspelled input. Default false (exact search).
limitintegerMaximum candidates to return (1-10). Default 5.
querystringyesPlace query: city, "city, state", ZIP, or partial text with fuzzy=true.
NameTypeReqDescription
candidatesarrayyes
querystringyes

No examples provided.