@dangahagan/weather-mcp 0.2.0 → 0.4.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 (68) hide show
  1. package/README.md +252 -53
  2. package/dist/config/cache.d.ts +1 -0
  3. package/dist/config/cache.d.ts.map +1 -1
  4. package/dist/config/cache.js +45 -2
  5. package/dist/config/cache.js.map +1 -1
  6. package/dist/config/displayThresholds.d.ts +83 -0
  7. package/dist/config/displayThresholds.d.ts.map +1 -0
  8. package/dist/config/displayThresholds.js +83 -0
  9. package/dist/config/displayThresholds.js.map +1 -0
  10. package/dist/errors/ApiError.d.ts +62 -0
  11. package/dist/errors/ApiError.d.ts.map +1 -0
  12. package/dist/errors/ApiError.js +147 -0
  13. package/dist/errors/ApiError.js.map +1 -0
  14. package/dist/handlers/alertsHandler.d.ts +11 -0
  15. package/dist/handlers/alertsHandler.d.ts.map +1 -0
  16. package/dist/handlers/alertsHandler.js +79 -0
  17. package/dist/handlers/alertsHandler.js.map +1 -0
  18. package/dist/handlers/currentConditionsHandler.d.ts +11 -0
  19. package/dist/handlers/currentConditionsHandler.d.ts.map +1 -0
  20. package/dist/handlers/currentConditionsHandler.js +168 -0
  21. package/dist/handlers/currentConditionsHandler.js.map +1 -0
  22. package/dist/handlers/forecastHandler.d.ts +13 -0
  23. package/dist/handlers/forecastHandler.d.ts.map +1 -0
  24. package/dist/handlers/forecastHandler.js +226 -0
  25. package/dist/handlers/forecastHandler.js.map +1 -0
  26. package/dist/handlers/historicalWeatherHandler.d.ts +12 -0
  27. package/dist/handlers/historicalWeatherHandler.d.ts.map +1 -0
  28. package/dist/handlers/historicalWeatherHandler.js +188 -0
  29. package/dist/handlers/historicalWeatherHandler.js.map +1 -0
  30. package/dist/handlers/locationHandler.d.ts +11 -0
  31. package/dist/handlers/locationHandler.d.ts.map +1 -0
  32. package/dist/handlers/locationHandler.js +113 -0
  33. package/dist/handlers/locationHandler.js.map +1 -0
  34. package/dist/handlers/statusHandler.d.ts +12 -0
  35. package/dist/handlers/statusHandler.d.ts.map +1 -0
  36. package/dist/handlers/statusHandler.js +106 -0
  37. package/dist/handlers/statusHandler.js.map +1 -0
  38. package/dist/index.js +148 -376
  39. package/dist/index.js.map +1 -1
  40. package/dist/services/noaa.d.ts +14 -1
  41. package/dist/services/noaa.d.ts.map +1 -1
  42. package/dist/services/noaa.js +74 -42
  43. package/dist/services/noaa.js.map +1 -1
  44. package/dist/services/openmeteo.d.ts +54 -3
  45. package/dist/services/openmeteo.d.ts.map +1 -1
  46. package/dist/services/openmeteo.js +256 -112
  47. package/dist/services/openmeteo.js.map +1 -1
  48. package/dist/types/noaa.d.ts +64 -12
  49. package/dist/types/noaa.d.ts.map +1 -1
  50. package/dist/types/openmeteo.d.ts +156 -0
  51. package/dist/types/openmeteo.d.ts.map +1 -1
  52. package/dist/utils/cache.d.ts +11 -4
  53. package/dist/utils/cache.d.ts.map +1 -1
  54. package/dist/utils/cache.js +33 -4
  55. package/dist/utils/cache.js.map +1 -1
  56. package/dist/utils/logger.d.ts +59 -0
  57. package/dist/utils/logger.d.ts.map +1 -0
  58. package/dist/utils/logger.js +128 -0
  59. package/dist/utils/logger.js.map +1 -0
  60. package/dist/utils/temperatureConversion.d.ts +12 -0
  61. package/dist/utils/temperatureConversion.d.ts.map +1 -0
  62. package/dist/utils/temperatureConversion.js +17 -0
  63. package/dist/utils/temperatureConversion.js.map +1 -0
  64. package/dist/utils/validation.d.ts +89 -0
  65. package/dist/utils/validation.d.ts.map +1 -0
  66. package/dist/utils/validation.js +177 -0
  67. package/dist/utils/validation.js.map +1 -0
  68. package/package.json +10 -3
