Skip to main content
Glama

Server Details

Get US weather forecasts, active alerts, and current observations.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Uptime
99.9% over 79 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
cyanheads/nws-weather-mcp-server
GitHub Stars
1
Server Listing
@cyanheads/nws-weather-mcp-server
ChatGPT
–
Claude
–

TDQS

A4.1/5.0

Scored across 10 tools

Disambiguation4/5

Most tools target clearly distinct resources, and the descriptions explicitly separate current observations from observation history, alert search from alert lookup, and station discovery from point/zone forecasts. The main residual overlap is among the forecast-oriented tools (nws_get_forecast, nws_get_zone_forecast, and nws_get_office_discussion), which can all plausibly answer a general forecast request for the same place.

Naming Consistency5/5

Every tool follows the same nws_verb_noun convention with predictable verbs (get, find, list, search). The resource names are descriptive and consistently snake_case throughout.

Tool Count5/5

Ten tools is a well-scoped set for an NWS weather server, covering alerts, forecasts, observations, stations, and office discussions without obvious filler. Each tool appears to earn its place.

Completeness4/5

The read-only weather surface is strong: alert search/get/counts/types, point and zone forecasts, office discussions, station discovery, current observations, and observation history. Minor gaps remain, such as no explicit zone/office lookup tool or station metadata endpoint, but agents can generally work around them through existing forecast and station outputs.

Available Tools

10 tools
nws_find_stationsNws Find StationsA
Read-only
Inspect

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.

NameRequiredDescriptionDefault
limitNoMax stations per page. A page holds at most 50; a larger limit (up to 10000) is served as 50 and reported through requestedLimit and effectiveLimit. totalCount still reports every station near the point, so pass the returned nextCursor as cursor to reach the rest.
cursorNoOpaque 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.
latitudeYesCenter latitude for proximity search.
longitudeYesCenter longitude for proximity search.

Output Schema

NameRequiredDescription
errorNoPresent when the call failed. Absent on success.
shownNoNumber of stations returned in this page
noticeNoGuidance when the requested limit exceeded the page cap, 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.
stationsNoNearby stations sorted by distance
nextCursorNoOpaque token for the next page of stations — pass it back as `cursor`. Omitted when this is the last page.
totalCountNoTotal observation stations available near this location before the page limit was applied — 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.
effectiveLimitNoThe page size applied instead of requestedLimit; continued pages keep it. Absent when the limit was within the cap.
requestedLimitNoThe limit asked for, when it exceeded the 50-station page cap; absent otherwise.

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

readOnlyHint=true already tells the agent this is a safe read, so the burden is lower. The description contributes the ordering guarantee and the downstream purpose, and the schema carries the detailed pagination/stability disclosure. Nothing extra is added about rate limits or data freshness beyond what's in the schema, so a solid-but-not-rich 3.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with what it does, then the return shape, then the downstream use. There is no filler and no repetition of schema content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description needn't explain return fields, and it still names the proximity ordering and the follow-up tool. It is close to complete for a discovery tool; only the pagination caveat lives solely in the schema, which is acceptable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema already explains limit, cursor windowing, requestedLimit/effectiveLimit, and coordinate bounds in more depth than the description does. The description only echoes the output-side effect of proximity sorting, not any parameter syntax. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Find weather observation stations near a location") and adds the result shape (sorted by proximity with distance and bearing). It explicitly ties itself to a sibling, nws_get_observations, so an agent can place it in the workflow without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear positive usage context: "Use to discover station IDs for nws_get_observations." That prerequisite relationship is genuinely helpful routing. It stops short of the top mark because no when-not condition or alternative discovery tool is named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

nws_get_alertNws Get AlertA
Read-only
Inspect

Fetch one NWS alert message by ID — a current alert, or an earlier message that an update or cancellation has since superseded and that an active-alert search no longer returns. Takes an id from nws_search_alerts or a references[].identifier from any alert, and returns the same alert fields nws_search_alerts does. The message carries its own references, newest first, so a revision chain is walked one call per message. Every reference sharing the newest sent time is an immediate predecessor (an update can merge several earlier segments), so references[0] is one of them, not always the only one. NWS serves messages for about 7 days after they are sent.

NameRequiredDescriptionDefault
alert_idYesNWS alert message ID, e.g. "urn:oid:2.49.0.1.840.0.654087301e4bfcbe71d24494c26a965e54d3a1ad.001.1": the id of an alert from nws_search_alerts, or the identifier of one of its references. Pass it exactly as returned; IDs are case-sensitive.

Output Schema

NameRequiredDescription
alertNoSingle alert message with event, severity, area, and timing
errorNoPresent when the call failed. Absent on success.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With readOnlyHint=true already supplied by annotations, the description adds substantial behavioral context: NWS retains messages for about 7 days, references are newest first, and an update may merge several earlier segments so references[0] is not necessarily the only immediate predecessor. This goes well beyond the safety annotation and helps the agent interpret retrieval and revision behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core action and then adds useful operational context. It is dense but most sentences earn their place; the detailed references[0] explanation is somewhat heavy, but it directly supports correct revision-chain traversal.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return fields need not be fully described, and the description explicitly says the response matches nws_search_alerts. It covers ID provenance, retention duration, revision-chain semantics, and the distinction from active-alert search, leaving no important gap for invoking the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema already documents the alert_id format, pattern, case sensitivity, and example. The description adds provenance for the ID and notes that it returns the same fields as nws_search_alerts, but does not add format or syntax details beyond the schema. The baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: fetch one NWS alert message by ID. It immediately distinguishes this from nws_search_alerts by explaining that it can retrieve current alerts as well as superseded messages that active-alert searches no longer return.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly identifies valid ID sources, nws_search_alerts results or references[].identifier from any alert, and explains when to use this tool instead of an active-alert search. The revision-chain guidance tells the agent how to walk superseded messages one call per message.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

nws_get_alert_countsNws Get Alert CountsA
Read-only
Inspect

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.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
areasNoActive 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.
errorNoPresent when the call failed. Absent on success.
regionsNoActive 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.
landAlertsNoActive alerts affecting land zones.
totalAlertsNoActive 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.
marineAlertsNoActive alerts affecting marine zones. landAlerts + marineAlerts = totalAlerts.

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnlyHint=true. The description adds substantial behavioral context beyond that: counts include every message status including Test and Exercise, so totalAlerts can exceed nws_search_alerts' default Actual totalCount; area counts can sum past totalAlerts because an alert counts once per area its zones fall in; and landAlerts plus marineAlerts equals totalAlerts. This is rich, non-obvious operational detail.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The definition is dense but front-loaded: the first sentence states purpose, scope, and output size. Subsequent sentences explain non-obvious count semantics and route the agent to the sibling tool for filtered cases. Every sentence adds distinct value with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so the description need not document return fields. Given the tool takes no parameters, the description covers everything an agent needs: what it counts, what is included, how counts relate to nws_search_alerts, and when to use the alternative.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are no parameters, so the schema is empty and the baseline is 4. The description reinforces this with 'Takes no filters,' which is useful but consistent with the empty schema and additionalProperties=false.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Count active weather alerts nationwide, per state/territory or marine area, and per marine region, in one small response.' It distinguishes itself from siblings by specifying that it answers 'how many alerts are active, and where' without fetching the alerts themselves, and it explicitly points to nws_search_alerts for filtered counts.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit when-to-use guidance ('the answer to ... without fetching the alerts themselves') and when-not/alternative guidance ('Takes no filters. For counts per zone or under a filter, call nws_search_alerts with that zone or filter and read its totalCount'). An agent knows exactly which tool to choose and when.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

nws_get_forecastNws Get ForecastB
Read-only
Inspect

Get the weather forecast for a US location. Returns either named 12-hour periods (default) or hourly breakdowns.

NameRequiredDescriptionDefault
cursorNoOpaque continuation token from a previous response's nextCursor, to retrieve the next 48 periods. Omit for the first page. The token carries the mode it was issued in (hourly or 7-day), so the next page stays in that mode whatever hourly is set to. 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.
hourlyNoIf 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. Sets the mode of the first page; a cursor carries its own mode, so this is ignored when cursor is set.
latitudeYesLatitude in decimal degrees (e.g., 47.6062).
longitudeYesLongitude in decimal degrees (e.g., -122.3321).
include_amountsNoInclude every native quantitativePrecipitation, snowfallAmount, and iceAccumulation interval from the NWS grid. Applies to this call only, including cursor pages; units and interval strings remain as NWS sends them. Unavailable amounts are explained in notice while the forecast remains available.

Output Schema

NameRequiredDescription
modeNoForecast mode: "hourly" or "7-day"
errorNoPresent when the call failed. Absent on success.
shownNoNumber of forecast periods in this page (at most 48).
noticeNoGuidance when forecast data was last updated more than 24 hours ago, periods remain or the cursor points past the end, or requested amount data or layers are unavailable.
periodsNoForecast periods
locationNoResolved location metadata
nextCursorNoOpaque token for the next page of periods — pass it back as `cursor`; it carries this forecast mode (hourly or 7-day). Omitted when this is the last page.
totalCountNoTotal forecast periods available upstream before the page window was applied — NOT the number in this page, which is shown. Compare it against shown to tell whether periods were withheld.
updateTimeNoWhen the data this forecast was generated from was last updated (ISO 8601, as NWS sends it). A grid that stops updating keeps this time while generatedAt keeps advancing. Null when NWS omits it.
generatedAtNoWhen NWS generated this response (ISO 8601). It advances whenever NWS regenerates the response, even when the underlying data is unchanged; see updateTime for the data age.
amountsUpdateTimeNoNative grid updateTime, distinct from forecast updateTime; null when omitted upstream and absent when amounts were not fetched
precipitationAmountsNoPresent grid amount layers when requested and fetched successfully; missing layers are named in notice

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

readOnlyHint=true already declares this is a safe read, so the lower bar applies. The description adds only that results come back as named 12-hour periods by default, which does not disclose pagination, error behavior for out-of-coverage points, or whether the tool resolves the NWS grid point internally.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the purpose and then the output-shape distinction. Nothing is repeated from the schema and there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no explanation, and every parameter is documented in the schema. The "US location" caveat is a useful boundary, but the description is silent on what happens outside NWS coverage and on the relationship to zone-based forecasting.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the schema already explains cursor, hourly, coordinates, and include_amounts in depth. The description adds no parameter meaning beyond that, so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Get the weather forecast") and scopes it to a "US location," while naming the two output shapes (12-hour periods vs hourly). It does not explicitly contrast with the sibling nws_get_zone_forecast, so an agent must infer that this one takes lat/lon while the sibling takes zones.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no when-to-use guidance, no prerequisites, and names no alternative among the nine siblings (e.g., nws_get_zone_forecast, nws_get_observations, nws_get_observation_history). The only choice hinted at, hourly vs 12-hour, is a mode of this tool rather than a reason to pick it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

nws_get_observation_historyNws Get Observation HistoryA
Read-only
Inspect

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.

NameRequiredDescriptionDefault
endNoTime to stop before (exclusive), in the same format as start. Omit to start from the most recent observation.
limitNoObservations per page, newest first. A page holds at most 100; a larger limit (up to 10000) is served as 100 and reported through requestedLimit and effectiveLimit. When older observations remain in the window, the response carries nextCursor; pass it back as cursor for them.
startNoEarliest 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.
cursorNoOpaque continuation token from a previous response's nextCursor. Omit for the first page. It carries that query's start, end, and applied 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_idYesObservation station ID (e.g., "KSEA"), case-insensitive. Use nws_find_stations to discover station IDs near a coordinate.

Output Schema

