@dangahagan/weather-mcp 1.33.18 → 1.33.20
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 +6 -6
- package/dist/analytics/anonymizer.d.ts +1 -1
- package/dist/analytics/anonymizer.js +1 -1
- package/dist/analytics/config.d.ts.map +1 -1
- package/dist/analytics/config.js +6 -5
- package/dist/analytics/config.js.map +1 -1
- package/dist/analytics/index.d.ts +1 -1
- package/dist/analytics/index.js +1 -1
- package/dist/analytics/types.d.ts +1 -1
- package/dist/analytics/types.js +1 -1
- package/dist/server/weatherServer.d.ts +2 -2
- package/dist/server/weatherServer.js +2 -2
- package/package.json +7 -7
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.**
|
|
@@ -57,9 +57,9 @@ There are excellent commercial weather MCPs backed by paid APIs and full-time te
|
|
|
57
57
|
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
|
-
- **No API keys** — install to first forecast in under a minute. Nothing to configure, nothing to leak into a repo. ([
|
|
61
|
-
- **Fully open source** — MIT licensed, readable TypeScript, 4,
|
|
62
|
-
- **Privacy-respecting** — your queries go directly from your machine to public weather APIs. No middleman server, no telemetry.
|
|
60
|
+
- **No API keys** — install to first forecast in under a minute. Nothing to configure, nothing to leak into a repo. ([Four optional keys](#optional-api-keys) add extras if you want them; the default configuration needs none.)
|
|
61
|
+
- **Fully open source** — MIT licensed, readable TypeScript, 4,244 tests. Audit it, fork it, fix it.
|
|
62
|
+
- **Privacy-respecting** — your queries go directly from your machine to public weather APIs. No middleman server, and no telemetry unless you opt in.
|
|
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
|
|
|
65
65
|
The tradeoff is honest: US data (NOAA) is richer than international data (Open-Meteo), some tools are US-only, and free APIs come with fair-use rate limits. See [Coverage & Limitations](#coverage--limitations).
|
|
@@ -180,7 +180,7 @@ npm run build
|
|
|
180
180
|
|
|
181
181
|
Then point your MCP client at `node /absolute/path/to/weather-mcp/dist/index.js`.
|
|
182
182
|
|
|
183
|
-
Requires Node.js 18+. No API keys, tokens, or accounts needed — see [Optional API keys](#optional-api-keys) for the
|
|
183
|
+
Requires Node.js 18+. No API keys, tokens, or accounts needed — see [Optional API keys](#optional-api-keys) for the four that add optional extras, and [Optional dependency](#optional-dependency) if you want a smaller install.
|
|
184
184
|
|
|
185
185
|
### Works with
|
|
186
186
|
|
|
@@ -391,7 +391,7 @@ Being honest about what free public data can and can't do:
|
|
|
391
391
|
```bash
|
|
392
392
|
npm run build # Compile TypeScript
|
|
393
393
|
npm run dev # Run in development mode
|
|
394
|
-
npm test # Run all 4,
|
|
394
|
+
npm test # Run all 4,244 tests
|
|
395
395
|
npm run test:coverage # Coverage report
|
|
396
396
|
npm run audit # Dependency vulnerability scan
|
|
397
397
|
```
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Data anonymization utilities for privacy-first analytics
|
|
3
|
-
* Ensures no PII is collected as per docs/
|
|
3
|
+
* Ensures no PII is collected as per docs/analytics/LOCAL_ANALYTICS_GUIDE.md
|
|
4
4
|
*/
|
|
5
5
|
import { AnalyticsEvent, AnalyticsLevel } from './types.js';
|
|
6
6
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/analytics/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAUH,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAkB,MAAM,YAAY,CAAC;AAS7D;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAwDhE;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/analytics/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAUH,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAkB,MAAM,YAAY,CAAC;AAS7D;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAwDhE;AA4CD;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,eAAe,CAuErD;AAED;;;GAGG;AACH,eAAO,MAAM,SAAS,oBAAgD,CAAC;AAEvE;;GAEG;AACH,YAAY,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/analytics/config.js
CHANGED
|
@@ -73,7 +73,8 @@ export function validateAnalyticsEndpoint(endpoint) {
|
|
|
73
73
|
}
|
|
74
74
|
/**
|
|
75
75
|
* Get or generate analytics salt for session ID hashing
|
|
76
|
-
* Generates a unique salt per installation and persists it
|
|
76
|
+
* Generates a unique salt per installation and persists it.
|
|
77
|
+
* Runs only for an enabled detailed-level config (see loadAnalyticsConfig).
|
|
77
78
|
*/
|
|
78
79
|
function getOrGenerateAnalyticsSalt() {
|
|
79
80
|
// Check environment variable first
|
|
@@ -147,8 +148,6 @@ export function loadAnalyticsConfig() {
|
|
|
147
148
|
};
|
|
148
149
|
}
|
|
149
150
|
}
|
|
150
|
-
// Salt for session ID hashing (auto-generated if not provided)
|
|
151
|
-
const salt = getOrGenerateAnalyticsSalt();
|
|
152
151
|
if (enabled && endpoint === null) {
|
|
153
152
|
logger.warn('ANALYTICS_ENABLED=true but ANALYTICS_ENDPOINT is not set; analytics stays off (there is no default endpoint)', { securityEvent: true });
|
|
154
153
|
return {
|
|
@@ -156,16 +155,18 @@ export function loadAnalyticsConfig() {
|
|
|
156
155
|
level,
|
|
157
156
|
endpoint: null,
|
|
158
157
|
version: packageJson.version,
|
|
159
|
-
salt,
|
|
160
158
|
};
|
|
161
159
|
}
|
|
160
|
+
// The salt is read only by the detailed level's session hash (anonymizer.ts
|
|
161
|
+
// hashSessionId), so it is generated only then.
|
|
162
|
+
const salt = enabled && level === 'detailed' ? getOrGenerateAnalyticsSalt() : undefined;
|
|
162
163
|
const config = {
|
|
163
164
|
enabled,
|
|
164
165
|
level,
|
|
165
166
|
// A disabled config carries no endpoint, even when a valid one was supplied
|
|
166
167
|
endpoint: enabled ? endpoint : null,
|
|
167
168
|
version: packageJson.version,
|
|
168
|
-
salt,
|
|
169
|
+
...(salt !== undefined ? { salt } : {}),
|
|
169
170
|
};
|
|
170
171
|
if (enabled) {
|
|
171
172
|
logger.info('Analytics configuration loaded', { level });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/analytics/config.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/analytics/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Analytics module - Privacy-first usage tracking
|
|
3
|
-
* Implements anonymous, opt-
|
|
3
|
+
* Implements anonymous, opt-in analytics as defined in docs/analytics/LOCAL_ANALYTICS_GUIDE.md
|
|
4
4
|
*/
|
|
5
5
|
export { analytics } from './config.js';
|
|
6
6
|
export { withAnalytics, createMetadataExtractor } from './middleware.js';
|
package/dist/analytics/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Analytics module - Privacy-first usage tracking
|
|
3
|
-
* Implements anonymous, opt-
|
|
3
|
+
* Implements anonymous, opt-in analytics as defined in docs/analytics/LOCAL_ANALYTICS_GUIDE.md
|
|
4
4
|
*/
|
|
5
5
|
export { analytics } from './config.js';
|
|
6
6
|
export { withAnalytics, createMetadataExtractor } from './middleware.js';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Analytics type definitions for Weather MCP Server
|
|
3
|
-
* Implements privacy-first analytics as defined in docs/
|
|
3
|
+
* Implements privacy-first analytics as defined in docs/analytics/LOCAL_ANALYTICS_GUIDE.md
|
|
4
4
|
*/
|
|
5
5
|
export type AnalyticsLevel = 'minimal' | 'standard' | 'detailed';
|
|
6
6
|
export type EventStatus = 'success' | 'error';
|
package/dist/analytics/types.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Analytics type definitions for Weather MCP Server
|
|
3
|
-
* Implements privacy-first analytics as defined in docs/
|
|
3
|
+
* Implements privacy-first analytics as defined in docs/analytics/LOCAL_ANALYTICS_GUIDE.md
|
|
4
4
|
*/
|
|
5
5
|
export {};
|
|
6
6
|
//# sourceMappingURL=types.js.map
|
|
@@ -11,8 +11,8 @@
|
|
|
11
11
|
* module that reads a .env from the caller's cwd is a trap — see GOTCHAS G26),
|
|
12
12
|
* it constructs no transport, and it registers no process signal handler and
|
|
13
13
|
* calls no process.exit. Importing it is therefore inert, with one exception:
|
|
14
|
-
* `withAnalytics` pulls in the analytics singleton
|
|
15
|
-
*
|
|
14
|
+
* `withAnalytics` pulls in the analytics singleton that reads the analytics
|
|
15
|
+
* environment at module load (via loadAnalyticsConfig). A test that imports
|
|
16
16
|
* this module pins ANALYTICS_ENABLED and ANALYTICS_SALT for that reason and no
|
|
17
17
|
* other.
|
|
18
18
|
*
|
|
@@ -11,8 +11,8 @@
|
|
|
11
11
|
* module that reads a .env from the caller's cwd is a trap — see GOTCHAS G26),
|
|
12
12
|
* it constructs no transport, and it registers no process signal handler and
|
|
13
13
|
* calls no process.exit. Importing it is therefore inert, with one exception:
|
|
14
|
-
* `withAnalytics` pulls in the analytics singleton
|
|
15
|
-
*
|
|
14
|
+
* `withAnalytics` pulls in the analytics singleton that reads the analytics
|
|
15
|
+
* environment at module load (via loadAnalyticsConfig). A test that imports
|
|
16
16
|
* this module pins ANALYTICS_ENABLED and ANALYTICS_SALT for that reason and no
|
|
17
17
|
* other.
|
|
18
18
|
*
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dangahagan/weather-mcp",
|
|
3
|
-
"version": "1.33.
|
|
3
|
+
"version": "1.33.20",
|
|
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",
|
|
@@ -70,10 +70,10 @@
|
|
|
70
70
|
"url": "https://github.com/weather-mcp/weather-mcp/issues"
|
|
71
71
|
},
|
|
72
72
|
"dependencies": {
|
|
73
|
-
"@modelcontextprotocol/sdk": "^1.30.
|
|
73
|
+
"@modelcontextprotocol/sdk": "^1.30.1",
|
|
74
74
|
"astronomy-engine": "^2.1.19",
|
|
75
75
|
"axios": "^1.20.0",
|
|
76
|
-
"dotenv": "^
|
|
76
|
+
"dotenv": "^18.0.4",
|
|
77
77
|
"fast-xml-parser": "^5.11.1",
|
|
78
78
|
"luxon": "^3.7.2",
|
|
79
79
|
"ngeohash": "^0.6.4",
|
|
@@ -81,7 +81,7 @@
|
|
|
81
81
|
"tz-lookup": "^6.1.25"
|
|
82
82
|
},
|
|
83
83
|
"optionalDependencies": {
|
|
84
|
-
"mqtt": "^5.
|
|
84
|
+
"mqtt": "^5.16.0"
|
|
85
85
|
},
|
|
86
86
|
"overrides": {
|
|
87
87
|
"fast-uri": "3.1.8"
|
|
@@ -89,11 +89,11 @@
|
|
|
89
89
|
"devDependencies": {
|
|
90
90
|
"@types/luxon": "^3.7.5",
|
|
91
91
|
"@types/ngeohash": "^0.6.8",
|
|
92
|
-
"@types/node": "^26.
|
|
92
|
+
"@types/node": "^26.6.2",
|
|
93
93
|
"@types/pngjs": "^6.0.5",
|
|
94
94
|
"@types/tz-lookup": "^6.1.2",
|
|
95
|
-
"@vitest/coverage-v8": "^5.0.
|
|
96
|
-
"tsx": "^4.23.
|
|
95
|
+
"@vitest/coverage-v8": "^5.0.2",
|
|
96
|
+
"tsx": "^4.23.15",
|
|
97
97
|
"typescript": "^7.0.2",
|
|
98
98
|
"vitest": "^5.0.0"
|
|
99
99
|
}
|