nws-weather-mcp-server
Qué hace este MCP
Provides US weather forecasts, current observations, active alerts, forecast-zone text, and meteorological office discussions.
Herramientas
Esquema de entrada
{'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}
Esquema de salida
{'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}
Esquema de entrada
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {}, 'additionalProperties': False}
Esquema de salida
{'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}
Esquema de entrada
{'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}
Esquema de salida
{'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}
Esquema de entrada
{'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}
Esquema de salida
{'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}
Esquema de entrada
{'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}
Esquema de salida
{'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}
Esquema de entrada
{'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}
Esquema de salida
{'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}
Esquema de entrada
{'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}
Esquema de salida
{'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}
Esquema de entrada
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {}, 'additionalProperties': False}
Esquema de salida
{'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}
Esquema de entrada
{'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}
Esquema de salida
{'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}
Cambios recientes en herramientas
Servidores MCP similares
Clink Forge
Provides pay-per-call access to attested government datasets, primarily CDC and HHS health data plus EPA air-quality observations.
workbench
Provides computational molecular biology tools for DNA, RNA, and protein analysis, cloning, PCR, CRISPR, oligonucleotide design, …
gisgp
Provides GIS geocoding, routing, spatial transformations, ArcGIS layer inspection and export, and location due diligence for haza…
calc.engineer
Provides deterministic engineering calculators for RF and LoRa systems, electronics, batteries, solar and power systems, cooling,…
Good Earth
Provides plot-specific climate and growing-season analysis for gardens and farms, including frost, heat accumulation, crop suitab…
osint
Provides source-cited US data and schemas for power systems, AI infrastructure, semiconductor production and trade, robotics, and…
EngScript Engineering MCP
Performs engineering calculations for oil and gas applications, including thermodynamics, fluid systems, equipment sizing, balanc…
civilquants
Calculates parametric civil-engineering quantities and Bills of Quantities for drainage, earthworks, retaining walls, pavements, …