NameRequiredDescription
capNoThe page limit this page holds, when truncated is true
errorNoPresent when the call failed. Absent on success.
shownNoNumber of observations returned in this page
noticeNoGuidance when the requested limit exceeded the page cap, when the window held no observations (NWS keeps about the last 7 days), or when older observations remain beyond this page.
timeZoneNoStation time zone when known
stationIdNoObservation station ID, uppercased
truncatedNoTrue when older observations remain in the window past this page; continue with nextCursor.
nextCursorNoOpaque token for the next, older page — pass it back as cursor. Present only when older observations remain in the window; omitted on the last page.
stationNameNoStation name
observationsNoObservations in the window, newest first
effectiveLimitNoThe page size applied instead of requestedLimit; continued pages keep it. Absent when the limit was within the cap.
requestedLimitNoThe limit asked for, when it exceeded the 100-observation page cap; absent otherwise.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnlyHint; the description adds substantive behavioral context beyond that: ~7-day server-side retention, station reporting cadence of roughly 5 minutes, the 100-per-day-scale volume, and that nextCursor pages strictly could continue without repeats or gaps. These are data-availability and paging traits an agent cannot infer from annotations or schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose, then usage, then parameter guidance, with no filler sentences. It is fairly dense and restates some pagination/limit mechanics the schema already covers, which is minor redundancy rather than waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Output schema exists, so return values need not be explained; the description instead covers what the schema cannot — retention window, reporting frequency, volume expectations, and how paging composes the result. Nothing needed to call this correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so start/end inclusivity, limit caps, and cursor opacity are already documented in the schema; the description mostly corroborates those (inclusive start, exclusive end, nextCursor). It adds the operational reason to narrow a window (100+ observations per busy day) but no new syntax or format meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get a station's recent observation history, newest first') and explicitly contrasts it with the sibling nws_get_observations ('the trend behind the single latest reading'). An agent can distinguish history-listing from latest-reading without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Names both alternatives and their selection conditions: nws_get_observations for the single latest reading, nws_find_stations to discover station IDs near a coordinate. It also gives concrete narrowing advice ('narrow with start... and end') when a day exceeds 100 observations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

nws_get_observationsNws Get ObservationsA
Read-only
Inspect

Get current weather observations (actual measured conditions). Accepts coordinates (resolves nearest station automatically) or a station ID directly (e.g., "KSEA").

NameRequiredDescriptionDefault
latitudeNoLatitude for automatic station resolution. Use with longitude. Ignored if station_id is provided.
longitudeNoLongitude for automatic station resolution. Use with latitude. Ignored if station_id is provided.
station_idNoStation identifier directly (e.g., "KSEA", "KORD"). Use nws_find_stations to discover station IDs.

Output Schema

NameRequiredDescription
errorNoPresent when the call failed. Absent on success.
noticeNoGuidance when the latest observation is more than 2 hours old or most measurements are unavailable from this station.
stationNoStation ID that served the observation (e.g., "KSEA")
timeZoneNoStation time zone when known
dewpointCNoDewpoint in Celsius, to one decimal
stationIdNoObservation station ID
timestampNoObservation time (ISO 8601)
heatIndexCNoHeat index in Celsius, to one decimal
observedAtNoObservation timestamp (ISO 8601)
windChillCNoWind chill in Celsius, to one decimal
cloudLayersNoCloud layer information
stationNameNoStation name
visibilityMNoVisibility in meters
windGustKmhNoWind gust in km/h
temperatureCNoTemperature in Celsius, to one decimal (e.g., 8.3)
windSpeedKmhNoWind speed in km/h
textDescriptionNoConditions summary (e.g., "Mostly Cloudy")
windDirectionDegNoWind direction in degrees (0-360)
relativeHumidityPctNoRelative humidity in percent (0-100)
barometricPressurePaNoBarometric pressure in Pascals
precipitationLastHourMmNoPrecipitation in the past hour in mm, to 0.1 mm. 0 is a trace (under 0.01 in), not a dry hour; null means no amount was reported, the usual value for a dry hour and on 5-minute reports.
precipitationLast3HoursMmNoPrecipitation in the past 3 hours in mm, to 0.1 mm, carried by the hourly reports nearest 03, 09, 15, and 21 UTC. 0 is a trace (under 0.01 in); null means no amount was reported.
precipitationLast6HoursMmNoPrecipitation in the past 6 hours in mm, to 0.1 mm, carried by the hourly reports nearest 00, 06, 12, and 18 UTC. 0 is a trace (under 0.01 in); null means no amount was reported.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With readOnlyHint=true already covering safety, the description adds useful behavioral context: coordinates are automatically resolved to the nearest station, and a station ID can be supplied directly. It does not contradict the annotations and does not need to explain return values because an output schema exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two tight sentences. It front-loads the core purpose and then states the accepted input modes efficiently, with no wasted wording.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only observation retrieval tool with full schema coverage and an output schema, the description covers purpose and invocation modes well. A slightly more explicit comparison with observation-history and forecast tools would make it complete, but the essential context is present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents latitude, longitude, station_id, their ranges, and precedence behavior. The description reinforces the coordinate-vs-station-ID choice but does not add much semantic detail beyond the structured schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: getting current weather observations, explicitly characterized as actual measured conditions. That wording distinguishes this tool from forecast-oriented siblings and from historical observation tools without requiring the agent to infer it.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly explains the two invocation modes: coordinates for automatic nearest-station resolution, or a direct station ID such as KSEA. It does not explicitly name when to prefer nws_get_observation_history or nws_get_forecast, but the 'current' and 'measured' framing gives strong implied guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

nws_get_office_discussionNws Get Office DiscussionA
Read-only
Inspect

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), FWF (Fire Weather Planning Forecast, one segment per fire weather zone). The office code is the 3-letter WFO identifier returned as the "office" field by nws_get_forecast. A product over 24,000 bytes (most ZFPs and FWFs) comes back as an outline of its sections — AFD section names, or ZFP/HWO/SPS/FWF zone segments with their area names — with each section's size, instead of the text; re-call with sections to get the ones you need. sections also works on a product of any size, to read one AFD section or one zone's forecast. For an alert zone typed "fire" (Red Flag Warning, Fire Weather Watch), pass the alert's "office" field as office, product_type "FWF", and the zone code in sections.

NameRequiredDescriptionDefault
officeYesProduct location code of 2–3 letters or digits, case-insensitive — usually the 3-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. Some offices file a product under other codes: Anchorage files its ZFP under "AER" (Anchorage East) and "ALU" (Anchorage West), not "AFC"; San Juan files its ZFP under "PR", and Guam its SPS under "PQ1".
sectionsNoSections to return instead of the whole product: AFD section names, case-insensitive (e.g., "DISCUSSION", "AVIATION"), or zone codes for ZFP/HWO/SPS/FWF (e.g., "WAZ315"; a code inside a listed range such as FLZ076>078 selects that segment). Take names from the outline. Returns the product header plus every matching section verbatim, in product order, followed by the product's closing lines (forecaster credits, links). Omit for the whole product, or its outline when it is too large.
product_typeNoProduct type code. AFD (Area Forecast Discussion) — meteorological reasoning, model analysis, forecaster confidence. HWO (Hazardous Weather Outlook) — 1-7 day outlook for severe weather, flooding, winter weather. ZFP (Zone Forecast Product) — detailed zone-by-zone text forecast. SPS (Special Weather Statement) — short-fuse advisory for notable non-warning weather. FWF (Fire Weather Planning Forecast) — fire weather discussion plus a forecast segment per fire weather zone (e.g., humidity and wind); select a zone with sections.AFD

Output Schema

NameRequiredDescription
errorNoPresent when the call failed. Absent on success.
noticeNoSet when the product is outlined (with a worked sections re-call) or when sections selected part of it (how many of how many sections came back).
outlineNoSections of a product too large to inline, largest first. Present only in place of productText.
productCodeNoProduct type code (e.g., "AFD").
productNameNoFull product name (e.g., "Area Forecast Discussion").
productTextNoNarrative product text as issued by the forecaster: the whole product, or the product header followed by each selected section when sections was given. Absent when outline is returned.
issuanceTimeNoWhen the product was issued (ISO 8601), e.g., "2026-05-30T10:33:00+00:00".
issuingOfficeNoIssuing office call sign (e.g., "KSEW"). Includes the K/P prefix, unlike the input office code.
wmoCollectiveIdNoWMO collective identifier (e.g., "FXUS66"). Identifies the product family in international message routing.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, and the description adds substantial behavioral detail beyond that: products over 24,000 bytes return an outline rather than full text, sections can be used on any size product, and selected sections return header plus matching sections and closing lines. This is exactly the kind of response-shape behavior an agent needs before calling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core action and default product, then proceeds through product types and the large-product outline behavior. It is dense but mostly earns its length, though some product-type definitions overlap with the enum descriptions in the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be fully explained, and annotations cover the safety profile. The description still covers the complex parts an agent needs: product-type meanings, office-code sourcing, large-response outlining, section selection, and the fire-weather special case.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3, but the description adds meaningful cross-parameter semantics: office is usually the WFO code from nws_get_forecast, sections can target AFD section names or zone codes, and the fire workflow ties office, product_type, and sections together. It adds value beyond the schema descriptions without fully re-documenting every parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: get the latest narrative forecast product from a WFO. It distinguishes the default AFD from HWO, ZFP, SPS, and FWF, and names the office-code source from nws_get_forecast, so an agent can tell what this tool is for without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear context for selecting product types and explicitly routes the fire-weather alert case to product_type FWF with the zone in sections. However, it does not directly contrast this tool with sibling nws_get_zone_forecast or give broader when-not guidance beyond the product-type distinctions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

nws_get_zone_forecastNws Get Zone ForecastA
Read-only
Inspect

Get the text forecast for an 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" have no text forecast upstream and will not resolve. An entry typed "fire" has its forecast in a segment of the office's Fire Weather Planning Forecast: call nws_get_office_discussion with office set to the alert's "office" field, product_type "FWF", and sections set to the zone code; a fire zone code that is also a public zone code (e.g., "NDZ040") returns that public zone's forecast here, not the fire weather forecast. Marine forecast zones vary: many coastal zones serve a text forecast of wind and seas (e.g., "PZZ251"), while offshore zones (e.g., "GMZ056") and some coastal ones have none. Zone codes follow the pattern XXZ### (e.g., "WAZ315" for the City of Seattle).

NameRequiredDescriptionDefault
zone_idYesNWS forecast zone code (e.g., "WAZ315" for the City of Seattle, or a marine zone such as "PZZ251"). 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 or marine area code + "Z" + three-digit number.

Output Schema

NameRequiredDescription
errorNoPresent when the call failed. Absent on success.
zoneIdNoZone ID, uppercased (e.g., "WAZ315" for input "waz315").
periodsNoForecast periods in chronological order, typically covering 7 days.
updatedNoWhen the zone forecast was last updated (ISO 8601 with timezone offset).
periodCountNoNumber of forecast periods returned.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnlyHint=true; the description goes well beyond by disclosing failure modes (county types will not resolve, offshore marine zones have none), a subtle aliasing behavior (a fire zone code that is also a public zone returns the public forecast here), and the shape of returned periods. This is real behavioral context an agent could not infer from the structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose, and nearly every sentence carries routing or failure-mode information. It is a single dense block of roughly 180 words with no structural breaks, which makes the fire-zone detour harder to scan than it needs to be, but there is little filler to cut.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter tool with an output schema already describing return values, the description covers everything else an agent needs: valid code sourcing, silent-non-resolution cases, marine variability, and alternative routing for fire zones. Nothing material is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3; the description earns above that by documenting where the zone_id value comes from in the sibling tools' output and by distinguishing zone classes that are syntactically valid but semantically unusable. It does not add format detail beyond the schema's pattern and example, which keeps it from a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb and resource ("Get the text forecast for an NWS forecast zone") and immediately characterizes the return as named periods with narrative text. This clearly separates it from nws_get_forecast (point forecast), nws_get_office_discussion (office product text), and the alert/station siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly tells the agent how to obtain valid zone codes (affectedZones entries typed "forecast", or the "forecastZone" column from nws_find_stations), and states exclusions: "county" entries never resolve, "fire" entries must go through nws_get_office_discussion with product_type "FWF". Even the ambiguity of dual-purpose fire/public codes is called out with a concrete example.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

