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.8% over 59 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

TDQS

A4.1/5.0

Scored across 9 tools

Disambiguation4/5

Each tool targets a distinct data source or action, and the descriptions explicitly delineate boundaries (e.g., get_forecast by location vs get_zone_forecast by zone code vs get_office_discussion as a narrative WFO product; search_alerts vs get_alert_counts vs list_alert_types). The three forecast variants and three alert variants are close cousins, but the descriptions do enough to keep an agent from misselecting, leaving only mild residual overlap.

Naming Consistency5/5

Every tool uses the nws_ prefix with a consistent verb_noun pattern (nws_find_stations, nws_get_forecast, nws_search_alerts, nws_list_alert_types). No mixing of conventions, casing, or verb styles.

Tool Count5/5

Nine tools is well-scoped for a read-only NWS API wrapper, with each tool covering a distinct product or query (stations, observations, history, forecast, zone text, discussion, alert search/counts/types). No redundant or filler tools.

Completeness4/5

The surface covers the full alert-to-forecast chain (stations → observations → history; alerts → zones → zone forecast; WFO discussions), leaving no obvious dead ends. Gaps like radar imagery, climate/archival products, or multi-day history beyond the ~7-day window are minor and outside the core domain, so agents can work around them.

Available Tools

9 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax stations per page (1-50). 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

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when the call failed. Absent on success.
shownNoNumber of stations returned in this page
noticeNoGuidance 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.

TDQS

A4.3/5.0
Behavior4/5

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

The readOnlyHint annotation already communicates safety, and the description adds meaningful behavioral detail: stations are returned sorted by proximity and include distance and bearing. This is useful beyond the annotation, though it does not discuss error conditions or rate limits.

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 with no filler: the core function, the output behavior, and the intended use case are all front-loaded. Every sentence earns its place.

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?

The tool is simple, annotations cover the read-only nature, the input schema is fully descriptive, and an output schema exists. The description provides the one missing piece—why an agent would call this tool and what it returns—making it complete for selection and invocation.

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 fully documents latitude, longitude, limit, and cursor. The description adds no parameter-specific semantics beyond 'near a location', which maps to latitude/longitude but does not exceed what the schema provides.

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 uses a specific verb ('Find') with a clear resource ('weather observation stations near a location') and clearly identifies the downstream purpose: discovering station IDs for nws_get_observations. This distinguishes it from the sibling forecast, alert, and discussion tools without ambiguity.

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?

It explicitly states when this tool should be used: to discover station IDs for nws_get_observations. It does not list exclusions or alternative tools, but the discovery role is clear and sufficient for this simple tool.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
cursorNoOpaque 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.
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.
latitudeYesLatitude in decimal degrees (e.g., 47.6062).
longitudeYesLongitude in decimal degrees (e.g., -122.3321).

Output Schema

ParametersJSON 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).
noticeNoSet when periods remain beyond this page, or when the supplied cursor points past the end of the period array.
periodsNoForecast periods
locationNoResolved location metadata
nextCursorNoOpaque token for the next page of periods — pass it back as `cursor`. 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.
generatedAtNoWhen the forecast was generated (ISO 8601)

TDQS

B3.2/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, and an output schema exists, so return values need not be explained. The description adds the useful behavioral detail that results come as named 12-hour periods by default or hourly breakdowns, but says nothing about pagination or data freshness beyond what the cursor parameter already documents.

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?

Two tight sentences with the core action front-loaded and the output-mode distinction second. No filler, though the space given to return format is partly redundant given the output schema.

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

Completeness3/5

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

With readOnlyHint, a full output schema, and 100% parameter coverage, the definition is close to complete for a forecast fetch. The notable gap is the absence of any routing between this point forecast and the sibling nws_get_zone_forecast, which an agent must otherwise infer.

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 fully documents latitude, longitude, hourly, and cursor, including ranges, defaults, and the continuation token's behavior. The description restates the hourly-vs-12-hour mode but adds no syntax or meaning beyond the schema, making the baseline 3 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') plus scope ('for a US location'), and clarifies the two output modes. It does not distinguish itself from the close sibling nws_get_zone_forecast, leaving the point-forecast-vs-zone-forecast choice unexplained.

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 or when-not guidance and never names the obvious alternative, nws_get_zone_forecast, or when lat/lon point forecasts are preferable. Only implicit cues ('US location', the default/hourly switch) hint at appropriate use.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
endNoTime to stop before (exclusive), in the same format as start. Omit to start from the most recent observation.
limitNoObservations per page (1-100), newest first. When a page fills the limit, pass its nextCursor back as cursor for older observations.
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 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

