@jablum/weather-mcp 1.7.0

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.
Files changed (235) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +1319 -0
  3. package/dist/analytics/anonymizer.d.ts +37 -0
  4. package/dist/analytics/anonymizer.d.ts.map +1 -0
  5. package/dist/analytics/anonymizer.js +112 -0
  6. package/dist/analytics/anonymizer.js.map +1 -0
  7. package/dist/analytics/collector.d.ts +72 -0
  8. package/dist/analytics/collector.d.ts.map +1 -0
  9. package/dist/analytics/collector.js +282 -0
  10. package/dist/analytics/collector.js.map +1 -0
  11. package/dist/analytics/config.d.ts +15 -0
  12. package/dist/analytics/config.d.ts.map +1 -0
  13. package/dist/analytics/config.js +172 -0
  14. package/dist/analytics/config.js.map +1 -0
  15. package/dist/analytics/index.d.ts +8 -0
  16. package/dist/analytics/index.d.ts.map +1 -0
  17. package/dist/analytics/index.js +7 -0
  18. package/dist/analytics/index.js.map +1 -0
  19. package/dist/analytics/middleware.d.ts +33 -0
  20. package/dist/analytics/middleware.d.ts.map +1 -0
  21. package/dist/analytics/middleware.js +99 -0
  22. package/dist/analytics/middleware.js.map +1 -0
  23. package/dist/analytics/transport.d.ts +11 -0
  24. package/dist/analytics/transport.d.ts.map +1 -0
  25. package/dist/analytics/transport.js +92 -0
  26. package/dist/analytics/transport.js.map +1 -0
  27. package/dist/analytics/types.d.ts +74 -0
  28. package/dist/analytics/types.d.ts.map +1 -0
  29. package/dist/analytics/types.js +6 -0
  30. package/dist/analytics/types.js.map +1 -0
  31. package/dist/config/api.d.ts +30 -0
  32. package/dist/config/api.d.ts.map +1 -0
  33. package/dist/config/api.js +32 -0
  34. package/dist/config/api.js.map +1 -0
  35. package/dist/config/cache.d.ts +31 -0
  36. package/dist/config/cache.d.ts.map +1 -0
  37. package/dist/config/cache.js +108 -0
  38. package/dist/config/cache.js.map +1 -0
  39. package/dist/config/displayThresholds.d.ts +83 -0
  40. package/dist/config/displayThresholds.d.ts.map +1 -0
  41. package/dist/config/displayThresholds.js +83 -0
  42. package/dist/config/displayThresholds.js.map +1 -0
  43. package/dist/config/tools.d.ts +44 -0
  44. package/dist/config/tools.d.ts.map +1 -0
  45. package/dist/config/tools.js +269 -0
  46. package/dist/config/tools.js.map +1 -0
  47. package/dist/errors/ApiError.d.ts +62 -0
  48. package/dist/errors/ApiError.d.ts.map +1 -0
  49. package/dist/errors/ApiError.js +171 -0
  50. package/dist/errors/ApiError.js.map +1 -0
  51. package/dist/handlers/airQualityHandler.d.ts +11 -0
  52. package/dist/handlers/airQualityHandler.d.ts.map +1 -0
  53. package/dist/handlers/airQualityHandler.js +154 -0
  54. package/dist/handlers/airQualityHandler.js.map +1 -0
  55. package/dist/handlers/alertsHandler.d.ts +11 -0
  56. package/dist/handlers/alertsHandler.d.ts.map +1 -0
  57. package/dist/handlers/alertsHandler.js +98 -0
  58. package/dist/handlers/alertsHandler.js.map +1 -0
  59. package/dist/handlers/currentConditionsHandler.d.ts +13 -0
  60. package/dist/handlers/currentConditionsHandler.d.ts.map +1 -0
  61. package/dist/handlers/currentConditionsHandler.js +296 -0
  62. package/dist/handlers/currentConditionsHandler.js.map +1 -0
  63. package/dist/handlers/forecastHandler.d.ts +16 -0
  64. package/dist/handlers/forecastHandler.d.ts.map +1 -0
  65. package/dist/handlers/forecastHandler.js +454 -0
  66. package/dist/handlers/forecastHandler.js.map +1 -0
  67. package/dist/handlers/historicalWeatherHandler.d.ts +12 -0
  68. package/dist/handlers/historicalWeatherHandler.d.ts.map +1 -0
  69. package/dist/handlers/historicalWeatherHandler.js +188 -0
  70. package/dist/handlers/historicalWeatherHandler.js.map +1 -0
  71. package/dist/handlers/lightningHandler.d.ts +14 -0
  72. package/dist/handlers/lightningHandler.d.ts.map +1 -0
  73. package/dist/handlers/lightningHandler.js +258 -0
  74. package/dist/handlers/lightningHandler.js.map +1 -0
  75. package/dist/handlers/locationHandler.d.ts +12 -0
  76. package/dist/handlers/locationHandler.d.ts.map +1 -0
  77. package/dist/handlers/locationHandler.js +149 -0
  78. package/dist/handlers/locationHandler.js.map +1 -0
  79. package/dist/handlers/marineConditionsHandler.d.ts +13 -0
  80. package/dist/handlers/marineConditionsHandler.d.ts.map +1 -0
  81. package/dist/handlers/marineConditionsHandler.js +270 -0
  82. package/dist/handlers/marineConditionsHandler.js.map +1 -0
  83. package/dist/handlers/riverConditionsHandler.d.ts +11 -0
  84. package/dist/handlers/riverConditionsHandler.d.ts.map +1 -0
  85. package/dist/handlers/riverConditionsHandler.js +176 -0
  86. package/dist/handlers/riverConditionsHandler.js.map +1 -0
  87. package/dist/handlers/savedLocationsHandler.d.ts +50 -0
  88. package/dist/handlers/savedLocationsHandler.d.ts.map +1 -0
  89. package/dist/handlers/savedLocationsHandler.js +397 -0
  90. package/dist/handlers/savedLocationsHandler.js.map +1 -0
  91. package/dist/handlers/statusHandler.d.ts +12 -0
  92. package/dist/handlers/statusHandler.d.ts.map +1 -0
  93. package/dist/handlers/statusHandler.js +115 -0
  94. package/dist/handlers/statusHandler.js.map +1 -0
  95. package/dist/handlers/weatherImageryHandler.d.ts +14 -0
  96. package/dist/handlers/weatherImageryHandler.d.ts.map +1 -0
  97. package/dist/handlers/weatherImageryHandler.js +143 -0
  98. package/dist/handlers/weatherImageryHandler.js.map +1 -0
  99. package/dist/handlers/wildfireHandler.d.ts +11 -0
  100. package/dist/handlers/wildfireHandler.d.ts.map +1 -0
  101. package/dist/handlers/wildfireHandler.js +186 -0
  102. package/dist/handlers/wildfireHandler.js.map +1 -0
  103. package/dist/index.d.ts +7 -0
  104. package/dist/index.d.ts.map +1 -0
  105. package/dist/index.js +735 -0
  106. package/dist/index.js.map +1 -0
  107. package/dist/services/blitzortung.d.ts +67 -0
  108. package/dist/services/blitzortung.d.ts.map +1 -0
  109. package/dist/services/blitzortung.js +475 -0
  110. package/dist/services/blitzortung.js.map +1 -0
  111. package/dist/services/geocoding.d.ts +57 -0
  112. package/dist/services/geocoding.d.ts.map +1 -0
  113. package/dist/services/geocoding.js +393 -0
  114. package/dist/services/geocoding.js.map +1 -0
  115. package/dist/services/locationStore.d.ts +62 -0
  116. package/dist/services/locationStore.d.ts.map +1 -0
  117. package/dist/services/locationStore.js +201 -0
  118. package/dist/services/locationStore.js.map +1 -0
  119. package/dist/services/ncei.d.ts +61 -0
  120. package/dist/services/ncei.d.ts.map +1 -0
  121. package/dist/services/ncei.js +126 -0
  122. package/dist/services/ncei.js.map +1 -0
  123. package/dist/services/nifc.d.ts +44 -0
  124. package/dist/services/nifc.d.ts.map +1 -0
  125. package/dist/services/nifc.js +159 -0
  126. package/dist/services/nifc.js.map +1 -0
  127. package/dist/services/noaa.d.ts +161 -0
  128. package/dist/services/noaa.d.ts.map +1 -0
  129. package/dist/services/noaa.js +681 -0
  130. package/dist/services/noaa.js.map +1 -0
  131. package/dist/services/nominatim.d.ts +62 -0
  132. package/dist/services/nominatim.d.ts.map +1 -0
  133. package/dist/services/nominatim.js +254 -0
  134. package/dist/services/nominatim.js.map +1 -0
  135. package/dist/services/openmeteo.d.ts +189 -0
  136. package/dist/services/openmeteo.d.ts.map +1 -0
  137. package/dist/services/openmeteo.js +936 -0
  138. package/dist/services/openmeteo.js.map +1 -0
  139. package/dist/services/rainviewer.d.ts +37 -0
  140. package/dist/services/rainviewer.d.ts.map +1 -0
  141. package/dist/services/rainviewer.js +115 -0
  142. package/dist/services/rainviewer.js.map +1 -0
  143. package/dist/types/imagery.d.ts +82 -0
  144. package/dist/types/imagery.d.ts.map +1 -0
  145. package/dist/types/imagery.js +6 -0
  146. package/dist/types/imagery.js.map +1 -0
  147. package/dist/types/lightning.d.ts +89 -0
  148. package/dist/types/lightning.d.ts.map +1 -0
  149. package/dist/types/lightning.js +6 -0
  150. package/dist/types/lightning.js.map +1 -0
  151. package/dist/types/noaa.d.ts +535 -0
  152. package/dist/types/noaa.d.ts.map +1 -0
  153. package/dist/types/noaa.js +5 -0
  154. package/dist/types/noaa.js.map +1 -0
  155. package/dist/types/nominatim.d.ts +72 -0
  156. package/dist/types/nominatim.d.ts.map +1 -0
  157. package/dist/types/nominatim.js +6 -0
  158. package/dist/types/nominatim.js.map +1 -0
  159. package/dist/types/openmeteo.d.ts +583 -0
  160. package/dist/types/openmeteo.d.ts.map +1 -0
  161. package/dist/types/openmeteo.js +6 -0
  162. package/dist/types/openmeteo.js.map +1 -0
  163. package/dist/types/savedLocations.d.ts +58 -0
  164. package/dist/types/savedLocations.d.ts.map +1 -0
  165. package/dist/types/savedLocations.js +5 -0
  166. package/dist/types/savedLocations.js.map +1 -0
  167. package/dist/types/wildfire.d.ts +83 -0
  168. package/dist/types/wildfire.d.ts.map +1 -0
  169. package/dist/types/wildfire.js +5 -0
  170. package/dist/types/wildfire.js.map +1 -0
  171. package/dist/utils/airQuality.d.ts +54 -0
  172. package/dist/utils/airQuality.d.ts.map +1 -0
  173. package/dist/utils/airQuality.js +251 -0
  174. package/dist/utils/airQuality.js.map +1 -0
  175. package/dist/utils/cache.d.ts +69 -0
  176. package/dist/utils/cache.d.ts.map +1 -0
  177. package/dist/utils/cache.js +164 -0
  178. package/dist/utils/cache.js.map +1 -0
  179. package/dist/utils/distance.d.ts +25 -0
  180. package/dist/utils/distance.d.ts.map +1 -0
  181. package/dist/utils/distance.js +40 -0
  182. package/dist/utils/distance.js.map +1 -0
  183. package/dist/utils/fireWeather.d.ts +76 -0
  184. package/dist/utils/fireWeather.d.ts.map +1 -0
  185. package/dist/utils/fireWeather.js +243 -0
  186. package/dist/utils/fireWeather.js.map +1 -0
  187. package/dist/utils/geography.d.ts +79 -0
  188. package/dist/utils/geography.d.ts.map +1 -0
  189. package/dist/utils/geography.js +266 -0
  190. package/dist/utils/geography.js.map +1 -0
  191. package/dist/utils/geohash.d.ts +62 -0
  192. package/dist/utils/geohash.d.ts.map +1 -0
  193. package/dist/utils/geohash.js +146 -0
  194. package/dist/utils/geohash.js.map +1 -0
  195. package/dist/utils/locationResolver.d.ts +34 -0
  196. package/dist/utils/locationResolver.d.ts.map +1 -0
  197. package/dist/utils/locationResolver.js +120 -0
  198. package/dist/utils/locationResolver.js.map +1 -0
  199. package/dist/utils/logger.d.ts +75 -0
  200. package/dist/utils/logger.d.ts.map +1 -0
  201. package/dist/utils/logger.js +153 -0
  202. package/dist/utils/logger.js.map +1 -0
  203. package/dist/utils/marine.d.ts +59 -0
  204. package/dist/utils/marine.d.ts.map +1 -0
  205. package/dist/utils/marine.js +215 -0
  206. package/dist/utils/marine.js.map +1 -0
  207. package/dist/utils/normals.d.ts +86 -0
  208. package/dist/utils/normals.d.ts.map +1 -0
  209. package/dist/utils/normals.js +223 -0
  210. package/dist/utils/normals.js.map +1 -0
  211. package/dist/utils/snow.d.ts +45 -0
  212. package/dist/utils/snow.d.ts.map +1 -0
  213. package/dist/utils/snow.js +144 -0
  214. package/dist/utils/snow.js.map +1 -0
  215. package/dist/utils/temperatureConversion.d.ts +12 -0
  216. package/dist/utils/temperatureConversion.d.ts.map +1 -0
  217. package/dist/utils/temperatureConversion.js +17 -0
  218. package/dist/utils/temperatureConversion.js.map +1 -0
  219. package/dist/utils/timezone.d.ts +56 -0
  220. package/dist/utils/timezone.d.ts.map +1 -0
  221. package/dist/utils/timezone.js +167 -0
  222. package/dist/utils/timezone.js.map +1 -0
  223. package/dist/utils/units.d.ts +69 -0
  224. package/dist/utils/units.d.ts.map +1 -0
  225. package/dist/utils/units.js +158 -0
  226. package/dist/utils/units.js.map +1 -0
  227. package/dist/utils/validation.d.ts +89 -0
  228. package/dist/utils/validation.d.ts.map +1 -0
  229. package/dist/utils/validation.js +177 -0
  230. package/dist/utils/validation.js.map +1 -0
  231. package/dist/utils/version.d.ts +15 -0
  232. package/dist/utils/version.d.ts.map +1 -0
  233. package/dist/utils/version.js +24 -0
  234. package/dist/utils/version.js.map +1 -0
  235. package/package.json +74 -0