nws_list_alert_typesNws List Alert TypesA
Read-only
Inspect

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.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
countNoNumber of event types
errorNoPresent when the call failed. Absent on success.
eventTypesNoAlert event type names sorted alphabetically

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already signals that this is a safe read operation. The description adds the specific behavioral context that the tool returns a list of alert type names, which is beyond the annotation's binary read-only signal. While it does not mention rate limits or authentication, those are not critical for a simple listing tool, and the annotation covers safety.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three short, purposeful sentences. The first states the core action, the second gives usage context, and the third clarifies the lack of parameters. There is no fluff or redundancy, and the most important detail is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a parameterless, read-only list tool, the description is complete. It explains what the tool returns (alert event type names), why it is used (to feed the event filter in nws_search_alerts or to browse), and that it requires no inputs. The output schema (present but not shown) would cover return format details, so nothing is missing from the description.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With zero parameters, the rubric sets a baseline of 4. The description's note 'No parameters required' reinforces what the empty schema already implies but does not contradict it. There is nothing more to explain about params since none exist.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'List all valid NWS alert event type names.' It clearly distinguishes this tool from siblings by stating its purpose is to provide valid values for the event filter in nws_search_alerts. This removes any ambiguity about what the tool does and its place among the sibling tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use the tool: 'Use to discover valid values for the event filter in nws_search_alerts, or to browse alert categories.' It gives a clear primary use case tied to a sibling tool, and a secondary browsing use, leaving no doubt about when an agent should invoke it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

nws_search_alertsNws Search AlertsA
Read-only
Inspect

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.

NameRequiredDescriptionDefault
areaNoUS state/territory code (e.g., "WA", "OK", "PR") or marine area code (e.g., "GM"). Mutually exclusive with point and zone.
zoneNoNWS forecast zone (e.g., "WAZ558") or county zone (e.g., "WAC033"). Mutually exclusive with area and point.
eventNoFilter 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.
limitNoMaximum number of alerts to include in this page (default 25). A page holds at most 25; a larger limit (up to 10000) is served as 25 and reported through requestedLimit and effectiveLimit. 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.
pointNoCoordinates as "lat,lon" (e.g., "47.6,-122.3"). Returns alerts whose geometry contains this point. Mutually exclusive with area and zone.
cursorNoOpaque continuation token from a previous response's nextCursor; send it on its own. Omit for the first page. It carries that query's filters and page size, so the filter inputs and limit apply to the first page only. Every call re-fetches the active-alert feed, so alerts are contiguous within one response but not across calls — the active set changes continuously as alerts are issued and expire, so a continued page covers the collection as it stands at that moment.
regionNoRestrict 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 — a land alert never matches. Mutually exclusive with area, point, zone, and region_type.
statusNoAlert status filter. Default "Actual". Use a different value only when you specifically need non-live alerts.Actual
urgencyNoFilter by urgency level.
severityNoFilter by severity level.
certaintyNoFilter by certainty level.
region_typeNoRestrict to land-based or marine alerts. Mutually exclusive with area, point, zone, and region.

Output Schema