ParametersJSON Schema
NameRequiredDescription
capNoThe page limit this page filled, when truncated is true
errorNoPresent when the call failed. Absent on success.
shownNoNumber of observations returned in this page
noticeNoGuidance 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.
timeZoneNoStation time zone when known
stationIdNoObservation station ID, uppercased
truncatedNoTrue when this page filled the limit and older observations in the window may remain; continue with nextCursor.
nextCursorNoOpaque token for the next, older page — pass it back as cursor. Present only when this page filled the limit; omitted on the last page.
stationNameNoStation name
observationsNoObservations in the window, newest first

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds genuinely useful operational context beyond that: ~7-day retention per station, roughly 5-minute reporting cadence at busy airports yielding 100+ observations per day, and an assurance that paging neither repeats nor skips observations. It does not mention rate limits or error behavior, keeping it short of a 5.

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 tight sentences, front-loaded with the core purpose before retention, volume, and paging details. Every clause carries operational information; nothing is filler or repetition of the tool name.

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?

With an output schema present, return-value documentation is unnecessary, and the description covers everything else an agent needs: how to obtain a station ID, how far back data reaches, expected data volume, and full pagination mechanics.

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 semantic constraints the schema doesn't spell out as directly: start is inclusive, end is exclusive, and nextCursor drives backward paging. It does not restate limit bounds or the cursor's opacity, which the schema already covers.

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 (recent observation history for a station, newest first) and explicitly differentiates itself from the sibling nws_get_observations by framing the result as 'the trend behind the single latest reading' that sibling returns. An agent can pick between the two 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?

Gives explicit when-to-use conditions (trend analysis vs. a single reading), names the discovery alternative (nws_find_stations to get a station ID near a coordinate), and explains how to narrow (start/end) and how to page back (nextCursor). No alternatives are left to inference.

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").

ParametersJSON Schema
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

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when the call failed. Absent on success.
noticeNoGuidance when the latest observation is more than 2 hours old — data may not reflect current conditions.
stationNoStation ID that served the observation (e.g., "KSEA")
timeZoneNoStation time zone when known
dewpointCNoDewpoint in Celsius
stationIdNoObservation station ID
timestampNoObservation time (ISO 8601)
heatIndexCNoHeat index in Celsius
observedAtNoObservation timestamp (ISO 8601)
windChillCNoWind chill in Celsius
cloudLayersNoCloud layer information
stationNameNoStation name
visibilityMNoVisibility in meters
windGustKmhNoWind gust in km/h
temperatureCNoTemperature in Celsius
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

TDQS

A3.5/5.0
Behavior3/5

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

readOnlyHint=true already establishes this is a safe read, so the description only needs to add context. It adds that coordinates trigger automatic nearest-station resolution, but says nothing about freshness/latency of observations or failure behavior when no station resolves. Adequate but not rich.

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?

Two sentences, no filler, with the core purpose front-loaded and the input modes following. Slightly terse given the tool's alternatives, but every clause earns its place.

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, return values need no explanation, and readOnlyHint covers the safety profile. The description covers both input paths adequately; only the absence of explicit sibling routing keeps it from being fully complete.

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, and station_id thoroughly (including the 'ignored if station_id is provided' precedence). The description restates the two input modes and the auto-resolution behavior, adding little beyond the schema; baseline 3 applies.

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+resource ('Get current weather observations') and sharpens it with 'actual measured conditions,' implicitly distinguishing it from nws_get_forecast (predicted) and nws_get_observation_history (past). It does not name any sibling explicitly, but the resource is unambiguous.

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

Usage Guidelines3/5

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

Explains the two input modes (coordinates with automatic station resolution, or a direct station ID), which is usable guidance, but offers no explicit when-to-use versus nws_get_forecast, nws_get_observation_history, or nws_find_stations, and states no exclusions.

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). The office code is the 3-letter WFO identifier returned as the "office" field by nws_get_forecast.

ParametersJSON Schema
NameRequiredDescriptionDefault
officeYesThree-letter Weather Forecast Office (WFO) code (e.g., "SEW" for Seattle, "LOX" for Los Angeles). Returned as the "office" field in nws_get_forecast output.
product_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.AFD

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when the call failed. Absent on success.
productCodeNoProduct type code (e.g., "AFD").
productNameNoFull product name (e.g., "Area Forecast Discussion").
productTextNoFull 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.
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.3/5.0
Behavior4/5

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

