{"server":"io.github.smarterweather/weather","count":20,"changes":[{"tool":"query_dataset","kind":"changed","observed_at":"2026-10-10T00:22:06.927Z","fields":["outputSchema"],"description_before":null,"description_after":null,"description_similarity":null,"before_hash":"1138421b1451c25bb3c876abb401f7fc","after_hash":"1f86b17680ac1fcf784623fbd06f237a"},{"tool":"describe_dataset","kind":"changed","observed_at":"2026-10-10T00:22:06.927Z","fields":["outputSchema"],"description_before":null,"description_after":null,"description_similarity":null,"before_hash":"a3427296c31a28d76304b3e79d48deb1","after_hash":"bef2529c0160390703ab82d24ce81a58"},{"tool":"compare_locations","kind":"changed","observed_at":"2026-10-10T00:22:06.927Z","fields":["outputSchema"],"description_before":null,"description_after":null,"description_similarity":null,"before_hash":"f1955def98c9bcb70b566c8322f19d0a","after_hash":"3b756a6bbe8e0307fd12d4865d2a76fc"},{"tool":"get_period_totals","kind":"changed","observed_at":"2026-10-10T00:22:06.927Z","fields":["outputSchema"],"description_before":null,"description_after":null,"description_similarity":null,"before_hash":"3f2dc14d1b39556aa411f6658fb042c2","after_hash":"ca2c5aeac6a58ece702fa8e01484224f"},{"tool":"get_outlooks","kind":"changed","observed_at":"2026-10-09T18:46:17.174Z","fields":["description","inputSchema"],"description_before":"Hazard outlooks affecting a location. severe: SPC convective (day 1-8 categorical + tornado/wind/hail probabilities); fire: SPC fire weather; rain: WPC Excessive Rainfall (days 1-3); heat: NWS HeatRisk index (0-4, days 1-3); temperature/precipitation: CPC 6-10 day, 8-14 day, week 3-4 and monthly outlooks (favored category + probability bin). include_narrative=true adds the forecaster discussion (SWO, FWD, QPFERD, or CPC PMDMRD). Empty means no outlook covers the point, not a failure. Examples: {\"location\": \"Moore, OK\", \"hazard\": \"severe\", \"include_narrative\": true} or {\"location\": \"Denver\", \"hazard\": \"temperature\"}.","description_after":"Hazard outlooks affecting a location. severe: SPC convective (day 1-8 categorical + tornado/wind/hail probabilities); fire: SPC fire weather; rain: WPC Excessive Rainfall (days 1-3); heat: NWS HeatRisk index (0-4, days 1-3); temperature/precipitation: CPC 6-10 day, 8-14 day, week 3-4 and monthly outlooks (favored category + probability bin; period=seasonal: 3-month leads). include_narrative=true adds the forecaster discussion (SWO, FWD, QPFERD, or CPC PMDMRD). Empty means no outlook covers the point, not a failure. Examples: {\"location\": \"Moore, OK\", \"hazard\": \"severe\", \"include_narrative\": true} or {\"location\": \"Denver\", \"hazard\": \"temperature\"}.","description_similarity":0.944,"before_hash":"85146398c4066e38ffc497f063da8bbd","after_hash":"8d0e91e893c236c3963eeb52c8c94d11"},{"tool":"get_forecast_skill","kind":"changed","observed_at":"2026-10-09T07:08:10.318Z","fields":["description"],"description_before":"How accurate our forecasts have actually been near a location, measured against observed analysis truth. Returns bias (positive = the model runs high), mean absolute error, RMSE, and a skill score against local climatology, per model, weather variable, and forecast lead time; continuous and vector entries also carry persistenceSkillScore, skill against the analysis at forecast issue time (null means not enough persist pairs, not zero skill -- do not compare it to skillScore as if they shared a denominator), and analysisDisagreementMae, the analyses' own disagreement at that lead -- a floor on how good the forecast can look, not a skill score and not an excuse (null means the sibling row is missing or below minimumSamples); for probability forecasts, the Brier score and a reliability breakdown. Use this to qualify a forecast rather than assert it -- \"NBM has been running 1.8F warm at 3-day leads near you, so treat that 72 as around 70\" -- and to answer \"how much should I trust this forecast\", \"is the model biased here\", or \"how accurate were you last month\". Evidence comes at three scopes side by side: the exact point (strongest, slowest to accumulate), the neighborhood and the region (coarse pooled cells, not street-level). Prefer the most specific scope that has samples. Metrics below minimumSamples observations are withheld and listed under insufficientHistory with their count -- say that history is still accumulating rather than treating thin numbers as evidence. Coverage is a rolling recent window over verified US variables, not all of history. Entries are per model and their samples are not matched, so never conclude that one model beats another by comparing their numbers here. Each entry states the truth field it was measured against -- one designated analysis per variable -- so never compare numbers carrying different truth values either. Each entry also states the regime it was measured under: ALL for every observation regardless of weather, or a conditioned tier such as SEA:DJF (winter), SCN1:WINDY / SCN1:WET / SCN1:QUIET (what the forecast was showing), or JC1:NW (a circulation pattern). Pass the regime parameter to ask for a conditioned track record. It falls back, so asking for SCN1:WINDY and getting back regime ALL is a successful answer, not a missing one -- always read the regime field and qualify the claim with it, because \"NBM runs warm here when it shows windy\" and \"NBM runs warm here\" are different statements. Regimes overlap by construction across families, so entries under different regimes are alternative answers to one question and must never be compared or added; within SCN1: the labels are mutually exclusive. Entries with a categorical block answer a yes/no question instead of an error magnitude -- did it rain, at the thresholdMm stated on the entry -- with pod (of the times it happened, how often we called it), far (of the times we called it, how often it did not happen), and frequencyBias (above 1 = we call it too often). Use these for \"will it actually rain\" questions, where a small average error means nothing if the rain lands in the wrong hour. A null rate means the sample cannot answer it -- the event has not happened, or been forecast, enough times to divide by -- and must be reported as unknown, never as zero. The counts beside it are still evidence, and for a rare event they are often the whole answer: \"it has only rained twice here in the record\" is a useful thing to say.","description_after":"How accurate our forecasts have actually been near a location, measured against observed analysis truth. Returns bias (positive = the model runs high), mean absolute error, RMSE, and a skill score against local climatology, per model, weather variable, and forecast lead time; continuous and vector entries also carry persistenceSkillScore, skill against the analysis at forecast issue time (null means not enough persist pairs, not zero skill -- do not compare it to skillScore as if they shared a denominator), and analysisDisagreementMae, the analyses' own disagreement at that lead -- a floor on how good the forecast can look, not a skill score and not an excuse (null means the sibling row is missing or below minimumSamples); for probability forecasts, the Brier score and a reliability breakdown. Use this to qualify a forecast rather than assert it -- \"NBM has been running 1.8F warm at 3-day leads near you, so treat that 72 as around 70\" -- and to answer \"how much should I trust this forecast\", \"is the model biased here\", or \"how accurate were you last month\". Evidence comes at three scopes side by side: the exact point (strongest, slowest to accumulate), the neighborhood and the region (coarse pooled cells, not street-level). Prefer the most specific scope that has samples. Metrics below minimumSamples observations are withheld and listed under insufficientHistory with their count -- say history is still accumulating; do not treat thin numbers as evidence. Coverage is a rolling recent window over verified US variables, not all of history. Samples aren't matched across models, so never conclude one model beats another from these numbers. Each entry states the truth field it was measured against (one designated analysis per variable); never compare numbers with different truth values either. Each entry also states its regime: ALL (every observation, any weather) or a conditioned tier such as SEA:DJF (winter), SCN1:WINDY / SCN1:WET / SCN1:QUIET (what the forecast was showing), or JC1:NW (a circulation pattern). Pass the regime parameter to ask for a conditioned track record. It falls back: asking for SCN1:WINDY and getting regime ALL is a successful answer, not a missing one -- always read the regime field and qualify the claim with it, because \"NBM runs warm here when it shows windy\" and \"NBM runs warm here\" are different statements. Regimes overlap by construction across families, so entries under different regimes are alternative answers to one question; never compare or add them. Within SCN1: the labels are mutually exclusive. Entries with a categorical block answer a yes/no question instead of an error magnitude -- did it rain, at the thresholdMm stated on the entry -- with pod (of the times it happened, how often we called it), far (of the times we called it, how often it did not happen), and frequencyBias (above 1 = we call it too often). Use these for \"will it actually rain\" questions, where a small average error means nothing if the rain lands in the wrong hour. A null rate means the sample cannot answer it -- the event has not happened, or been forecast, enough times to divide by -- and must be reported as unknown, never as zero. The counts beside it are still evidence, and for a rare event they are often the whole answer: \"it has only rained twice here in the record\" is a useful thing to say.","description_similarity":0.952,"before_hash":"d6fe0db5fd7e1e3be019516f40785e7c","after_hash":"5d0dfb04daa6a00ff603086b20dbfb4c"},{"tool":"get_outlooks","kind":"changed","observed_at":"2026-10-09T07:08:10.318Z","fields":["description","inputSchema"],"description_before":"Hazard outlooks affecting a location. hazard=severe returns SPC convective outlooks (Day 1-8 categorical risk + tornado/wind/hail probabilities); hazard=fire returns SPC fire weather outlooks; hazard=rain returns WPC Excessive Rainfall Outlook polygons (days 1-3); hazard=heat returns the NWS HeatRisk index at the point (0 none .. 4 extreme, days 1-3). include_narrative=true adds the forecaster discussion for severe (SWO), fire (FWD), or rain (QPF/QPFERD; one PIL for all days). An empty result means no outlook covers the point -- not a failure. Examples: {\"location\": \"Moore, OK\", \"hazard\": \"severe\", \"include_narrative\": true} or {\"location\": \"Phoenix\", \"hazard\": \"heat\"}.","description_after":"Hazard outlooks affecting a location. severe: SPC convective (day 1-8 categorical + tornado/wind/hail probabilities); fire: SPC fire weather; rain: WPC Excessive Rainfall (days 1-3); heat: NWS HeatRisk index (0-4, days 1-3); temperature/precipitation: CPC 6-10 day, 8-14 day, week 3-4 and monthly outlooks (favored category + probability bin). include_narrative=true adds the forecaster discussion (SWO, FWD, QPFERD, or CPC PMDMRD). Empty means no outlook covers the point, not a failure. Examples: {\"location\": \"Moore, OK\", \"hazard\": \"severe\", \"include_narrative\": true} or {\"location\": \"Denver\", \"hazard\": \"temperature\"}.","description_similarity":0.642,"before_hash":"f60c98253dcd01c22a59118a7b793380","after_hash":"85146398c4066e38ffc497f063da8bbd"},{"tool":"get_forecast_skill","kind":"changed","observed_at":"2026-10-09T01:31:02.849Z","fields":["description"],"description_before":"How accurate our forecasts have actually been near a location, measured against observed analysis truth. Returns bias (positive = the model runs high), mean absolute error, RMSE, and a skill score against local climatology, per model, weather variable, and forecast lead time; continuous and vector entries also carry persistenceSkillScore, skill against the analysis at forecast issue time (null means not enough persist pairs, not zero skill -- do not compare it to skillScore as if they shared a denominator), and analysisDisagreementMae, the analyses' own disagreement at that lead -- a floor on how good the forecast can look, not a skill score and not an excuse (null means the sibling row is missing or below minimumSamples); for probability forecasts, the Brier score and a reliability breakdown. Use this to qualify a forecast rather than assert it -- \"NBM has been running 1.8F warm at 3-day leads near you, so treat that 72 as around 70\" -- and to answer \"how much should I trust this forecast\", \"is the model biased here\", or \"how accurate were you last month\". Evidence is reported at three scopes side by side: the exact point (strongest, slowest to accumulate), the ~50km neighborhood, and the ~300km region. Prefer the most specific scope that has samples. Metrics below minimumSamples observations are withheld and listed under insufficientHistory with their count -- say that history is still accumulating rather than treating thin numbers as evidence. Coverage is a rolling recent window over verified US variables, not all of history. Entries are per model and their samples are not matched, so never conclude that one model beats another by comparing their numbers here. Each entry states the truth field it was measured against -- one designated analysis per variable -- so never compare numbers carrying different truth values either. Each entry also states the regime it was measured under: ALL for every observation regardless of weather, or a conditioned tier such as SEA:DJF (winter), SCN1:WINDY / SCN1:WET / SCN1:QUIET (what the forecast was showing), or JC1:NW (a circulation pattern). Pass the regime parameter to ask for a conditioned track record. It falls back, so asking for SCN1:WINDY and getting back regime ALL is a successful answer, not a missing one -- always read the regime field and qualify the claim with it, because \"NBM runs warm here when it shows windy\" and \"NBM runs warm here\" are different statements. Regimes overlap by construction across families, so entries under different regimes are alternative answers to one question and must never be compared or added; within SCN1: the labels are mutually exclusive. Entries with a categorical block answer a yes/no question instead of an error magnitude -- did it rain, at the thresholdMm stated on the entry -- with pod (of the times it happened, how often we called it), far (of the times we called it, how often it did not happen), and frequencyBias (above 1 = we call it too often). Use these for \"will it actually rain\" questions, where a small average error means nothing if the rain lands in the wrong hour. A null rate means the sample cannot answer it -- the event has not happened, or been forecast, enough times to divide by -- and must be reported as unknown, never as zero. The counts beside it are still evidence, and for a rare event they are often the whole answer: \"it has only rained twice here in the record\" is a useful thing to say.","description_after":"How accurate our forecasts have actually been near a location, measured against observed analysis truth. Returns bias (positive = the model runs high), mean absolute error, RMSE, and a skill score against local climatology, per model, weather variable, and forecast lead time; continuous and vector entries also carry persistenceSkillScore, skill against the analysis at forecast issue time (null means not enough persist pairs, not zero skill -- do not compare it to skillScore as if they shared a denominator), and analysisDisagreementMae, the analyses' own disagreement at that lead -- a floor on how good the forecast can look, not a skill score and not an excuse (null means the sibling row is missing or below minimumSamples); for probability forecasts, the Brier score and a reliability breakdown. Use this to qualify a forecast rather than assert it -- \"NBM has been running 1.8F warm at 3-day leads near you, so treat that 72 as around 70\" -- and to answer \"how much should I trust this forecast\", \"is the model biased here\", or \"how accurate were you last month\". Evidence comes at three scopes side by side: the exact point (strongest, slowest to accumulate), the neighborhood and the region (coarse pooled cells, not street-level). Prefer the most specific scope that has samples. Metrics below minimumSamples observations are withheld and listed under insufficientHistory with their count -- say that history is still accumulating rather than treating thin numbers as evidence. Coverage is a rolling recent window over verified US variables, not all of history. Entries are per model and their samples are not matched, so never conclude that one model beats another by comparing their numbers here. Each entry states the truth field it was measured against -- one designated analysis per variable -- so never compare numbers carrying different truth values either. Each entry also states the regime it was measured under: ALL for every observation regardless of weather, or a conditioned tier such as SEA:DJF (winter), SCN1:WINDY / SCN1:WET / SCN1:QUIET (what the forecast was showing), or JC1:NW (a circulation pattern). Pass the regime parameter to ask for a conditioned track record. It falls back, so asking for SCN1:WINDY and getting back regime ALL is a successful answer, not a missing one -- always read the regime field and qualify the claim with it, because \"NBM runs warm here when it shows windy\" and \"NBM runs warm here\" are different statements. Regimes overlap by construction across families, so entries under different regimes are alternative answers to one question and must never be compared or added; within SCN1: the labels are mutually exclusive. Entries with a categorical block answer a yes/no question instead of an error magnitude -- did it rain, at the thresholdMm stated on the entry -- with pod (of the times it happened, how often we called it), far (of the times we called it, how often it did not happen), and frequencyBias (above 1 = we call it too often). Use these for \"will it actually rain\" questions, where a small average error means nothing if the rain lands in the wrong hour. A null rate means the sample cannot answer it -- the event has not happened, or been forecast, enough times to divide by -- and must be reported as unknown, never as zero. The counts beside it are still evidence, and for a rare event they are often the whole answer: \"it has only rained twice here in the record\" is a useful thing to say.","description_similarity":0.972,"before_hash":"a07788a2d912f0326b6b7e695b7b9ad6","after_hash":"d6fe0db5fd7e1e3be019516f40785e7c"},{"tool":"get_forecast_discussion","kind":"changed","observed_at":"2026-10-09T01:31:02.849Z","fields":["inputSchema"],"description_before":null,"description_after":null,"description_similarity":null,"before_hash":"ab8d40cf11cdd9247effbc075c9165b9","after_hash":"9d648cdc3f7be268a84a084390198deb"},{"tool":"get_forecast_distribution","kind":"changed","observed_at":"2026-10-07T18:52:24.617Z","fields":["description","inputSchema","outputSchema"],"description_before":"Probabilistic forecast guidance from NBM for one aspect of the weather: percentile ranges (p10-p90), exceedance probabilities, and ensemble spread. Use this for any question about odds, ranges, potential or confidence (\"how much could we get\", \"worst case for the wind\", \"how sure is this\") -- a deterministic forecast value cannot answer one. Reading the percentiles: p50 is the most likely outcome, p90 is the reasonable worst case when the risk is the high end (snow totals, wind, rainfall), and p10 is the reasonable worst case when the risk is the low end (cold, minimum visibility, ceiling). A single percentile is not the forecast -- report the likely value with the tail that matters, and label which is which. Aspects: precip (PoP, QPF + percentiles), snow (accumulation percentiles, >1/2/4in probabilities, snow level, snow-type probability), ice (freezing-rain ice accretion, freezing-rain / ice-pellet type probabilities), temperature (temp/dewpoint + stddev), wind (speed/gust percentiles), severe (thunderstorm probability plus NBM CWASP, the Craven-Wiedenfeld Aggregate Severe Parameter, a severe-environment index, both in percent: severe_weather_prob_p50 is the median CWASP value and severe_weather_prob_above_75 the probability CWASP exceeds 75; NBM has no tornado, hail or damaging-wind probabilities, so use get_outlooks hazard=severe for SPC's), aviation (LIFR/IFR/MVFR visibility + ceiling probabilities), confidence (ensemble stddev; low spread = settled forecast, high spread = details still in play). Examples: {\"location\": \"Denver\", \"aspect\": \"snow\", \"hours\": 72} or {\"lat\": 32.9, \"lon\": -97.0, \"aspect\": \"severe\"}.","description_after":"NBM probabilistic guidance for one weather aspect: percentiles (p10-p90), exceedance probabilities and ensemble spread. Use this for any question about odds, ranges, potential or confidence (\"how much could we get\", \"range of possible highs\", \"how sure is this\") -- a deterministic forecast value cannot answer one. Reading the percentiles: p50 is the most likely outcome, p90 is the reasonable worst case when the risk is the high end (snow totals, wind, rainfall), and p10 when the risk is the low end (cold, visibility, ceiling). A single percentile is not the forecast -- report the likely value with the tail that matters, and label which is which. Aspects: precip (PoP, QPF + percentiles), snow (accumulation percentiles, >1/2/4in probabilities, snow level, snow-type probability), ice (ice accretion, freezing-rain / ice-pellet probabilities), temperature (`daily` high/low p10/p50/p90: the NBM value -/+ 1.28 stddev; hourly temp + stddev), wind (speed/gust percentiles), severe (thunderstorm probability plus NBM CWASP, a severe-environment index, both in percent: severe_weather_prob_p50 is the median CWASP value and severe_weather_prob_above_75 the probability CWASP exceeds 75; NBM has no tornado, hail or damaging-wind probabilities, so use get_outlooks hazard=severe for SPC's), aviation (LIFR/IFR/MVFR visibility + ceiling odds), confidence (ensemble stddev; low = settled, high = details still in play). Labels in unit_labels. Example: {\"location\": \"Denver\", \"aspect\": \"snow\", \"hours\": 72}.","description_similarity":0.847,"before_hash":"fdd47be4e976a1d0f05b4d6bb5ae572f","after_hash":"1c92ff3ab0d141e1e23f2cc31637db3a"},{"tool":"get_time_context","kind":"changed","observed_at":"2026-10-07T18:52:24.617Z","fields":["description"],"description_before":"Complete temporal context for a location: local time, timezone, 14-day calendar with day names and Today/Tomorrow offsets, sunrise/sunset/solar times (from the weather pipeline's astro product), and moon phase. Use whenever you need to reason about dates, times, or daylight for a location -- including \"what time is sunset?\", \"is it dark there now?\", or \"what day of the week is the 4th-day forecast?\". Accepts a place name directly. Example: {\"location\": \"Seattle\"}.","description_after":"Complete temporal context for a location: local time, timezone, 14-day calendar with day names and Today/Tomorrow offsets, sunrise/sunset/solar times (from the weather pipeline's astro product), and moon phase. Use whenever you need to reason about dates, times, or daylight for a location -- including \"what time is sunset?\", \"is it dark there now?\", or \"what day of the week is the 4th-day forecast?\". If current_time.timezone_resolved is false, zone unknown: state times as UTC, never as local. Accepts a place name directly. Example: {\"location\": \"Seattle\"}.","description_similarity":0.853,"before_hash":"fdc1c45df03f9d258f0ea240735f6b37","after_hash":"8b5fe5fc40ff73c6e2c50adf0b45fa07"},{"tool":"get_forecast","kind":"changed","observed_at":"2026-10-07T18:52:24.617Z","fields":["description"],"description_before":"Complete weather overview for a location: current conditions, daily forecast (day/night periods, SPC threats, severity, CAPE, UV), active alerts, and convective outlooks in one call. Data is pre-aggregated across NBM, HRRR, GFS, RTMA, and SPC and unit-converted server-side. This is the primary weather tool; reach for lower-level tools only when you need raw observations or a specific dataset. Accepts a place name directly. Examples: {\"location\": \"Denver\"} or {\"location\": \"Portland, OR\", \"days\": 5} or {\"lat\": 41.4, \"lon\": -92.9}.","description_after":"Complete weather overview for a location: current conditions, daily forecast (day/night periods, SPC threats, severity, CAPE, UV), active alerts, and convective outlooks in one call. Data is pre-aggregated across NBM, HRRR, GFS, RTMA, and SPC and unit-converted server-side. This is the primary weather tool; reach for lower-level tools only when you need raw observations or a specific dataset. Times are UTC ISO 8601; quote daily[].astro.local to users, not UTC. If forecast.location.timezone_resolved is false, zone unknown: state times as UTC, never as local. Accepts a place name directly. Examples: {\"location\": \"Denver\"} or {\"location\": \"Portland, OR\", \"days\": 5} or {\"lat\": 41.4, \"lon\": -92.9}.","description_similarity":0.78,"before_hash":"1e6036fe5c5ce98caebbf8d991b8c917","after_hash":"56ecc12fe311bdb576c0bb16532c7a00"},{"tool":"search_catalog","kind":"added","observed_at":"2026-10-06T18:48:44.726Z","fields":[],"description_before":null,"description_after":"Find which dataset answers a weather question when no dedicated tool fits: ranks the data catalog (model grids, radar, satellite, outlooks, observations) by the question's words and returns the best datasets with variable, units, cadence, a one-line why and the exact `call` (tool and arguments) to run next. Pass lat/lon, or `domain`, to keep only datasets covering the place; without one, Alaska/Hawaii twins fold into the CONUS dataset. Calls are ready for \"now\"; for a past time set `time_start`/`time_end` (or `at` where the tool supports it). Free; no network call.","description_similarity":null,"before_hash":null,"after_hash":"3a1223e982e43687218324ca2e8e2008"},{"tool":"list_datasets","kind":"changed","observed_at":"2026-10-05T07:14:10.257Z","fields":["description","inputSchema","outputSchema"],"description_before":"Discover the datasets (model grids, analyses, observations) available at a location, with per-dataset freshness (data age, latest model run). Datasets vary by domain (CONUS/Alaska/Hawaii). Use this to find dataset_id values for query_dataset and describe_dataset, or to assess whether data is current before making decisions. Example: {\"location\": \"Anchorage\"}.","description_after":"Discover the datasets (model grids, analyses, observations) available at a location, keyed by dataset_id, with per-dataset freshness where tracked (latest model run as latest_run, latest_time, data_age_seconds, freshness_status). Only datasets covering the point are listed: its domain (CONUS/Alaska/Hawaii/Caribbean) plus global grids and the GOES full disks that see it. Use this to find dataset_id values for query_dataset, or to check whether data is current. Variables, units and standard names come from describe_dataset. Example: {\"location\": \"Anchorage, AK\"}.","description_similarity":0.533,"before_hash":"8304e4995783d04852a838eef0e3f085","after_hash":"4f74a89d6cf66043a2310486afc2f449"},{"tool":"get_observed_precipitation","kind":"added","observed_at":"2026-10-02T00:57:19.527Z","fields":[],"description_before":null,"description_after":"How much rain fell: observed precipitation totals at a location. Use for \"did it rain\", \"how much rain fell\", \"rain in the last 24 hours / since yesterday\". Source: MRMS MultiSensor QPE Pass2 (radar bias-corrected to rain gauges) over 1/3/6/24/48/72 h windows (CONUS; 1 h only in Alaska and Hawaii). Values have about 2 mm (0.08 in) resolution, so 0 means under about 1 mm; data runs about an hour behind real time. Pass `at` (within 33 h) for totals ending at a past time (newest frame up to 3 h before it). With include_nowcast (default) it also returns a next-hour radar nowcast (CONUS): peak intensity (light/moderate/heavy), type and start time, not an amount. For forecast totals beyond the next hour use get_period_totals; for station reports use get_observations.","description_similarity":null,"before_hash":null,"after_hash":"0e671c94cf159f1fa66a0b1c63a08e02"},{"tool":"get_period_totals","kind":"changed","observed_at":"2026-10-02T00:57:19.527Z","fields":["description"],"description_before":"Aggregate a weather variable over one or more time periods. Returns server-computed totals, maxima, minima, or averages per period. Period start/end times should use the user's local timezone boundaries (not UTC midnight). Response includes the converted value and unit per period. Ideal for questions like \"total rainfall today and tomorrow\" or \"peak wind speed this weekend\". Accepts a place name directly. Example: {\"location\": \"Portland, OR\", \"variable\": \"precipitation\", \"aggregation\": \"sum\", \"periods\": [{\"start\": \"2026-07-08T07:00:00Z\", \"end\": \"2026-07-09T07:00:00Z\", \"label\": \"Today\"}]}.","description_after":"Aggregate a weather variable over one or more time periods. Returns server-computed totals, maxima, minima, or averages per period. Period start/end times should use the user's local timezone boundaries (not UTC midnight). Response includes the converted value and unit per period. Ideal for questions like \"total rainfall today and tomorrow\" or \"peak wind speed this weekend\". For rain that already fell, use get_observed_precipitation. Accepts a place name directly. Example: {\"location\": \"Portland, OR\", \"variable\": \"precipitation\", \"aggregation\": \"sum\", \"periods\": [{\"start\": \"2026-07-08T07:00:00Z\", \"end\": \"2026-07-09T07:00:00Z\", \"label\": \"Today\"}]}.","description_similarity":0.92,"before_hash":"f8300f33b56d7097c46254f4bb5dffa6","after_hash":"3f2dc14d1b39556aa411f6658fb042c2"},{"tool":"get_current_conditions","kind":"changed","observed_at":"2026-10-01T19:06:52.778Z","fields":["description","inputSchema","outputSchema"],"description_before":"Current weather right now at a location from two independent sources in one call: the RTMA gridded analysis (exact-point values, updated sub-hourly) and the nearest METAR station observation (ground truth with raw METAR, flight category). Use the analysis for point-accurate values and the station for verification. For a forecast, use get_forecast. Example: {\"location\": \"Pella, IA\"}.","description_after":"Current weather right now at a location from two independent sources in one call: the RTMA gridded analysis (exact-point values, updated sub-hourly) and the nearest METAR station observation (ground truth with raw METAR, flight category). Use the analysis for point-accurate values and the station for verification. Analysis fields: temperature_2m, dew_point_2m, relative_humidity_2m (derived here from temperature and dew point; listed in analysis.derived), wind_speed_10m, wind_direction_10m, wind_gusts_10m, surface_pressure (station pressure at ground level, not sea-level pressure), visibility, cloud_cover, cloud_ceiling. Analysis values are SI by default; pass units \"imperial\" or \"metric\" to convert them (labels in analysis.unit_labels; get_forecast defaults to imperial). nearest_station is the station's own report, unconverted. For a forecast, use get_forecast. Example: {\"location\": \"Pella, IA\"}.","description_similarity":0.506,"before_hash":"b55aa65647029c5c9a93fc5ff742e0dc","after_hash":"54f231256f9f48295ed631fb33bb4e07"},{"tool":"get_forecast_distribution","kind":"changed","observed_at":"2026-10-01T19:06:52.778Z","fields":["description"],"description_before":"Probabilistic forecast guidance from NBM for one aspect of the weather: percentile ranges (p10-p90), exceedance probabilities, and ensemble spread. Use this for any question about odds, ranges, potential or confidence (\"how much could we get\", \"worst case for the wind\", \"how sure is this\") -- a deterministic forecast value cannot answer one. Reading the percentiles: p50 is the most likely outcome, p90 is the reasonable worst case when the risk is the high end (snow totals, wind, rainfall), and p10 is the reasonable worst case when the risk is the low end (cold, minimum visibility, ceiling). A single percentile is not the forecast -- report the likely value with the tail that matters, and label which is which. Aspects: precip (PoP, QPF + percentiles), snow (accumulation percentiles, >1/2/4in probabilities, snow level), ice (freezing rain, accretion), temperature (temp/dewpoint + stddev), wind (speed/gust percentiles), severe (hail/tornado/damaging-wind probabilities), aviation (LIFR/IFR/MVFR visibility + ceiling probabilities), confidence (ensemble stddev; low spread = settled forecast, high spread = details still in play). Examples: {\"location\": \"Denver\", \"aspect\": \"snow\", \"hours\": 72} or {\"lat\": 32.9, \"lon\": -97.0, \"aspect\": \"severe\"}.","description_after":"Probabilistic forecast guidance from NBM for one aspect of the weather: percentile ranges (p10-p90), exceedance probabilities, and ensemble spread. Use this for any question about odds, ranges, potential or confidence (\"how much could we get\", \"worst case for the wind\", \"how sure is this\") -- a deterministic forecast value cannot answer one. Reading the percentiles: p50 is the most likely outcome, p90 is the reasonable worst case when the risk is the high end (snow totals, wind, rainfall), and p10 is the reasonable worst case when the risk is the low end (cold, minimum visibility, ceiling). A single percentile is not the forecast -- report the likely value with the tail that matters, and label which is which. Aspects: precip (PoP, QPF + percentiles), snow (accumulation percentiles, >1/2/4in probabilities, snow level, snow-type probability), ice (freezing-rain ice accretion, freezing-rain / ice-pellet type probabilities), temperature (temp/dewpoint + stddev), wind (speed/gust percentiles), severe (thunderstorm probability plus NBM CWASP, the Craven-Wiedenfeld Aggregate Severe Parameter, a severe-environment index, both in percent: severe_weather_prob_p50 is the median CWASP value and severe_weather_prob_above_75 the probability CWASP exceeds 75; NBM has no tornado, hail or damaging-wind probabilities, so use get_outlooks hazard=severe for SPC's), aviation (LIFR/IFR/MVFR visibility + ceiling probabilities), confidence (ensemble stddev; low spread = settled forecast, high spread = details still in play). Examples: {\"location\": \"Denver\", \"aspect\": \"snow\", \"hours\": 72} or {\"lat\": 32.9, \"lon\": -97.0, \"aspect\": \"severe\"}.","description_similarity":0.816,"before_hash":"e4e72a7d9368401cf9a15700f84c1246","after_hash":"fdd47be4e976a1d0f05b4d6bb5ae572f"},{"tool":"get_tropical_observations","kind":"added","observed_at":"2026-09-24T22:09:51.786Z","fields":[],"description_before":null,"description_after":"Hurricane Hunter aircraft reconnaissance for active tropical systems: vortex data message (VDM) center fixes — pressure, max flight-level wind, eye — and high-density (HDOB) flight-level observations. These are aircraft measurements, not surface weather stations (use `get_observations` for METAR). Use `get_tropical` for NHC cones, tracks, and watches; this tool is what the aircraft measured. kind=hdob returns the newest 200 records (about 1–2 h of flight; `truncated` says when more exist). Empty when no aircraft has flown in the window.","description_similarity":null,"before_hash":null,"after_hash":"6fa4accaab4289ad784ddd33cf209641"},{"tool":"get_tropical","kind":"changed","observed_at":"2026-09-24T22:09:51.786Z","fields":["description"],"description_before":"Active NHC (National Hurricane Center) tropical systems: forecast cones, track lines, forecast points, coastal watches/warnings, and 7-day Tropical Weather Outlook formation areas -- Atlantic + East Pacific. Each feature carries a kind (cone | track | points | watch_warning | outlook_area) plus storm name, intensity, and timing properties. include_geometry=true adds full GeoJSON geometries (large). An empty result means no active tropical activity. Example: {} or {\"include_geometry\": true}.","description_after":"Active NHC (National Hurricane Center) tropical systems: forecast cones, track lines, forecast points, coastal watches/warnings, and 7-day Tropical Weather Outlook formation areas -- Atlantic + East Pacific. Each feature carries a kind (cone | track | points | watch_warning | outlook_area) plus storm name, intensity, and timing properties. include_geometry=true adds full GeoJSON geometries (large). An empty result means no active tropical activity. Aircraft reconnaissance fixes and flight-level observations are in `get_tropical_observations`. Example: {} or {\"include_geometry\": true}.","description_similarity":0.862,"before_hash":"795ca76c05d5cf8674cd56886a54c111","after_hash":"7032eea1bc1c71aa1c219bb3fbddba9b"}],"next_before":null,"next_actions":[]}