@dangahagan/weather-mcp 0.1.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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openmeteo.js","sourceRoot":"","sources":["../../src/services/openmeteo.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,201 @@
1
+ /**
2
+ * Type definitions for NOAA Weather API responses
3
+ */
4
+ /**
5
+ * Common properties in NOAA API responses
6
+ */
7
+ export interface NOAAResponse<T> {
8
+ '@context'?: unknown;
9
+ type?: string;
10
+ geometry?: {
11
+ type: string;
12
+ coordinates: number[];
13
+ };
14
+ properties: T;
15
+ }
16
+ /**
17
+ * Response from /points/{lat},{lon} endpoint
18
+ */
19
+ export interface PointsProperties {
20
+ '@id': string;
21
+ cwa: string;
22
+ forecastOffice: string;
23
+ gridId: string;
24
+ gridX: number;
25
+ gridY: number;
26
+ forecast: string;
27
+ forecastHourly: string;
28
+ forecastGridData: string;
29
+ observationStations: string;
30
+ relativeLocation: {
31
+ type: string;
32
+ geometry: {
33
+ type: string;
34
+ coordinates: number[];
35
+ };
36
+ properties: {
37
+ city: string;
38
+ state: string;
39
+ distance: {
40
+ unitCode: string;
41
+ value: number;
42
+ };
43
+ bearing: {
44
+ unitCode: string;
45
+ value: number;
46
+ };
47
+ };
48
+ };
49
+ forecastZone: string;
50
+ county: string;
51
+ fireWeatherZone: string;
52
+ timeZone: string;
53
+ radarStation: string;
54
+ }
55
+ export type PointsResponse = NOAAResponse<PointsProperties>;
56
+ /**
57
+ * Forecast period from /gridpoints/{office}/{x},{y}/forecast
58
+ */
59
+ export interface ForecastPeriod {
60
+ number: number;
61
+ name: string;
62
+ startTime: string;
63
+ endTime: string;
64
+ isDaytime: boolean;
65
+ temperature: number;
66
+ temperatureUnit: 'F' | 'C';
67
+ temperatureTrend?: string | null;
68
+ probabilityOfPrecipitation: {
69
+ unitCode: string;
70
+ value: number | null;
71
+ };
72
+ dewpoint: {
73
+ unitCode: string;
74
+ value: number;
75
+ };
76
+ relativeHumidity: {
77
+ unitCode: string;
78
+ value: number;
79
+ };
80
+ windSpeed: string;
81
+ windDirection: string;
82
+ icon: string;
83
+ shortForecast: string;
84
+ detailedForecast: string;
85
+ }
86
+ /**
87
+ * Response from forecast endpoints
88
+ */
89
+ export interface ForecastProperties {
90
+ updated: string;
91
+ units: string;
92
+ forecastGenerator: string;
93
+ generatedAt: string;
94
+ updateTime: string;
95
+ validTimes: string;
96
+ elevation: {
97
+ unitCode: string;
98
+ value: number;
99
+ };
100
+ periods: ForecastPeriod[];
101
+ }
102
+ export type ForecastResponse = NOAAResponse<ForecastProperties>;
103
+ /**
104
+ * Quantitative value with unit
105
+ */
106
+ export interface QuantitativeValue {
107
+ unitCode: string;
108
+ value: number | null;
109
+ qualityControl?: string;
110
+ }
111
+ /**
112
+ * Observation data from /stations/{id}/observations
113
+ */
114
+ export interface ObservationProperties {
115
+ '@id': string;
116
+ '@type': string;
117
+ elevation: QuantitativeValue;
118
+ station: string;
119
+ timestamp: string;
120
+ rawMessage?: string;
121
+ textDescription?: string;
122
+ icon?: string;
123
+ presentWeather?: Array<{
124
+ intensity?: string;
125
+ modifier?: string;
126
+ weather: string;
127
+ rawString: string;
128
+ }>;
129
+ temperature: QuantitativeValue;
130
+ dewpoint: QuantitativeValue;
131
+ windDirection: QuantitativeValue;
132
+ windSpeed: QuantitativeValue;
133
+ windGust: QuantitativeValue;
134
+ barometricPressure: QuantitativeValue;
135
+ seaLevelPressure: QuantitativeValue;
136
+ visibility: QuantitativeValue;
137
+ maxTemperatureLast24Hours: QuantitativeValue;
138
+ minTemperatureLast24Hours: QuantitativeValue;
139
+ precipitationLastHour: QuantitativeValue;
140
+ precipitationLast3Hours: QuantitativeValue;
141
+ precipitationLast6Hours: QuantitativeValue;
142
+ relativeHumidity: QuantitativeValue;
143
+ windChill: QuantitativeValue;
144
+ heatIndex: QuantitativeValue;
145
+ cloudLayers?: Array<{
146
+ base: QuantitativeValue;
147
+ amount: string;
148
+ }>;
149
+ }
150
+ export type ObservationResponse = NOAAResponse<ObservationProperties>;
151
+ /**
152
+ * Collection of observations
153
+ */
154
+ export interface ObservationCollectionResponse {
155
+ '@context'?: unknown;
156
+ type: string;
157
+ features: ObservationResponse[];
158
+ }
159
+ /**
160
+ * Weather station information
161
+ */
162
+ export interface StationProperties {
163
+ '@id': string;
164
+ '@type': string;
165
+ elevation: QuantitativeValue;
166
+ stationIdentifier: string;
167
+ name: string;
168
+ timeZone: string;
169
+ forecast?: string;
170
+ county?: string;
171
+ fireWeatherZone?: string;
172
+ }
173
+ export type StationResponse = NOAAResponse<StationProperties>;
174
+ /**
175
+ * Collection of stations
176
+ */
177
+ export interface StationCollectionResponse {
178
+ '@context'?: unknown;
179
+ type: string;
180
+ features: StationResponse[];
181
+ observationStations?: string[];
182
+ }
183
+ /**
184
+ * Error response from NOAA API
185
+ */
186
+ export interface NOAAErrorResponse {
187
+ correlationId: string;
188
+ title: string;
189
+ type: string;
190
+ status: number;
191
+ detail: string;
192
+ instance?: string;
193
+ }
194
+ /**
195
+ * Helper type for converting units
196
+ */
197
+ export type TemperatureUnit = 'F' | 'C' | 'K';
198
+ export type SpeedUnit = 'mph' | 'kph' | 'mps' | 'knots';
199
+ export type DistanceUnit = 'miles' | 'km' | 'meters' | 'feet';
200
+ export type PressureUnit = 'mb' | 'hPa' | 'inHg' | 'Pa';
201
+ //# sourceMappingURL=noaa.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"noaa.d.ts","sourceRoot":"","sources":["../../src/types/noaa.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Type definitions for NOAA Weather API responses
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=noaa.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"noaa.js","sourceRoot":"","sources":["../../src/types/noaa.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,117 @@
1
+ /**
2
+ * TypeScript type definitions for Open-Meteo Historical Weather API
3
+ * API Documentation: https://open-meteo.com/en/docs/historical-weather-api
4
+ */
5
+ /**
6
+ * Hourly weather variables available from Open-Meteo
7
+ */
8
+ export interface OpenMeteoHourlyData {
9
+ time: string[];
10
+ temperature_2m?: number[];
11
+ relative_humidity_2m?: number[];
12
+ dewpoint_2m?: number[];
13
+ apparent_temperature?: number[];
14
+ precipitation?: number[];
15
+ rain?: number[];
16
+ snowfall?: number[];
17
+ snow_depth?: number[];
18
+ weather_code?: number[];
19
+ pressure_msl?: number[];
20
+ surface_pressure?: number[];
21
+ cloud_cover?: number[];
22
+ wind_speed_10m?: number[];
23
+ wind_direction_10m?: number[];
24
+ wind_gusts_10m?: number[];
25
+ soil_temperature_0_to_7cm?: number[];
26
+ soil_moisture_0_to_7cm?: number[];
27
+ }
28
+ /**
29
+ * Daily weather variables available from Open-Meteo
30
+ */
31
+ export interface OpenMeteoDailyData {
32
+ time: string[];
33
+ temperature_2m_max?: number[];
34
+ temperature_2m_min?: number[];
35
+ temperature_2m_mean?: number[];
36
+ apparent_temperature_max?: number[];
37
+ apparent_temperature_min?: number[];
38
+ apparent_temperature_mean?: number[];
39
+ precipitation_sum?: number[];
40
+ rain_sum?: number[];
41
+ snowfall_sum?: number[];
42
+ precipitation_hours?: number[];
43
+ weather_code?: number[];
44
+ sunrise?: string[];
45
+ sunset?: string[];
46
+ sunshine_duration?: number[];
47
+ wind_speed_10m_max?: number[];
48
+ wind_gusts_10m_max?: number[];
49
+ wind_direction_10m_dominant?: number[];
50
+ }
51
+ /**
52
+ * Units used in the API response
53
+ */
54
+ export interface OpenMeteoHourlyUnits {
55
+ time?: string;
56
+ temperature_2m?: string;
57
+ relative_humidity_2m?: string;
58
+ dewpoint_2m?: string;
59
+ apparent_temperature?: string;
60
+ precipitation?: string;
61
+ rain?: string;
62
+ snowfall?: string;
63
+ snow_depth?: string;
64
+ weather_code?: string;
65
+ pressure_msl?: string;
66
+ surface_pressure?: string;
67
+ cloud_cover?: string;
68
+ wind_speed_10m?: string;
69
+ wind_direction_10m?: string;
70
+ wind_gusts_10m?: string;
71
+ soil_temperature_0_to_7cm?: string;
72
+ soil_moisture_0_to_7cm?: string;
73
+ }
74
+ export interface OpenMeteoDailyUnits {
75
+ time?: string;
76
+ temperature_2m_max?: string;
77
+ temperature_2m_min?: string;
78
+ temperature_2m_mean?: string;
79
+ apparent_temperature_max?: string;
80
+ apparent_temperature_min?: string;
81
+ apparent_temperature_mean?: string;
82
+ precipitation_sum?: string;
83
+ rain_sum?: string;
84
+ snowfall_sum?: string;
85
+ precipitation_hours?: string;
86
+ weather_code?: string;
87
+ sunrise?: string;
88
+ sunset?: string;
89
+ sunshine_duration?: string;
90
+ wind_speed_10m_max?: string;
91
+ wind_gusts_10m_max?: string;
92
+ wind_direction_10m_dominant?: string;
93
+ }
94
+ /**
95
+ * Complete API response from Open-Meteo Historical Weather API
96
+ */
97
+ export interface OpenMeteoHistoricalResponse {
98
+ latitude: number;
99
+ longitude: number;
100
+ generationtime_ms: number;
101
+ utc_offset_seconds: number;
102
+ timezone: string;
103
+ timezone_abbreviation: string;
104
+ elevation: number;
105
+ hourly_units?: OpenMeteoHourlyUnits;
106
+ hourly?: OpenMeteoHourlyData;
107
+ daily_units?: OpenMeteoDailyUnits;
108
+ daily?: OpenMeteoDailyData;
109
+ }
110
+ /**
111
+ * Error response from Open-Meteo API
112
+ */
113
+ export interface OpenMeteoErrorResponse {
114
+ error: boolean;
115
+ reason: string;
116
+ }
117
+ //# sourceMappingURL=openmeteo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openmeteo.d.ts","sourceRoot":"","sources":["../../src/types/openmeteo.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * TypeScript type definitions for Open-Meteo Historical Weather API
3
+ * API Documentation: https://open-meteo.com/en/docs/historical-weather-api
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=openmeteo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openmeteo.js","sourceRoot":"","sources":["../../src/types/openmeteo.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Utility functions for unit conversion and formatting
3
+ */
4
+ import { QuantitativeValue } from '../types/noaa.js';
5
+ /**
6
+ * Extract numeric value from QuantitativeValue, handling null values
7
+ */
8
+ export declare function extractValue(qv: QuantitativeValue | undefined): number | null;
9
+ /**
10
+ * Convert Celsius to Fahrenheit
11
+ */
12
+ export declare function celsiusToFahrenheit(celsius: number): number;
13
+ /**
14
+ * Convert meters per second to miles per hour
15
+ */
16
+ export declare function mpsToMph(mps: number): number;
17
+ /**
18
+ * Convert kilometers per hour to miles per hour
19
+ */
20
+ export declare function kphToMph(kph: number): number;
21
+ /**
22
+ * Convert meters to miles
23
+ */
24
+ export declare function metersToMiles(meters: number): number;
25
+ /**
26
+ * Convert meters to feet
27
+ */
28
+ export declare function metersToFeet(meters: number): number;
29
+ /**
30
+ * Convert Pascals to inches of mercury
31
+ */
32
+ export declare function pascalsToInHg(pa: number): number;
33
+ /**
34
+ * Convert Pascals to millibars/hectopascals
35
+ */
36
+ export declare function pascalsToMb(pa: number): number;
37
+ /**
38
+ * Format temperature with unit
39
+ */
40
+ export declare function formatTemperature(qv: QuantitativeValue | undefined, preferFahrenheit?: boolean): string;
41
+ /**
42
+ * Format wind speed with unit
43
+ */
44
+ export declare function formatWindSpeed(qv: QuantitativeValue | undefined): string;
45
+ /**
46
+ * Format visibility with unit
47
+ */
48
+ export declare function formatVisibility(qv: QuantitativeValue | undefined): string;
49
+ /**
50
+ * Format pressure with unit
51
+ */
52
+ export declare function formatPressure(qv: QuantitativeValue | undefined): string;
53
+ /**
54
+ * Format a percentage value
55
+ */
56
+ export declare function formatPercentage(qv: QuantitativeValue | undefined): string;
57
+ /**
58
+ * Format wind direction from degrees to cardinal direction
59
+ */
60
+ export declare function formatWindDirection(qv: QuantitativeValue | undefined): string;
61
+ /**
62
+ * Format date/time in readable format
63
+ */
64
+ export declare function formatDateTime(isoString: string): string;
65
+ /**
66
+ * Format date only
67
+ */
68
+ export declare function formatDate(isoString: string): string;
69
+ //# sourceMappingURL=units.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"units.d.ts","sourceRoot":"","sources":["../../src/utils/units.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD;;GAEG;AACH,wBAAgB,YAAY,CAAC,EAAE,EAAE,iBAAiB,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAK7E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE5C;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE5C;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,iBAAiB,GAAG,SAAS,EAAE,gBAAgB,UAAO,GAAG,MAAM,CAcpG;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,iBAAiB,GAAG,SAAS,GAAG,MAAM,CAazE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,iBAAiB,GAAG,SAAS,GAAG,MAAM,CAO1E;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,iBAAiB,GAAG,SAAS,GAAG,MAAM,CAOxE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,iBAAiB,GAAG,SAAS,GAAG,MAAM,CAK1E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,iBAAiB,GAAG,SAAS,GAAG,MAAM,CAQ7E;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAUxD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAQpD"}
@@ -0,0 +1,158 @@
1
+ /**
2
+ * Utility functions for unit conversion and formatting
3
+ */
4
+ /**
5
+ * Extract numeric value from QuantitativeValue, handling null values
6
+ */
7
+ export function extractValue(qv) {
8
+ if (!qv || qv.value === null || qv.value === undefined) {
9
+ return null;
10
+ }
11
+ return qv.value;
12
+ }
13
+ /**
14
+ * Convert Celsius to Fahrenheit
15
+ */
16
+ export function celsiusToFahrenheit(celsius) {
17
+ return (celsius * 9 / 5) + 32;
18
+ }
19
+ /**
20
+ * Convert meters per second to miles per hour
21
+ */
22
+ export function mpsToMph(mps) {
23
+ return mps * 2.23694;
24
+ }
25
+ /**
26
+ * Convert kilometers per hour to miles per hour
27
+ */
28
+ export function kphToMph(kph) {
29
+ return kph * 0.621371;
30
+ }
31
+ /**
32
+ * Convert meters to miles
33
+ */
34
+ export function metersToMiles(meters) {
35
+ return meters * 0.000621371;
36
+ }
37
+ /**
38
+ * Convert meters to feet
39
+ */
40
+ export function metersToFeet(meters) {
41
+ return meters * 3.28084;
42
+ }
43
+ /**
44
+ * Convert Pascals to inches of mercury
45
+ */
46
+ export function pascalsToInHg(pa) {
47
+ return pa * 0.0002953;
48
+ }
49
+ /**
50
+ * Convert Pascals to millibars/hectopascals
51
+ */
52
+ export function pascalsToMb(pa) {
53
+ return pa / 100;
54
+ }
55
+ /**
56
+ * Format temperature with unit
57
+ */
58
+ export function formatTemperature(qv, preferFahrenheit = true) {
59
+ const value = extractValue(qv);
60
+ if (value === null)
61
+ return 'N/A';
62
+ // NOAA returns temperature in Celsius in unitCode format "wmoUnit:degC"
63
+ if (qv?.unitCode?.includes('degC')) {
64
+ if (preferFahrenheit) {
65
+ return `${Math.round(celsiusToFahrenheit(value))}°F`;
66
+ }
67
+ return `${Math.round(value)}°C`;
68
+ }
69
+ // If already in Fahrenheit
70
+ return `${Math.round(value)}°F`;
71
+ }
72
+ /**
73
+ * Format wind speed with unit
74
+ */
75
+ export function formatWindSpeed(qv) {
76
+ const value = extractValue(qv);
77
+ if (value === null)
78
+ return 'Calm';
79
+ // Convert to mph if needed
80
+ let mph = value;
81
+ if (qv?.unitCode?.includes('km_h')) {
82
+ mph = kphToMph(value);
83
+ }
84
+ else if (qv?.unitCode?.includes('m_s')) {
85
+ mph = mpsToMph(value);
86
+ }
87
+ return `${Math.round(mph)} mph`;
88
+ }
89
+ /**
90
+ * Format visibility with unit
91
+ */
92
+ export function formatVisibility(qv) {
93
+ const value = extractValue(qv);
94
+ if (value === null)
95
+ return 'N/A';
96
+ // Convert meters to miles
97
+ const miles = metersToMiles(value);
98
+ return `${miles.toFixed(1)} miles`;
99
+ }
100
+ /**
101
+ * Format pressure with unit
102
+ */
103
+ export function formatPressure(qv) {
104
+ const value = extractValue(qv);
105
+ if (value === null)
106
+ return 'N/A';
107
+ // Convert Pascals to inHg
108
+ const inHg = pascalsToInHg(value);
109
+ return `${inHg.toFixed(2)} inHg`;
110
+ }
111
+ /**
112
+ * Format a percentage value
113
+ */
114
+ export function formatPercentage(qv) {
115
+ const value = extractValue(qv);
116
+ if (value === null)
117
+ return 'N/A';
118
+ return `${Math.round(value)}%`;
119
+ }
120
+ /**
121
+ * Format wind direction from degrees to cardinal direction
122
+ */
123
+ export function formatWindDirection(qv) {
124
+ const degrees = extractValue(qv);
125
+ if (degrees === null)
126
+ return 'Variable';
127
+ const directions = ['N', 'NNE', 'NE', 'ENE', 'E', 'ESE', 'SE', 'SSE',
128
+ 'S', 'SSW', 'SW', 'WSW', 'W', 'WNW', 'NW', 'NNW'];
129
+ const index = Math.round(degrees / 22.5) % 16;
130
+ return directions[index];
131
+ }
132
+ /**
133
+ * Format date/time in readable format
134
+ */
135
+ export function formatDateTime(isoString) {
136
+ const date = new Date(isoString);
137
+ return date.toLocaleString('en-US', {
138
+ weekday: 'short',
139
+ month: 'short',
140
+ day: 'numeric',
141
+ hour: 'numeric',
142
+ minute: '2-digit',
143
+ timeZoneName: 'short'
144
+ });
145
+ }
146
+ /**
147
+ * Format date only
148
+ */
149
+ export function formatDate(isoString) {
150
+ const date = new Date(isoString);
151
+ return date.toLocaleDateString('en-US', {
152
+ weekday: 'long',
153
+ month: 'long',
154
+ day: 'numeric',
155
+ year: 'numeric'
156
+ });
157
+ }
158
+ //# sourceMappingURL=units.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"units.js","sourceRoot":"","sources":["../../src/utils/units.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,61 @@
1
+ {
2
+ "name": "@dangahagan/weather-mcp",
3
+ "version": "0.1.0",
4
+ "description": "MCP (Model Context Protocol) server providing weather data from NOAA and Open-Meteo APIs. Supports forecasts, current conditions, and historical weather data (1940-present) with no API keys required.",
5
+ "main": "dist/index.js",
6
+ "type": "module",
7
+ "bin": {
8
+ "weather-mcp": "dist/index.js"
9
+ },
10
+ "files": [
11
+ "dist",
12
+ "README.md",
13
+ "LICENSE"
14
+ ],
15
+ "engines": {
16
+ "node": ">=18.0.0"
17
+ },
18
+ "scripts": {
19
+ "build": "tsc",
20
+ "dev": "tsx src/index.ts",
21
+ "start": "node dist/index.js",
22
+ "prepublishOnly": "npm run build",
23
+ "test": "echo \"Error: no test specified\" && exit 1"
24
+ },
25
+ "keywords": [
26
+ "mcp",
27
+ "mcp-server",
28
+ "model-context-protocol",
29
+ "weather",
30
+ "weather-api",
31
+ "noaa",
32
+ "open-meteo",
33
+ "forecast",
34
+ "climate",
35
+ "historical-weather",
36
+ "claude",
37
+ "claude-code",
38
+ "ai",
39
+ "llm"
40
+ ],
41
+ "author": "Dan Gahagan",
42
+ "license": "MIT",
43
+ "homepage": "https://github.com/dgahagan/weather-mcp#readme",
44
+ "repository": {
45
+ "type": "git",
46
+ "url": "git+https://github.com/dgahagan/weather-mcp.git"
47
+ },
48
+ "bugs": {
49
+ "url": "https://github.com/dgahagan/weather-mcp/issues"
50
+ },
51
+ "dependencies": {
52
+ "@modelcontextprotocol/sdk": "^1.21.0",
53
+ "axios": "^1.13.1",
54
+ "dotenv": "^17.2.3"
55
+ },
56
+ "devDependencies": {
57
+ "@types/node": "^24.10.0",
58
+ "tsx": "^4.20.6",
59
+ "typescript": "^5.9.3"
60
+ }
61
+ }