The annotations only declare readOnlyHint=true, so the description adds useful behavioral context by defining the default product, the nature of each product type, and that the office code comes from nws_get_forecast. It does not contradict the annotations and gives the agent a clearer sense of what the returned content will represent.

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 sentences: the first states the core action and default, and the second compactly lists alternative product types with brief explanations. Every sentence earns its place, and the most important information 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 two-parameter tool with a rich input schema and an output schema, the description is complete. It covers the primary action, default behavior, product-type semantics, and the source of the office code, leaving no meaningful gap for an agent to call 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%, so the schema already fully documents both parameters and the enum values. The description largely repeats this information, though it adds a useful cross-reference tying the office code to nws_get_forecast. This adds marginal context but does not significantly elevate semantics 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?

The description opens with a specific verb and resource: 'Get the latest narrative forecast product from a Weather Forecast Office (WFO).' It clearly enumerates the product types (AFD, HWO, ZFP, SPS) and explains what each one contains, making the tool's purpose unmistakable and distinct from siblings.

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 gives clear context for when to use the tool and how to select among product types, explaining the default AFD and the meaning of each alternative. It does not explicitly state when NOT to use this tool versus a sibling like nws_get_zone_forecast, but it provides enough context for an agent to make a reasonable selection.

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 a public NWS forecast zone. Returns named forecast periods (e.g., "Today", "Tonight", "Monday") with detailed narrative text — the human-readable, zone-level forecast written by local forecasters. Completes the alert-to-forecast chain: nws_search_alerts returns each affected zone in "affectedZones" as a code plus a type, and nws_find_stations returns codes in the "forecastZone" column. Only affectedZones entries with type "forecast" work here; entries typed "county" or "fire" have no text forecast upstream and will not resolve, and neither do marine forecast zones (e.g., "PZZ251", "GMZ056"). Zone codes follow the pattern XXZ### (e.g., "WAZ315" for Western Washington lowlands).

ParametersJSON Schema
NameRequiredDescriptionDefault
zone_idYesNWS 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.

Output Schema

ParametersJSON 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.6/5.0
Behavior4/5

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

With readOnlyHint already declaring the safety profile, the description adds meaningful behavioral context: the return is narrative, period-named text, and it discloses which zone inputs silently fail to resolve. It does not cover rate limits or exact error behavior, but the failure-mode disclosure is substantive.

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?

Purpose and output shape are front-loaded, followed by chaining guidance and exclusions. It is dense but every sentence carries information; slightly long, though no sentence is wasted.

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 single-parameter read tool with an output schema and readOnly annotation, the description supplies everything an agent needs: what it returns, how to obtain a valid zone_id, and which code families are unsupported. 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, but the description adds real value: the XXZ### pattern rationale, a concrete example (WAZ315), the sources of valid codes, and the critical distinction that only "forecast"-typed affectedZones entries qualify.

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+resource (get the text forecast for a public NWS forecast zone) and describes the output shape (named periods like "Today"/"Tonight" with narrative text). It clearly distinguishes itself from nws_get_forecast and nws_search_alerts by scope and by the alert-to-forecast chain it completes.

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 names the sibling tools that produce valid inputs (nws_search_alerts affectedZones, nws_find_stations forecastZone) and states the exclusive condition: only entries typed "forecast" work. It also gives clear exclusions ("county"/"fire" types and marine zones like PZZ251/GMZ056 will not resolve).

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON 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.

