[{"slug":"ZV-2026-1446","server_name":"usgs-water.caseyjhand.com","severity":"breaking","title":"usgs-water.caseyjhand.com: Type of total on water_list_parameters changed number → integer.","summary":"[risky] Description of water_get_conditions changed (37% word delta). [risky] Field methodDescription was added to water_get_conditions output. [risky] Field methodId was added to water_get_conditions output. [risky] Enum value no_matching_method added to historicalContextStatus on water_get_conditions. [risky] Description of water_get_readings changed (37% word delta). [risky] Field totalSeries was added to water_get_readings output. [risky] Description of water_get_series changed (37% word delta). [risky] Optional field methodId was added to water_get_series; may shift model behaviour. [risky] Optional field statCd was added to water_get_series; may shift model behaviour. [risky] Field methodDescription was added to water_get_series output. [risky] Field methodId was added to water_get_series output. [risky] Field otherSeries was added to water_get_series output. [risky] Field statCd was added to water_get_series output. [risky] Field statName was added to water_get_series output. [risky] Description of water_list_parameters changed (65% word delta). [risky] Optional field query was added to water_list_parameters; may shift model behaviour. [risky] Field note was added to water_list_parameters output. [risky] Field query was added to water_list_parameters output. [risky] Field truncated was added to water_list_parameters output. [breaking] Type of total on water_list_parameters changed number → integer.","changes":[{"kind":"description_changed","tool":"water_get_conditions","after":"Get a USGS site's current reading ranked against its full period-of-record daily-mean percentiles for the same calendar day — a \"how unusual is this\" percentileClass (record-high to record-low), not a flood-stage or drought determination (this tool fetches no authoritative thresholds). The reading is instantaneous but the percentiles are daily-mean, so the ranking is approximate (see historicalContext.comparisonBasis). When the record is too short to rank, returns the reading with historicalContext=null instead of an error. A reading NWIS reports as no data (a seasonal, discontinued, dry, or malfunctioning gage) returns an empty currentValue with the qualifiers naming why, and is not ranked. When the site measures the parameter with several sensors (methods), one reading is used and named by methodId/methodDescription — from the sensor its percentile series is described as when one is, otherwise the most recent across them; water_get_readings lists every method. Use water_find_sites and water_list_parameters to resolve inputs.","before":"Get a USGS site's current reading ranked against its full period-of-record daily-mean percentiles for the same calendar day — a \"how unusual is this\" percentileClass (record-high to record-low), not a flood-stage or drought determination (this tool fetches no authoritative thresholds). The reading is instantaneous but the percentiles are daily-mean, so the ranking is approximate (see historicalContext.comparisonBasis). When the record is too short to rank, returns the reading with historicalContext=null instead of an error. Use water_find_sites and water_list_parameters to resolve inputs.","detail":"Description of `water_get_conditions` changed (37% word delta).","severity":"risky","descriptionDelta":0.37142857142857144},{"kind":"output_property_added","path":"outputSchema.properties.methodDescription","tool":"water_get_conditions","after":{"type":["string","null"],"description":"NWIS description of that method (e.g. \"From multiparameter sonde\", \"[(2)]\"). Null when NWIS leaves it blank, as it does for the default series at most single-sensor sites."},"detail":"Field `methodDescription` was added to `water_get_conditions` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.methodId","tool":"water_get_conditions","after":{"type":["string","null"],"description":"NWIS method ID of the sensor series the current reading comes from. When the site reports the parameter from several, a method with a measured latest reading is preferred, then one whose description a statistics series carries exactly (so reading and percentiles come from one sensor), then the most recent. Null only when NWIS returned the series with no method block."},"detail":"Field `methodId` was added to `water_get_conditions` output.","severity":"risky"},{"kind":"enum_value_added","path":"outputSchema.properties.historicalContextStatus","tool":"water_get_conditions","after":"no_matching_method","detail":"Enum value `no_matching_method` added to `historicalContextStatus` on `water_get_conditions`.","severity":"risky"},{"kind":"description_changed","tool":"water_get_readings","after":"Get the latest instantaneous (~15-min, real-time) values for up to 100 USGS sites in one call — per-site, per-parameter records with timestamp, value, unit, and provisional/approved qualifiers. Omitting parameterCd returns every parameter each site publishes. A site measuring one parameter with several sensors returns one series per method, each named by methodId and methodDescription. At most 100 series return per call — every site that returned data keeps at least one, and totalSeries reports how many NWIS returned; pass parameterCd or split the sites across calls to reach the rest. Each series returns only its 10 most recent records (totalValues reports the true count); truncated=true when either cap applied. Use water_get_series for a full date-range series. Sites NWIS returns nothing for are listed in missingSites, not dropped silently. Use water_find_sites first to discover site numbers and available parameters.","before":"Get the latest instantaneous (~15-min, real-time) values for up to 100 USGS sites in one call — per-site, per-parameter records with timestamp, value, unit, and provisional/approved qualifiers. Each series returns only its 10 most recent records (totalValues reports the true count; truncated=true if any were capped); use water_get_series for a full date-range series. Sites NWIS returns nothing for are listed in missingSites, not dropped silently. Use water_find_sites first to discover site numbers and available parameters.","detail":"Description of `water_get_readings` changed (37% word delta).","severity":"risky","descriptionDelta":0.37},{"kind":"output_property_added","path":"outputSchema.properties.totalSeries","tool":"water_get_readings","after":{"type":"integer","maximum":9007199254740991,"minimum":-9007199254740991,"description":"Number of site + parameter + method time series before the 100-series cap — an empty method block omitted as described under readings is not counted. Greater than total exactly when the cap dropped series; narrow with parameterCd or split the sites across calls to get the rest."},"detail":"Field `totalSeries` was added to `water_get_readings` output.","severity":"risky"},{"kind":"description_changed","tool":"water_get_series","after":"Get a daily or instantaneous time series for one USGS site and parameter over a date range, as time-ordered value records. NWIS can hold several series for one query — one per daily statistic (mean, maximum, minimum) and one per sensor (method); this returns one, reporting its statCd and methodId, and lists the rest in otherSeries so any can be re-requested with the statCd and methodId inputs. By default it returns the daily mean when NWIS returns one with values, and the method with the most records. Large sets (>500 records) return the most recent records inline with truncated=true — the last 500 without DataCanvas, and with DataCanvas enabled the complete series also spills to a canvas (canvas_id/table_name): inspect the staged table with water_dataframe_describe, then read the full series with water_dataframe_query. Use water_find_sites and water_list_parameters to resolve inputs.","before":"Get a daily or instantaneous time series for one USGS site and parameter over a date range, as time-ordered value records. Large sets (>500 records) return the most recent records inline with truncated=true — the last 500 without DataCanvas, and with DataCanvas enabled the complete series also spills to a canvas (canvas_id/table_name): inspect the staged table with water_dataframe_describe, then read the full series with water_dataframe_query. Use water_find_sites and water_list_parameters to resolve inputs.","detail":"Description of `water_get_series` changed (37% word delta).","severity":"risky","descriptionDelta":0.367816091954023},{"kind":"input_property_added","path":"inputSchema.properties.methodId","tool":"water_get_series","after":{"type":"string","description":"NWIS method ID of the sensor series to return — the methodId or an otherSeries[].methodId from a prior response for the same site, parameter, and seriesType. Omit for the method with the most records. IDs differ between daily and instantaneous series and between daily statistics."},"detail":"Optional field `methodId` was added to `water_get_series`; may shift model behaviour.","severity":"risky"},{"kind":"input_property_added","path":"inputSchema.properties.statCd","tool":"water_get_series","after":{"type":"string","description":"Daily statistic to return, as a 5-digit NWIS code: \"00003\" mean, \"00001\" maximum, \"00002\" minimum. Omit for the mean when NWIS returns one with values, otherwise the first statistic that has values; the response names the one returned and lists the others in otherSeries. Daily series only — instantaneous values carry just \"00000\"."},"detail":"Optional field `statCd` was added to `water_get_series`; may shift model behaviour.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.methodDescription","tool":"water_get_series","after":{"type":["string","null"],"description":"NWIS description of that method (e.g. \"From multiparameter sonde\", \"7.1 ft from riverbed (top), [Discontinued]\"). Null when NWIS leaves it blank, as it does for the default series at most single-sensor sites."},"detail":"Field `methodDescription` was added to `water_get_series` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.methodId","tool":"water_get_series","after":{"type":["string","null"],"description":"NWIS method ID of the sensor series returned. Pass it back as the methodId input to request this series again. Null only when NWIS returned the series with no method block."},"detail":"Field `methodId` was added to `water_get_series` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.otherSeries","tool":"water_get_series","after":{"type":"array","items":{"type":"object","required":["statCd","statName","methodId","methodDescription","recordCount"],"properties":{"statCd":{"type":"string","description":"NWIS statistic code of this series (e.g. \"00001\")."},"methodId":{"type":["string","null"],"description":"NWIS method ID of this series — pass as the methodId input."},"statName":{"type":["string","null"],"description":"Statistic name for statCd (e.g. \"Maximum\"); null when NWIS gives none."},"recordCount":{"type":"integer","maximum":9007199254740991,"minimum":-9007199254740991,"description":"Number of value records this series holds over the requested range."},"methodDescription":{"type":["string","null"],"description":"NWIS description of the method; null when blank."}},"description":"One series NWIS returned for this query that was not selected.","additionalProperties":false},"description":"Every other statistic × method series NWIS returned for this query — re-request one with its statCd and methodId. Empty when the query produced a single series. A method block with no values over the range is omitted when another method of the same statistic has values."},"detail":"Field `otherSeries` was added to `water_get_series` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.statCd","tool":"water_get_series","after":{"type":"string","description":"NWIS statistic code of the returned series: \"00003\" daily mean, \"00001\" daily maximum, \"00002\" daily minimum, \"00000\" for instantaneous values."},"detail":"Field `statCd` was added to `water_get_series` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.statName","tool":"water_get_series","after":{"type":["string","null"],"description":"Statistic name NWIS attaches to statCd (e.g. \"Mean\", \"Maximum\"). Null when NWIS gives none, as for instantaneous values."},"detail":"Field `statName` was added to `water_get_series` output.","severity":"risky"},{"kind":"description_changed","tool":"water_list_parameters","after":"Look up USGS parameter codes — the 5-digit codes every other tool's parameterCd takes. With no query, lists a curated set of well-known codes with names, units, and thematic group, from a built-in table (no network call): 00060 = \"Discharge\" (ft³/s), 00065 = \"Gage height\" (ft), 00010 = \"Temperature, water\" (°C), 72019 = \"Depth to water level\" (ft), and others; filter it with group. For anything else — turbidity, nitrate, chlorophyll, suspended sediment, salinity — pass query to search the full USGS parameter-code catalog (~19,600 codes) by name and description, or pass a 5-digit code to look it up. A query returns at most 25 entries, matching curated codes first, with total counting every match.","before":"List well-known USGS parameter codes with human-readable names, units, and thematic domain — a static, built-in catalog. Use this first to discover that 00060 = \"Discharge\" (ft³/s), 00065 = \"Gage height\" (ft), 00010 = \"Temperature, water\" (°C), 72019 = \"Depth to water level\" (ft), etc. Filter by group to narrow results.","detail":"Description of `water_list_parameters` changed (65% word delta).","severity":"risky","descriptionDelta":0.648936170212766},{"kind":"input_property_added","path":"inputSchema.properties.query","tool":"water_list_parameters","after":{"type":"string","maxLength":200,"description":"Search the full USGS parameter-code catalog. Case-insensitive; every word must start a word in the parameter name or description (e.g. \"turbidity\", \"nitrate filtered\", \"dissolved oxygen\"). A bare 5-digit code (e.g. \"63680\") returns that code. Omit to list the curated codes."},"detail":"Optional field `query` was added to `water_list_parameters`; may shift model behaviour.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.note","tool":"water_list_parameters","after":{"type":"string","description":"Guidance when a query matched nothing or was truncated. Absent otherwise."},"detail":"Field `note` was added to `water_list_parameters` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.query","tool":"water_list_parameters","after":{"type":"string","description":"The catalog query searched, trimmed. Absent when listing the curated codes."},"detail":"Field `query` was added to `water_list_parameters` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.truncated","tool":"water_list_parameters","after":{"type":"boolean","description":"True when a query matched more than 25 entries and only the first 25 are listed — add words to narrow it."},"detail":"Field `truncated` was added to `water_list_parameters` output.","severity":"risky"},{"kind":"output_type_changed","path":"outputSchema.properties.total","tool":"water_list_parameters","after":"integer","before":"number","detail":"Type of `total` on `water_list_parameters` changed number → integer.","severity":"breaking"}],"published_at":"2026-09-25T09:06:12.312Z"}]