NameRequiredDescription
errorNoPresent when the call failed. Absent on success.
shownNoNumber of alerts included in this response
alertsNoMatching alerts for this page (at most the applied limit, which never exceeds 25)
noticeNoGuidance when the requested limit exceeded the page cap, 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.
nextCursorNoOpaque token for the next page of matches — pass it back as `cursor` on its own; it carries this query's filters and page size. Omitted when this is the last page.
totalCountNoTotal 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.
appliedFiltersNoSummary of applied search filters
effectiveLimitNoThe page size applied instead of requestedLimit; continued pages keep it. Absent when the limit was within the cap.
requestedLimitNoThe limit asked for, when it exceeded the 25-alert page cap; absent otherwise.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With readOnlyHint=true already declared, the description adds the key behavioral fact that results are limited to *active* alerts, and that the location filter family is exclusive. It does not mention pagination cost or feed volatility (the cursor/limit params carry that), so it adds real context without fully carrying the load.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with purpose then constraints then default. No filler and nothing an agent needs to scan for.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 12-parameter optional-filter tool with full schema coverage, an output schema, and annotations, the description covers purpose, exclusivity, and the no-filter case. The pagination/digest behavior and event-name discovery live in param descriptions rather than the main text, which is acceptable but leaves the top-level slightly thin for broad national searches.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds a cross-parameter rule (five mutually exclusive location filters, at most one) that is only partially visible in the per-property descriptions, plus the zero-filter default — genuine semantic value beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Search active weather alerts') plus scope (watches, warnings, advisories; across the US) and enumerates the filter dimensions. This clearly separates it from nws_get_alert (single alert), nws_get_alert_counts (aggregates), and nws_list_alert_types (vocabulary).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit selection rules for the competing location filters ('mutually exclusive — provide at most one') and a default action ('Omit all filters for a national search'). It stops short of naming sibling tools like nws_get_alert or nws_find_stations as alternatives for non-search needs, but the when-to-use context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 2 tool updates
    • Changednws_get_forecast4 fields changed
      • addedInput schema / properties / include_amounts
        Added value: +{
        +  "default": false,
        +  "description": "Include every native quantitativePrecipitation, snowfallAmount, and iceAccumulation interval from the NWS grid. Applies to this call only, including cursor pages; units and interval strings remain as NWS sends them. Unavailable amounts are explained in notice while the forecast remains available.",
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / amountsUpdateTime
        Added value: +{
        +  "description": "Native grid updateTime, distinct from forecast updateTime; null when omitted upstream and absent when amounts were not fetched",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • changedOutput schema / properties / notice / description
        Previous value: -"Set when the forecast data was last updated more than 24 hours ago (giving its age in hours), when periods remain beyond this page, or when the supplied cursor points past the end of the period array."New value: +"Guidance when forecast data was last updated more than 24 hours ago, periods remain or the cursor points past the end, or requested amount data or layers are unavailable."
      • addedOutput schema / properties / precipitationAmounts
        Added value: +{
        +  "description": "Present grid amount layers when requested and fetched successfully; missing layers are named in notice",
        +  "items": {
        +    "additionalProperties": false,
        +    "description": "One present quantitative amount layer",
        +    "properties": {
        +      "layer": {
        +        "description": "Native grid amount layer name",
        +        "enum": [
        +          "quantitativePrecipitation",
        +          "snowfallAmount",
        +          "iceAccumulation"
        +        ],
        +        "type": "string"
        +      },
        +      "uom": {
        +        "description": "Native NWS layer unit, or null when omitted",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "values": {
        +        "description": "Every interval in this layer, including null measurements; empty when NWS publishes no intervals",
        +        "items": {
        +          "additionalProperties": false,
        +          "description": "One native accumulation interval",
        +          "properties": {
        +            "validTime": {
        +              "description": "Native ISO 8601 interval string, unchanged",
        +              "type": "string"
        +            },
        +            "value": {
        +              "description": "Native amount, or null when unreported",
        +              "type": [
        +                "number",
        +                "null"
        +              ]
        +            }
        +          },
        +          "required": [
        +            "validTime",
        +            "value"
        +          ],
        +          "type": "object"
        +        },
        +        "type": "array"
        +      }
        +    },
        +    "required": [
        +      "layer",
        +      "uom",
        +      "values"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
    • Changednws_get_observations1 field changed
      • changedOutput schema / properties / notice / description
        Previous value: -"Guidance when the latest observation is more than 2 hours old — data may not reflect current conditions."New value: +"Guidance when the latest observation is more than 2 hours old or most measurements are unavailable from this station."
  2. 6 tool updates
    • Changednws_get_alert7 fields changed
      • changedOutput schema / properties / alert / properties / affectedZones / items / properties / type / description
        Previous value: -"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 — pass those to nws_get_zone_forecast. All types are valid values for the nws_search_alerts zone filter."New value: +"NWS zone type: \"forecast\", \"county\", or \"fire\" (\"unknown\" when upstream reports a shape this server cannot type). A \"forecast\" code has a zone text forecast: pass it to nws_get_zone_forecast. A \"fire\" code has a segment in its office's Fire Weather Planning Forecast: call nws_get_office_discussion with office from this alert's office field, product_type \"FWF\", and sections [code]. All types are valid values for the nws_search_alerts zone filter."
      • addedOutput schema / properties / alert / properties / hazard
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "eventMotionDescription": {
        +          "description": "Storm time, motion, and position in NWS encoding (e.g., \"2026-10-22T17:17:00-00:00...storm...222DEG...11KT...34.0,-118.1\")",
        +          "type": "string"
        +        },
        +        "flashFloodDamageThreat": {
        +          "description": "Flash flood damage-threat tag (e.g., \"CONSIDERABLE\")",
        +          "type": "string"
        +        },
        +        "flashFloodDetection": {
        +          "description": "Flash flood detection (e.g., \"RADAR INDICATED\", \"OBSERVED\", \"RADAR AND GAUGE INDICATED\")",
        +          "type": "string"
        +        },
        +        "hailThreat": {
        +          "description": "How the hail is known (e.g., \"RADAR INDICATED\", \"OBSERVED\")",
        +          "type": "string"
        +        },
        +        "maxHailSize": {
        +          "description": "Maximum hail size in inches, as NWS states it (e.g., \"1.00\", \"Up to .75\")",
        +          "type": "string"
        +        },
        +        "maxWindGust": {
        +          "description": "Maximum wind gust, as NWS states it (e.g., \"60 MPH\", \"34 knots\")",
        +          "type": "string"
        +        },
        +        "thunderstormDamageThreat": {
        +          "description": "Thunderstorm damage-threat tag (e.g., \"CONSIDERABLE\")",
        +          "type": "string"
        +        },
        +        "tornadoDamageThreat": {
        +          "description": "Tornado damage-threat tag",
        +          "type": "string"
        +        },
        +        "tornadoDetection": {
        +          "description": "Tornado detection (e.g., \"RADAR INDICATED\", \"POSSIBLE\")",
        +          "type": "string"
        +        },
        +        "waterspoutDetection": {
        +          "description": "Waterspout detection (e.g., \"POSSIBLE\")",
        +          "type": "string"
        +        },
        +        "windThreat": {
        +          "description": "How the wind is known (e.g., \"RADAR INDICATED\", \"OBSERVED\")",
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Severe-weather tags NWS attaches, under NWS key names with values verbatim (free text such as \"Up to .75\" or \"34 knots\"). Only the tags NWS sent are present; null when it sent none."
        +}
      • addedOutput schema / properties / alert / properties / nwsHeadline
        Added value: +{
        +  "description": "The NWS product headline (e.g., \"RED FLAG WARNING IN EFFECT FROM NOON TO 8 PM MDT FRIDAY\"), distinct from headline; null when NWS sends none.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / alert / properties / office
        Added value: +{
        +  "description": "Issuing forecast office code (e.g., \"RIW\"), from the issuing centre in the message's WMO header; pass it as office to nws_get_office_discussion. Null for tsunami warning centres and national test messages, which have no office discussion, and when NWS sends no usable WMO header.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • changedOutput schema / properties / alert / properties / senderName / description
        Previous value: -"Issuing office"New value: +"Issuing office name (e.g., \"NWS Riverton WY\"); the office code nws_get_office_discussion takes is in office"
      • addedOutput schema / properties / alert / properties / vtec
        Added value: +{
        +  "description": "Raw P-VTEC strings NWS attaches (e.g., \"/O.CON.KRIW.FW.W.0031.261023T1800Z-261024T0200Z/\"), the key that tracks one event across its updates; empty when NWS sends none (e.g., Special Weather Statements).",
        +  "items": {
        +    "description": "One P-VTEC string, verbatim",
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • changedOutput schema / properties / alert / required
        Previous value: -[
        -  "id",
        -  "event",
        -  "headline",
        -  "description",
        -  "instruction",
        -  "severity",
        -  "urgency",
        -  "certainty",
        -  "areaDesc",
        -  "sent",
        -  "effective",
        -  "onset",
        -  "ends",
        -  "expires",
        -  "status",
        -  "messageType",
        -  "references",
        -  "senderName",
        -  "affectedZones"
        -]New value: +[
        +  "id",
        +  "event",
        +  "headline",
        +  "description",
        +  "instruction",
        +  "severity",
        +  "urgency",
        +  "certainty",
        +  "areaDesc",
        +  "sent",
        +  "effective",
        +  "onset",
        +  "ends",
        +  "expires",
        +  "status",
        +  "messageType",
        +  "references",
        +  "senderName",
        +  "office",
        +  "vtec",
        +  "nwsHeadline",
        +  "hazard",
        +  "affectedZones"
        +]
    • Changednws_get_forecast7 fields changed
      • changedInput schema / properties / cursor / description
        Previous value: -"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."New value: +"Opaque continuation token from a previous response's nextCursor, to retrieve the next 48 periods. Omit for the first page. The token carries the mode it was issued in (hourly or 7-day), so the next page stays in that mode whatever hourly is set to. 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."
      • changedInput schema / properties / hourly / description
        Previous value: -"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."New value: +"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. Sets the mode of the first page; a cursor carries its own mode, so this is ignored when cursor is set."
      • changedOutput schema / anyOf
        Previous value: -[
        -  {
        -    "not": {
        -      "required": [
        -        "error"
        -      ]
        -    },
        -    "required": [
        -      "location",
        -      "generatedAt",
        -      "periods",
        -      "totalCount",
        -      "shown",
        -      "mode"
        -    ]
        -  },
        -  {
        -    "required": [
        -      "error"
        -    ]
        -  }
        -]New value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "location",
        +      "generatedAt",
        +      "updateTime",
        +      "periods",
        +      "totalCount",
        +      "shown",
        +      "mode"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • changedOutput schema / properties / generatedAt / description
        Previous value: -"When the forecast was generated (ISO 8601)"New value: +"When NWS generated this response (ISO 8601). It advances whenever NWS regenerates the response, even when the underlying data is unchanged; see updateTime for the data age."
      • changedOutput schema / properties / nextCursor / description
        Previous value: -"Opaque token for the next page of periods — pass it back as `cursor`. Omitted when this is the last page."New value: +"Opaque token for the next page of periods — pass it back as `cursor`; it carries this forecast mode (hourly or 7-day). Omitted when this is the last page."
      • changedOutput schema / properties / notice / description
        Previous value: -"Set when periods remain beyond this page, or when the supplied cursor points past the end of the period array."New value: +"Set when the forecast data was last updated more than 24 hours ago (giving its age in hours), when periods remain beyond this page, or when the supplied cursor points past the end of the period array."
      • addedOutput schema / properties / updateTime
        Added value: +{
        +  "description": "When the data this forecast was generated from was last updated (ISO 8601, as NWS sends it). A grid that stops updating keeps this time while generatedAt keeps advancing. Null when NWS omits it.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
    • Changednws_get_observation_history8 fields changed
      • changedOutput schema / properties / observations / items / properties / dewpointC / description
        Previous value: -"Dewpoint in Celsius"New value: +"Dewpoint in Celsius, to one decimal"
      • changedOutput schema / properties / observations / items / properties / heatIndexC / description
        Previous value: -"Heat index in Celsius"New value: +"Heat index in Celsius, to one decimal"
      • addedOutput schema / properties / observations / items / properties / precipitationLast3HoursMm
        Added value: +{
        +  "description": "Precipitation in the past 3 hours in mm, to 0.1 mm, carried by the hourly reports nearest 03, 09, 15, and 21 UTC. 0 is a trace (under 0.01 in); null means no amount was reported.",
        +  "type": [
        +    "number",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / observations / items / properties / precipitationLast6HoursMm
        Added value: +{
        +  "description": "Precipitation in the past 6 hours in mm, to 0.1 mm, carried by the hourly reports nearest 00, 06, 12, and 18 UTC. 0 is a trace (under 0.01 in); null means no amount was reported.",
        +  "type": [
        +    "number",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / observations / items / properties / precipitationLastHourMm
        Added value: +{
        +  "description": "Precipitation in the past hour in mm, to 0.1 mm. 0 is a trace (under 0.01 in), not a dry hour; null means no amount was reported, the usual value for a dry hour and on 5-minute reports.",
        +  "type": [
        +    "number",
        +    "null"
        +  ]
        +}
      • changedOutput schema / properties / observations / items / properties / temperatureC / description
        Previous value: -"Temperature in Celsius"New value: +"Temperature in Celsius, to one decimal (e.g., 8.3)"
      • changedOutput schema / properties / observations / items / properties / windChillC / description
        Previous value: -"Wind chill in Celsius"New value: +"Wind chill in Celsius, to one decimal"
      • changedOutput schema / properties / observations / items / required
        Previous value: -[
        -  "timestamp",
        -  "textDescription",
        -  "temperatureC",
        -  "dewpointC",
        -  "windSpeedKmh",
        -  "windDirectionDeg",
        -  "windGustKmh",
        -  "barometricPressurePa",
        -  "visibilityM",
        -  "relativeHumidityPct",
        -  "heatIndexC",
        -  "windChillC",
        -  "cloudLayers"
        -]New value: +[
        +  "timestamp",
        +  "textDescription",
        +  "temperatureC",
        +  "dewpointC",
        +  "windSpeedKmh",
        +  "windDirectionDeg",
        +  "windGustKmh",
        +  "barometricPressurePa",
        +  "visibilityM",
        +  "relativeHumidityPct",
        +  "heatIndexC",
        +  "windChillC",
        +  "precipitationLastHourMm",
        +  "precipitationLast3HoursMm",
        +  "precipitationLast6HoursMm",
        +  "cloudLayers"
        +]
    • Changednws_get_observations8 fields changed
      • changedOutput schema / anyOf
        Previous value: -[
        -  {
        -    "not": {
        -      "required": [
        -        "error"
        -      ]
        -    },
        -    "required": [
        -      "stationId",
        -      "stationName",
        -      "timestamp",
        -      "timeZone",
        -      "textDescription",
        -      "temperatureC",
        -      "dewpointC",
        -      "windSpeedKmh",
        -      "windDirectionDeg",
        -      "windGustKmh",
        -      "barometricPressurePa",
        -      "visibilityM",
        -      "relativeHumidityPct",
        -      "heatIndexC",
        -      "windChillC",
        -      "cloudLayers",
        -      "station",
        -      "observedAt"
        -    ]
        -  },
        -  {
        -    "required": [
        -      "error"
        -    ]
        -  }
        -]New value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "stationId",
        +      "stationName",
        +      "timestamp",
        +      "timeZone",
        +      "textDescription",
        +      "temperatureC",
        +      "dewpointC",
        +      "windSpeedKmh",
        +      "windDirectionDeg",
        +      "windGustKmh",
        +      "barometricPressurePa",
        +      "visibilityM",
        +      "relativeHumidityPct",
        +      "heatIndexC",
        +      "windChillC",
        +      "precipitationLastHourMm",
        +      "precipitationLast3HoursMm",
        +      "precipitationLast6HoursMm",
        +      "cloudLayers",
        +      "station",
        +      "observedAt"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • changedOutput schema / properties / dewpointC / description
        Previous value: -"Dewpoint in Celsius"New value: +"Dewpoint in Celsius, to one decimal"
      • changedOutput schema / properties / heatIndexC / description
        Previous value: -"Heat index in Celsius"New value: +"Heat index in Celsius, to one decimal"
      • addedOutput schema / properties / precipitationLast3HoursMm
        Added value: +{
        +  "description": "Precipitation in the past 3 hours in mm, to 0.1 mm, carried by the hourly reports nearest 03, 09, 15, and 21 UTC. 0 is a trace (under 0.01 in); null means no amount was reported.",
        +  "type": [
        +    "number",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / precipitationLast6HoursMm
        Added value: +{
        +  "description": "Precipitation in the past 6 hours in mm, to 0.1 mm, carried by the hourly reports nearest 00, 06, 12, and 18 UTC. 0 is a trace (under 0.01 in); null means no amount was reported.",
        +  "type": [
        +    "number",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / precipitationLastHourMm
        Added value: +{
        +  "description": "Precipitation in the past hour in mm, to 0.1 mm. 0 is a trace (under 0.01 in), not a dry hour; null means no amount was reported, the usual value for a dry hour and on 5-minute reports.",
        +  "type": [
        +    "number",
        +    "null"
        +  ]
        +}
      • changedOutput schema / properties / temperatureC / description
        Previous value: -"Temperature in Celsius"New value: +"Temperature in Celsius, to one decimal (e.g., 8.3)"
      • changedOutput schema / properties / windChillC / description
        Previous value: -"Wind chill in Celsius"New value: +"Wind chill in Celsius, to one decimal"
    • Changednws_get_office_discussion4 fields changed
      • changedInput schema / properties / product_type / description
        Previous value: -"Product type code. AFD (Area Forecast Discussion) — meteorological reasoning, model analysis, forecaster confidence. HWO (Hazardous Weather Outlook) — 1-7 day outlook for severe weather, flooding, winter weather. ZFP (Zone Forecast Product) — detailed zone-by-zone text forecast. SPS (Special Weather Statement) — short-fuse advisory for notable non-warning weather."New value: +"Product type code. AFD (Area Forecast Discussion) — meteorological reasoning, model analysis, forecaster confidence. HWO (Hazardous Weather Outlook) — 1-7 day outlook for severe weather, flooding, winter weather. ZFP (Zone Forecast Product) — detailed zone-by-zone text forecast. SPS (Special Weather Statement) — short-fuse advisory for notable non-warning weather. FWF (Fire Weather Planning Forecast) — fire weather discussion plus a forecast segment per fire weather zone (e.g., humidity and wind); select a zone with sections."
      • changedInput schema / properties / product_type / enum
        Previous value: -[
        -  "AFD",
        -  "HWO",
        -  "ZFP",
        -  "SPS"
        -]New value: +[
        +  "AFD",
        +  "HWO",
        +  "ZFP",
        +  "SPS",
        +  "FWF"
        +]
      • changedInput schema / properties / sections / description
        Previous value: -"Sections to return instead of the whole product: AFD section names, case-insensitive (e.g., \"DISCUSSION\", \"AVIATION\"), or zone codes for ZFP/HWO/SPS (e.g., \"WAZ315\"; a code inside a listed range such as FLZ076>078 selects that segment). Take names from the outline. Returns the product header plus every matching section verbatim, in product order, followed by the product's closing lines (forecaster credits, links). Omit for the whole product, or its outline when it is too large."New value: +"Sections to return instead of the whole product: AFD section names, case-insensitive (e.g., \"DISCUSSION\", \"AVIATION\"), or zone codes for ZFP/HWO/SPS/FWF (e.g., \"WAZ315\"; a code inside a listed range such as FLZ076>078 selects that segment). Take names from the outline. Returns the product header plus every matching section verbatim, in product order, followed by the product's closing lines (forecaster credits, links). Omit for the whole product, or its outline when it is too large."
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `no_products`: Office code is unknown, or no product of the requested type is filed under it: episodic types (SPS, HWO) are commonly empty, and some offices file AFD or ZFP under other location codes. `unknown_section`: A sections entry matches no section of the latest product. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `no_products`: Office code is unknown, or no product of the requested type is filed under it: episodic types (SPS, HWO) are commonly empty, some offices file AFD or ZFP under other location codes, and some offices issue no FWF. `unknown_section`: A sections entry matches no section of the latest product. Other values are possible when a failure originates below the handler."
    • Changednws_search_alerts9 fields changed
      • changedInput schema / properties / cursor / description
        Previous value: -"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 — the active set changes continuously as alerts are issued and expire, so a continued page covers the collection as it stands at that moment."New value: +"Opaque continuation token from a previous response's nextCursor; send it on its own. Omit for the first page. It carries that query's filters and page size, so the filter inputs and limit apply to the first page only. Every call re-fetches the active-alert feed, so alerts are contiguous within one response but not across calls — the active set changes continuously as alerts are issued and expire, so a continued page covers the collection as it stands at that moment."
      • changedOutput schema / properties / alerts / items / properties / affectedZones / items / properties / type / description
        Previous value: -"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 — pass those to nws_get_zone_forecast. All types are valid values for the nws_search_alerts zone filter."New value: +"NWS zone type: \"forecast\", \"county\", or \"fire\" (\"unknown\" when upstream reports a shape this server cannot type). A \"forecast\" code has a zone text forecast: pass it to nws_get_zone_forecast. A \"fire\" code has a segment in its office's Fire Weather Planning Forecast: call nws_get_office_discussion with office from this alert's office field, product_type \"FWF\", and sections [code]. All types are valid values for the nws_search_alerts zone filter."
      • addedOutput schema / properties / alerts / items / properties / hazard
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "eventMotionDescription": {
        +          "description": "Storm time, motion, and position in NWS encoding (e.g., \"2026-10-22T17:17:00-00:00...storm...222DEG...11KT...34.0,-118.1\")",
        +          "type": "string"
        +        },
        +        "flashFloodDamageThreat": {
        +          "description": "Flash flood damage-threat tag (e.g., \"CONSIDERABLE\")",
        +          "type": "string"
        +        },
        +        "flashFloodDetection": {
        +          "description": "Flash flood detection (e.g., \"RADAR INDICATED\", \"OBSERVED\", \"RADAR AND GAUGE INDICATED\")",
        +          "type": "string"
        +        },
        +        "hailThreat": {
        +          "description": "How the hail is known (e.g., \"RADAR INDICATED\", \"OBSERVED\")",
        +          "type": "string"
        +        },
        +        "maxHailSize": {
        +          "description": "Maximum hail size in inches, as NWS states it (e.g., \"1.00\", \"Up to .75\")",
        +          "type": "string"
        +        },
        +        "maxWindGust": {
        +          "description": "Maximum wind gust, as NWS states it (e.g., \"60 MPH\", \"34 knots\")",
        +          "type": "string"
        +        },
        +        "thunderstormDamageThreat": {
        +          "description": "Thunderstorm damage-threat tag (e.g., \"CONSIDERABLE\")",
        +          "type": "string"
        +        },
        +        "tornadoDamageThreat": {
        +          "description": "Tornado damage-threat tag",
        +          "type": "string"
        +        },
        +        "tornadoDetection": {
        +          "description": "Tornado detection (e.g., \"RADAR INDICATED\", \"POSSIBLE\")",
        +          "type": "string"
        +        },
        +        "waterspoutDetection": {
        +          "description": "Waterspout detection (e.g., \"POSSIBLE\")",
        +          "type": "string"
        +        },
        +        "windThreat": {
        +          "description": "How the wind is known (e.g., \"RADAR INDICATED\", \"OBSERVED\")",
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Severe-weather tags NWS attaches, under NWS key names with values verbatim (free text such as \"Up to .75\" or \"34 knots\"). Only the tags NWS sent are present; null when it sent none."
        +}
      • addedOutput schema / properties / alerts / items / properties / nwsHeadline
        Added value: +{
        +  "description": "The NWS product headline (e.g., \"RED FLAG WARNING IN EFFECT FROM NOON TO 8 PM MDT FRIDAY\"), distinct from headline; null when NWS sends none.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / alerts / items / properties / office
        Added value: +{
        +  "description": "Issuing forecast office code (e.g., \"RIW\"), from the issuing centre in the message's WMO header; pass it as office to nws_get_office_discussion. Null for tsunami warning centres and national test messages, which have no office discussion, and when NWS sends no usable WMO header.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • changedOutput schema / properties / alerts / items / properties / senderName / description
        Previous value: -"Issuing office"New value: +"Issuing office name (e.g., \"NWS Riverton WY\"); the office code nws_get_office_discussion takes is in office"
      • addedOutput schema / properties / alerts / items / properties / vtec
        Added value: +{
        +  "description": "Raw P-VTEC strings NWS attaches (e.g., \"/O.CON.KRIW.FW.W.0031.261023T1800Z-261024T0200Z/\"), the key that tracks one event across its updates; empty when NWS sends none (e.g., Special Weather Statements).",
        +  "items": {
        +    "description": "One P-VTEC string, verbatim",
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • changedOutput schema / properties / alerts / items / required
        Previous value: -[
        -  "id",
        -  "event",
        -  "headline",
        -  "description",
        -  "instruction",
        -  "severity",
        -  "urgency",
        -  "certainty",
        -  "areaDesc",
        -  "sent",
        -  "effective",
        -  "onset",
        -  "ends",
        -  "expires",
        -  "status",
        -  "messageType",
        -  "references",
        -  "senderName",
        -  "affectedZones"
        -]New value: +[
        +  "id",
        +  "event",
        +  "headline",
        +  "description",
        +  "instruction",
        +  "severity",
        +  "urgency",
        +  "certainty",
        +  "areaDesc",
        +  "sent",
        +  "effective",
        +  "onset",
        +  "ends",
        +  "expires",
        +  "status",
        +  "messageType",
        +  "references",
        +  "senderName",
        +  "office",
        +  "vtec",
        +  "nwsHeadline",
        +  "hazard",
        +  "affectedZones"
        +]
      • changedOutput schema / properties / nextCursor / description
        Previous value: -"Opaque token for the next page of matches — pass it back as `cursor`. Omitted when this is the last page."New value: +"Opaque token for the next page of matches — pass it back as `cursor` on its own; it carries this query's filters and page size. Omitted when this is the last page."
  3. 8 tool updates
    • Changednws_find_stations5 fields changed
      • changedInput schema / properties / limit / description
        Previous value: -"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."New value: +"Max stations per page. A page holds at most 50; a larger limit (up to 10000) is served as 50 and reported through requestedLimit and effectiveLimit. totalCount still reports every station near the point, so pass the returned nextCursor as cursor to reach the rest."
      • changedInput schema / properties / limit / maximum
        Previous value: -50New value: +10000
      • addedOutput schema / properties / effectiveLimit
        Added value: +{
        +  "description": "The page size applied instead of requestedLimit; continued pages keep it. Absent when the limit was within the cap.",
        +  "type": "number"
        +}
      • changedOutput schema / properties / notice / description
        Previous value: -"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."New value: +"Guidance when the requested limit exceeded the page cap, 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."
      • addedOutput schema / properties / requestedLimit
        Added value: +{
        +  "description": "The limit asked for, when it exceeded the 50-station page cap; absent otherwise.",
        +  "type": "number"
        +}
    • Addednws_get_alert
    • Changednws_get_forecast1 field changed
      • changedOutput schema / properties / periods / items / properties / name / description
        Previous value: -"Period name (e.g., \"Today\", \"Tonight\") or hour label"New value: +"Period name (e.g., \"Today\", \"Tonight\"); in hourly mode, the weekday and start time in the location time zone (e.g., \"Fri 6:00 AM\")"
    • Changednws_get_observation_history12 fields changed
      • changedInput schema / properties / cursor / description
        Previous value: -"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."New value: +"Opaque continuation token from a previous response's nextCursor. Omit for the first page. It carries that query's start, end, and applied 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."
      • addedInput schema / properties / end / pattern
        Added value: +"^\\s*(?:\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d{1,6})?(?:Z|[+-]\\d{2}:\\d{2})\\s*)?$"
      • changedInput schema / properties / limit / description
        Previous value: -"Observations per page (1-100), newest first. When a page fills the limit, pass its nextCursor back as cursor for older observations."New value: +"Observations per page, newest first. A page holds at most 100; a larger limit (up to 10000) is served as 100 and reported through requestedLimit and effectiveLimit. When older observations remain in the window, the response carries nextCursor; pass it back as cursor for them."
      • changedInput schema / properties / limit / maximum
        Previous value: -100New value: +10000
      • addedInput schema / properties / start / pattern
        Added value: +"^\\s*(?:\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d{1,6})?(?:Z|[+-]\\d{2}:\\d{2})\\s*)?$"
      • addedInput schema / properties / station_id / pattern
        Added value: +"^\\s*[A-Za-z0-9]+\\s*$"
      • changedOutput schema / properties / cap / description
        Previous value: -"The page limit this page filled, when truncated is true"New value: +"The page limit this page holds, when truncated is true"
      • addedOutput schema / properties / effectiveLimit
        Added value: +{
        +  "description": "The page size applied instead of requestedLimit; continued pages keep it. Absent when the limit was within the cap.",
        +  "type": "number"
        +}
      • changedOutput schema / properties / nextCursor / description
        Previous value: -"Opaque token for the next, older page — pass it back as cursor. Present only when this page filled the limit; omitted on the last page."New value: +"Opaque token for the next, older page — pass it back as cursor. Present only when older observations remain in the window; omitted on the last page."
      • changedOutput schema / properties / notice / description
        Previous value: -"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."New value: +"Guidance when the requested limit exceeded the page cap, when the window held no observations (NWS keeps about the last 7 days), or when older observations remain beyond this page."
      • addedOutput schema / properties / requestedLimit
        Added value: +{
        +  "description": "The limit asked for, when it exceeded the 100-observation page cap; absent otherwise.",
        +  "type": "number"
        +}
      • changedOutput schema / properties / truncated / description
        Previous value: -"True when this page filled the limit and older observations in the window may remain; continue with nextCursor."New value: +"True when older observations remain in the window past this page; continue with nextCursor."
    • Changednws_get_observations1 field changed
      • addedInput schema / properties / station_id / pattern
        Added value: +"^\\s*(?:[A-Za-z0-9]+\\s*)?$"
    • Changednws_get_office_discussion9 fields changed
      • changedInput schema / properties / office / description
        Previous value: -"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."New value: +"Product location code of 2–3 letters or digits, case-insensitive — usually the 3-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. Some offices file a product under other codes: Anchorage files its ZFP under \"AER\" (Anchorage East) and \"ALU\" (Anchorage West), not \"AFC\"; San Juan files its ZFP under \"PR\", and Guam its SPS under \"PQ1\"."
      • addedInput schema / properties / office / pattern
        Added value: +"^\\s*[A-Za-z0-9]{2,3}\\s*$"
      • addedInput schema / properties / sections
        Added value: +{
        +  "description": "Sections to return instead of the whole product: AFD section names, case-insensitive (e.g., \"DISCUSSION\", \"AVIATION\"), or zone codes for ZFP/HWO/SPS (e.g., \"WAZ315\"; a code inside a listed range such as FLZ076>078 selects that segment). Take names from the outline. Returns the product header plus every matching section verbatim, in product order, followed by the product's closing lines (forecaster credits, links). Omit for the whole product, or its outline when it is too large.",
        +  "items": {
        +    "maxLength": 200,
        +    "type": "string"
        +  },
        +  "maxItems": 100,
        +  "type": "array"
        +}
      • changedOutput schema / anyOf
        Previous value: -[
        -  {
        -    "not": {
        -      "required": [
        -        "error"
        -      ]
        -    },
        -    "required": [
        -      "issuanceTime",
        -      "issuingOffice",
        -      "productCode",
        -      "productName",
        -      "productText",
        -      "wmoCollectiveId"
        -    ]
        -  },
        -  {
        -    "required": [
        -      "error"
        -    ]
        -  }
        -]New value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "issuanceTime",
        +      "issuingOffice",
        +      "productCode",
        +      "productName",
        +      "wmoCollectiveId"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"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."New value: +"Machine-readable failure mode. Declared by this tool: `no_products`: Office code is unknown, or no product of the requested type is filed under it: episodic types (SPS, HWO) are commonly empty, and some offices file AFD or ZFP under other location codes. `unknown_section`: A sections entry matches no section of the latest product. Other values are possible when a failure originates below the handler."
      • changedOutput schema / properties / error / properties / data / properties / reason / examples
        Previous value: -[
        -  "no_products"
        -]New value: +[
        +  "no_products",
        +  "unknown_section"
        +]
      • addedOutput schema / properties / notice
        Added value: +{
        +  "description": "Set when the product is outlined (with a worked sections re-call) or when sections selected part of it (how many of how many sections came back).",
        +  "type": "string"
        +}
      • addedOutput schema / properties / outline
        Added value: +{
        +  "description": "Sections of a product too large to inline, largest first. Present only in place of productText.",
        +  "items": {
        +    "additionalProperties": false,
        +    "description": "One section of the product",
        +    "properties": {
        +      "bytes": {
        +        "description": "Size of the section text in bytes.",
        +        "type": "number"
        +      },
        +      "label": {
        +        "description": "Area name line of a zone segment (e.g., \"City of Seattle\").",
        +        "type": "string"
        +      },
        +      "name": {
        +        "description": "AFD section name (e.g., \"AVIATION\"), or a zone segment's zone codes as issued, ranges written NNN>MMM (e.g., \"FLZ076>078, IDZ001\"). Pass it, or any one zone code it covers, in sections.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "name",
        +      "bytes"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • changedOutput schema / properties / productText / description
        Previous value: -"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."New value: +"Narrative product text as issued by the forecaster: the whole product, or the product header followed by each selected section when sections was given. Absent when outline is returned."
    • Changednws_get_zone_forecast3 fields changed
      • changedInput schema / properties / zone_id / description
        Previous value: -"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."New value: +"NWS forecast zone code (e.g., \"WAZ315\" for the City of Seattle, or a marine zone such as \"PZZ251\"). 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 or marine area code + \"Z\" + three-digit number."
      • addedInput schema / properties / zone_id / pattern
        Added value: +"^\\s*[A-Za-z]{2}[Zz]\\d{3}\\s*$"
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"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."New value: +"Machine-readable failure mode. Declared by this tool: `zone_not_found`: Zone code is not a valid NWS forecast zone. `zone_forecast_unavailable`: Zone is a valid land forecast zone, but NWS has no text forecast for it. `marine_forecast_unsupported`: Zone is a marine forecast zone NWS publishes no text forecast for (availability varies by zone). Other values are possible when a failure originates below the handler."
    • Changednws_search_alerts16 fields changed
      • addedInput schema / properties / area / pattern
        Added value: +"^\\s*(?:[A-Za-z]{2}\\s*)?$"
      • changedInput schema / properties / limit / description
        Previous value: -"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."New value: +"Maximum number of alerts to include in this page (default 25). A page holds at most 25; a larger limit (up to 10000) is served as 25 and reported through requestedLimit and effectiveLimit. 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."
      • changedInput schema / properties / limit / maximum
        Previous value: -25New value: +10000
      • addedInput schema / properties / point / pattern
        Added value: +"^\\s*(?:(?:-\\s*)?\\d(?:\\s*\\d)*(?:\\s*\\.\\s*\\d(?:\\s*\\d)*)?\\s*,\\s*(?:-\\s*)?\\d(?:\\s*\\d)*(?:\\s*\\.\\s*\\d(?:\\s*\\d)*)?\\s*)?$"
      • addedInput schema / properties / zone / pattern
        Added value: +"^\\s*(?:[A-Za-z]{2}[CcZz]\\d{3}\\s*)?$"
      • changedOutput schema / properties / alerts / description
        Previous value: -"Matching alerts for this page (at most the requested limit, max 25)"New value: +"Matching alerts for this page (at most the applied limit, which never exceeds 25)"
      • changedOutput schema / properties / alerts / items / description
        Previous value: -"Single active alert with event, severity, area, and timing"New value: +"Single alert message with event, severity, area, and timing"
      • changedOutput schema / properties / alerts / items / properties / affectedZones / items / properties / type / description
        Previous value: -"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 — pass those to nws_get_zone_forecast. All types are valid values for this tool's own zone filter."New value: +"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 — pass those to nws_get_zone_forecast. All types are valid values for the nws_search_alerts zone filter."
      • changedOutput schema / properties / alerts / items / properties / id / description
        Previous value: -"Alert ID"New value: +"Alert message ID. Pass it unchanged as alert_id to nws_get_alert to fetch this message again."
      • changedOutput schema / properties / alerts / items / properties / references / description
        Previous value: -"Prior alert messages this one supersedes, newest first. Empty for an original issuance — never inferred when NWS reports none."New value: +"Prior alert messages this one supersedes, newest first by sent instant; messages sent at the same instant keep the order NWS lists them in, and one whose sent time does not parse comes last. Empty for an original issuance — never inferred when NWS reports none. nws_get_alert fetches any of them by identifier. Every reference sharing the newest sent time is an immediate predecessor (an update can merge several earlier segments); the first is one of them."
      • changedOutput schema / properties / alerts / items / properties / references / items / properties / identifier / description
        Previous value: -"CAP identifier of the superseded message"New value: +"CAP identifier of the superseded message. Pass it unchanged as alert_id to nws_get_alert to read that message, which carries its own references."
      • changedOutput schema / properties / alerts / items / properties / status / description
        Previous value: -"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 — with the default filter every returned alert reads \"Actual\"."New value: +"This alert's own CAP status as reported by NWS (\"Actual\", \"Exercise\", \"System\", \"Test\", \"Draft\"). Distinct from the nws_search_alerts status input filter, which selects which alerts a search covers — with that filter at its default, every alert a search returns reads \"Actual\"."
      • addedOutput schema / properties / effectiveLimit
        Added value: +{
        +  "description": "The page size applied instead of requestedLimit; continued pages keep it. Absent when the limit was within the cap.",
        +  "type": "number"
        +}
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"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."New value: +"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, outside valid bounds, or outside NWS coverage (US states, territories, and adjacent marine areas). `invalid_zone`: Zone code does not match the NWS zone-code shape. Other values are possible when a failure originates below the handler."
      • changedOutput schema / properties / notice / description
        Previous value: -"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."New value: +"Guidance when the requested limit exceeded the page cap, 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."
      • addedOutput schema / properties / requestedLimit
        Added value: +{
        +  "description": "The limit asked for, when it exceeded the 25-alert page cap; absent otherwise.",
        +  "type": "number"
        +}
  4. 6 tool updates
    • Addednws_get_alert_counts
    • Changednws_get_forecast2 fields changed
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"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. Other values are possible when a failure originates below the handler."New value: +"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."
      • changedOutput schema / properties / error / properties / data / properties / reason / examples
        Previous value: -[
        -  "out_of_scope",
        -  "marine_forecast_unsupported"
        -]New value: +[
        +  "out_of_scope",
        +  "marine_forecast_unsupported",
        +  "no_forecast_grid"
        +]
    • Addednws_get_observation_history
    • Changednws_get_observations2 fields changed
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `missing_input`: Neither station_id nor a (latitude, longitude) pair was provided. `blank_station_id`: station_id was provided with a blank value. `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."New value: +"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."
      • changedOutput schema / properties / error / properties / data / properties / reason / examples
        Previous value: -[
        -  "missing_input",
        -  "blank_station_id",
        -  "station_not_found",
        -  "no_observations",
        -  "no_stations_nearby",
        -  "out_of_scope"
        -]New value: +[
        +  "missing_input",
        +  "station_not_found",
        +  "no_observations",
        +  "no_stations_nearby",
        +  "out_of_scope"
        +]
    • Changednws_get_zone_forecast1 field changed
      • changedOutput schema / properties / zoneId / description
        Previous value: -"Zone ID as provided (e.g., \"WAZ315\")."New value: +"Zone ID, uppercased (e.g., \"WAZ315\" for input \"waz315\")."
    • Changednws_search_alerts2 fields changed
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"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. `blank_location_filter`: An area, point, or zone filter was provided with a blank value. `empty_filter_array`: An event, severity, urgency, certainty, or region filter was provided with no usable entries. Other values are possible when a failure originates below the handler."New value: +"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."
      • changedOutput schema / properties / error / properties / data / properties / reason / examples
        Previous value: -[
        -  "mutually_exclusive_filters",
        -  "invalid_area_code",
        -  "invalid_point",
        -  "invalid_zone",
        -  "blank_location_filter",
        -  "empty_filter_array"
        -]New value: +[
        +  "mutually_exclusive_filters",
        +  "invalid_area_code",
        +  "invalid_point",
        +  "invalid_zone"
        +]
  5. 2 tool updates
    • Changednws_get_forecast2 fields changed
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"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."New value: +"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. Other values are possible when a failure originates below the handler."
      • changedOutput schema / properties / error / properties / data / properties / reason / examples
        Previous value: -[
        -  "out_of_scope"
        -]New value: +[
        +  "out_of_scope",
        +  "marine_forecast_unsupported"
        +]
    • Changednws_get_zone_forecast2 fields changed
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `zone_not_found`: Zone code is not a valid public forecast zone or has no forecast available. Other values are possible when a failure originates below the handler."New value: +"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."
      • changedOutput schema / properties / error / properties / data / properties / reason / examples
        Previous value: -[
        -  "zone_not_found"
        -]New value: +[
        +  "zone_not_found",
        +  "zone_forecast_unavailable",
        +  "marine_forecast_unsupported"
        +]
  6. 6 tool updates
    • Changednws_find_stations1 field changed
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"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."New value: +"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."
    • Changednws_get_forecast1 field changed
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"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."New value: +"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."
    • Changednws_get_observations1 field changed
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `missing_input`: Neither station_id nor a (latitude, longitude) pair was provided `blank_station_id`: station_id was provided with a blank value `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."New value: +"Machine-readable failure mode. Declared by this tool: `missing_input`: Neither station_id nor a (latitude, longitude) pair was provided. `blank_station_id`: station_id was provided with a blank value. `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."
    • Changednws_get_office_discussion1 field changed
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"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."New value: +"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."
    • Changednws_get_zone_forecast1 field changed
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `zone_not_found`: Zone code is not a valid public forecast zone or has no forecast available Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `zone_not_found`: Zone code is not a valid public forecast zone or has no forecast available. Other values are possible when a failure originates below the handler."
    • Changednws_search_alerts1 field changed
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"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 `blank_location_filter`: An area, point, or zone filter was provided with a blank value `empty_filter_array`: An event, severity, urgency, certainty, or region filter was provided with no usable entries Other values are possible when a failure originates below the handler."New value: +"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. `blank_location_filter`: An area, point, or zone filter was provided with a blank value. `empty_filter_array`: An event, severity, urgency, certainty, or region filter was provided with no usable entries. Other values are possible when a failure originates below the handler."
  7. 1 tool update
    • Changednws_search_alerts1 field changed
      • changedInput schema / properties / cursor / description
        Previous value: -"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 /alerts/active, so alerts are contiguous within one response but not across calls — the active set changes continuously as alerts are issued and expire, so a continued page covers the collection as it stands at that moment."New value: +"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 — the active set changes continuously as alerts are issued and expire, so a continued page covers the collection as it stands at that moment."
  8. 4 tool updates
    • Changednws_find_stations2 fields changed
      • removedOutput schema / properties / stations / items / properties / elevationM / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / stations / items / properties / elevationM / type
        Added value: +[
        +  "number",
        +  "null"
        +]
    • Changednws_get_forecast6 fields changed
      • removedOutput schema / properties / periods / items / properties / dewpointC / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / periods / items / properties / dewpointC / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / periods / items / properties / precipChancePct / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / periods / items / properties / precipChancePct / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / periods / items / properties / relativeHumidityPct / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / periods / items / properties / relativeHumidityPct / type
        Added value: +[
        +  "number",
        +  "null"
        +]
    • Changednws_get_observations24 fields changed
      • removedOutput schema / properties / barometricPressurePa / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / barometricPressurePa / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / cloudLayers / items / properties / baseM / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / cloudLayers / items / properties / baseM / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / dewpointC / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / dewpointC / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / heatIndexC / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / heatIndexC / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / relativeHumidityPct / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / relativeHumidityPct / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / temperatureC / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / temperatureC / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / timeZone / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / timeZone / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / visibilityM / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / visibilityM / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / windChillC / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / windChillC / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / windDirectionDeg / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / windDirectionDeg / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / windGustKmh / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / windGustKmh / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / windSpeedKmh / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / windSpeedKmh / type
        Added value: +[
        +  "number",
        +  "null"
        +]
    • Changednws_search_alerts12 fields changed
      • removedOutput schema / properties / alerts / items / properties / description / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / alerts / items / properties / description / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / alerts / items / properties / ends / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / alerts / items / properties / ends / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / alerts / items / properties / expires / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / alerts / items / properties / expires / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / alerts / items / properties / headline / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / alerts / items / properties / headline / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / alerts / items / properties / instruction / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / alerts / items / properties / instruction / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / alerts / items / properties / onset / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / alerts / items / properties / onset / type
        Added value: +[
        +  "string",
        +  "null"
        +]
  9. 7 tool updates
    • Changednws_find_stations6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "stations",
        +      "totalCount",
        +      "shown"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Present when the call failed. Absent on success.",
        +  "properties": {
        +    "code": {
        +      "description": "JSON-RPC error code for this failure.",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "data": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "reason": {
        +          "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.",
        +          "examples": [
        +            "out_of_scope"
        +          ],
        +          "type": "string"
        +        },
        +        "recovery": {
        +          "additionalProperties": {},
        +          "description": "Actionable next step for the caller.",
        +          "properties": {
        +            "hint": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "hint"
        +          ],
        +          "type": "object"
        +        },
        +        "retryable": {
        +          "description": "Whether retrying may succeed.",
        +          "type": "boolean"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "message": {
        +      "description": "Human-readable description of what went wrong.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "code",
        +    "message"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "stations",
        -  "totalCount",
        -  "shown"
        -]
    • Changednws_get_forecast6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "location",
        +      "generatedAt",
        +      "periods",
        +      "totalCount",
        +      "shown",
        +      "mode"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Present when the call failed. Absent on success.",
        +  "properties": {
        +    "code": {
        +      "description": "JSON-RPC error code for this failure.",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "data": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "reason": {
        +          "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.",
        +          "examples": [
        +            "out_of_scope"
        +          ],
        +          "type": "string"
        +        },
        +        "recovery": {
        +          "additionalProperties": {},
        +          "description": "Actionable next step for the caller.",
        +          "properties": {
        +            "hint": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "hint"
        +          ],
        +          "type": "object"
        +        },
        +        "retryable": {
        +          "description": "Whether retrying may succeed.",
        +          "type": "boolean"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "message": {
        +      "description": "Human-readable description of what went wrong.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "code",
        +    "message"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "location",
        -  "generatedAt",
        -  "periods",
        -  "totalCount",
        -  "shown",
        -  "mode"
        -]
    • Changednws_get_observations6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "stationId",
        +      "stationName",
        +      "timestamp",
        +      "timeZone",
        +      "textDescription",
        +      "temperatureC",
        +      "dewpointC",
        +      "windSpeedKmh",
        +      "windDirectionDeg",
        +      "windGustKmh",
        +      "barometricPressurePa",
        +      "visibilityM",
        +      "relativeHumidityPct",
        +      "heatIndexC",
        +      "windChillC",
        +      "cloudLayers",
        +      "station",
        +      "observedAt"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Present when the call failed. Absent on success.",
        +  "properties": {
        +    "code": {
        +      "description": "JSON-RPC error code for this failure.",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "data": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "reason": {
        +          "description": "Machine-readable failure mode. Declared by this tool: `missing_input`: Neither station_id nor a (latitude, longitude) pair was provided `blank_station_id`: station_id was provided with a blank value `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.",
        +          "examples": [
        +            "missing_input",
        +            "blank_station_id",
        +            "station_not_found",
        +            "no_observations",
        +            "no_stations_nearby",
        +            "out_of_scope"
        +          ],
        +          "type": "string"
        +        },
        +        "recovery": {
        +          "additionalProperties": {},
        +          "description": "Actionable next step for the caller.",
        +          "properties": {
        +            "hint": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "hint"
        +          ],
        +          "type": "object"
        +        },
        +        "retryable": {
        +          "description": "Whether retrying may succeed.",
        +          "type": "boolean"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "message": {
        +      "description": "Human-readable description of what went wrong.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "code",
        +    "message"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "stationId",
        -  "stationName",
        -  "timestamp",
        -  "timeZone",
        -  "textDescription",
        -  "temperatureC",
        -  "dewpointC",
        -  "windSpeedKmh",
        -  "windDirectionDeg",
        -  "windGustKmh",
        -  "barometricPressurePa",
        -  "visibilityM",
        -  "relativeHumidityPct",
        -  "heatIndexC",
        -  "windChillC",
        -  "cloudLayers",
        -  "station",
        -  "observedAt"
        -]
    • Changednws_get_office_discussion6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "issuanceTime",
        +      "issuingOffice",
        +      "productCode",
        +      "productName",
        +      "productText",
        +      "wmoCollectiveId"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Present when the call failed. Absent on success.",
        +  "properties": {
        +    "code": {
        +      "description": "JSON-RPC error code for this failure.",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "data": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "reason": {
        +          "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.",
        +          "examples": [
        +            "no_products"
        +          ],
        +          "type": "string"
        +        },
        +        "recovery": {
        +          "additionalProperties": {},
        +          "description": "Actionable next step for the caller.",
        +          "properties": {
        +            "hint": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "hint"
        +          ],
        +          "type": "object"
        +        },
        +        "retryable": {
        +          "description": "Whether retrying may succeed.",
        +          "type": "boolean"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "message": {
        +      "description": "Human-readable description of what went wrong.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "code",
        +    "message"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "issuanceTime",
        -  "issuingOffice",
        -  "productCode",
        -  "productName",
        -  "productText",
        -  "wmoCollectiveId"
        -]
    • Changednws_get_zone_forecast6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "zoneId",
        +      "updated",
        +      "periods",
        +      "periodCount"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Present when the call failed. Absent on success.",
        +  "properties": {
        +    "code": {
        +      "description": "JSON-RPC error code for this failure.",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "data": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "reason": {
        +          "description": "Machine-readable failure mode. Declared by this tool: `zone_not_found`: Zone code is not a valid public forecast zone or has no forecast available Other values are possible when a failure originates below the handler.",
        +          "examples": [
        +            "zone_not_found"
        +          ],
        +          "type": "string"
        +        },
        +        "recovery": {
        +          "additionalProperties": {},
        +          "description": "Actionable next step for the caller.",
        +          "properties": {
        +            "hint": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "hint"
        +          ],
        +          "type": "object"
        +        },
        +        "retryable": {
        +          "description": "Whether retrying may succeed.",
        +          "type": "boolean"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "message": {
        +      "description": "Human-readable description of what went wrong.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "code",
        +    "message"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "zoneId",
        -  "updated",
        -  "periods",
        -  "periodCount"
        -]
    • Changednws_list_alert_types6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "count",
        +      "eventTypes"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Present when the call failed. Absent on success.",
        +  "properties": {
        +    "code": {
        +      "description": "JSON-RPC error code for this failure.",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "data": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "reason": {
        +          "description": "Machine-readable failure mode.",
        +          "type": "string"
        +        },
        +        "recovery": {
        +          "additionalProperties": {},
        +          "description": "Actionable next step for the caller.",
        +          "properties": {
        +            "hint": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "hint"
        +          ],
        +          "type": "object"
        +        },
        +        "retryable": {
        +          "description": "Whether retrying may succeed.",
        +          "type": "boolean"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "message": {
        +      "description": "Human-readable description of what went wrong.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "code",
        +    "message"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "count",
        -  "eventTypes"
        -]
    • Changednws_search_alerts6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "alerts",
        +      "totalCount",
        +      "shown",
        +      "appliedFilters"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Present when the call failed. Absent on success.",
        +  "properties": {
        +    "code": {
        +      "description": "JSON-RPC error code for this failure.",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "data": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "reason": {
        +          "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 `blank_location_filter`: An area, point, or zone filter was provided with a blank value `empty_filter_array`: An event, severity, urgency, certainty, or region filter was provided with no usable entries Other values are possible when a failure originates below the handler.",
        +          "examples": [
        +            "mutually_exclusive_filters",
        +            "invalid_area_code",
        +            "invalid_point",
        +            "invalid_zone",
        +            "blank_location_filter",
        +            "empty_filter_array"
        +          ],
        +          "type": "string"
        +        },
        +        "recovery": {
        +          "additionalProperties": {},
        +          "description": "Actionable next step for the caller.",
        +          "properties": {
        +            "hint": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "hint"
        +          ],
        +          "type": "object"
        +        },
        +        "retryable": {
        +          "description": "Whether retrying may succeed.",
        +          "type": "boolean"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "message": {
        +      "description": "Human-readable description of what went wrong.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "code",
        +    "message"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "alerts",
        -  "totalCount",
        -  "shown",
        -  "appliedFilters"
        -]
  10. 3 tool updates
    • Changednws_find_stations5 fields changed
      • changedInput schema / properties / limit / description
        Previous value: -"Max stations per page (1-50). totalFound still reports every station near the point, so pass the returned nextCursor as cursor to reach the rest."New value: +"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."
      • addedOutput schema / properties / shown
        Added value: +{
        +  "description": "Number of stations returned in this page",
        +  "type": "number"
        +}
      • changedOutput schema / properties / totalCount / description
        Previous value: -"Number of stations returned in this page"New value: +"Total observation stations available near this location before the page limit was applied — 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."
      • removedOutput schema / properties / totalFound
        Removed value: -{
        -  "description": "Total observation stations available near this location before the page limit was applied. Same value on every page of one query.",
        -  "type": "number"
        -}
      • changedOutput schema / required
        Previous value: -[
        -  "stations",
        -  "totalFound",
        -  "totalCount"
        -]New value: +[
        +  "stations",
        +  "totalCount",
        +  "shown"
        +]
    • Changednws_get_forecast5 fields changed
      • removedOutput schema / properties / periodCount
        Removed value: -{
        -  "description": "Number of forecast periods in this page (at most 48).",
        -  "type": "number"
        -}
      • addedOutput schema / properties / shown
        Added value: +{
        +  "description": "Number of forecast periods in this page (at most 48).",
        +  "type": "number"
        +}
      • addedOutput schema / properties / totalCount
        Added value: +{
        +  "description": "Total forecast periods available upstream before the page window was applied — NOT the number in this page, which is shown. Compare it against shown to tell whether periods were withheld.",
        +  "type": "number"
        +}
      • removedOutput schema / properties / totalPeriodCount
        Removed value: -{
        -  "description": "Total forecast periods available upstream before the page window was applied.",
        -  "type": "number"
        -}
      • changedOutput schema / required
        Previous value: -[
        -  "location",
        -  "generatedAt",
        -  "periods",
        -  "periodCount",
        -  "totalPeriodCount",
        -  "mode"
        -]New value: +[
        +  "location",
        +  "generatedAt",
        +  "periods",
        +  "totalCount",
        +  "shown",
        +  "mode"
        +]
    • Changednws_search_alerts5 fields changed
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum number of alerts to include in this page (1-25, default 25). totalCount still reports the full number of 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."New value: +"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."
      • addedOutput schema / properties / shown
        Added value: +{
        +  "description": "Number of alerts included in this response",
        +  "type": "number"
        +}
      • removedOutput schema / properties / shownCount
        Removed value: -{
        -  "description": "Number of alerts included in this response",
        -  "type": "number"
        -}
      • changedOutput schema / properties / totalCount / description
        Previous value: -"Total number of matching alerts in this fetch, before the page window is applied"New value: +"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."
      • changedOutput schema / required
        Previous value: -[
        -  "alerts",
        -  "totalCount",
        -  "shownCount",
        -  "appliedFilters"
        -]New value: +[
        +  "alerts",
        +  "totalCount",
        +  "shown",
        +  "appliedFilters"
        +]
  11. 2 tool updates
    • Changednws_get_zone_forecast1 field changed
      • changedInput schema / properties / zone_id / description
        Previous value: -"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 in \"affectedZones\" by nws_search_alerts. Format: two-letter state + \"Z\" + three-digit number."New value: +"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."
    • Changednws_search_alerts17 fields changed
      • addedInput schema / properties / region
        Added value: +{
        +  "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 — a land alert never matches. Mutually exclusive with area, point, zone, and region_type.",
        +  "items": {
        +    "enum": [
        +      "AL",
        +      "AT",
        +      "GL",
        +      "GM",
        +      "PA",
        +      "PI"
        +    ],
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / region_type
        Added value: +{
        +  "description": "Restrict to land-based or marine alerts. Mutually exclusive with area, point, zone, and region.",
        +  "enum": [
        +    "Land",
        +    "Marine"
        +  ],
        +  "type": "string"
        +}
      • changedOutput schema / properties / alerts / items / properties / affectedZones / description
        Previous value: -"Affected zone codes"New value: +"Affected zones, each with the zone type that decides where it can chain"
      • addedOutput schema / properties / alerts / items / properties / affectedZones / items / additionalProperties
        Added value: +false
      • addedOutput schema / properties / alerts / items / properties / affectedZones / items / description
        Added value: +"Affected zone with its NWS zone type"
      • addedOutput schema / properties / alerts / items / properties / affectedZones / items / properties
        Added value: +{
        +  "code": {
        +    "description": "Zone code, e.g. \"WAZ558\" (forecast) or \"WAC033\" (county)",
        +    "type": "string"
        +  },
        +  "type": {
        +    "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 — pass those to nws_get_zone_forecast. All types are valid values for this tool's own zone filter.",
        +    "type": "string"
        +  }
        +}
      • addedOutput schema / properties / alerts / items / properties / affectedZones / items / required
        Added value: +[
        +  "code",
        +  "type"
        +]
      • changedOutput schema / properties / alerts / items / properties / affectedZones / items / type
        Previous value: -"string"New value: +"object"
      • addedOutput schema / properties / alerts / items / properties / description / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / alerts / items / properties / description / description
        Previous value: -"Full alert description"New value: +"Full alert description; null when NWS publishes the alert without one"
      • removedOutput schema / properties / alerts / items / properties / description / type
        Removed value: -"string"
      • addedOutput schema / properties / alerts / items / properties / effective
        Added value: +{
        +  "description": "Message effective time (ISO 8601) — 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.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / alerts / items / properties / messageType
        Added value: +{
        +  "description": "CAP message type: \"Alert\" for an original issuance, \"Update\" for a revision of an earlier message, \"Cancel\" for a cancellation.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / alerts / items / properties / references
        Added value: +{
        +  "description": "Prior alert messages this one supersedes, newest first. Empty for an original issuance — never inferred when NWS reports none.",
        +  "items": {
        +    "additionalProperties": false,
        +    "description": "One prior message this alert supersedes",
        +    "properties": {
        +      "identifier": {
        +        "description": "CAP identifier of the superseded message",
        +        "type": "string"
        +      },
        +      "sent": {
        +        "description": "When the superseded message was issued (ISO 8601)",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "identifier",
        +      "sent"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / alerts / items / properties / sent
        Added value: +{
        +  "description": "Message issuance time (ISO 8601) — when the office transmitted this CAP message. Describes the message, not the hazard: use it to judge how stale the report is.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / alerts / items / properties / status
        Added value: +{
        +  "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 — with the default filter every returned alert reads \"Actual\".",
        +  "type": "string"
        +}
      • changedOutput schema / properties / alerts / items / required
        Previous value: -[
        -  "id",
        -  "event",
        -  "headline",
        -  "description",
        -  "instruction",
        -  "severity",
        -  "urgency",
        -  "certainty",
        -  "areaDesc",
        -  "onset",
        -  "ends",
        -  "expires",
        -  "senderName",
        -  "affectedZones"
        -]New value: +[
        +  "id",
        +  "event",
        +  "headline",
        +  "description",
        +  "instruction",
        +  "severity",
        +  "urgency",
        +  "certainty",
        +  "areaDesc",
        +  "sent",
        +  "effective",
        +  "onset",
        +  "ends",
        +  "expires",
        +  "status",
        +  "messageType",
        +  "references",
        +  "senderName",
        +  "affectedZones"
        +]
  12. 3 tool updates
    • Changednws_find_stations6 fields changed
      • addedInput schema / properties / cursor
        Added value: +{
        +  "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.",
        +  "type": "string"
        +}
      • changedInput schema / properties / limit / description
        Previous value: -"Max stations to return (1-50)."New value: +"Max stations per page (1-50). totalFound still reports every station near the point, so pass the returned nextCursor as cursor to reach the rest."
      • addedOutput schema / properties / nextCursor
        Added value: +{
        +  "description": "Opaque token for the next page of stations — pass it back as `cursor`. Omitted when this is the last page.",
        +  "type": "string"
        +}
      • changedOutput schema / properties / notice / description
        Previous value: -"Guidance when no stations were found near the requested coordinates."New value: +"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."
      • changedOutput schema / properties / totalCount / description
        Previous value: -"Number of stations returned (respects the limit parameter)"New value: +"Number of stations returned in this page"
      • changedOutput schema / properties / totalFound / description
        Previous value: -"Total observation stations available near this location before the limit was applied"New value: +"Total observation stations available near this location before the page limit was applied. Same value on every page of one query."
    • Changednws_get_forecast6 fields changed
      • addedInput schema / properties / cursor
        Added value: +{
        +  "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.",
        +  "type": "string"
        +}
      • changedInput schema / properties / hourly / description
        Previous value: -"If true, returns hourly forecast (next 48 one-hour periods) instead of 12-hour named periods (14 periods). Hourly includes dewpoint and relative humidity."New value: +"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."
      • addedOutput schema / properties / nextCursor
        Added value: +{
        +  "description": "Opaque token for the next page of periods — pass it back as `cursor`. Omitted when this is the last page.",
        +  "type": "string"
        +}
      • changedOutput schema / properties / notice / description
        Previous value: -"Set when upstream returned more periods than the cap — states how many periods were omitted."New value: +"Set when periods remain beyond this page, or when the supplied cursor points past the end of the period array."
      • changedOutput schema / properties / periodCount / description
        Previous value: -"Number of forecast periods returned (capped at 48)."New value: +"Number of forecast periods in this page (at most 48)."
      • changedOutput schema / properties / totalPeriodCount / description
        Previous value: -"Total forecast periods available upstream before the cap was applied."New value: +"Total forecast periods available upstream before the page window was applied."
    • Changednws_search_alerts6 fields changed
      • addedInput schema / properties / cursor
        Added value: +{
        +  "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 /alerts/active, so alerts are contiguous within one response but not across calls — the active set changes continuously as alerts are issued and expire, so a continued page covers the collection as it stands at that moment.",
        +  "type": "string"
        +}
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum number of alerts to include in the response (1-25, default 25). totalCount still reports the full number of matches, so a small limit returns a digest of broad or national searches without dropping the total."New value: +"Maximum number of alerts to include in this page (1-25, default 25). totalCount still reports the full number of 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."
      • changedOutput schema / properties / alerts / description
        Previous value: -"Matching alerts (capped at the requested limit, max 25)"New value: +"Matching alerts for this page (at most the requested limit, max 25)"
      • addedOutput schema / properties / nextCursor
        Added value: +{
        +  "description": "Opaque token for the next page of matches — pass it back as `cursor`. Omitted when this is the last page.",
        +  "type": "string"
        +}
      • changedOutput schema / properties / notice / description
        Previous value: -"Guidance when no alerts matched — echoes applied filters and suggests how to broaden the search."New value: +"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."
      • changedOutput schema / properties / totalCount / description
        Previous value: -"Total number of matching alerts before the limit/cap is applied"New value: +"Total number of matching alerts in this fetch, before the page window is applied"
  13. 1 tool update
    • Changednws_get_forecast5 fields changed
      • changedInput schema / properties / hourly / description
        Previous value: -"If true, returns hourly forecast (~156 periods) instead of 12-hour named periods (14 periods). Hourly includes dewpoint and relative humidity."New value: +"If true, returns hourly forecast (next 48 one-hour periods) instead of 12-hour named periods (14 periods). Hourly includes dewpoint and relative humidity."
      • addedOutput schema / properties / notice
        Added value: +{
        +  "description": "Set when upstream returned more periods than the cap — states how many periods were omitted.",
        +  "type": "string"
        +}
      • changedOutput schema / properties / periodCount / description
        Previous value: -"Number of forecast periods returned"New value: +"Number of forecast periods returned (capped at 48)."
      • addedOutput schema / properties / totalPeriodCount
        Added value: +{
        +  "description": "Total forecast periods available upstream before the cap was applied.",
        +  "type": "number"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "location",
        -  "generatedAt",
        -  "periods",
        -  "periodCount",
        -  "mode"
        -]New value: +[
        +  "location",
        +  "generatedAt",
        +  "periods",
        +  "periodCount",
        +  "totalPeriodCount",
        +  "mode"
        +]
  14. 2 tool updates
    • Changednws_get_forecast2 fields changed
      • changedInput schema / properties / latitude / description
        Previous value: -"Latitude in decimal degrees (e.g., 47.6062). Truncated to 4 decimal places."New value: +"Latitude in decimal degrees (e.g., 47.6062)."
      • changedInput schema / properties / longitude / description
        Previous value: -"Longitude in decimal degrees (e.g., -122.3321). Truncated to 4 decimal places."New value: +"Longitude in decimal degrees (e.g., -122.3321)."
    • Changednws_search_alerts3 fields changed
      • addedInput schema / properties / limit
        Added value: +{
        +  "default": 25,
        +  "description": "Maximum number of alerts to include in the response (1-25, default 25). totalCount still reports the full number of matches, so a small limit returns a digest of broad or national searches without dropping the total.",
        +  "maximum": 25,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • changedOutput schema / properties / alerts / description
        Previous value: -"Matching alerts (capped at 25)"New value: +"Matching alerts (capped at the requested limit, max 25)"
      • changedOutput schema / properties / totalCount / description
        Previous value: -"Total number of matching alerts before the 25-alert cap"New value: +"Total number of matching alerts before the limit/cap is applied"
  15. 1 tool update
    • Changednws_search_alerts2 fields changed
      • addedOutput schema / properties / alerts / items / properties / ends
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Hazard end (ISO 8601) — when the hazard is expected to end; null when open-ended (\"until further notice\"). Distinct from expires, which is the message-refresh time."
        +}
      • changedOutput schema / properties / alerts / items / required
        Previous value: -[
        -  "id",
        -  "event",
        -  "headline",
        -  "description",
        -  "instruction",
        -  "severity",
        -  "urgency",
        -  "certainty",
        -  "areaDesc",
        -  "onset",
        -  "expires",
        -  "senderName",
        -  "affectedZones"
        -]New value: +[
        +  "id",
        +  "event",
        +  "headline",
        +  "description",
        +  "instruction",
        +  "severity",
        +  "urgency",
        +  "certainty",
        +  "areaDesc",
        +  "onset",
        +  "ends",
        +  "expires",
        +  "senderName",
        +  "affectedZones"
        +]

Related MCP Connectors

Related MCP Servers

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.