ParametersJSON Schema
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 (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.
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. 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.
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

ParametersJSON 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 requested limit, max 25)
noticeNoGuidance 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`. 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

TDQS

A4.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, so safety is covered. The description restates the mutual-exclusivity constraint, which is genuinely useful, but it is also duplicated in the schema's parameter descriptions, and it adds nothing about result volatility, sorting, or completeness beyond that.

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 the core action, then the filter surface, then the exclusivity constraint and the no-filter default. No filler or restatement of the tool name.

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-value documentation is unnecessary. For a 12-parameter optional-filter search tool, the description covers purpose, filter dimensions, parameter interaction constraints, and the default behavior adequately.

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 schema already carries the detail (e.g., partial/case-insensitive event matching, cursor semantics). The description still adds value by synthesizing the cross-parameter rule that area, point, zone, region_type, and region are mutually exclusive, which is not stated in one place in 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 with scope: 'Search active weather alerts (watches, warnings, advisories) across the US.' The parenthetical clarifies what counts as an alert, and the filter list makes it clearly distinct from siblings like nws_get_alert_counts or nws_list_alert_types.

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 concrete usage guidance: 'Omit all filters for a national search' and 'provide at most one' for the mutually exclusive locators. However, it never contrasts itself against the sibling tools (nws_get_alert_counts for counts, nws_list_alert_types for discovery), so the alternative-selection guidance is implied rather than stated.

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. 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"
        +]
  2. 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"
        +]
  3. 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."
  4. 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."
  5. 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"
        +]
  6. 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"
        -]
  7. 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"
        +]
  8. 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"
        +]
  9. 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"
  10. 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"
        +]
  11. 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"
  12. 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"
        +]
  13. 4 tool updates
    • Changednws_get_forecast3 fields changed
      • addedOutput schema / properties / mode
        Added value: +{
        +  "description": "Forecast mode: \"hourly\" or \"7-day\"",
        +  "type": "string"
        +}
      • addedOutput schema / properties / periodCount
        Added value: +{
        +  "description": "Number of forecast periods returned",
        +  "type": "number"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "location",
        -  "generatedAt",
        -  "periods"
        -]New value: +[
        +  "location",
        +  "generatedAt",
        +  "periods",
        +  "periodCount",
        +  "mode"
        +]
    • Changednws_get_observations4 fields changed
      • addedOutput schema / properties / notice
        Added value: +{
        +  "description": "Guidance when the latest observation is more than 2 hours old — data may not reflect current conditions.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / observedAt
        Added value: +{
        +  "description": "Observation timestamp (ISO 8601)",
        +  "type": "string"
        +}
      • addedOutput schema / properties / station
        Added value: +{
        +  "description": "Station ID that served the observation (e.g., \"KSEA\")",
        +  "type": "string"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "stationId",
        -  "stationName",
        -  "timestamp",
        -  "timeZone",
        -  "textDescription",
        -  "temperatureC",
        -  "dewpointC",
        -  "windSpeedKmh",
        -  "windDirectionDeg",
        -  "windGustKmh",
        -  "barometricPressurePa",
        -  "visibilityM",
        -  "relativeHumidityPct",
        -  "heatIndexC",
        -  "windChillC",
        -  "cloudLayers"
        -]New value: +[
        +  "stationId",
        +  "stationName",
        +  "timestamp",
        +  "timeZone",
        +  "textDescription",
        +  "temperatureC",
        +  "dewpointC",
        +  "windSpeedKmh",
        +  "windDirectionDeg",
        +  "windGustKmh",
        +  "barometricPressurePa",
        +  "visibilityM",
        +  "relativeHumidityPct",
        +  "heatIndexC",
        +  "windChillC",
        +  "cloudLayers",
        +  "station",
        +  "observedAt"
        +]
    • Addednws_get_office_discussion
    • Addednws_get_zone_forecast
  14. 2 tool updates
    • Changednws_find_stations4 fields changed
      • addedOutput schema / properties / notice
        Added value: +{
        +  "description": "Guidance when no stations were found near the requested coordinates.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / totalCount
        Added value: +{
        +  "description": "Number of stations returned (respects the limit parameter)",
        +  "type": "number"
        +}
      • addedOutput schema / properties / totalFound
        Added value: +{
        +  "description": "Total observation stations available near this location before the limit was applied",
        +  "type": "number"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "stations"
        -]New value: +[
        +  "stations",
        +  "totalFound",
        +  "totalCount"
        +]
    • Changednws_search_alerts8 fields changed
      • addedOutput schema / properties / appliedFilters
        Added value: +{
        +  "description": "Summary of applied search filters",
        +  "type": "string"
        +}
      • removedOutput schema / properties / count
        Removed value: -{
        -  "description": "Total number of matching alerts",
        -  "type": "number"
        -}
      • removedOutput schema / properties / filters
        Removed value: -{
        -  "description": "Summary of applied search filters",
        -  "type": "string"
        -}
      • addedOutput schema / properties / notice
        Added value: +{
        +  "description": "Guidance when no alerts matched — echoes applied filters and suggests how to broaden the search.",
        +  "type": "string"
        +}
      • removedOutput schema / properties / shown
        Removed value: -{
        -  "description": "Number of alerts included in this response",
        -  "type": "number"
        -}
      • addedOutput schema / properties / shownCount
        Added value: +{
        +  "description": "Number of alerts included in this response",
        +  "type": "number"
        +}
      • addedOutput schema / properties / totalCount
        Added value: +{
        +  "description": "Total number of matching alerts before the 25-alert cap",
        +  "type": "number"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "count",
        -  "shown",
        -  "filters",
        -  "alerts"
        -]New value: +[
        +  "alerts",
        +  "totalCount",
        +  "shownCount",
        +  "appliedFilters"
        +]

Related MCP Connectors

Related MCP Servers

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.