@@ -0,0 +1,106 @@
1
+ /**
2
+ * Handler for check_service_status tool
3
+ */
4
+ import { CacheConfig } from '../config/cache.js';
5
+ export async function handleCheckServiceStatus(noaaService, openMeteoService) {
6
+ // Check status of both services
7
+ const noaaStatus = await noaaService.checkServiceStatus();
8
+ const openMeteoStatus = await openMeteoService.checkServiceStatus();
9
+ // Format the status report
10
+ let output = `# Weather API Service Status\n\n`;
11
+ output += `**Check Time:** ${new Date().toLocaleString()}\n\n`;
12
+ // NOAA Status
13
+ output += `## NOAA Weather API (Forecasts & Current Conditions)\n\n`;
14
+ output += `**Status:** ${noaaStatus.operational ? '✅ Operational' : '❌ Issues Detected'}\n`;
15
+ output += `**Message:** ${noaaStatus.message}\n`;
16
+ output += `**Status Page:** ${noaaStatus.statusPage}\n`;
17
+ output += `**Coverage:** United States locations only\n\n`;
18
+ if (!noaaStatus.operational) {
19
+ output += `**Recommended Actions:**\n`;
20
+ output += `- Check planned outages: https://weather-gov.github.io/api/planned-outages\n`;
21
+ output += `- View service notices: https://www.weather.gov/notification\n`;
22
+ output += `- Report issues: nco.ops@noaa.gov or (301) 683-1518\n\n`;
23
+ }
24
+ // Open-Meteo Status
25
+ output += `## Open-Meteo API (Historical Weather Data)\n\n`;
26
+ output += `**Status:** ${openMeteoStatus.operational ? '✅ Operational' : '❌ Issues Detected'}\n`;
27
+ output += `**Message:** ${openMeteoStatus.message}\n`;
28
+ output += `**Status Page:** ${openMeteoStatus.statusPage}\n`;
29
+ output += `**Coverage:** Global (worldwide locations)\n\n`;
30
+ if (!openMeteoStatus.operational) {
31
+ output += `**Recommended Actions:**\n`;
32
+ output += `- Check production status: https://open-meteo.com/en/docs/model-updates\n`;
33
+ output += `- View GitHub issues: https://github.com/open-meteo/open-meteo/issues\n`;
34
+ output += `- Review documentation: https://open-meteo.com/en/docs\n\n`;
35
+ }
36
+ // Cache Statistics
37
+ if (CacheConfig.enabled) {
38
+ output += `## Cache Statistics\n\n`;
39
+ const noaaStats = noaaService.getCacheStats();
40
+ const openMeteoStats = openMeteoService.getCacheStats();
41
+ const totalHits = noaaStats.hits + openMeteoStats.hits;
42
+ const totalMisses = noaaStats.misses + openMeteoStats.misses;
43
+ const totalRequests = totalHits + totalMisses;
44
+ const overallHitRate = totalRequests > 0 ? ((totalHits / totalRequests) * 100).toFixed(1) : '0.0';
45
+ output += `**Cache Status:** ✅ Enabled\n`;
46
+ output += `**Overall Hit Rate:** ${overallHitRate}%\n`;
47
+ output += `**Total Cache Hits:** ${totalHits}\n`;
48
+ output += `**Total Cache Misses:** ${totalMisses}\n`;
49
+ output += `**Total Requests:** ${totalRequests}\n\n`;
50
+ const noaaHitRate = (noaaStats.hits + noaaStats.misses) > 0
51
+ ? ((noaaStats.hits / (noaaStats.hits + noaaStats.misses)) * 100).toFixed(1)
52
+ : '0.0';
53
+ const openMeteoHitRate = (openMeteoStats.hits + openMeteoStats.misses) > 0
54
+ ? ((openMeteoStats.hits / (openMeteoStats.hits + openMeteoStats.misses)) * 100).toFixed(1)
55
+ : '0.0';
56
+ output += `### NOAA Service Cache\n`;
57
+ output += `- Entries: ${noaaStats.size} / ${noaaStats.maxSize}\n`;
58
+ output += `- Hit Rate: ${noaaHitRate}%\n`;
59
+ output += `- Hits: ${noaaStats.hits}\n`;
60
+ output += `- Misses: ${noaaStats.misses}\n`;
61
+ output += `- Evictions: ${noaaStats.evictions}\n\n`;
62
+ output += `### Open-Meteo Service Cache\n`;
63
+ output += `- Entries: ${openMeteoStats.size} / ${openMeteoStats.maxSize}\n`;
64
+ output += `- Hit Rate: ${openMeteoHitRate}%\n`;
65
+ output += `- Hits: ${openMeteoStats.hits}\n`;
66
+ output += `- Misses: ${openMeteoStats.misses}\n`;
67
+ output += `- Evictions: ${openMeteoStats.evictions}\n\n`;
68
+ output += `*Cache reduces API calls and improves performance for repeated queries.*\n\n`;
69
+ }
70
+ else {
71
+ output += `## Cache Statistics\n\n`;
72
+ output += `**Cache Status:** ❌ Disabled\n`;
73
+ output += `*Set CACHE_ENABLED=true in environment to enable caching.*\n\n`;
74
+ }
75
+ // Overall status summary
76
+ const bothOperational = noaaStatus.operational && openMeteoStatus.operational;
77
+ const neitherOperational = !noaaStatus.operational && !openMeteoStatus.operational;
78
+ if (bothOperational) {
79
+ output += `## Overall Status: ✅ All Services Operational\n\n`;
80
+ output += `Both NOAA and Open-Meteo APIs are functioning normally. Weather data requests should succeed.\n`;
81
+ }
82
+ else if (neitherOperational) {
83
+ output += `## Overall Status: ❌ Multiple Service Issues\n\n`;
84
+ output += `Both weather APIs are experiencing issues. Please check the status pages above for updates.\n`;
85
+ }
86
+ else {
87
+ output += `## Overall Status: ⚠️ Partial Service Availability\n\n`;
88
+ if (noaaStatus.operational) {
89
+ output += `NOAA API is operational: Forecasts and current conditions for US locations are available.\n`;
90
+ output += `Open-Meteo API has issues: Historical weather data may be unavailable.\n`;
91
+ }
92
+ else {
93
+ output += `Open-Meteo API is operational: Historical weather data is available globally.\n`;
94
+ output += `NOAA API has issues: Forecasts and current conditions for US locations may be unavailable.\n`;
95
+ }
96
+ }
97
+ return {
98
+ content: [
99
+ {
100
+ type: 'text',
101
+ text: output
102
+ }
103
+ ]
104
+ };
105
+ }
106
+ //# sourceMappingURL=statusHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"statusHandler.js","sourceRoot":"","sources":["../../src/handlers/statusHandler.ts"],"names":[],"mappings":"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"}