@dangahagan/weather-mcp 1.31.3 → 1.31.4
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 +4 -4
- package/dist/handlers/statusHandler.d.ts.map +1 -1
- package/dist/handlers/statusHandler.js +11 -7
- package/dist/handlers/statusHandler.js.map +1 -1
- package/dist/utils/serviceStatusCoverage.d.ts +17 -0
- package/dist/utils/serviceStatusCoverage.d.ts.map +1 -0
- package/dist/utils/serviceStatusCoverage.js +40 -0
- package/dist/utils/serviceStatusCoverage.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
[](https://www.npmjs.com/package/@dangahagan/weather-mcp)
|
|
4
4
|
[](https://registry.modelcontextprotocol.io/v0/servers?search=io.github.dgahagan/weather-mcp)
|
|
5
5
|
[](https://opensource.org/licenses/MIT)
|
|
6
|
-
[](./docs/testing/TEST_SUITE_README.md)
|
|
7
7
|
[](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, 3,
|
|
61
|
+
- **Fully open source** — MIT licensed, readable TypeScript, 3,601 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
|
|
|
@@ -82,7 +82,7 @@ All 17 tools, documented in detail in **[docs/TOOLS.md](./docs/TOOLS.md)**:
|
|
|
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. Great Britain: Environment Agency observed river levels against each gauge's published typical range. Elsewhere: GloFAS modeled discharge snapped to the nearest river channel, with ensemble forecast | 🌍 Global |
|
|
84
84
|
| `get_wildfire_info` | US: named incidents with containment, size, and safety guidance from the nearest *uncontained* fire. Elsewhere: NASA FIRMS satellite heat detections (VIIRS, near real-time), clustered with distance, bearing, and intensity | 🌍 Global |
|
|
85
|
-
| `check_service_status` |
|
|
85
|
+
| `check_service_status` | Checks that NOAA and Open-Meteo are reachable, lists the upstreams it does not check, plus cache statistics | — |
|
|
86
86
|
| `save_location` | Save places as aliases ("home", "cabin") with optional activity tags | — |
|
|
87
87
|
| `list_saved_locations` | List all saved locations | — |
|
|
88
88
|
| `get_saved_location` | Details for one saved location | — |
|
|
@@ -390,7 +390,7 @@ Being honest about what free public data can and can't do:
|
|
|
390
390
|
```bash
|
|
391
391
|
npm run build # Compile TypeScript
|
|
392
392
|
npm run dev # Run in development mode
|
|
393
|
-
npm test # Run all 3,
|
|
393
|
+
npm test # Run all 3,601 tests
|
|
394
394
|
npm run test:coverage # Coverage report
|
|
395
395
|
npm run audit # Dependency vulnerability scan
|
|
396
396
|
```
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"statusHandler.d.ts","sourceRoot":"","sources":["../../src/handlers/statusHandler.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"statusHandler.d.ts","sourceRoot":"","sources":["../../src/handlers/statusHandler.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAI5D,wBAAsB,wBAAwB,CAC5C,WAAW,EAAE,WAAW,EACxB,gBAAgB,EAAE,gBAAgB,EAClC,aAAa,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CA6H7D"}
|
|
@@ -2,10 +2,13 @@
|
|
|
2
2
|
* Handler for check_service_status tool
|
|
3
3
|
*/
|
|
4
4
|
import { CacheConfig } from '../config/cache.js';
|
|
5
|
+
import { formatNotCheckedLine } from '../utils/serviceStatusCoverage.js';
|
|
5
6
|
export async function handleCheckServiceStatus(noaaService, openMeteoService, serverVersion) {
|
|
6
|
-
//
|
|
7
|
-
const noaaStatus = await
|
|
8
|
-
|
|
7
|
+
// Probes run concurrently; neither rejects (each catches and returns a status object).
|
|
8
|
+
const [noaaStatus, openMeteoStatus] = await Promise.all([
|
|
9
|
+
noaaService.checkServiceStatus(),
|
|
10
|
+
openMeteoService.checkServiceStatus(),
|
|
11
|
+
]);
|
|
9
12
|
// Format the status report
|
|
10
13
|
let output = `# Weather API Service Status\n\n`;
|
|
11
14
|
output += `**Check Time:** ${new Date().toLocaleString()}\n\n`;
|
|
@@ -85,8 +88,8 @@ export async function handleCheckServiceStatus(noaaService, openMeteoService, se
|
|
|
85
88
|
const bothOperational = noaaStatus.operational && openMeteoStatus.operational;
|
|
86
89
|
const neitherOperational = !noaaStatus.operational && !openMeteoStatus.operational;
|
|
87
90
|
if (bothOperational) {
|
|
88
|
-
output += `## Overall Status: ✅
|
|
89
|
-
output += `Both
|
|
91
|
+
output += `## Overall Status: ✅ NOAA and Open-Meteo Reachable\n\n`;
|
|
92
|
+
output += `Both checked services answered. This confirms they are reachable; it does not confirm that every request will succeed.\n`;
|
|
90
93
|
}
|
|
91
94
|
else if (neitherOperational) {
|
|
92
95
|
output += `## Overall Status: ❌ Multiple Service Issues\n\n`;
|
|
@@ -95,14 +98,15 @@ export async function handleCheckServiceStatus(noaaService, openMeteoService, se
|
|
|
95
98
|
else {
|
|
96
99
|
output += `## Overall Status: ⚠️ Partial Service Availability\n\n`;
|
|
97
100
|
if (noaaStatus.operational) {
|
|
98
|
-
output += `NOAA API is
|
|
101
|
+
output += `NOAA API answered, so it is reachable. This does not confirm that US forecasts and current conditions will succeed.\n`;
|
|
99
102
|
output += `Open-Meteo API has issues: Historical weather data may be unavailable.\n`;
|
|
100
103
|
}
|
|
101
104
|
else {
|
|
102
|
-
output += `Open-Meteo API is
|
|
105
|
+
output += `Open-Meteo API answered, so it is reachable. This does not confirm that historical weather requests will succeed.\n`;
|
|
103
106
|
output += `NOAA API has issues: Forecasts and current conditions for US locations may be unavailable.\n`;
|
|
104
107
|
}
|
|
105
108
|
}
|
|
109
|
+
output += `\n${formatNotCheckedLine()}`;
|
|
106
110
|
return {
|
|
107
111
|
content: [
|
|
108
112
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"statusHandler.js","sourceRoot":"","sources":["../../src/handlers/statusHandler.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"statusHandler.js","sourceRoot":"","sources":["../../src/handlers/statusHandler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What check_service_status probes, and every upstream it does not.
|
|
3
|
+
*
|
|
4
|
+
* The not-checked list renders into every verdict so a status call made after a
|
|
5
|
+
* specialist tool's error cannot be read as an all-clear for that upstream.
|
|
6
|
+
* tests/unit/status-handler.test.ts pins both lists against src/services/: a new
|
|
7
|
+
* service file fails that test until it is placed in one of them (or declared
|
|
8
|
+
* upstream-free there). The `sources` basenames exist for that test only.
|
|
9
|
+
*/
|
|
10
|
+
export interface NotCheckedUpstream {
|
|
11
|
+
readonly provider: string;
|
|
12
|
+
readonly sources: readonly string[];
|
|
13
|
+
}
|
|
14
|
+
export declare const STATUS_PROBED_SOURCES: readonly string[];
|
|
15
|
+
export declare const STATUS_NOT_CHECKED: readonly NotCheckedUpstream[];
|
|
16
|
+
export declare function formatNotCheckedLine(): string;
|
|
17
|
+
//# sourceMappingURL=serviceStatusCoverage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serviceStatusCoverage.d.ts","sourceRoot":"","sources":["../../src/utils/serviceStatusCoverage.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC;AAED,eAAO,MAAM,qBAAqB,EAAE,SAAS,MAAM,EAA+C,CAAC;AAKnG,eAAO,MAAM,kBAAkB,EAAE,SAAS,kBAAkB,EAsB1D,CAAC;AAGH,wBAAgB,oBAAoB,IAAI,MAAM,CAG7C"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What check_service_status probes, and every upstream it does not.
|
|
3
|
+
*
|
|
4
|
+
* The not-checked list renders into every verdict so a status call made after a
|
|
5
|
+
* specialist tool's error cannot be read as an all-clear for that upstream.
|
|
6
|
+
* tests/unit/status-handler.test.ts pins both lists against src/services/: a new
|
|
7
|
+
* service file fails that test until it is placed in one of them (or declared
|
|
8
|
+
* upstream-free there). The `sources` basenames exist for that test only.
|
|
9
|
+
*/
|
|
10
|
+
export const STATUS_PROBED_SOURCES = Object.freeze(['noaa.ts', 'openmeteo.ts']);
|
|
11
|
+
const entry = (provider, sources) => Object.freeze({ provider, sources: Object.freeze(sources) });
|
|
12
|
+
export const STATUS_NOT_CHECKED = Object.freeze([
|
|
13
|
+
entry('NOAA river gauges (NWPS)', ['noaa.ts']),
|
|
14
|
+
entry('USGS', ['noaa.ts']),
|
|
15
|
+
entry('NOAA NCEI', ['ncei.ts']),
|
|
16
|
+
entry('Aviation Weather Center METAR', ['aviationWeather.ts']),
|
|
17
|
+
entry('Open-Meteo (forecast, air quality, marine, flood, ensemble and geocoding hosts)', ['openmeteo.ts', 'geocoding.ts']),
|
|
18
|
+
entry('Census.gov geocoder', ['geocoding.ts']),
|
|
19
|
+
entry('Nominatim (OpenStreetMap)', ['nominatim.ts', 'geocoding.ts']),
|
|
20
|
+
entry('MET Norway', ['metno.ts']),
|
|
21
|
+
entry('MeteoAlarm', ['meteoalarm.ts']),
|
|
22
|
+
entry('MSC GeoMet', ['geomet.ts']),
|
|
23
|
+
entry('JMA', ['jma.ts']),
|
|
24
|
+
entry('NDMA SACHET, PAGASA and BMKG', ['nationalCap.ts']),
|
|
25
|
+
entry('Google Weather', ['googleWeather.ts']),
|
|
26
|
+
entry('Google Pollen', ['googlePollen.ts']),
|
|
27
|
+
entry('Environment Agency', ['environmentAgency.ts']),
|
|
28
|
+
entry('NIFC', ['nifc.ts']),
|
|
29
|
+
entry('NASA FIRMS', ['firms.ts']),
|
|
30
|
+
entry('NASA GIBS', ['basemap.ts']),
|
|
31
|
+
entry('RainViewer', ['rainviewer.ts']),
|
|
32
|
+
entry('Blitzortung', ['blitzortung.ts']),
|
|
33
|
+
entry('RCC ACIS', ['acis.ts']),
|
|
34
|
+
]);
|
|
35
|
+
// Semicolons, not commas: several provider labels contain commas.
|
|
36
|
+
export function formatNotCheckedLine() {
|
|
37
|
+
const providers = STATUS_NOT_CHECKED.map((e) => e.provider);
|
|
38
|
+
return `**Not checked by this tool:** ${providers.join('; ')}. A failure in one of these is not diagnosable here.\n`;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=serviceStatusCoverage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serviceStatusCoverage.js","sourceRoot":"","sources":["../../src/utils/serviceStatusCoverage.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAOH,MAAM,CAAC,MAAM,qBAAqB,GAAsB,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC,CAAC;AAEnG,MAAM,KAAK,GAAG,CAAC,QAAgB,EAAE,OAAiB,EAAsB,EAAE,CACxE,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AAE/D,MAAM,CAAC,MAAM,kBAAkB,GAAkC,MAAM,CAAC,MAAM,CAAC;IAC7E,KAAK,CAAC,0BAA0B,EAAE,CAAC,SAAS,CAAC,CAAC;IAC9C,KAAK,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC;IAC1B,KAAK,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC;IAC/B,KAAK,CAAC,+BAA+B,EAAE,CAAC,oBAAoB,CAAC,CAAC;IAC9D,KAAK,CAAC,iFAAiF,EAAE,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC;IAC1H,KAAK,CAAC,qBAAqB,EAAE,CAAC,cAAc,CAAC,CAAC;IAC9C,KAAK,CAAC,2BAA2B,EAAE,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC;IACpE,KAAK,CAAC,YAAY,EAAE,CAAC,UAAU,CAAC,CAAC;IACjC,KAAK,CAAC,YAAY,EAAE,CAAC,eAAe,CAAC,CAAC;IACtC,KAAK,CAAC,YAAY,EAAE,CAAC,WAAW,CAAC,CAAC;IAClC,KAAK,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,CAAC;IACxB,KAAK,CAAC,8BAA8B,EAAE,CAAC,gBAAgB,CAAC,CAAC;IACzD,KAAK,CAAC,gBAAgB,EAAE,CAAC,kBAAkB,CAAC,CAAC;IAC7C,KAAK,CAAC,eAAe,EAAE,CAAC,iBAAiB,CAAC,CAAC;IAC3C,KAAK,CAAC,oBAAoB,EAAE,CAAC,sBAAsB,CAAC,CAAC;IACrD,KAAK,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC;IAC1B,KAAK,CAAC,YAAY,EAAE,CAAC,UAAU,CAAC,CAAC;IACjC,KAAK,CAAC,WAAW,EAAE,CAAC,YAAY,CAAC,CAAC;IAClC,KAAK,CAAC,YAAY,EAAE,CAAC,eAAe,CAAC,CAAC;IACtC,KAAK,CAAC,aAAa,EAAE,CAAC,gBAAgB,CAAC,CAAC;IACxC,KAAK,CAAC,UAAU,EAAE,CAAC,SAAS,CAAC,CAAC;CAC/B,CAAC,CAAC;AAEH,kEAAkE;AAClE,MAAM,UAAU,oBAAoB;IAClC,MAAM,SAAS,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC5D,OAAO,iCAAiC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,wDAAwD,CAAC;AACvH,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dangahagan/weather-mcp",
|
|
3
|
-
"version": "1.31.
|
|
3
|
+
"version": "1.31.4",
|
|
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",
|