MCP-Server

nws-weather-mcp-server

io.github.cyanheads/nws-weather-mcp-server
Wissenschaft & Engineering Öffentlich und erreichbar MCP 2025-11-25

Was dieses MCP kann

Provides US weather forecasts, current observations, active alerts, forecast-zone text, and meteorological office discussions.

nws_find_stations
Nws Find Stations
Find weather observation stations near a location. Returns stations sorted by proximity with distance and bearing. Use to discover station IDs for nws_get_observations.
Nur Lesen
Eingabeschema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['latitude', 'longitude'], 'properties': {'limit': {'type': 'integer', 'default': 10, 'maximum': 50, 'minimum': 1, 'description': 'Max stations per page (1-50). totalCount still reports every station near the point, so pass the returned nextCursor as cursor to reach the rest.'}, 'cursor': {'type': 'string', 'description': "Opaque continuation token from a previous response's nextCursor. Omit for the first page. The token carries its own page size, so limit applies to the first page only. Every call re-fetches the station list, so pages are contiguous within one response; the registry changes rarely, but a later call can window an updated list."}, 'latitude': {'type': 'number', 'maximum': 90, 'minimum': -90, 'description': 'Center latitude for proximity search.'}, 'longitude': {'type': 'number', 'maximum': 180, 'minimum': -180, 'description': 'Center longitude for proximity search.'}}, 'additionalProperties': False}
Ausgabeschema
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['stations', 'totalCount', 'shown']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['out_of_scope'], 'description': 'Machine-readable failure mode. Declared by this tool: `out_of_scope`: Coordinates fall outside US National Weather Service coverage. Other values are possible when a failure originates below the handler.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'shown': {'type': 'number', 'description': 'Number of stations returned in this page'}, 'notice': {'type': 'string', 'description': 'Guidance when no stations were found near the requested coordinates, when stations remain beyond this page, or when the supplied cursor points past the end of the list.'}, 'stations': {'type': 'array', 'items': {'type': 'object', 'required': ['stationId', 'name', 'distanceKm', 'bearing', 'elevationM', 'timeZone', 'county', 'forecastZone'], 'properties': {'name': {'type': 'string', 'description': 'Station name'}, 'county': {'type': 'string', 'description': 'County zone code (e.g., "WAC033")'}, 'bearing': {'type': 'string', 'description': 'Compass bearing from query point (e.g., "NW")'}, 'timeZone': {'type': 'string', 'description': 'IANA time zone'}, 'stationId': {'type': 'string', 'description': 'Station identifier (e.g., "KSEA")'}, 'distanceKm': {'type': 'number', 'description': 'Distance from query point in kilometers'}, 'elevationM': {'type': ['number', 'null'], 'description': 'Elevation in meters'}, 'forecastZone': {'type': 'string', 'description': 'Forecast zone code (e.g., "WAZ315")'}}, 'description': 'Observation station record with identity, location, and zone codes', 'additionalProperties': False}, 'description': 'Nearby stations sorted by distance'}, 'nextCursor': {'type': 'string', 'description': 'Opaque token for the next page of stations â\x80\x94 pass it back as `cursor`. Omitted when this is the last page.'}, 'totalCount': {'type': 'number', 'description': 'Total observation stations available near this location before the page limit was applied â\x80\x94 NOT the number returned in this page, which is shown. Same value on every page of one query; compare it against shown to tell whether stations were withheld.'}}, 'additionalProperties': False}
nws_get_alert_counts
Nws Get Alert Counts
Count active weather alerts nationwide, per state/territory or marine area, and per marine region, in one small response — the answer to "how many alerts are active, and where" without fetching the alerts themselves. Counts cover every message status, Test and Exercise included, so totalAlerts can run above the totalCount a national nws_search_alerts search reports under its default status of Actual. An alert counts once in each area its zones fall in, so the area counts can sum past totalAlerts; landAlerts plus marineAlerts equals totalAlerts. Takes no filters. For counts per zone or under a filter, call nws_search_alerts with that zone or filter and read its totalCount.
Nur Lesen
Eingabeschema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {}, 'additionalProperties': False}
Ausgabeschema
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['totalAlerts', 'landAlerts', 'marineAlerts', 'areas', 'regions']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'areas': {'type': 'object', 'description': 'Active alert counts keyed by state/territory code (e.g., "WA", "PR") or marine area code (e.g., "PZ", "GM"). Only areas with an active alert appear. An alert counts once in each area its zones fall in, so these can sum past totalAlerts. Area "AL" is Alabama; Alaska waters are region "AL" in regions.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'number'}}, 'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'description': 'Machine-readable failure mode.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'regions': {'type': 'object', 'description': 'Active marine alert counts keyed by marine region: "AL" (Alaska waters), "AT" (Atlantic Ocean), "GL" (Great Lakes), "GM" (Gulf of Mexico), "PA" (Eastern Pacific and US West Coast), "PI" (Central and Western Pacific). Only regions with an active alert appear, so the map is empty when no marine alert is active.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'number'}}, 'landAlerts': {'type': 'number', 'description': 'Active alerts affecting land zones.'}, 'totalAlerts': {'type': 'number', 'description': 'Active alerts nationwide across every message status (Actual, Exercise, System, Test, Draft). Can exceed the totalCount of a national nws_search_alerts search, which counts status Actual by default.'}, 'marineAlerts': {'type': 'number', 'description': 'Active alerts affecting marine zones. landAlerts + marineAlerts = totalAlerts.'}}, 'additionalProperties': False}
nws_get_forecast
Nws Get Forecast
Get the weather forecast for a US location. Returns either named 12-hour periods (default) or hourly breakdowns.
Nur Lesen
Eingabeschema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['latitude', 'longitude'], 'properties': {'cursor': {'type': 'string', 'description': "Opaque continuation token from a previous response's nextCursor, to retrieve the next 48 periods. Omit for the first page. Every call re-fetches the forecast, so consecutive periods are contiguous within one response; NWS reissues forecasts through the day, so a later call can window a regenerated period array."}, 'hourly': {'type': 'boolean', 'default': False, 'description': 'If true, returns hourly forecast (48 one-hour periods per page, ~156 available) instead of 12-hour named periods (14 periods). Hourly includes dewpoint and relative humidity.'}, 'latitude': {'type': 'number', 'maximum': 90, 'minimum': -90, 'description': 'Latitude in decimal degrees (e.g., 47.6062).'}, 'longitude': {'type': 'number', 'maximum': 180, 'minimum': -180, 'description': 'Longitude in decimal degrees (e.g., -122.3321).'}}, 'additionalProperties': False}
Ausgabeschema
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['location', 'generatedAt', 'periods', 'totalCount', 'shown', 'mode']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'mode': {'type': 'string', 'description': 'Forecast mode: "hourly" or "7-day"'}, 'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['out_of_scope', 'marine_forecast_unsupported', 'no_forecast_grid'], 'description': 'Machine-readable failure mode. Declared by this tool: `out_of_scope`: Coordinates fall outside US National Weather Service coverage. `marine_forecast_unsupported`: Coordinates fall in a marine area, where NWS publishes no point forecast. `no_forecast_grid`: Coordinates are on land in a forecast zone NWS serves no forecast grid for (e.g., interior Northern Mariana Islands). Other values are possible when a failure originates below the handler.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'shown': {'type': 'number', 'description': 'Number of forecast periods in this page (at most 48).'}, 'notice': {'type': 'string', 'description': 'Set when periods remain beyond this page, or when the supplied cursor points past the end of the period array.'}, 'periods': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'startTime', 'endTime', 'temperature', 'temperatureUnit', 'windSpeed', 'windDirection', 'shortForecast', 'detailedForecast', 'precipChancePct', 'dewpointC', 'relativeHumidityPct'], 'properties': {'name': {'type': 'string', 'description': 'Period name (e.g., "Today", "Tonight") or hour label'}, 'endTime': {'type': 'string', 'description': 'Period end (ISO 8601)'}, 'dewpointC': {'type': ['number', 'null'], 'description': 'Dewpoint in Celsius (hourly only)'}, 'startTime': {'type': 'string', 'description': 'Period start (ISO 8601)'}, 'windSpeed': {'type': 'string', 'description': 'Wind speed (e.g., "10 mph")'}, 'temperature': {'type': 'number', 'description': 'Temperature value'}, 'shortForecast': {'type': 'string', 'description': 'Brief forecast (e.g., "Mostly Sunny")'}, 'windDirection': {'type': 'string', 'description': 'Wind direction (e.g., "NW")'}, 'precipChancePct': {'type': ['number', 'null'], 'description': 'Probability of precipitation in percent (0-100)'}, 'temperatureUnit': {'type': 'string', 'description': 'Temperature unit (F or C)'}, 'detailedForecast': {'type': 'string', 'description': 'Full narrative forecast'}, 'relativeHumidityPct': {'type': ['number', 'null'], 'description': 'Relative humidity in percent (0-100, hourly only)'}}, 'description': 'Single forecast period with time range, conditions, and narrative', 'additionalProperties': False}, 'description': 'Forecast periods'}, 'location': {'type': 'object', 'required': ['city', 'state', 'office', 'timeZone', 'forecastZone', 'county'], 'properties': {'city': {'type': 'string', 'description': 'City name'}, 'state': {'type': 'string', 'description': 'State name'}, 'county': {'type': 'string', 'description': 'County zone code for chaining to nws_search_alerts'}, 'office': {'type': 'string', 'description': 'NWS Weather Forecast Office code'}, 'timeZone': {'type': 'string', 'description': 'IANA time zone'}, 'forecastZone': {'type': 'string', 'description': 'Forecast zone code for chaining to nws_search_alerts'}}, 'description': 'Resolved location metadata', 'additionalProperties': False}, 'nextCursor': {'type': 'string', 'description': 'Opaque token for the next page of periods â\x80\x94 pass it back as `cursor`. Omitted when this is the last page.'}, 'totalCount': {'type': 'number', 'description': 'Total forecast periods available upstream before the page window was applied â\x80\x94 NOT the number in this page, which is shown. Compare it against shown to tell whether periods were withheld.'}, 'generatedAt': {'type': 'string', 'description': 'When the forecast was generated (ISO 8601)'}}, 'additionalProperties': False}
nws_get_observation_history
Nws Get Observation History
Get a station's recent observation history, newest first — the trend behind the single latest reading nws_get_observations returns (is pressure falling, is the wind picking up). NWS keeps about the last 7 days per station, and a busy airport station reports as often as every 5 minutes, so a day can run past 100 observations: narrow with start (inclusive) and end (exclusive), and page back to older observations with nextCursor. Takes a station ID; use nws_find_stations to find one near a coordinate.
Nur Lesen
Eingabeschema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['station_id'], 'properties': {'end': {'type': 'string', 'description': 'Time to stop before (exclusive), in the same format as start. Omit to start from the most recent observation.'}, 'limit': {'type': 'integer', 'default': 24, 'maximum': 100, 'minimum': 1, 'description': 'Observations per page (1-100), newest first. When a page fills the limit, pass its nextCursor back as cursor for older observations.'}, 'start': {'type': 'string', 'description': 'Earliest observation time to include (inclusive), as an ISO 8601 date-time with seconds and an offset (e.g., "2026-09-30T00:00:00Z" or "2026-09-29T17:00:00-07:00"). Omit to reach back as far as NWS keeps, about 7 days.'}, 'cursor': {'type': 'string', 'description': "Opaque continuation token from a previous response's nextCursor. Omit for the first page. It carries that query's start, end, and limit, so those inputs apply to the first page only. Each page continues from just before the oldest observation of the one before it, so pages neither repeat nor skip an observation."}, 'station_id': {'type': 'string', 'minLength': 1, 'description': 'Observation station ID (e.g., "KSEA"), case-insensitive. Use nws_find_stations to discover station IDs near a coordinate.'}}, 'additionalProperties': False}
Ausgabeschema
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['stationId', 'stationName', 'timeZone', 'observations', 'shown']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'cap': {'type': 'number', 'description': 'The page limit this page filled, when truncated is true'}, 'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['station_not_found', 'invalid_time_window'], 'description': 'Machine-readable failure mode. Declared by this tool: `station_not_found`: Station ID is malformed or does not exist in the NWS network. `invalid_time_window`: start or end is not a valid ISO 8601 date-time with seconds and an offset, or start is not before end. Other values are possible when a failure originates below the handler.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'shown': {'type': 'number', 'description': 'Number of observations returned in this page'}, 'notice': {'type': 'string', 'description': 'Guidance when the window held no observations (NWS keeps about the last 7 days), or when this page filled the limit and older observations may remain.'}, 'timeZone': {'type': ['string', 'null'], 'description': 'Station time zone when known'}, 'stationId': {'type': 'string', 'description': 'Observation station ID, uppercased'}, 'truncated': {'type': 'boolean', 'description': 'True when this page filled the limit and older observations in the window may remain; continue with nextCursor.'}, 'nextCursor': {'type': 'string', 'description': 'Opaque token for the next, older page â\x80\x94 pass it back as cursor. Present only when this page filled the limit; omitted on the last page.'}, 'stationName': {'type': 'string', 'description': 'Station name'}, 'observations': {'type': 'array', 'items': {'type': 'object', 'required': ['timestamp', 'textDescription', 'temperatureC', 'dewpointC', 'windSpeedKmh', 'windDirectionDeg', 'windGustKmh', 'barometricPressurePa', 'visibilityM', 'relativeHumidityPct', 'heatIndexC', 'windChillC', 'cloudLayers'], 'properties': {'dewpointC': {'type': ['number', 'null'], 'description': 'Dewpoint in Celsius'}, 'timestamp': {'type': 'string', 'description': 'Observation time (ISO 8601)'}, 'heatIndexC': {'type': ['number', 'null'], 'description': 'Heat index in Celsius'}, 'windChillC': {'type': ['number', 'null'], 'description': 'Wind chill in Celsius'}, 'cloudLayers': {'type': 'array', 'items': {'type': 'object', 'required': ['amount', 'baseM'], 'properties': {'baseM': {'type': ['number', 'null'], 'description': 'Cloud base height in meters'}, 'amount': {'type': 'string', 'description': 'Cloud cover (e.g., "FEW", "SCT", "BKN", "OVC")'}}, 'description': 'Single cloud layer with cover amount and base height', 'additionalProperties': False}, 'description': 'Cloud layer information'}, 'visibilityM': {'type': ['number', 'null'], 'description': 'Visibility in meters'}, 'windGustKmh': {'type': ['number', 'null'], 'description': 'Wind gust in km/h'}, 'temperatureC': {'type': ['number', 'null'], 'description': 'Temperature in Celsius'}, 'windSpeedKmh': {'type': ['number', 'null'], 'description': 'Wind speed in km/h'}, 'textDescription': {'type': 'string', 'description': 'Conditions summary (e.g., "Mostly Cloudy"); empty when not reported'}, 'windDirectionDeg': {'type': ['number', 'null'], 'description': 'Wind direction in degrees (0-360)'}, 'relativeHumidityPct': {'type': ['number', 'null'], 'description': 'Relative humidity in percent (0-100)'}, 'barometricPressurePa': {'type': ['number', 'null'], 'description': 'Barometric pressure in Pascals'}}, 'description': 'One observation; a measurement the station did not report is null, never 0', 'additionalProperties': False}, 'description': 'Observations in the window, newest first'}}, 'additionalProperties': False}
nws_get_observations
Nws Get Observations
Get current weather observations (actual measured conditions). Accepts coordinates (resolves nearest station automatically) or a station ID directly (e.g., "KSEA").
Nur Lesen
Eingabeschema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'latitude': {'type': 'number', 'maximum': 90, 'minimum': -90, 'description': 'Latitude for automatic station resolution. Use with longitude. Ignored if station_id is provided.'}, 'longitude': {'type': 'number', 'maximum': 180, 'minimum': -180, 'description': 'Longitude for automatic station resolution. Use with latitude. Ignored if station_id is provided.'}, 'station_id': {'type': 'string', 'description': 'Station identifier directly (e.g., "KSEA", "KORD"). Use nws_find_stations to discover station IDs.'}}, 'additionalProperties': False}
Ausgabeschema
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['stationId', 'stationName', 'timestamp', 'timeZone', 'textDescription', 'temperatureC', 'dewpointC', 'windSpeedKmh', 'windDirectionDeg', 'windGustKmh', 'barometricPressurePa', 'visibilityM', 'relativeHumidityPct', 'heatIndexC', 'windChillC', 'cloudLayers', 'station', 'observedAt']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['missing_input', 'station_not_found', 'no_observations', 'no_stations_nearby', 'out_of_scope'], 'description': 'Machine-readable failure mode. Declared by this tool: `missing_input`: Neither station_id nor a (latitude, longitude) pair was provided. `station_not_found`: Station ID does not exist in the NWS network. `no_observations`: Station has no recent observations available. `no_stations_nearby`: No observation stations exist near the requested coordinates. `out_of_scope`: Coordinates fall outside US National Weather Service coverage. Other values are possible when a failure originates below the handler.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'notice': {'type': 'string', 'description': 'Guidance when the latest observation is more than 2 hours old â\x80\x94 data may not reflect current conditions.'}, 'station': {'type': 'string', 'description': 'Station ID that served the observation (e.g., "KSEA")'}, 'timeZone': {'type': ['string', 'null'], 'description': 'Station time zone when known'}, 'dewpointC': {'type': ['number', 'null'], 'description': 'Dewpoint in Celsius'}, 'stationId': {'type': 'string', 'description': 'Observation station ID'}, 'timestamp': {'type': 'string', 'description': 'Observation time (ISO 8601)'}, 'heatIndexC': {'type': ['number', 'null'], 'description': 'Heat index in Celsius'}, 'observedAt': {'type': 'string', 'description': 'Observation timestamp (ISO 8601)'}, 'windChillC': {'type': ['number', 'null'], 'description': 'Wind chill in Celsius'}, 'cloudLayers': {'type': 'array', 'items': {'type': 'object', 'required': ['amount', 'baseM'], 'properties': {'baseM': {'type': ['number', 'null'], 'description': 'Cloud base height in meters'}, 'amount': {'type': 'string', 'description': 'Cloud cover (e.g., "FEW", "SCT", "BKN", "OVC")'}}, 'description': 'Single cloud layer with cover amount and base height', 'additionalProperties': False}, 'description': 'Cloud layer information'}, 'stationName': {'type': 'string', 'description': 'Station name'}, 'visibilityM': {'type': ['number', 'null'], 'description': 'Visibility in meters'}, 'windGustKmh': {'type': ['number', 'null'], 'description': 'Wind gust in km/h'}, 'temperatureC': {'type': ['number', 'null'], 'description': 'Temperature in Celsius'}, 'windSpeedKmh': {'type': ['number', 'null'], 'description': 'Wind speed in km/h'}, 'textDescription': {'type': 'string', 'description': 'Conditions summary (e.g., "Mostly Cloudy")'}, 'windDirectionDeg': {'type': ['number', 'null'], 'description': 'Wind direction in degrees (0-360)'}, 'relativeHumidityPct': {'type': ['number', 'null'], 'description': 'Relative humidity in percent (0-100)'}, 'barometricPressurePa': {'type': ['number', 'null'], 'description': 'Barometric pressure in Pascals'}}, 'additionalProperties': False}
nws_get_office_discussion
Nws Get Office Discussion
Get the latest narrative forecast product from a Weather Forecast Office (WFO). The default product is AFD (Area Forecast Discussion), which explains the meteorological reasoning behind the forecast — synoptic setup, model guidance, and forecaster confidence. Other types: HWO (Hazardous Weather Outlook, 1-7 day severe/flood/winter outlook), ZFP (Zone Forecast Product, zone-by-zone text), SPS (Special Weather Statement, short-fuse advisory). The office code is the 3-letter WFO identifier returned as the "office" field by nws_get_forecast.
Nur Lesen
Eingabeschema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['office'], 'properties': {'office': {'type': 'string', 'minLength': 1, 'description': 'Three-letter Weather Forecast Office (WFO) code (e.g., "SEW" for Seattle, "LOX" for Los Angeles). Returned as the "office" field in nws_get_forecast output.'}, 'product_type': {'enum': ['AFD', 'HWO', 'ZFP', 'SPS'], 'type': 'string', 'default': 'AFD', 'description': 'Product type code. AFD (Area Forecast Discussion) â\x80\x94 meteorological reasoning, model analysis, forecaster confidence. HWO (Hazardous Weather Outlook) â\x80\x94 1-7 day outlook for severe weather, flooding, winter weather. ZFP (Zone Forecast Product) â\x80\x94 detailed zone-by-zone text forecast. SPS (Special Weather Statement) â\x80\x94 short-fuse advisory for notable non-warning weather.'}}, 'additionalProperties': False}
Ausgabeschema
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['issuanceTime', 'issuingOffice', 'productCode', 'productName', 'productText', 'wmoCollectiveId']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['no_products'], 'description': 'Machine-readable failure mode. Declared by this tool: `no_products`: Office code is unknown, or a valid office has no current product of the requested type (episodic types like SPS and HWO are commonly empty). Other values are possible when a failure originates below the handler.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'productCode': {'type': 'string', 'description': 'Product type code (e.g., "AFD").'}, 'productName': {'type': 'string', 'description': 'Full product name (e.g., "Area Forecast Discussion").'}, 'productText': {'type': 'string', 'description': 'Full narrative product text as issued by the forecaster. AFDs are typically 1,000-3,000 words covering synoptic setup, model guidance, and period-by-period reasoning.'}, 'issuanceTime': {'type': 'string', 'description': 'When the product was issued (ISO 8601), e.g., "2026-05-30T10:33:00+00:00".'}, 'issuingOffice': {'type': 'string', 'description': 'Issuing office call sign (e.g., "KSEW"). Includes the K/P prefix, unlike the input office code.'}, 'wmoCollectiveId': {'type': 'string', 'description': 'WMO collective identifier (e.g., "FXUS66"). Identifies the product family in international message routing.'}}, 'additionalProperties': False}
nws_get_zone_forecast
Nws Get Zone Forecast
Get the text forecast for a public NWS forecast zone. Returns named forecast periods (e.g., "Today", "Tonight", "Monday") with detailed narrative text — the human-readable, zone-level forecast written by local forecasters. Completes the alert-to-forecast chain: nws_search_alerts returns each affected zone in "affectedZones" as a code plus a type, and nws_find_stations returns codes in the "forecastZone" column. Only affectedZones entries with type "forecast" work here; entries typed "county" or "fire" have no text forecast upstream and will not resolve, and neither do marine forecast zones (e.g., "PZZ251", "GMZ056"). Zone codes follow the pattern XXZ### (e.g., "WAZ315" for Western Washington lowlands).
Nur Lesen
Eingabeschema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['zone_id'], 'properties': {'zone_id': {'type': 'string', 'minLength': 1, 'description': 'NWS public forecast zone code (e.g., "WAZ315" for the Western Washington lowlands including Seattle). Returned as "forecastZone" by nws_get_forecast and nws_find_stations, or as the "code" of an "affectedZones" entry with type "forecast" in nws_search_alerts. Format: two-letter state + "Z" + three-digit number.'}}, 'additionalProperties': False}
Ausgabeschema
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['zoneId', 'updated', 'periods', 'periodCount']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['zone_not_found', 'zone_forecast_unavailable', 'marine_forecast_unsupported'], 'description': 'Machine-readable failure mode. Declared by this tool: `zone_not_found`: Zone code is not a valid public forecast zone. `zone_forecast_unavailable`: Zone is a valid public forecast zone, but NWS has no text forecast for it. `marine_forecast_unsupported`: Zone is a marine forecast zone, for which NWS publishes no text forecast. Other values are possible when a failure originates below the handler.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'zoneId': {'type': 'string', 'description': 'Zone ID, uppercased (e.g., "WAZ315" for input "waz315").'}, 'periods': {'type': 'array', 'items': {'type': 'object', 'required': ['number', 'name', 'detailedForecast'], 'properties': {'name': {'type': 'string', 'description': 'Period name (e.g., "Today", "Tonight", "Monday").'}, 'number': {'type': 'number', 'description': 'Period sequence number, starting at 1.'}, 'detailedForecast': {'type': 'string', 'description': 'Full narrative forecast for this period, written by local forecasters (e.g., "Partly cloudy. Highs in the upper 60s. Southwest winds 10 to 15 mph.").'}}, 'description': 'Single forecast period with name and narrative', 'additionalProperties': False}, 'description': 'Forecast periods in chronological order, typically covering 7 days.'}, 'updated': {'type': 'string', 'description': 'When the zone forecast was last updated (ISO 8601 with timezone offset).'}, 'periodCount': {'type': 'number', 'description': 'Number of forecast periods returned.'}}, 'additionalProperties': False}
nws_list_alert_types
Nws List Alert Types
List all valid NWS alert event type names. Use to discover valid values for the event filter in nws_search_alerts, or to browse alert categories. No parameters required.
Nur Lesen
Eingabeschema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {}, 'additionalProperties': False}
Ausgabeschema
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['count', 'eventTypes']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'count': {'type': 'number', 'description': 'Number of event types'}, 'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'description': 'Machine-readable failure mode.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'eventTypes': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Alert event type names sorted alphabetically'}}, 'additionalProperties': False}
nws_search_alerts
Nws Search Alerts
Search active weather alerts (watches, warnings, advisories) across the US. Filter by state, coordinates, zone, land/marine region, event type, severity, urgency, or certainty. area, point, zone, region_type, and region are mutually exclusive — provide at most one. Omit all filters for a national search.
Nur Lesen
Eingabeschema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'area': {'type': 'string', 'description': 'US state/territory code (e.g., "WA", "OK", "PR") or marine area code (e.g., "GM"). Mutually exclusive with point and zone.'}, 'zone': {'type': 'string', 'description': 'NWS forecast zone (e.g., "WAZ558") or county zone (e.g., "WAC033"). Mutually exclusive with area and point.'}, 'event': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Filter to specific event types (e.g., ["Tornado Warning"]). Matches are case-insensitive and partial, so "tornado" matches both "Tornado Warning" and "Tornado Watch". Use nws_list_alert_types to discover valid names.'}, 'limit': {'type': 'integer', 'default': 25, 'maximum': 25, 'minimum': 1, 'description': 'Maximum number of alerts to include in this page (1-25, default 25). totalCount still reports the full number of distinct matches, so a small limit returns a digest of broad or national searches without dropping the total; pass the returned nextCursor as cursor to reach the rest.'}, 'point': {'type': 'string', 'description': 'Coordinates as "lat,lon" (e.g., "47.6,-122.3"). Returns alerts whose geometry contains this point. Mutually exclusive with area and zone.'}, 'cursor': {'type': 'string', 'description': "Opaque continuation token from a previous response's nextCursor. Omit for the first page. The token carries its own page size, so limit applies to the first page only. Every call re-fetches the active-alert feed, so alerts are contiguous within one response but not across calls â\x80\x94 the active set changes continuously as alerts are issued and expire, so a continued page covers the collection as it stands at that moment."}, 'region': {'type': 'array', 'items': {'enum': ['AL', 'AT', 'GL', 'GM', 'PA', 'PI'], 'type': 'string'}, 'description': 'Restrict to NWS marine region groups: "AL" (Alaska waters), "AT" (Atlantic Ocean), "GL" (Great Lakes), "GM" (Gulf of Mexico), "PA" (Eastern Pacific and US West Coast), "PI" (Central and Western Pacific). Marine alerts only â\x80\x94 a land alert never matches. Mutually exclusive with area, point, zone, and region_type.'}, 'status': {'enum': ['Actual', 'Exercise', 'System', 'Test', 'Draft'], 'type': 'string', 'default': 'Actual', 'description': 'Alert status filter. Default "Actual". Use a different value only when you specifically need non-live alerts.'}, 'urgency': {'type': 'array', 'items': {'enum': ['Immediate', 'Expected', 'Future', 'Past'], 'type': 'string'}, 'description': 'Filter by urgency level.'}, 'severity': {'type': 'array', 'items': {'enum': ['Extreme', 'Severe', 'Moderate', 'Minor', 'Unknown'], 'type': 'string'}, 'description': 'Filter by severity level.'}, 'certainty': {'type': 'array', 'items': {'enum': ['Observed', 'Likely', 'Possible', 'Unlikely', 'Unknown'], 'type': 'string'}, 'description': 'Filter by certainty level.'}, 'region_type': {'enum': ['Land', 'Marine'], 'type': 'string', 'description': 'Restrict to land-based or marine alerts. Mutually exclusive with area, point, zone, and region.'}}, 'additionalProperties': False}
Ausgabeschema
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['alerts', 'totalCount', 'shown', 'appliedFilters']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['mutually_exclusive_filters', 'invalid_area_code', 'invalid_point', 'invalid_zone'], 'description': 'Machine-readable failure mode. Declared by this tool: `mutually_exclusive_filters`: More than one of area, point, zone, region_type, or region provided. `invalid_area_code`: Area code is not a recognized US state, territory, or marine area. `invalid_point`: Point coordinates are malformed or outside valid bounds. `invalid_zone`: Zone code does not match the NWS zone-code shape. Other values are possible when a failure originates below the handler.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'shown': {'type': 'number', 'description': 'Number of alerts included in this response'}, 'alerts': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'event', 'headline', 'description', 'instruction', 'severity', 'urgency', 'certainty', 'areaDesc', 'sent', 'effective', 'onset', 'ends', 'expires', 'status', 'messageType', 'references', 'senderName', 'affectedZones'], 'properties': {'id': {'type': 'string', 'description': 'Alert ID'}, 'ends': {'type': ['string', 'null'], 'description': 'Hazard end (ISO 8601) â\x80\x94 when the hazard is expected to end; null when open-ended ("until further notice"). Distinct from expires, which is the message-refresh time.'}, 'sent': {'type': 'string', 'description': 'Message issuance time (ISO 8601) â\x80\x94 when the office transmitted this CAP message. Describes the message, not the hazard: use it to judge how stale the report is.'}, 'event': {'type': 'string', 'description': 'Event type (e.g., "Tornado Warning")'}, 'onset': {'type': ['string', 'null'], 'description': 'Expected hazard onset (ISO 8601). When the hazard is expected to begin.'}, 'status': {'type': 'string', 'description': 'This alert\'s own CAP status as reported by NWS ("Actual", "Exercise", "System", "Test", "Draft"). Distinct from the status input filter, which selects which alerts are searched â\x80\x94 with the default filter every returned alert reads "Actual".'}, 'expires': {'type': ['string', 'null'], 'description': 'Message expiration (ISO 8601) â\x80\x94 when NWS will issue a superseding statement. NOT when the hazard ends; the hazard window is described in the headline.'}, 'urgency': {'type': 'string', 'description': 'Urgency level'}, 'areaDesc': {'type': 'string', 'description': 'Affected area description'}, 'headline': {'type': ['string', 'null'], 'description': 'Alert headline'}, 'severity': {'type': 'string', 'description': 'Severity level'}, 'certainty': {'type': 'string', 'description': 'Certainty level'}, 'effective': {'type': 'string', 'description': 'Message effective time (ISO 8601) â\x80\x94 when this version of the CAP message takes effect. A property of the message, not of the hazard: distinct from onset (when the hazard begins) and from expires (when a superseding message is due). Usually equals sent.'}, 'references': {'type': 'array', 'items': {'type': 'object', 'required': ['identifier', 'sent'], 'properties': {'sent': {'type': 'string', 'description': 'When the superseded message was issued (ISO 8601)'}, 'identifier': {'type': 'string', 'description': 'CAP identifier of the superseded message'}}, 'description': 'One prior message this alert supersedes', 'additionalProperties': False}, 'description': 'Prior alert messages this one supersedes, newest first. Empty for an original issuance â\x80\x94 never inferred when NWS reports none.'}, 'senderName': {'type': 'string', 'description': 'Issuing office'}, 'description': {'type': ['string', 'null'], 'description': 'Full alert description; null when NWS publishes the alert without one'}, 'instruction': {'type': ['string', 'null'], 'description': 'Recommended actions'}, 'messageType': {'type': 'string', 'description': 'CAP message type: "Alert" for an original issuance, "Update" for a revision of an earlier message, "Cancel" for a cancellation.'}, 'affectedZones': {'type': 'array', 'items': {'type': 'object', 'required': ['code', 'type'], 'properties': {'code': {'type': 'string', 'description': 'Zone code, e.g. "WAZ558" (forecast) or "WAC033" (county)'}, 'type': {'type': 'string', 'description': 'NWS zone type: "forecast", "county", or "fire" ("unknown" when upstream reports a shape this server cannot type). Only "forecast" codes have a zone text forecast â\x80\x94 pass those to nws_get_zone_forecast. All types are valid values for this tool\'s own zone filter.'}}, 'description': 'Affected zone with its NWS zone type', 'additionalProperties': False}, 'description': 'Affected zones, each with the zone type that decides where it can chain'}}, 'description': 'Single active alert with event, severity, area, and timing', 'additionalProperties': False}, 'description': 'Matching alerts for this page (at most the requested limit, max 25)'}, 'notice': {'type': 'string', 'description': 'Guidance when no alerts matched (echoes applied filters and suggests how to broaden), when matches remain beyond this page, or when the supplied cursor points past the end of the match set.'}, 'nextCursor': {'type': 'string', 'description': 'Opaque token for the next page of matches â\x80\x94 pass it back as `cursor`. Omitted when this is the last page.'}, 'totalCount': {'type': 'number', 'description': 'Total distinct alerts matching the filters in this fetch, before the page window is applied. NWS repeats some alerts verbatim within one response; the copies are collapsed on id, so this counts each alert once. Compare against shown to tell whether matches were withheld from this page.'}, 'appliedFilters': {'type': 'string', 'description': 'Summary of applied search filters'}}, 'additionalProperties': False}
Geändert
nws_get_zone_forecast
1. October 2026 02:44
Hinzugefügt
nws_get_observation_history
1. October 2026 02:44
Geändert
nws_get_observations
1. October 2026 02:44
Hinzugefügt
nws_get_alert_counts
1. October 2026 02:44
Geändert
nws_search_alerts
1. October 2026 02:44
Geändert
nws_get_forecast
1. October 2026 02:44
Geändert
nws_get_zone_forecast
27. September 2026 02:44
Geändert
nws_get_forecast
27. September 2026 02:44
Geändert
nws_get_zone_forecast
21. September 2026 02:50
Geändert
nws_get_office_discussion
21. September 2026 02:50
Geändert
nws_find_stations
21. September 2026 02:50
Geändert
nws_get_observations
21. September 2026 02:50
Geändert
nws_search_alerts
21. September 2026 02:50
Geändert
nws_get_forecast
21. September 2026 02:50
Hinzugefügt
nws_get_zone_forecast
17. September 2026 12:41
Hinzugefügt
nws_get_office_discussion
17. September 2026 12:41
Hinzugefügt
nws_list_alert_types
17. September 2026 12:41
Hinzugefügt
nws_find_stations
17. September 2026 12:41
Hinzugefügt
nws_get_observations
17. September 2026 12:41
Hinzugefügt
nws_search_alerts
17. September 2026 12:41
Hinzugefügt
nws_get_forecast
17. September 2026 12:41