@@ -0,0 +1,149 @@
1
+ /**
2
+ * Handler for search_location tool
3
+ * Now uses multi-service geocoding with automatic fallback
4
+ */
5
+ /**
6
+ * Escape user input for safe embedding in Markdown
7
+ * Prevents Markdown injection attacks (e.g., embedded links, images, code blocks)
8
+ * @param text - User-provided text to escape
9
+ * @returns Escaped text safe for Markdown rendering
10
+ */
11
+ function escapeMarkdown(text) {
12
+ // Escape Markdown special characters and normalize whitespace
13
+ return text
14
+ .replace(/\\/g, '\\\\') // Backslash (must be first)
15
+ .replace(/\*/g, '\\*') // Asterisk (bold/italic)
16
+ .replace(/_/g, '\\_') // Underscore (bold/italic)
17
+ .replace(/\[/g, '\\[') // Left bracket (links)
18
+ .replace(/\]/g, '\\]') // Right bracket (links)
19
+ .replace(/\(/g, '\\(') // Left paren (links)
20
+ .replace(/\)/g, '\\)') // Right paren (links)
21
+ .replace(/</g, '&lt;') // Less than (HTML/autolinks)
22
+ .replace(/>/g, '&gt;') // Greater than (HTML/autolinks)
23
+ .replace(/`/g, '\\`') // Backtick (code)
24
+ .replace(/~/g, '\\~') // Tilde (strikethrough)
25
+ .replace(/#/g, '\\#') // Hash (headers)
26
+ .replace(/!/g, '\\!') // Exclamation (images)
27
+ .replace(/\n/g, ' ') // Newlines -> spaces (prevent structure injection)
28
+ .replace(/\r/g, ''); // Remove carriage returns
29
+ }
30
+ export async function handleSearchLocation(args, geocodingService) {
31
+ // Validate input parameters
32
+ const locationArgs = args;
33
+ if (!locationArgs.query || typeof locationArgs.query !== 'string') {
34
+ throw new Error('query parameter is required and must be a string');
35
+ }
36
+ const query = locationArgs.query.trim();
37
+ const limit = typeof locationArgs.limit === 'number' ?
38
+ Math.min(Math.max(1, locationArgs.limit), 50) : 5; // Nominatim max is 50
39
+ // Search for locations using multi-service geocoding
40
+ const results = await geocodingService.geocode(query, limit);
41
+ // Format the results for display
42
+ let output = `# Location Search Results\n\n`;
43
+ // Escape user query to prevent Markdown injection
44
+ output += `**Query:** "${escapeMarkdown(query)}"\n`;
45
+ output += `**Found:** ${results.length} location${results.length > 1 ? 's' : ''}\n\n`;
46
+ output += `---\n\n`;
47
+ for (let i = 0; i < results.length; i++) {
48
+ const location = results[i];
49
+ output += `## ${i + 1}. ${location.name}\n\n`;
50
+ // Build location description
51
+ const parts = [location.name];
52
+ if (location.admin1)
53
+ parts.push(location.admin1);
54
+ if (location.admin2 && location.admin2 !== location.admin1)
55
+ parts.push(location.admin2);
56
+ if (location.country)
57
+ parts.push(location.country);
58
+ output += `**Full Name:** ${location.display_name}\n`;
59
+ output += `**Coordinates:** ${location.latitude.toFixed(4)}°, ${location.longitude.toFixed(4)}°\n`;
60
+ if (location.country_code) {
61
+ output += `**Country Code:** ${location.country_code.toUpperCase()}\n`;
62
+ }
63
+ if (location.timezone) {
64
+ output += `**Timezone:** ${location.timezone}\n`;
65
+ }
66
+ if (location.elevation !== undefined) {
67
+ const elevationFt = Math.round(location.elevation * 3.28084);
68
+ output += `**Elevation:** ${location.elevation}m (${elevationFt}ft)\n`;
69
+ }
70
+ if (location.population !== undefined && location.population > 0) {
71
+ output += `**Population:** ${location.population.toLocaleString()}\n`;
72
+ }
73
+ if (location.feature_code) {
74
+ const featureDescription = getFeatureDescription(location.feature_code);
75
+ if (featureDescription) {
76
+ output += `**Type:** ${featureDescription}\n`;
77
+ }
78
+ }
79
+ // Show confidence and source
80
+ const confidenceEmoji = location.confidence === 'high' ? '✅' :
81
+ location.confidence === 'medium' ? '⚡' : '⚠️';
82
+ output += `**Confidence:** ${confidenceEmoji} ${location.confidence.charAt(0).toUpperCase() + location.confidence.slice(1)}\n`;
83
+ output += `**Data Source:** ${getSourceName(location.source)}\n`;
84
+ output += `\n`;
85
+ // Add usage example
86
+ output += `*To get weather for this location, use these coordinates:*\n`;
87
+ output += `*Latitude: ${location.latitude}, Longitude: ${location.longitude}*\n\n`;
88
+ if (i < results.length - 1) {
89
+ output += `---\n\n`;
90
+ }
91
+ }
92
+ output += `---\n`;
93
+ output += `*Multi-service geocoding with automatic fallback (Census.gov, Nominatim, Open-Meteo)*\n`;
94
+ return {
95
+ content: [
96
+ {
97
+ type: 'text',
98
+ text: output
99
+ }
100
+ ]
101
+ };
102
+ }
103
+ /**
104
+ * Get friendly source name for display
105
+ */
106
+ function getSourceName(source) {
107
+ switch (source) {
108
+ case 'census': return 'US Census Bureau';
109
+ case 'nominatim': return 'OpenStreetMap Nominatim';
110
+ case 'openmeteo': return 'Open-Meteo';
111
+ default: return source;
112
+ }
113
+ }
114
+ /**
115
+ * Get human-readable description for feature code
116
+ * Based on GeoNames feature codes: https://www.geonames.org/export/codes.html
117
+ */
118
+ function getFeatureDescription(code) {
119
+ const featureCodes = {
120
+ 'PPL': 'Populated place',
121
+ 'PPLA': 'Administrative capital',
122
+ 'PPLA2': 'Second-order administrative capital',
123
+ 'PPLA3': 'Third-order administrative capital',
124
+ 'PPLA4': 'Fourth-order administrative capital',
125
+ 'PPLC': 'National capital',
126
+ 'PPLG': 'Seat of government',
127
+ 'PPLS': 'Populated places',
128
+ 'PPLX': 'Section of populated place',
129
+ 'ADM1': 'First-order administrative division',
130
+ 'ADM2': 'Second-order administrative division',
131
+ 'ADM3': 'Third-order administrative division',
132
+ 'ADM4': 'Fourth-order administrative division',
133
+ 'PCLI': 'Independent political entity',
134
+ 'PCLD': 'Dependent political entity',
135
+ 'ISL': 'Island',
136
+ 'MT': 'Mountain',
137
+ 'MTS': 'Mountains',
138
+ 'LAKE': 'Lake',
139
+ 'RSTN': 'Railroad station',
140
+ 'AIRP': 'Airport',
141
+ 'AIRF': 'Airfield',
142
+ 'PRK': 'Park',
143
+ 'RES': 'Reserve',
144
+ 'RESN': 'Nature reserve',
145
+ 'RESW': 'Wildlife reserve'
146
+ };
147
+ return featureCodes[code] || null;
148
+ }
149
+ //# sourceMappingURL=locationHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"locationHandler.js","sourceRoot":"","sources":["../../src/handlers/locationHandler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Handler for get_marine_conditions tool
3
+ * Supports dual data sources: NOAA (Great Lakes/coastal) and Open-Meteo (oceans)
4
+ */
5
+ import { NOAAService } from '../services/noaa.js';
6
+ import { OpenMeteoService } from '../services/openmeteo.js';
7
+ export declare function handleGetMarineConditions(args: unknown, noaaService: NOAAService, openMeteoService: OpenMeteoService): Promise<{
8
+ content: Array<{
9
+ type: string;
10
+ text: string;
11
+ }>;
12
+ }>;
13
+ //# sourceMappingURL=marineConditionsHandler.d.ts.map
@@ -0,0 +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;AAwB5D,wBAAsB,yBAAyB,CAC7C,IAAI,EAAE,OAAO,EACb,WAAW,EAAE,WAAW,EACxB,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,CAkG7D"}
@@ -0,0 +1,270 @@
1
+ /**
2
+ * Handler for get_marine_conditions tool
3
+ * Supports dual data sources: NOAA (Great Lakes/coastal) and Open-Meteo (oceans)
4
+ */
5
+ import { DateTime } from 'luxon';
6
+ import { validateCoordinates, validateOptionalBoolean } from '../utils/validation.js';
7
+ import { formatWaveHeight, formatWavePeriod, formatDirection, formatCurrentVelocity, formatWindSpeed, getWaveHeightCategory, getSafetyAssessment, extractNOAAMarineConditions } from '../utils/marine.js';
8
+ import { shouldUseNOAAMarine } from '../utils/geography.js';
9
+ import { logger, redactCoordinatesForLogging } from '../utils/logger.js';
10
+ import { formatInTimezone, guessTimezoneFromCoords } from '../utils/timezone.js';
11
+ export async function handleGetMarineConditions(args, noaaService, openMeteoService) {
12
+ // Validate input parameters with runtime checks
13
+ const { latitude, longitude } = validateCoordinates(args);
14
+ const forecast = validateOptionalBoolean(args?.forecast, 'forecast', false);
15
+ // Get timezone for proper time formatting
16
+ let timezone = guessTimezoneFromCoords(latitude, longitude); // fallback
17
+ try {
18
+ // Try to get timezone from station (preferred)
19
+ const stations = await noaaService.getStations(latitude, longitude);
20
+ if (stations.features && stations.features.length > 0) {
21
+ const stationTimezone = stations.features[0].properties.timeZone;
22
+ if (stationTimezone) {
23
+ timezone = stationTimezone;
24
+ }
25
+ }
26
+ }
27
+ catch (error) {
28
+ // Use fallback timezone
29
+ }
30
+ // Check if we should try NOAA first (Great Lakes or major coastal bays)
31
+ const regionDetection = shouldUseNOAAMarine(latitude, longitude);
32
+ if (regionDetection.useNOAA) {
33
+ // Try NOAA first for Great Lakes and coastal bays
34
+ try {
35
+ // Redact coordinates for logging to protect user privacy
36
+ const redacted = redactCoordinatesForLogging(latitude, longitude);
37
+ logger.info('Attempting NOAA marine data', {
38
+ latitude: redacted.lat,
39
+ longitude: redacted.lon,
40
+ region: regionDetection.region,
41
+ source: regionDetection.source
42
+ });
43
+ const gridpointData = await noaaService.getGridpointDataByCoordinates(latitude, longitude);
44
+ const noaaMarineData = extractNOAAMarineConditions(gridpointData);
45
+ if (noaaMarineData) {
46
+ // Format NOAA marine data
47
+ const output = formatNOAAMarineConditions(noaaMarineData, latitude, longitude, regionDetection.region || 'Unknown Region', timezone, forecast);
48
+ return {
49
+ content: [
50
+ {
51
+ type: 'text',
52
+ text: output
53
+ }
54
+ ]
55
+ };
56
+ }
57
+ else {
58
+ const redacted2 = redactCoordinatesForLogging(latitude, longitude);
59
+ logger.info('NOAA gridpoint has no marine data, falling back to Open-Meteo', {
60
+ latitude: redacted2.lat,
61
+ longitude: redacted2.lon
62
+ });
63
+ }
64
+ }
65
+ catch (error) {
66
+ // NOAA failed, fall back to Open-Meteo
67
+ const redacted3 = redactCoordinatesForLogging(latitude, longitude);
68
+ logger.warn('NOAA marine data failed, falling back to Open-Meteo', {
69
+ latitude: redacted3.lat,
70
+ longitude: redacted3.lon,
71
+ error: error.message
72
+ });
73
+ }
74
+ }
75
+ // Use Open-Meteo (default for oceans, or fallback for NOAA regions)
76
+ const marineData = await openMeteoService.getMarine(latitude, longitude, forecast, 5 // Default 5-day forecast
77
+ );
78
+ // Format the marine data for display
79
+ const output = formatOpenMeteoMarineConditions(marineData, latitude, longitude, forecast);
80
+ return {
81
+ content: [
82
+ {
83
+ type: 'text',
84
+ text: output
85
+ }
86
+ ]
87
+ };
88
+ }
89
+ /**
90
+ * Format NOAA marine conditions data as markdown
91
+ */
92
+ function formatNOAAMarineConditions(data, latitude, longitude, region, timezone, includeForecast) {
93
+ let output = `# Marine Conditions Report - ${region}\n\n`;
94
+ output += `**Location:** ${latitude.toFixed(4)}, ${longitude.toFixed(4)}\n`;
95
+ output += `**Region:** ${region}\n`;
96
+ output += `**Last Updated:** ${formatInTimezone(data.timestamp, timezone)}\n\n`;
97
+ // Wave Conditions
98
+ output += `## 🌊 Wave Conditions\n\n`;
99
+ if (data.waveHeight !== undefined && data.waveHeight > 0) {
100
+ const waveCategory = getWaveHeightCategory(data.waveHeight);
101
+ output += `**Significant Wave Height:** ${formatWaveHeight(data.waveHeight)}`;
102
+ output += ` (${waveCategory.description})\n`;
103
+ if (data.waveDirection !== undefined) {
104
+ output += `**Wave Direction:** ${formatDirection(data.waveDirection)}\n`;
105
+ }
106
+ if (data.wavePeriod !== undefined) {
107
+ output += `**Wave Period:** ${formatWavePeriod(data.wavePeriod)}\n`;
108
+ }
109
+ output += `\n**Safety:** ${waveCategory.recommendation}\n\n`;
110
+ }
111
+ else {
112
+ output += `**Wave Height:** Calm or minimal wave activity\n\n`;
113
+ }
114
+ // Wind Conditions
115
+ if (data.windSpeed !== undefined || data.windDirection !== undefined) {
116
+ output += `## 💨 Wind Conditions\n\n`;
117
+ if (data.windSpeed !== undefined) {
118
+ output += `**Wind Speed:** ${formatWindSpeed(data.windSpeed)}\n`;
119
+ }
120
+ if (data.windDirection !== undefined) {
121
+ output += `**Wind Direction:** ${formatDirection(data.windDirection)}\n`;
122
+ }
123
+ if (data.windGust !== undefined && data.windGust > data.windSpeed * 1.2) {
124
+ output += `**Wind Gusts:** ${formatWindSpeed(data.windGust)}\n`;
125
+ }
126
+ output += `\n`;
127
+ }
128
+ // Forecast note
129
+ if (includeForecast) {
130
+ output += `---\n\n`;
131
+ output += `*Note: NOAA gridpoint data provides current conditions. `;
132
+ output += `For detailed multi-day marine forecasts, NOAA offers zone-based marine forecasts `;
133
+ output += `available through their website.*\n\n`;
134
+ }
135
+ // Footer
136
+ output += `---\n\n`;
137
+ output += `*Data source: NOAA National Weather Service*\n`;
138
+ output += `*Great Lakes and coastal marine conditions from NOAA gridpoint data*\n`;
139
+ return output;
140
+ }
141
+ /**
142
+ * Format Open-Meteo marine conditions data as markdown
143
+ */
144
+ function formatOpenMeteoMarineConditions(data, latitude, longitude, includeForecast) {
145
+ let output = `# Marine Conditions Report\n\n`;
146
+ output += `**Location:** ${latitude.toFixed(4)}, ${longitude.toFixed(4)}\n`;
147
+ output += `**Timezone:** ${data.timezone}\n`;
148
+ output += `\n`;
149
+ // Important disclaimer at the top
150
+ output += `⚠️ **DISCLAIMER:** This data is modeled and may have limited accuracy in coastal areas. `;
151
+ output += `**NOT suitable for coastal navigation.** Always consult official marine forecasts for safety-critical decisions.\n\n`;
152
+ if (!data.current) {
153
+ output += `⚠️ **No current marine conditions data available for this location.**\n`;
154
+ return output;
155
+ }
156
+ const current = data.current;
157
+ output += `**Observation Time:** ${formatInTimezone(current.time, data.timezone)}\n\n`;
158
+ // Overall safety assessment
159
+ const safety = getSafetyAssessment(current.wave_height, current.wind_wave_height, current.swell_wave_height, current.wave_period);
160
+ const safetyEmoji = safety.level === 'Calm' ? '🟢' :
161
+ safety.level === 'Moderate' ? '🟡' :
162
+ safety.level === 'Rough' ? '🟠' :
163
+ safety.level === 'Very Rough' ? '🔴' : '🟤';
164
+ output += `## ${safetyEmoji} Current Conditions: ${safety.level}\n\n`;
165
+ output += `${safety.description}\n\n`;
166
+ // Wave Height Summary
167
+ output += `## 🌊 Wave Conditions\n\n`;
168
+ if (current.wave_height !== undefined) {
169
+ const waveCategory = getWaveHeightCategory(current.wave_height);
170
+ output += `**Significant Wave Height:** ${formatWaveHeight(current.wave_height)}`;
171
+ output += ` (${waveCategory.description})\n`;
172
+ }
173
+ if (current.wave_direction !== undefined) {
174
+ output += `**Wave Direction:** ${formatDirection(current.wave_direction)}\n`;
175
+ }
176
+ if (current.wave_period !== undefined) {
177
+ output += `**Wave Period:** ${formatWavePeriod(current.wave_period)}\n`;
178
+ }
179
+ output += `\n`;
180
+ // Wind Waves (locally generated)
181
+ if (current.wind_wave_height !== undefined && current.wind_wave_height > 0) {
182
+ output += `### Wind Waves\n\n`;
183
+ output += `**Height:** ${formatWaveHeight(current.wind_wave_height)}\n`;
184
+ if (current.wind_wave_direction !== undefined) {
185
+ output += `**Direction:** ${formatDirection(current.wind_wave_direction)}\n`;
186
+ }
187
+ if (current.wind_wave_period !== undefined) {
188
+ output += `**Period:** ${formatWavePeriod(current.wind_wave_period)}\n`;
189
+ }
190
+ if (current.wind_wave_peak_period !== undefined) {
191
+ output += `**Peak Period:** ${formatWavePeriod(current.wind_wave_peak_period)}\n`;
192
+ }
193
+ output += `\n`;
194
+ }
195
+ // Swell Waves (propagated from distant storms)
196
+ if (current.swell_wave_height !== undefined && current.swell_wave_height > 0) {
197
+ output += `### Swell\n\n`;
198
+ output += `**Height:** ${formatWaveHeight(current.swell_wave_height)}\n`;
199
+ if (current.swell_wave_direction !== undefined) {
200
+ output += `**Direction:** ${formatDirection(current.swell_wave_direction)}\n`;
201
+ }
202
+ if (current.swell_wave_period !== undefined) {
203
+ output += `**Period:** ${formatWavePeriod(current.swell_wave_period)}\n`;
204
+ }
205
+ if (current.swell_wave_peak_period !== undefined) {
206
+ output += `**Peak Period:** ${formatWavePeriod(current.swell_wave_peak_period)}\n`;
207
+ }
208
+ output += `\n`;
209
+ }
210
+ // Ocean Currents
211
+ if (current.ocean_current_velocity !== undefined || current.ocean_current_direction !== undefined) {
212
+ output += `## 🌀 Ocean Currents\n\n`;
213
+ if (current.ocean_current_velocity !== undefined) {
214
+ output += `**Velocity:** ${formatCurrentVelocity(current.ocean_current_velocity)}\n`;
215
+ }
216
+ if (current.ocean_current_direction !== undefined) {
217
+ output += `**Direction:** ${formatDirection(current.ocean_current_direction)}\n`;
218
+ }
219
+ output += `\n`;
220
+ }
221
+ // Add forecast summary if requested
222
+ if (includeForecast && data.daily && data.daily.time && data.daily.time.length > 0) {
223
+ output += `---\n\n`;
224
+ output += `## 📅 Marine Forecast\n\n`;
225
+ const daysToShow = Math.min(5, data.daily.time.length);
226
+ output += `**Next ${daysToShow} days:**\n\n`;
227
+ for (let i = 0; i < daysToShow; i++) {
228
+ const dt = DateTime.fromISO(data.daily.time[i], { setZone: false }).setZone(data.timezone);
229
+ const dayName = dt.toLocaleString({ weekday: 'short', month: 'short', day: 'numeric' });
230
+ output += `**${dayName}:**\n`;
231
+ if (data.daily.wave_height_max?.[i] !== undefined) {
232
+ const maxWaveHeight = data.daily.wave_height_max[i];
233
+ const category = getWaveHeightCategory(maxWaveHeight);
234
+ output += ` • Max Wave Height: ${formatWaveHeight(maxWaveHeight)} (${category.description})\n`;
235
+ }
236
+ if (data.daily.wave_direction_dominant?.[i] !== undefined) {
237
+ output += ` • Wave Direction: ${formatDirection(data.daily.wave_direction_dominant[i])}\n`;
238
+ }
239
+ if (data.daily.wave_period_max?.[i] !== undefined) {
240
+ output += ` • Max Wave Period: ${formatWavePeriod(data.daily.wave_period_max[i])}\n`;
241
+ }
242
+ // Show swell info if significant
243
+ if (data.daily.swell_wave_height_max?.[i] !== undefined && data.daily.swell_wave_height_max[i] > 0.5) {
244
+ output += ` • Swell Height: ${formatWaveHeight(data.daily.swell_wave_height_max[i])}\n`;
245
+ if (data.daily.swell_wave_direction_dominant?.[i] !== undefined) {
246
+ output += ` • Swell Direction: ${formatDirection(data.daily.swell_wave_direction_dominant[i])}\n`;
247
+ }
248
+ }
249
+ output += `\n`;
250
+ }
251
+ // Add hourly forecast note if available
252
+ if (data.hourly && data.hourly.time && data.hourly.time.length > 0) {
253
+ output += `*Hourly forecast data available for ${data.hourly.time.length} hours*\n\n`;
254
+ }
255
+ }
256
+ // Footer with interpretation guidance
257
+ output += `---\n\n`;
258
+ output += `### Interpreting Marine Conditions\n\n`;
259
+ output += `**Significant Wave Height:** The average height of the highest 1/3 of waves\n`;
260
+ output += `**Wind Waves:** Waves generated by local winds (shorter period)\n`;
261
+ output += `**Swell:** Long-period waves from distant weather systems (longer period)\n`;
262
+ output += `**Wave Period:** Time between successive wave crests (longer = more powerful)\n\n`;
263
+ output += `🟢 **Calm** (0-2m): Safe for most vessels\n`;
264
+ output += `🟡 **Moderate** (2-4m): Challenging for small craft\n`;
265
+ output += `🟠 **Rough** (4-6m): Hazardous for small vessels\n`;
266
+ output += `🔴 **Very Rough** (6-9m): Dangerous for most vessels\n`;
267
+ output += `🟤 **High** (>9m): Extremely dangerous\n`;
268
+ return output;
269
+ }
270
+ //# sourceMappingURL=marineConditionsHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"marineConditionsHandler.js","sourceRoot":"","sources":["../../src/handlers/marineConditionsHandler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Handler for get_river_conditions tool
3
+ */
4
+ import { NOAAService } from '../services/noaa.js';
5
+ export declare function handleGetRiverConditions(args: unknown, noaaService: NOAAService): Promise<{
6
+ content: Array<{
7
+ type: string;
8
+ text: string;
9
+ }>;
10
+ }>;
11
+ //# sourceMappingURL=riverConditionsHandler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"riverConditionsHandler.d.ts","sourceRoot":"","sources":["../../src/handlers/riverConditionsHandler.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAYlD,wBAAsB,wBAAwB,CAC5C,IAAI,EAAE,OAAO,EACb,WAAW,EAAE,WAAW,GACvB,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAmF7D"}