@dangahagan/weather-mcp 1.25.15 → 1.25.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -3,7 +3,7 @@
3
3
  [![npm version](https://badge.fury.io/js/@dangahagan%2Fweather-mcp.svg)](https://www.npmjs.com/package/@dangahagan/weather-mcp)
4
4
  [![MCP Registry](https://img.shields.io/badge/MCP-Registry-blue)](https://registry.modelcontextprotocol.io/v0/servers?search=io.github.dgahagan/weather-mcp)
5
5
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
6
- [![Tests](https://img.shields.io/badge/tests-2%2C900%20passing-brightgreen)](./docs/testing/TEST_SUITE_README.md)
6
+ [![Tests](https://img.shields.io/badge/tests-2%2C917%20passing-brightgreen)](./docs/testing/TEST_SUITE_README.md)
7
7
  [![Node](https://img.shields.io/badge/node-%3E%3D18-339933?logo=node.js&logoColor=white)](https://nodejs.org)
8
8
 
9
9
  **Give your AI assistant real weather data — 17 tools, zero API keys, zero signup, zero cost.**
@@ -58,7 +58,7 @@ Choose this one if you want:
58
58
 
59
59
  - **Genuinely free** — every data source is a free public API. No trial that expires, no credit card, no rate-limited "free tier" bait.
60
60
  - **No API keys** — install to first forecast in under a minute. Nothing to configure, nothing to leak into a repo. ([Three optional keys](#optional-api-keys) add extras if you want them; the default configuration needs none.)
61
- - **Fully open source** — MIT licensed, readable TypeScript, 2,900 tests. Audit it, fork it, fix it.
61
+ - **Fully open source** — MIT licensed, readable TypeScript, 2,917 tests. Audit it, fork it, fix it.
62
62
  - **Privacy-respecting** — your queries go directly from your machine to public weather APIs. No middleman server, no telemetry.
63
63
  - **Breadth** — 17 tools covering weather, safety hazards (lightning, floods, wildfires), marine conditions, air quality, and historical data back to 1940. Most weather MCPs stop at forecasts.
64
64
 
@@ -77,7 +77,7 @@ All 17 tools, documented in detail in **[docs/TOOLS.md](./docs/TOOLS.md)**:
77
77
  | `get_weather_summary` | One-call overview combining current conditions, forecast, and alerts (optionally air quality and lightning) | 🌍 Global |
78
78
  | `search_location` | Geocode place names to coordinates ("Paris" → 48.85, 2.35) | 🌍 Global |
79
79
  | `get_air_quality` | AQI (US/European scales), pollutants, UV index, health guidance; current pollen levels for European locations (or worldwide with an optional key); optional day-grouped forecast up to 7 days with per-day peak AQI and UV | 🌍 Global |
80
- | `get_marine_conditions` | Wave height, swell, ocean currents, Douglas Sea Scale — includes Great Lakes and major US bays; forecast up to 16 days | 🌍 Global |
80
+ | `get_marine_conditions` | Wave height, swell, ocean currents, sea state on WMO Code Table 3700 (Douglas sea scale) with a severity marker and legend — includes Great Lakes and major US bays; forecast up to 16 days | 🌍 Global |
81
81
  | `get_weather_imagery` | Precipitation radar (static or 2-hour animated loops) + GOES satellite imagery; `composite: true` returns a finished radar map over a base map as an image | 🌍 Global |
82
82
  | `get_lightning_activity` | Real-time strike detection with 4-level proximity safety assessment | 🌍 Global |
83
83
  | `get_river_conditions` | US: NWPS gauge levels, flood stages, streamflow, rise/fall trends, forecast series. Elsewhere: GloFAS modeled discharge snapped to the nearest river channel, with ensemble forecast | 🌍 Global |
@@ -378,7 +378,7 @@ Being honest about what free public data can and can't do:
378
378
  ```bash
379
379
  npm run build # Compile TypeScript
380
380
  npm run dev # Run in development mode
381
- npm test # Run all 2,900 tests
381
+ npm test # Run all 2,917 tests
382
382
  npm run test:coverage # Coverage report
383
383
  npm run audit # Dependency vulnerability scan
384
384
  ```
@@ -1 +1 @@
1
- {"version":3,"file":"marineConditionsHandler.d.ts","sourceRoot":"","sources":["../../src/handlers/marineConditionsHandler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAkC5D,wBAAsB,yBAAyB,CAC7C,IAAI,EAAE,OAAO,EACb,WAAW,EAAE,WAAW,EACxB,gBAAgB,EAAE,gBAAgB,EAClC,aAAa,EAAE,aAAa,EAC5B,gBAAgB,EAAE,gBAAgB,GACjC,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAuG7D"}
1
+ {"version":3,"file":"marineConditionsHandler.d.ts","sourceRoot":"","sources":["../../src/handlers/marineConditionsHandler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAoC5D,wBAAsB,yBAAyB,CAC7C,IAAI,EAAE,OAAO,EACb,WAAW,EAAE,WAAW,EACxB,gBAAgB,EAAE,gBAAgB,EAClC,aAAa,EAAE,aAAa,EAC5B,gBAAgB,EAAE,gBAAgB,GACjC,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAuG7D"}
@@ -5,7 +5,7 @@
5
5
  import { DateTime } from 'luxon';
6
6
  import { resolveLocationAsync, prependLocationLine } from '../utils/locationResolver.js';
7
7
  import { validateOptionalBoolean, validatePositiveInteger } from '../utils/validation.js';
8
- import { formatWaveHeight, formatWavePeriod, formatDirection, formatCurrentVelocity, formatWindSpeed, getWaveHeightCategory, getSafetyAssessment, extractNOAAMarineConditions } from '../utils/marine.js';
8
+ import { formatWaveHeight, formatWavePeriod, formatDirection, formatCurrentVelocity, formatWindSpeed, getWaveHeightCategory, getSafetyAssessment, seaStateMarker, formatSeaStateLegend, extractNOAAMarineConditions } from '../utils/marine.js';
9
9
  import { shouldUseNOAAMarine } from '../utils/geography.js';
10
10
  import { finiteSampleAt } from '../utils/finiteSample.js';
11
11
  import { logger, redactCoordinatesForLogging } from '../utils/logger.js';
@@ -168,10 +168,7 @@ function formatOpenMeteoMarineConditions(data, latitude, longitude, includeForec
168
168
  output += `**Observation Time:** ${formatInTimezone(current.time, data.timezone)}\n\n`;
169
169
  // Overall safety assessment
170
170
  const safety = getSafetyAssessment(current.wave_height, current.wind_wave_height, current.swell_wave_height, current.wave_period);
171
- const safetyEmoji = safety.level === 'Calm' ? '🟢' :
172
- safety.level === 'Moderate' ? '🟡' :
173
- safety.level === 'Rough' ? '🟠' :
174
- safety.level === 'Very Rough' ? '🔴' : '🟤';
171
+ const safetyEmoji = seaStateMarker(safety.level);
175
172
  output += `## ${safetyEmoji} Current Conditions: ${safety.level}\n\n`;
176
173
  output += `${safety.description}\n\n`;
177
174
  // Wave Height Summary
@@ -295,11 +292,7 @@ function formatOpenMeteoMarineConditions(data, latitude, longitude, includeForec
295
292
  output += `**Wind Waves:** Waves generated by local winds (shorter period)\n`;
296
293
  output += `**Swell:** Long-period waves from distant weather systems (longer period)\n`;
297
294
  output += `**Wave Period:** Time between successive wave crests (longer = more powerful)\n\n`;
298
- output += `🟢 **Calm** (0-2m): Safe for most vessels\n`;
299
- output += `🟡 **Moderate** (2-4m): Challenging for small craft\n`;
300
- output += `🟠 **Rough** (4-6m): Hazardous for small vessels\n`;
301
- output += `🔴 **Very Rough** (6-9m): Dangerous for most vessels\n`;
302
- output += `🟤 **High** (>9m): Extremely dangerous\n`;
295
+ output += formatSeaStateLegend();
303
296
  return output;
304
297
  }
305
298
  //# sourceMappingURL=marineConditionsHandler.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"marineConditionsHandler.js","sourceRoot":"","sources":["../../src/handlers/marineConditionsHandler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"marineConditionsHandler.js","sourceRoot":"","sources":["../../src/handlers/marineConditionsHandler.ts"],"names":[],"mappings":"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"}
@@ -38,12 +38,129 @@ export declare function formatCurrentVelocity(metersPerSecond: number | undefine
38
38
  * Convert degrees to cardinal/ordinal direction
39
39
  */
40
40
  export declare function formatDirection(degrees: number | undefined): string;
41
+ /**
42
+ * Sea state — one ordered table, and everything that names a sea state derives from it.
43
+ *
44
+ * WMO Code Table 3700 (State of the sea; the Douglas sea scale), read 2026-09-01 from
45
+ * NOAA/NODC's GTSPP transcription and the UK Met Office coast-and-sea glossary, which agree
46
+ * on every term and bound. The rung names are the code table's terms in its capitalisation.
47
+ * The thresholds are the code table's bounds and are locked at every seam by
48
+ * tests/unit/marine-band-rounding.test.ts (v1.25.6) — do not move them.
49
+ *
50
+ * Codes 0 (Calm (glassy), 0 m) and 1 (Calm (rippled), 0–0.1 m) share the lowest rung: the
51
+ * band keys on the one-decimal display value, and `shown < 0.1` means the report prints
52
+ * `0.0m`, which both codes do. The rung carries the term the two codes share, `Calm`, rather
53
+ * than claiming either parenthetical for a sea the display cannot tell apart.
54
+ *
55
+ * Boundary convention: an exact bound bands into the HIGHER rung (`shown < upperBound`, the
56
+ * cautious side, as v1.25.6 locked it), whereas the code table's own coding rule assigns an
57
+ * exact bounding height to the lower code figure. docs/TOOLS.md states this.
58
+ *
59
+ * Recommendations belong to the threshold RANGE, not to the name — a rung renamed by this
60
+ * table keeps the advice its range always carried.
61
+ */
62
+ export declare const SEA_STATE_TIERS: {
63
+ readonly calm: {
64
+ readonly marker: '🟢';
65
+ readonly blurb: 'Safe for most vessels';
66
+ };
67
+ readonly moderate: {
68
+ readonly marker: '🟡';
69
+ readonly blurb: 'Challenging for small craft';
70
+ };
71
+ readonly rough: {
72
+ readonly marker: '🟠';
73
+ readonly blurb: 'Hazardous for small vessels';
74
+ };
75
+ readonly veryRough: {
76
+ readonly marker: '🔴';
77
+ readonly blurb: 'Dangerous for most vessels';
78
+ };
79
+ readonly extreme: {
80
+ readonly marker: '🟣';
81
+ readonly blurb: 'Extremely dangerous';
82
+ };
83
+ };
84
+ /** Severity tiers, in declaration order = severity order. */
85
+ export type SeaStateTier = keyof typeof SEA_STATE_TIERS;
86
+ export declare const SEA_STATE_SCALE: readonly [{
87
+ readonly wmoCode: '0–1';
88
+ readonly name: 'Calm';
89
+ readonly upperBound: 0.1;
90
+ readonly tier: 'calm';
91
+ readonly recommendation: 'Ideal for all water activities';
92
+ }, {
93
+ readonly wmoCode: '2';
94
+ readonly name: 'Smooth (wavelets)';
95
+ readonly upperBound: 0.5;
96
+ readonly tier: 'calm';
97
+ readonly recommendation: 'Excellent conditions for all vessels';
98
+ }, {
99
+ readonly wmoCode: '3';
100
+ readonly name: 'Slight';
101
+ readonly upperBound: 1.25;
102
+ readonly tier: 'calm';
103
+ readonly recommendation: 'Good conditions for most activities';
104
+ }, {
105
+ readonly wmoCode: '4';
106
+ readonly name: 'Moderate';
107
+ readonly upperBound: 2.5;
108
+ readonly tier: 'moderate';
109
+ readonly recommendation: 'Safe for experienced boaters';
110
+ }, {
111
+ readonly wmoCode: '5';
112
+ readonly name: 'Rough';
113
+ readonly upperBound: 4;
114
+ readonly tier: 'rough';
115
+ readonly recommendation: 'Use caution, especially for small craft';
116
+ }, {
117
+ readonly wmoCode: '6';
118
+ readonly name: 'Very rough';
119
+ readonly upperBound: 6;
120
+ readonly tier: 'veryRough';
121
+ readonly recommendation: 'Hazardous for small vessels, secure all gear';
122
+ }, {
123
+ readonly wmoCode: '7';
124
+ readonly name: 'High';
125
+ readonly upperBound: 9;
126
+ readonly tier: 'veryRough';
127
+ readonly recommendation: 'Dangerous conditions, avoid non-essential travel';
128
+ }, {
129
+ readonly wmoCode: '8';
130
+ readonly name: 'Very high';
131
+ readonly upperBound: 14;
132
+ readonly tier: 'extreme';
133
+ readonly recommendation: 'Very dangerous, only experienced vessels should be out';
134
+ }, {
135
+ readonly wmoCode: '9';
136
+ readonly name: 'Phenomenal';
137
+ readonly upperBound: number;
138
+ readonly tier: 'extreme';
139
+ readonly recommendation: 'Extremely dangerous, all vessels should seek shelter';
140
+ }];
141
+ /** The rung names, derived from the table — the only vocabulary a sea-state `level` can carry. */
142
+ export type SeaStateLevel = (typeof SEA_STATE_SCALE)[number]['name'];
143
+ /** The level a report carries when it has no wave-height data. Not a severity. */
144
+ export declare const NO_DATA_LEVEL: 'Unknown';
145
+ /** The marker for `NO_DATA_LEVEL`. Appears in no severity row of the legend. */
146
+ export declare const NO_DATA_MARKER = "\u26AA";
147
+ /**
148
+ * The severity marker for a level. Found by name in the table, so the names are never
149
+ * copied; an unknown name is a thrown error, never a fallback colour.
150
+ */
151
+ export declare function seaStateMarker(level: SeaStateLevel | typeof NO_DATA_LEVEL): string;
152
+ /**
153
+ * The legend: one row per severity tier, generated from the table so the marker, the rung
154
+ * names and the range can never disagree with the header that used them. The ranges are the
155
+ * true union of each tier's rungs; the top row is open-ended.
156
+ */
157
+ export declare function formatSeaStateLegend(): string;
41
158
  /**
42
159
  * Categorize wave height
43
160
  */
44
161
  export interface WaveHeightCategory {
45
162
  description: string;
46
- level: string;
163
+ level: SeaStateLevel | typeof NO_DATA_LEVEL;
47
164
  recommendation: string;
48
165
  }
49
166
  export declare function getWaveHeightCategory(meters: number | undefined): WaveHeightCategory;
@@ -51,7 +168,7 @@ export declare function getWaveHeightCategory(meters: number | undefined): WaveH
51
168
  * Overall safety assessment based on multiple factors
52
169
  */
53
170
  export interface SafetyAssessment {
54
- level: string;
171
+ level: SeaStateLevel | typeof NO_DATA_LEVEL;
55
172
  description: string;
56
173
  recommendation: string;
57
174
  }
@@ -1 +1 @@
1
- {"version":3,"file":"marine.d.ts","sourceRoot":"","sources":["../../src/utils/marine.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAuB,MAAM,kBAAkB,CAAC;AAE/E;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAqBD;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,SAAS,EAAE,iBAAiB,GAAG,oBAAoB,GAAG,IAAI,CAyBrG;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAOnE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAMpE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAQ/D;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,eAAe,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAQjF;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAmBnE;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,kBAAkB,CAqEpF;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,wBAAgB,mBAAmB,CACjC,eAAe,EAAE,MAAM,GAAG,SAAS,EACnC,cAAc,EAAE,MAAM,GAAG,SAAS,EAClC,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,UAAU,EAAE,MAAM,GAAG,SAAS,GAC7B,gBAAgB,CAyClB"}
1
+ {"version":3,"file":"marine.d.ts","sourceRoot":"","sources":["../../src/utils/marine.ts"],"names":[],"mappings":"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"}
@@ -104,86 +104,111 @@ export function formatDirection(degrees) {
104
104
  const index = Math.round(normalized / 22.5) % 16;
105
105
  return `${directions[index]} (${Math.round(normalized)}°)`;
106
106
  }
107
+ /**
108
+ * Sea state — one ordered table, and everything that names a sea state derives from it.
109
+ *
110
+ * WMO Code Table 3700 (State of the sea; the Douglas sea scale), read 2026-09-01 from
111
+ * NOAA/NODC's GTSPP transcription and the UK Met Office coast-and-sea glossary, which agree
112
+ * on every term and bound. The rung names are the code table's terms in its capitalisation.
113
+ * The thresholds are the code table's bounds and are locked at every seam by
114
+ * tests/unit/marine-band-rounding.test.ts (v1.25.6) — do not move them.
115
+ *
116
+ * Codes 0 (Calm (glassy), 0 m) and 1 (Calm (rippled), 0–0.1 m) share the lowest rung: the
117
+ * band keys on the one-decimal display value, and `shown < 0.1` means the report prints
118
+ * `0.0m`, which both codes do. The rung carries the term the two codes share, `Calm`, rather
119
+ * than claiming either parenthetical for a sea the display cannot tell apart.
120
+ *
121
+ * Boundary convention: an exact bound bands into the HIGHER rung (`shown < upperBound`, the
122
+ * cautious side, as v1.25.6 locked it), whereas the code table's own coding rule assigns an
123
+ * exact bounding height to the lower code figure. docs/TOOLS.md states this.
124
+ *
125
+ * Recommendations belong to the threshold RANGE, not to the name — a rung renamed by this
126
+ * table keeps the advice its range always carried.
127
+ */
128
+ export const SEA_STATE_TIERS = {
129
+ calm: { marker: '🟢', blurb: 'Safe for most vessels' },
130
+ moderate: { marker: '🟡', blurb: 'Challenging for small craft' },
131
+ rough: { marker: '🟠', blurb: 'Hazardous for small vessels' },
132
+ veryRough: { marker: '🔴', blurb: 'Dangerous for most vessels' },
133
+ extreme: { marker: '🟣', blurb: 'Extremely dangerous' }
134
+ };
135
+ export const SEA_STATE_SCALE = [
136
+ { wmoCode: '0–1', name: 'Calm', upperBound: 0.1, tier: 'calm', recommendation: 'Ideal for all water activities' },
137
+ { wmoCode: '2', name: 'Smooth (wavelets)', upperBound: 0.5, tier: 'calm', recommendation: 'Excellent conditions for all vessels' },
138
+ { wmoCode: '3', name: 'Slight', upperBound: 1.25, tier: 'calm', recommendation: 'Good conditions for most activities' },
139
+ { wmoCode: '4', name: 'Moderate', upperBound: 2.5, tier: 'moderate', recommendation: 'Safe for experienced boaters' },
140
+ { wmoCode: '5', name: 'Rough', upperBound: 4.0, tier: 'rough', recommendation: 'Use caution, especially for small craft' },
141
+ { wmoCode: '6', name: 'Very rough', upperBound: 6.0, tier: 'veryRough', recommendation: 'Hazardous for small vessels, secure all gear' },
142
+ { wmoCode: '7', name: 'High', upperBound: 9.0, tier: 'veryRough', recommendation: 'Dangerous conditions, avoid non-essential travel' },
143
+ { wmoCode: '8', name: 'Very high', upperBound: 14.0, tier: 'extreme', recommendation: 'Very dangerous, only experienced vessels should be out' },
144
+ { wmoCode: '9', name: 'Phenomenal', upperBound: Infinity, tier: 'extreme', recommendation: 'Extremely dangerous, all vessels should seek shelter' }
145
+ ];
146
+ /** The level a report carries when it has no wave-height data. Not a severity. */
147
+ export const NO_DATA_LEVEL = 'Unknown';
148
+ /** The marker for `NO_DATA_LEVEL`. Appears in no severity row of the legend. */
149
+ export const NO_DATA_MARKER = '⚪';
150
+ /**
151
+ * The severity marker for a level. Found by name in the table, so the names are never
152
+ * copied; an unknown name is a thrown error, never a fallback colour.
153
+ */
154
+ export function seaStateMarker(level) {
155
+ if (level === NO_DATA_LEVEL) {
156
+ return NO_DATA_MARKER;
157
+ }
158
+ const rung = SEA_STATE_SCALE.find((entry) => entry.name === level);
159
+ if (rung === undefined) {
160
+ throw new Error(`Sea-state level "${level}" is not in SEA_STATE_SCALE`);
161
+ }
162
+ return SEA_STATE_TIERS[rung.tier].marker;
163
+ }
164
+ /**
165
+ * The legend: one row per severity tier, generated from the table so the marker, the rung
166
+ * names and the range can never disagree with the header that used them. The ranges are the
167
+ * true union of each tier's rungs; the top row is open-ended.
168
+ */
169
+ export function formatSeaStateLegend() {
170
+ let output = '';
171
+ let lowerBound = 0;
172
+ for (const tier of Object.keys(SEA_STATE_TIERS)) {
173
+ const rungs = SEA_STATE_SCALE.filter((entry) => entry.tier === tier);
174
+ const tierLower = lowerBound;
175
+ const tierUpper = rungs[rungs.length - 1].upperBound;
176
+ const range = tierUpper === Infinity ? `≥${tierLower} m` : `${tierLower}–${tierUpper} m`;
177
+ const names = rungs.map((entry) => entry.name).join(' / ');
178
+ output += `${SEA_STATE_TIERS[tier].marker} **${names}** (${range}): ${SEA_STATE_TIERS[tier].blurb}\n`;
179
+ lowerBound = tierUpper;
180
+ }
181
+ output += `\n${NO_DATA_MARKER} marks a report with no wave-height data. `;
182
+ output += `Markers describe the sea state at the point, not a hazard forecast — consult official marine warnings.\n`;
183
+ return output;
184
+ }
107
185
  export function getWaveHeightCategory(meters) {
108
186
  if (meters === undefined || meters === null) {
109
187
  return {
110
188
  description: 'Unknown',
111
- level: 'Unknown',
189
+ level: NO_DATA_LEVEL,
112
190
  recommendation: 'No data available'
113
191
  };
114
192
  }
115
193
  // Band on the figure `formatWaveHeight` prints (`toFixed(1)`), so the label can
116
194
  // never disagree with the number beside it.
117
195
  const shown = displayValue(meters, 1);
118
- // Based on WMO Sea State Code and Douglas Sea Scale
119
- if (shown < 0.1) {
120
- return {
121
- description: 'Calm (glassy)',
122
- level: 'Calm',
123
- recommendation: 'Ideal for all water activities'
124
- };
125
- }
126
- else if (shown < 0.5) {
127
- return {
128
- description: 'Calm (rippled)',
129
- level: 'Calm',
130
- recommendation: 'Excellent conditions for all vessels'
131
- };
132
- }
133
- else if (shown < 1.25) {
134
- return {
135
- description: 'Smooth',
136
- level: 'Slight',
137
- recommendation: 'Good conditions for most activities'
138
- };
139
- }
140
- else if (shown < 2.5) {
141
- return {
142
- description: 'Slight',
143
- level: 'Moderate',
144
- recommendation: 'Safe for experienced boaters'
145
- };
146
- }
147
- else if (shown < 4.0) {
148
- return {
149
- description: 'Moderate',
150
- level: 'Moderate',
151
- recommendation: 'Use caution, especially for small craft'
152
- };
153
- }
154
- else if (shown < 6.0) {
155
- return {
156
- description: 'Rough',
157
- level: 'Rough',
158
- recommendation: 'Hazardous for small vessels, secure all gear'
159
- };
160
- }
161
- else if (shown < 9.0) {
162
- return {
163
- description: 'Very Rough',
164
- level: 'Very Rough',
165
- recommendation: 'Dangerous conditions, avoid non-essential travel'
166
- };
167
- }
168
- else if (shown < 14.0) {
169
- return {
170
- description: 'High',
171
- level: 'High',
172
- recommendation: 'Very dangerous, only experienced vessels should be out'
173
- };
174
- }
175
- else {
176
- return {
177
- description: 'Very High',
178
- level: 'Extreme',
179
- recommendation: 'Extremely dangerous, all vessels should seek shelter'
180
- };
196
+ // First rung whose exclusive upper bound the displayed value is under; the top rung's
197
+ // bound is Infinity, so every finite value lands somewhere.
198
+ const rung = SEA_STATE_SCALE.find((entry) => shown < entry.upperBound);
199
+ if (rung === undefined) {
200
+ throw new Error(`No sea-state rung for a displayed wave height of ${shown} m`);
181
201
  }
202
+ return {
203
+ description: rung.name,
204
+ level: rung.name,
205
+ recommendation: rung.recommendation
206
+ };
182
207
  }
183
208
  export function getSafetyAssessment(totalWaveHeight, windWaveHeight, swellHeight, wavePeriod) {
184
209
  if (totalWaveHeight === undefined || totalWaveHeight === null) {
185
210
  return {
186
- level: 'Unknown',
211
+ level: NO_DATA_LEVEL,
187
212
  description: 'Marine conditions data not available',
188
213
  recommendation: 'Consult local marine forecast'
189
214
  };
@@ -1 +1 @@
1
- {"version":3,"file":"marine.js","sourceRoot":"","sources":["../../src/utils/marine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"marine.js","sourceRoot":"","sources":["../../src/utils/marine.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dangahagan/weather-mcp",
3
- "version": "1.25.15",
3
+ "version": "1.25.16",
4
4
  "description": "MCP server giving AI assistants 17 weather tools with zero API keys: global forecasts, current conditions, alerts, air quality, marine conditions, lightning detection, radar imagery, river levels, wildfire tracking, and historical weather back to 1940. Built entirely on free public APIs (NOAA, Open-Meteo, USGS, NIFC).",
5
5
  "mcpName": "io.github.dgahagan/weather-mcp",
6
6
  "main": "dist/index.js",
@@ -71,9 +71,9 @@
71
71
  "dependencies": {
72
72
  "@modelcontextprotocol/sdk": "^1.30.0",
73
73
  "astronomy-engine": "^2.1.19",
74
- "axios": "^1.19.0",
74
+ "axios": "^1.20.0",
75
75
  "dotenv": "^17.2.3",
76
- "fast-xml-parser": "^5.11.0",
76
+ "fast-xml-parser": "^5.11.1",
77
77
  "luxon": "^3.7.2",
78
78
  "ngeohash": "^0.6.4",
79
79
  "pngjs": "^7.0.0",
@@ -83,9 +83,9 @@
83
83
  "mqtt": "^5.14.1"
84
84
  },
85
85
  "devDependencies": {
86
- "@types/luxon": "^3.7.4",
86
+ "@types/luxon": "^3.7.5",
87
87
  "@types/ngeohash": "^0.6.8",
88
- "@types/node": "^26.2.0",
88
+ "@types/node": "^26.4.0",
89
89
  "@types/pngjs": "^6.0.5",
90
90
  "@types/tz-lookup": "^6.1.2",
91
91
  "@vitest/coverage-v8": "^4.1.11",