@ryancardin/noaa-tides-currents-mcp-server 1.0.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.
- package/.claude/settings.local.json +29 -0
- package/CLAUDE.md +71 -0
- package/Dockerfile +14 -0
- package/LICENSE +21 -0
- package/README.md +234 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +9 -0
- package/dist/interfaces/config.d.ts +6 -0
- package/dist/interfaces/config.js +1 -0
- package/dist/interfaces/moon.d.ts +65 -0
- package/dist/interfaces/moon.js +35 -0
- package/dist/interfaces/noaa.d.ts +334 -0
- package/dist/interfaces/noaa.js +98 -0
- package/dist/interfaces/parameters.d.ts +18 -0
- package/dist/interfaces/parameters.js +5 -0
- package/dist/interfaces/sun.d.ts +103 -0
- package/dist/interfaces/sun.js +45 -0
- package/dist/mcp-server.d.ts +12 -0
- package/dist/mcp-server.js +103 -0
- package/dist/moon-phase-service.d.ts +122 -0
- package/dist/moon-phase-service.js +187 -0
- package/dist/noaa-service.d.ts +60 -0
- package/dist/noaa-service.js +159 -0
- package/dist/schemas/common.d.ts +14 -0
- package/dist/schemas/common.js +18 -0
- package/dist/schemas/dpapi.d.ts +198 -0
- package/dist/schemas/dpapi.js +89 -0
- package/dist/server/config.d.ts +9 -0
- package/dist/server/config.js +40 -0
- package/dist/server/mcp-server.d.ts +12 -0
- package/dist/server/mcp-server.js +103 -0
- package/dist/services/dpapi-service.d.ts +72 -0
- package/dist/services/dpapi-service.js +164 -0
- package/dist/services/moon-phase-service.d.ts +34 -0
- package/dist/services/moon-phase-service.js +147 -0
- package/dist/services/noaa-parameters-service.d.ts +76 -0
- package/dist/services/noaa-parameters-service.js +128 -0
- package/dist/services/noaa-service.d.ts +52 -0
- package/dist/services/noaa-service.js +151 -0
- package/dist/services/sun-service.d.ts +60 -0
- package/dist/services/sun-service.js +234 -0
- package/dist/sun-service.d.ts +184 -0
- package/dist/sun-service.js +218 -0
- package/dist/tools/derived-product-tools.d.ts +6 -0
- package/dist/tools/derived-product-tools.js +168 -0
- package/dist/tools/index.d.ts +16 -0
- package/dist/tools/index.js +36 -0
- package/dist/tools/moon-tools.d.ts +6 -0
- package/dist/tools/moon-tools.js +69 -0
- package/dist/tools/parameter-tools.d.ts +6 -0
- package/dist/tools/parameter-tools.js +77 -0
- package/dist/tools/station-tools.d.ts +6 -0
- package/dist/tools/station-tools.js +51 -0
- package/dist/tools/sun-tools.d.ts +6 -0
- package/dist/tools/sun-tools.js +109 -0
- package/dist/tools/water-tools.d.ts +6 -0
- package/dist/tools/water-tools.js +150 -0
- package/dist/types/moon.d.ts +26 -0
- package/dist/types/moon.js +14 -0
- package/dist/types/sun.d.ts +49 -0
- package/dist/types/sun.js +19 -0
- package/dist/types.d.ts +337 -0
- package/dist/types.js +98 -0
- package/package.json +56 -0
- package/smithery.yaml +16 -0
- package/src/index.ts +13 -0
- package/src/interfaces/moon.ts +44 -0
- package/src/interfaces/noaa.ts +130 -0
- package/src/interfaces/parameters.ts +20 -0
- package/src/interfaces/sun.ts +57 -0
- package/src/schemas/common.ts +23 -0
- package/src/schemas/dpapi.ts +99 -0
- package/src/server/config.ts +43 -0
- package/src/server/mcp-server.ts +135 -0
- package/src/services/dpapi-service.ts +187 -0
- package/src/services/moon-phase-service.ts +167 -0
- package/src/services/noaa-parameters-service.ts +139 -0
- package/src/services/noaa-service.ts +171 -0
- package/src/services/sun-service.ts +275 -0
- package/src/tools/derived-product-tools.ts +180 -0
- package/src/tools/index.ts +40 -0
- package/src/tools/moon-tools.ts +79 -0
- package/src/tools/parameter-tools.ts +82 -0
- package/src/tools/station-tools.ts +57 -0
- package/src/tools/sun-tools.ts +120 -0
- package/src/tools/water-tools.ts +166 -0
- package/src/types/moon.ts +27 -0
- package/src/types/sun.ts +51 -0
- package/src/types/suncalc.d.ts +110 -0
- package/test-dpapi.js +0 -0
- package/tsconfig.json +15 -0
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,337 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const GetWaterLevelsSchema: z.ZodEffects<z.ZodObject<{
|
|
3
|
+
station: z.ZodString;
|
|
4
|
+
date: z.ZodOptional<z.ZodString>;
|
|
5
|
+
begin_date: z.ZodOptional<z.ZodString>;
|
|
6
|
+
end_date: z.ZodOptional<z.ZodString>;
|
|
7
|
+
range: z.ZodOptional<z.ZodNumber>;
|
|
8
|
+
datum: z.ZodOptional<z.ZodString>;
|
|
9
|
+
units: z.ZodOptional<z.ZodEnum<["english", "metric"]>>;
|
|
10
|
+
time_zone: z.ZodOptional<z.ZodEnum<["gmt", "lst", "lst_ldt"]>>;
|
|
11
|
+
format: z.ZodOptional<z.ZodEnum<["json", "xml", "csv"]>>;
|
|
12
|
+
}, "strip", z.ZodTypeAny, {
|
|
13
|
+
station: string;
|
|
14
|
+
date?: string | undefined;
|
|
15
|
+
format?: "json" | "xml" | "csv" | undefined;
|
|
16
|
+
range?: number | undefined;
|
|
17
|
+
end_date?: string | undefined;
|
|
18
|
+
begin_date?: string | undefined;
|
|
19
|
+
datum?: string | undefined;
|
|
20
|
+
units?: "english" | "metric" | undefined;
|
|
21
|
+
time_zone?: "gmt" | "lst" | "lst_ldt" | undefined;
|
|
22
|
+
}, {
|
|
23
|
+
station: string;
|
|
24
|
+
date?: string | undefined;
|
|
25
|
+
format?: "json" | "xml" | "csv" | undefined;
|
|
26
|
+
range?: number | undefined;
|
|
27
|
+
end_date?: string | undefined;
|
|
28
|
+
begin_date?: string | undefined;
|
|
29
|
+
datum?: string | undefined;
|
|
30
|
+
units?: "english" | "metric" | undefined;
|
|
31
|
+
time_zone?: "gmt" | "lst" | "lst_ldt" | undefined;
|
|
32
|
+
}>, {
|
|
33
|
+
station: string;
|
|
34
|
+
date?: string | undefined;
|
|
35
|
+
format?: "json" | "xml" | "csv" | undefined;
|
|
36
|
+
range?: number | undefined;
|
|
37
|
+
end_date?: string | undefined;
|
|
38
|
+
begin_date?: string | undefined;
|
|
39
|
+
datum?: string | undefined;
|
|
40
|
+
units?: "english" | "metric" | undefined;
|
|
41
|
+
time_zone?: "gmt" | "lst" | "lst_ldt" | undefined;
|
|
42
|
+
}, {
|
|
43
|
+
station: string;
|
|
44
|
+
date?: string | undefined;
|
|
45
|
+
format?: "json" | "xml" | "csv" | undefined;
|
|
46
|
+
range?: number | undefined;
|
|
47
|
+
end_date?: string | undefined;
|
|
48
|
+
begin_date?: string | undefined;
|
|
49
|
+
datum?: string | undefined;
|
|
50
|
+
units?: "english" | "metric" | undefined;
|
|
51
|
+
time_zone?: "gmt" | "lst" | "lst_ldt" | undefined;
|
|
52
|
+
}>;
|
|
53
|
+
export declare const GetTidePredictionsSchema: z.ZodEffects<z.ZodObject<{
|
|
54
|
+
station: z.ZodString;
|
|
55
|
+
begin_date: z.ZodOptional<z.ZodString>;
|
|
56
|
+
end_date: z.ZodOptional<z.ZodString>;
|
|
57
|
+
date: z.ZodOptional<z.ZodString>;
|
|
58
|
+
range: z.ZodOptional<z.ZodNumber>;
|
|
59
|
+
datum: z.ZodOptional<z.ZodString>;
|
|
60
|
+
units: z.ZodOptional<z.ZodEnum<["english", "metric"]>>;
|
|
61
|
+
time_zone: z.ZodOptional<z.ZodEnum<["gmt", "lst", "lst_ldt"]>>;
|
|
62
|
+
interval: z.ZodOptional<z.ZodString>;
|
|
63
|
+
format: z.ZodOptional<z.ZodEnum<["json", "xml", "csv"]>>;
|
|
64
|
+
}, "strip", z.ZodTypeAny, {
|
|
65
|
+
station: string;
|
|
66
|
+
interval?: string | undefined;
|
|
67
|
+
date?: string | undefined;
|
|
68
|
+
format?: "json" | "xml" | "csv" | undefined;
|
|
69
|
+
range?: number | undefined;
|
|
70
|
+
end_date?: string | undefined;
|
|
71
|
+
begin_date?: string | undefined;
|
|
72
|
+
datum?: string | undefined;
|
|
73
|
+
units?: "english" | "metric" | undefined;
|
|
74
|
+
time_zone?: "gmt" | "lst" | "lst_ldt" | undefined;
|
|
75
|
+
}, {
|
|
76
|
+
station: string;
|
|
77
|
+
interval?: string | undefined;
|
|
78
|
+
date?: string | undefined;
|
|
79
|
+
format?: "json" | "xml" | "csv" | undefined;
|
|
80
|
+
range?: number | undefined;
|
|
81
|
+
end_date?: string | undefined;
|
|
82
|
+
begin_date?: string | undefined;
|
|
83
|
+
datum?: string | undefined;
|
|
84
|
+
units?: "english" | "metric" | undefined;
|
|
85
|
+
time_zone?: "gmt" | "lst" | "lst_ldt" | undefined;
|
|
86
|
+
}>, {
|
|
87
|
+
station: string;
|
|
88
|
+
interval?: string | undefined;
|
|
89
|
+
date?: string | undefined;
|
|
90
|
+
format?: "json" | "xml" | "csv" | undefined;
|
|
91
|
+
range?: number | undefined;
|
|
92
|
+
end_date?: string | undefined;
|
|
93
|
+
begin_date?: string | undefined;
|
|
94
|
+
datum?: string | undefined;
|
|
95
|
+
units?: "english" | "metric" | undefined;
|
|
96
|
+
time_zone?: "gmt" | "lst" | "lst_ldt" | undefined;
|
|
97
|
+
}, {
|
|
98
|
+
station: string;
|
|
99
|
+
interval?: string | undefined;
|
|
100
|
+
date?: string | undefined;
|
|
101
|
+
format?: "json" | "xml" | "csv" | undefined;
|
|
102
|
+
range?: number | undefined;
|
|
103
|
+
end_date?: string | undefined;
|
|
104
|
+
begin_date?: string | undefined;
|
|
105
|
+
datum?: string | undefined;
|
|
106
|
+
units?: "english" | "metric" | undefined;
|
|
107
|
+
time_zone?: "gmt" | "lst" | "lst_ldt" | undefined;
|
|
108
|
+
}>;
|
|
109
|
+
export declare const GetCurrentsSchema: z.ZodEffects<z.ZodObject<{
|
|
110
|
+
station: z.ZodString;
|
|
111
|
+
date: z.ZodOptional<z.ZodString>;
|
|
112
|
+
begin_date: z.ZodOptional<z.ZodString>;
|
|
113
|
+
end_date: z.ZodOptional<z.ZodString>;
|
|
114
|
+
range: z.ZodOptional<z.ZodNumber>;
|
|
115
|
+
bin: z.ZodOptional<z.ZodNumber>;
|
|
116
|
+
units: z.ZodOptional<z.ZodEnum<["english", "metric"]>>;
|
|
117
|
+
time_zone: z.ZodOptional<z.ZodEnum<["gmt", "lst", "lst_ldt"]>>;
|
|
118
|
+
format: z.ZodOptional<z.ZodEnum<["json", "xml", "csv"]>>;
|
|
119
|
+
}, "strip", z.ZodTypeAny, {
|
|
120
|
+
station: string;
|
|
121
|
+
date?: string | undefined;
|
|
122
|
+
format?: "json" | "xml" | "csv" | undefined;
|
|
123
|
+
range?: number | undefined;
|
|
124
|
+
end_date?: string | undefined;
|
|
125
|
+
begin_date?: string | undefined;
|
|
126
|
+
units?: "english" | "metric" | undefined;
|
|
127
|
+
time_zone?: "gmt" | "lst" | "lst_ldt" | undefined;
|
|
128
|
+
bin?: number | undefined;
|
|
129
|
+
}, {
|
|
130
|
+
station: string;
|
|
131
|
+
date?: string | undefined;
|
|
132
|
+
format?: "json" | "xml" | "csv" | undefined;
|
|
133
|
+
range?: number | undefined;
|
|
134
|
+
end_date?: string | undefined;
|
|
135
|
+
begin_date?: string | undefined;
|
|
136
|
+
units?: "english" | "metric" | undefined;
|
|
137
|
+
time_zone?: "gmt" | "lst" | "lst_ldt" | undefined;
|
|
138
|
+
bin?: number | undefined;
|
|
139
|
+
}>, {
|
|
140
|
+
station: string;
|
|
141
|
+
date?: string | undefined;
|
|
142
|
+
format?: "json" | "xml" | "csv" | undefined;
|
|
143
|
+
range?: number | undefined;
|
|
144
|
+
end_date?: string | undefined;
|
|
145
|
+
begin_date?: string | undefined;
|
|
146
|
+
units?: "english" | "metric" | undefined;
|
|
147
|
+
time_zone?: "gmt" | "lst" | "lst_ldt" | undefined;
|
|
148
|
+
bin?: number | undefined;
|
|
149
|
+
}, {
|
|
150
|
+
station: string;
|
|
151
|
+
date?: string | undefined;
|
|
152
|
+
format?: "json" | "xml" | "csv" | undefined;
|
|
153
|
+
range?: number | undefined;
|
|
154
|
+
end_date?: string | undefined;
|
|
155
|
+
begin_date?: string | undefined;
|
|
156
|
+
units?: "english" | "metric" | undefined;
|
|
157
|
+
time_zone?: "gmt" | "lst" | "lst_ldt" | undefined;
|
|
158
|
+
bin?: number | undefined;
|
|
159
|
+
}>;
|
|
160
|
+
export declare const GetCurrentPredictionsSchema: z.ZodEffects<z.ZodObject<{
|
|
161
|
+
station: z.ZodString;
|
|
162
|
+
date: z.ZodOptional<z.ZodString>;
|
|
163
|
+
begin_date: z.ZodOptional<z.ZodString>;
|
|
164
|
+
end_date: z.ZodOptional<z.ZodString>;
|
|
165
|
+
range: z.ZodOptional<z.ZodNumber>;
|
|
166
|
+
bin: z.ZodOptional<z.ZodNumber>;
|
|
167
|
+
interval: z.ZodOptional<z.ZodString>;
|
|
168
|
+
vel_type: z.ZodOptional<z.ZodEnum<["speed_dir", "default"]>>;
|
|
169
|
+
units: z.ZodOptional<z.ZodEnum<["english", "metric"]>>;
|
|
170
|
+
time_zone: z.ZodOptional<z.ZodEnum<["gmt", "lst", "lst_ldt"]>>;
|
|
171
|
+
format: z.ZodOptional<z.ZodEnum<["json", "xml", "csv"]>>;
|
|
172
|
+
}, "strip", z.ZodTypeAny, {
|
|
173
|
+
station: string;
|
|
174
|
+
interval?: string | undefined;
|
|
175
|
+
date?: string | undefined;
|
|
176
|
+
format?: "json" | "xml" | "csv" | undefined;
|
|
177
|
+
range?: number | undefined;
|
|
178
|
+
end_date?: string | undefined;
|
|
179
|
+
begin_date?: string | undefined;
|
|
180
|
+
units?: "english" | "metric" | undefined;
|
|
181
|
+
time_zone?: "gmt" | "lst" | "lst_ldt" | undefined;
|
|
182
|
+
bin?: number | undefined;
|
|
183
|
+
vel_type?: "default" | "speed_dir" | undefined;
|
|
184
|
+
}, {
|
|
185
|
+
station: string;
|
|
186
|
+
interval?: string | undefined;
|
|
187
|
+
date?: string | undefined;
|
|
188
|
+
format?: "json" | "xml" | "csv" | undefined;
|
|
189
|
+
range?: number | undefined;
|
|
190
|
+
end_date?: string | undefined;
|
|
191
|
+
begin_date?: string | undefined;
|
|
192
|
+
units?: "english" | "metric" | undefined;
|
|
193
|
+
time_zone?: "gmt" | "lst" | "lst_ldt" | undefined;
|
|
194
|
+
bin?: number | undefined;
|
|
195
|
+
vel_type?: "default" | "speed_dir" | undefined;
|
|
196
|
+
}>, {
|
|
197
|
+
station: string;
|
|
198
|
+
interval?: string | undefined;
|
|
199
|
+
date?: string | undefined;
|
|
200
|
+
format?: "json" | "xml" | "csv" | undefined;
|
|
201
|
+
range?: number | undefined;
|
|
202
|
+
end_date?: string | undefined;
|
|
203
|
+
begin_date?: string | undefined;
|
|
204
|
+
units?: "english" | "metric" | undefined;
|
|
205
|
+
time_zone?: "gmt" | "lst" | "lst_ldt" | undefined;
|
|
206
|
+
bin?: number | undefined;
|
|
207
|
+
vel_type?: "default" | "speed_dir" | undefined;
|
|
208
|
+
}, {
|
|
209
|
+
station: string;
|
|
210
|
+
interval?: string | undefined;
|
|
211
|
+
date?: string | undefined;
|
|
212
|
+
format?: "json" | "xml" | "csv" | undefined;
|
|
213
|
+
range?: number | undefined;
|
|
214
|
+
end_date?: string | undefined;
|
|
215
|
+
begin_date?: string | undefined;
|
|
216
|
+
units?: "english" | "metric" | undefined;
|
|
217
|
+
time_zone?: "gmt" | "lst" | "lst_ldt" | undefined;
|
|
218
|
+
bin?: number | undefined;
|
|
219
|
+
vel_type?: "default" | "speed_dir" | undefined;
|
|
220
|
+
}>;
|
|
221
|
+
export declare const GetMeteorologicalDataSchema: z.ZodEffects<z.ZodObject<{
|
|
222
|
+
station: z.ZodString;
|
|
223
|
+
product: z.ZodString;
|
|
224
|
+
date: z.ZodOptional<z.ZodString>;
|
|
225
|
+
begin_date: z.ZodOptional<z.ZodString>;
|
|
226
|
+
end_date: z.ZodOptional<z.ZodString>;
|
|
227
|
+
range: z.ZodOptional<z.ZodNumber>;
|
|
228
|
+
units: z.ZodOptional<z.ZodEnum<["english", "metric"]>>;
|
|
229
|
+
time_zone: z.ZodOptional<z.ZodEnum<["gmt", "lst", "lst_ldt"]>>;
|
|
230
|
+
format: z.ZodOptional<z.ZodEnum<["json", "xml", "csv"]>>;
|
|
231
|
+
}, "strip", z.ZodTypeAny, {
|
|
232
|
+
product: string;
|
|
233
|
+
station: string;
|
|
234
|
+
date?: string | undefined;
|
|
235
|
+
format?: "json" | "xml" | "csv" | undefined;
|
|
236
|
+
range?: number | undefined;
|
|
237
|
+
end_date?: string | undefined;
|
|
238
|
+
begin_date?: string | undefined;
|
|
239
|
+
units?: "english" | "metric" | undefined;
|
|
240
|
+
time_zone?: "gmt" | "lst" | "lst_ldt" | undefined;
|
|
241
|
+
}, {
|
|
242
|
+
product: string;
|
|
243
|
+
station: string;
|
|
244
|
+
date?: string | undefined;
|
|
245
|
+
format?: "json" | "xml" | "csv" | undefined;
|
|
246
|
+
range?: number | undefined;
|
|
247
|
+
end_date?: string | undefined;
|
|
248
|
+
begin_date?: string | undefined;
|
|
249
|
+
units?: "english" | "metric" | undefined;
|
|
250
|
+
time_zone?: "gmt" | "lst" | "lst_ldt" | undefined;
|
|
251
|
+
}>, {
|
|
252
|
+
product: string;
|
|
253
|
+
station: string;
|
|
254
|
+
date?: string | undefined;
|
|
255
|
+
format?: "json" | "xml" | "csv" | undefined;
|
|
256
|
+
range?: number | undefined;
|
|
257
|
+
end_date?: string | undefined;
|
|
258
|
+
begin_date?: string | undefined;
|
|
259
|
+
units?: "english" | "metric" | undefined;
|
|
260
|
+
time_zone?: "gmt" | "lst" | "lst_ldt" | undefined;
|
|
261
|
+
}, {
|
|
262
|
+
product: string;
|
|
263
|
+
station: string;
|
|
264
|
+
date?: string | undefined;
|
|
265
|
+
format?: "json" | "xml" | "csv" | undefined;
|
|
266
|
+
range?: number | undefined;
|
|
267
|
+
end_date?: string | undefined;
|
|
268
|
+
begin_date?: string | undefined;
|
|
269
|
+
units?: "english" | "metric" | undefined;
|
|
270
|
+
time_zone?: "gmt" | "lst" | "lst_ldt" | undefined;
|
|
271
|
+
}>;
|
|
272
|
+
export declare const GetStationsSchema: z.ZodObject<{
|
|
273
|
+
type: z.ZodOptional<z.ZodString>;
|
|
274
|
+
units: z.ZodOptional<z.ZodEnum<["english", "metric"]>>;
|
|
275
|
+
format: z.ZodOptional<z.ZodEnum<["json", "xml"]>>;
|
|
276
|
+
name: z.ZodOptional<z.ZodString>;
|
|
277
|
+
lat_min: z.ZodOptional<z.ZodNumber>;
|
|
278
|
+
lat_max: z.ZodOptional<z.ZodNumber>;
|
|
279
|
+
lon_min: z.ZodOptional<z.ZodNumber>;
|
|
280
|
+
lon_max: z.ZodOptional<z.ZodNumber>;
|
|
281
|
+
state: z.ZodOptional<z.ZodString>;
|
|
282
|
+
limit: z.ZodOptional<z.ZodNumber>;
|
|
283
|
+
offset: z.ZodOptional<z.ZodNumber>;
|
|
284
|
+
sort_by: z.ZodOptional<z.ZodEnum<["name", "id", "state"]>>;
|
|
285
|
+
sort_order: z.ZodOptional<z.ZodEnum<["asc", "desc"]>>;
|
|
286
|
+
}, "strip", z.ZodTypeAny, {
|
|
287
|
+
name?: string | undefined;
|
|
288
|
+
type?: string | undefined;
|
|
289
|
+
offset?: number | undefined;
|
|
290
|
+
state?: string | undefined;
|
|
291
|
+
format?: "json" | "xml" | undefined;
|
|
292
|
+
lat_min?: number | undefined;
|
|
293
|
+
lat_max?: number | undefined;
|
|
294
|
+
lon_min?: number | undefined;
|
|
295
|
+
lon_max?: number | undefined;
|
|
296
|
+
limit?: number | undefined;
|
|
297
|
+
sort_by?: "name" | "id" | "state" | undefined;
|
|
298
|
+
sort_order?: "desc" | "asc" | undefined;
|
|
299
|
+
units?: "english" | "metric" | undefined;
|
|
300
|
+
}, {
|
|
301
|
+
name?: string | undefined;
|
|
302
|
+
type?: string | undefined;
|
|
303
|
+
offset?: number | undefined;
|
|
304
|
+
state?: string | undefined;
|
|
305
|
+
format?: "json" | "xml" | undefined;
|
|
306
|
+
lat_min?: number | undefined;
|
|
307
|
+
lat_max?: number | undefined;
|
|
308
|
+
lon_min?: number | undefined;
|
|
309
|
+
lon_max?: number | undefined;
|
|
310
|
+
limit?: number | undefined;
|
|
311
|
+
sort_by?: "name" | "id" | "state" | undefined;
|
|
312
|
+
sort_order?: "desc" | "asc" | undefined;
|
|
313
|
+
units?: "english" | "metric" | undefined;
|
|
314
|
+
}>;
|
|
315
|
+
export declare const GetStationDetailsSchema: z.ZodObject<{
|
|
316
|
+
station: z.ZodString;
|
|
317
|
+
units: z.ZodOptional<z.ZodEnum<["english", "metric"]>>;
|
|
318
|
+
format: z.ZodOptional<z.ZodEnum<["json", "xml"]>>;
|
|
319
|
+
}, "strip", z.ZodTypeAny, {
|
|
320
|
+
station: string;
|
|
321
|
+
format?: "json" | "xml" | undefined;
|
|
322
|
+
units?: "english" | "metric" | undefined;
|
|
323
|
+
}, {
|
|
324
|
+
station: string;
|
|
325
|
+
format?: "json" | "xml" | undefined;
|
|
326
|
+
units?: "english" | "metric" | undefined;
|
|
327
|
+
}>;
|
|
328
|
+
export type GetWaterLevelsParams = z.infer<typeof GetWaterLevelsSchema>;
|
|
329
|
+
export type GetTidePredictionsParams = z.infer<typeof GetTidePredictionsSchema>;
|
|
330
|
+
export type GetCurrentsParams = z.infer<typeof GetCurrentsSchema>;
|
|
331
|
+
export type GetCurrentPredictionsParams = z.infer<typeof GetCurrentPredictionsSchema>;
|
|
332
|
+
export type GetMeteorologicalDataParams = z.infer<typeof GetMeteorologicalDataSchema>;
|
|
333
|
+
export type GetStationsParams = z.infer<typeof GetStationsSchema>;
|
|
334
|
+
export type GetStationDetailsParams = z.infer<typeof GetStationDetailsSchema>;
|
|
335
|
+
export interface NoaaConfig {
|
|
336
|
+
applicationName?: string;
|
|
337
|
+
}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
// Common parameter schemas
|
|
3
|
+
const StationSchema = z.string().min(1).describe('Station ID');
|
|
4
|
+
const DateSchema = z.string().optional().describe('Date to retrieve data for ("today", "latest", "recent", or specific date)');
|
|
5
|
+
const BeginDateSchema = z.string().optional().describe('Start date (YYYYMMDD or MM/DD/YYYY)');
|
|
6
|
+
const EndDateSchema = z.string().optional().describe('End date (YYYYMMDD or MM/DD/YYYY)');
|
|
7
|
+
const RangeSchema = z.number().optional().describe('Number of hours to retrieve data for');
|
|
8
|
+
const DatumSchema = z.string().optional().describe('Datum to use (MLLW, MSL, etc.)');
|
|
9
|
+
const UnitsSchema = z.enum(['english', 'metric']).optional().describe('Units to use ("english" or "metric")');
|
|
10
|
+
const TimeZoneSchema = z.enum(['gmt', 'lst', 'lst_ldt']).optional().describe('Time zone (gmt, lst, lst_ldt)');
|
|
11
|
+
const FormatSchema = z.enum(['json', 'xml', 'csv']).optional().describe('Output format (json, xml, csv)');
|
|
12
|
+
const BinSchema = z.number().optional().describe('Bin number');
|
|
13
|
+
const IntervalSchema = z.string().optional().describe('Interval (hilo, hl, h, or a number for minutes)');
|
|
14
|
+
// Water Level Schema
|
|
15
|
+
export const GetWaterLevelsSchema = z.object({
|
|
16
|
+
station: StationSchema,
|
|
17
|
+
date: DateSchema,
|
|
18
|
+
begin_date: BeginDateSchema,
|
|
19
|
+
end_date: EndDateSchema,
|
|
20
|
+
range: RangeSchema,
|
|
21
|
+
datum: DatumSchema,
|
|
22
|
+
units: UnitsSchema,
|
|
23
|
+
time_zone: TimeZoneSchema,
|
|
24
|
+
format: FormatSchema,
|
|
25
|
+
}).refine(data => (data.date || (data.begin_date && data.end_date) || (data.begin_date && data.range) || (data.end_date && data.range) || data.range), { message: "You must provide either 'date', 'begin_date' and 'end_date', 'begin_date' and 'range', 'end_date' and 'range', or just 'range'" });
|
|
26
|
+
// Tide Predictions Schema
|
|
27
|
+
export const GetTidePredictionsSchema = z.object({
|
|
28
|
+
station: StationSchema,
|
|
29
|
+
begin_date: BeginDateSchema,
|
|
30
|
+
end_date: EndDateSchema,
|
|
31
|
+
date: DateSchema,
|
|
32
|
+
range: RangeSchema,
|
|
33
|
+
datum: DatumSchema,
|
|
34
|
+
units: UnitsSchema,
|
|
35
|
+
time_zone: TimeZoneSchema,
|
|
36
|
+
interval: IntervalSchema,
|
|
37
|
+
format: FormatSchema,
|
|
38
|
+
}).refine(data => (data.date || (data.begin_date && data.end_date) || (data.begin_date && data.range) || (data.end_date && data.range) || data.range), { message: "You must provide either 'date', 'begin_date' and 'end_date', 'begin_date' and 'range', 'end_date' and 'range', or just 'range'" });
|
|
39
|
+
// Currents Schema
|
|
40
|
+
export const GetCurrentsSchema = z.object({
|
|
41
|
+
station: StationSchema,
|
|
42
|
+
date: DateSchema,
|
|
43
|
+
begin_date: BeginDateSchema,
|
|
44
|
+
end_date: EndDateSchema,
|
|
45
|
+
range: RangeSchema,
|
|
46
|
+
bin: BinSchema,
|
|
47
|
+
units: UnitsSchema,
|
|
48
|
+
time_zone: TimeZoneSchema,
|
|
49
|
+
format: FormatSchema,
|
|
50
|
+
}).refine(data => (data.date || (data.begin_date && data.end_date) || (data.begin_date && data.range) || (data.end_date && data.range) || data.range), { message: "You must provide either 'date', 'begin_date' and 'end_date', 'begin_date' and 'range', 'end_date' and 'range', or just 'range'" });
|
|
51
|
+
// Current Predictions Schema
|
|
52
|
+
export const GetCurrentPredictionsSchema = z.object({
|
|
53
|
+
station: StationSchema,
|
|
54
|
+
date: DateSchema,
|
|
55
|
+
begin_date: BeginDateSchema,
|
|
56
|
+
end_date: EndDateSchema,
|
|
57
|
+
range: RangeSchema,
|
|
58
|
+
bin: BinSchema,
|
|
59
|
+
interval: z.string().optional().describe('Interval (MAX_SLACK or a number for minutes)'),
|
|
60
|
+
vel_type: z.enum(['speed_dir', 'default']).optional().describe('Velocity type (speed_dir or default)'),
|
|
61
|
+
units: UnitsSchema,
|
|
62
|
+
time_zone: TimeZoneSchema,
|
|
63
|
+
format: FormatSchema,
|
|
64
|
+
}).refine(data => (data.date || (data.begin_date && data.end_date) || (data.begin_date && data.range) || (data.end_date && data.range) || data.range), { message: "You must provide either 'date', 'begin_date' and 'end_date', 'begin_date' and 'range', 'end_date' and 'range', or just 'range'" });
|
|
65
|
+
// Meteorological Data Schema
|
|
66
|
+
export const GetMeteorologicalDataSchema = z.object({
|
|
67
|
+
station: StationSchema,
|
|
68
|
+
product: z.string().min(1).describe('Product (air_temperature, wind, etc.)'),
|
|
69
|
+
date: DateSchema,
|
|
70
|
+
begin_date: BeginDateSchema,
|
|
71
|
+
end_date: EndDateSchema,
|
|
72
|
+
range: RangeSchema,
|
|
73
|
+
units: UnitsSchema,
|
|
74
|
+
time_zone: TimeZoneSchema,
|
|
75
|
+
format: FormatSchema,
|
|
76
|
+
}).refine(data => (data.date || (data.begin_date && data.end_date) || (data.begin_date && data.range) || (data.end_date && data.range) || data.range), { message: "You must provide either 'date', 'begin_date' and 'end_date', 'begin_date' and 'range', 'end_date' and 'range', or just 'range'" });
|
|
77
|
+
// Station List Schema
|
|
78
|
+
export const GetStationsSchema = z.object({
|
|
79
|
+
type: z.string().optional().describe('Station type (waterlevels, currents, etc.)'),
|
|
80
|
+
units: UnitsSchema,
|
|
81
|
+
format: z.enum(['json', 'xml']).optional().describe('Output format (json, xml)'),
|
|
82
|
+
name: z.string().optional().describe('Filter stations by name (partial match)'),
|
|
83
|
+
lat_min: z.number().optional().describe('Minimum latitude boundary'),
|
|
84
|
+
lat_max: z.number().optional().describe('Maximum latitude boundary'),
|
|
85
|
+
lon_min: z.number().optional().describe('Minimum longitude boundary'),
|
|
86
|
+
lon_max: z.number().optional().describe('Maximum longitude boundary'),
|
|
87
|
+
state: z.string().optional().describe('Filter stations by state code (e.g., CA, NY)'),
|
|
88
|
+
limit: z.number().optional().describe('Maximum number of stations to return'),
|
|
89
|
+
offset: z.number().optional().describe('Number of stations to skip for pagination'),
|
|
90
|
+
sort_by: z.enum(['name', 'id', 'state']).optional().describe('Field to sort results by'),
|
|
91
|
+
sort_order: z.enum(['asc', 'desc']).optional().describe('Sort order (ascending or descending)'),
|
|
92
|
+
});
|
|
93
|
+
// Station Details Schema
|
|
94
|
+
export const GetStationDetailsSchema = z.object({
|
|
95
|
+
station: StationSchema,
|
|
96
|
+
units: UnitsSchema,
|
|
97
|
+
format: z.enum(['json', 'xml']).optional().describe('Output format (json, xml)'),
|
|
98
|
+
});
|
package/package.json
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@ryancardin/noaa-tides-currents-mcp-server",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "MCP Server that interfaces with NOAA Tides and Currents API using FastMCP",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"bin": {
|
|
7
|
+
"noaa-mcp": "dist/index.js"
|
|
8
|
+
},
|
|
9
|
+
"type": "module",
|
|
10
|
+
"scripts": {
|
|
11
|
+
"build": "tsc",
|
|
12
|
+
"start": "node dist/index.js",
|
|
13
|
+
"start:http": "node dist/index.js --http --port 3000",
|
|
14
|
+
"start:http:3001": "node dist/index.js --http --port 3001",
|
|
15
|
+
"start:http:8080": "node dist/index.js --http --port 8080",
|
|
16
|
+
"dev": "ts-node-esm src/index.ts",
|
|
17
|
+
"dev:http": "ts-node-esm src/index.ts --http --port 3000",
|
|
18
|
+
"test": "vitest run",
|
|
19
|
+
"format": "prettier --write .",
|
|
20
|
+
"inspector": "npx @modelcontextprotocol/inspector ./dist/index.js"
|
|
21
|
+
},
|
|
22
|
+
"keywords": [
|
|
23
|
+
"noaa",
|
|
24
|
+
"tides",
|
|
25
|
+
"currents",
|
|
26
|
+
"mcp",
|
|
27
|
+
"fastmcp",
|
|
28
|
+
"api"
|
|
29
|
+
],
|
|
30
|
+
"author": "Ryan Cardin",
|
|
31
|
+
"repository": {
|
|
32
|
+
"type": "git",
|
|
33
|
+
"url": "https://github.com/RyanCardin15/NOAA-Tides-And-Currents-MCP.git"
|
|
34
|
+
},
|
|
35
|
+
"bugs": {
|
|
36
|
+
"url": "https://github.com/RyanCardin15/NOAA-Tides-And-Currents-MCP/issues"
|
|
37
|
+
},
|
|
38
|
+
"homepage": "https://github.com/RyanCardin15/NOAA-Tides-And-Currents-MCP#readme",
|
|
39
|
+
"publishConfig": {
|
|
40
|
+
"access": "public"
|
|
41
|
+
},
|
|
42
|
+
"license": "MIT",
|
|
43
|
+
"dependencies": {
|
|
44
|
+
"axios": "^1.6.2",
|
|
45
|
+
"fastmcp": "^1.16.3",
|
|
46
|
+
"suncalc": "^1.9.0",
|
|
47
|
+
"zod": "^3.22.4"
|
|
48
|
+
},
|
|
49
|
+
"devDependencies": {
|
|
50
|
+
"@types/node": "^20.10.0",
|
|
51
|
+
"prettier": "^3.0.3",
|
|
52
|
+
"ts-node": "^10.9.1",
|
|
53
|
+
"typescript": "^5.3.2",
|
|
54
|
+
"vitest": "^0.34.6"
|
|
55
|
+
}
|
|
56
|
+
}
|
package/smithery.yaml
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Smithery configuration file: https://smithery.ai/docs/config#smitheryyaml
|
|
2
|
+
|
|
3
|
+
startCommand:
|
|
4
|
+
type: stdio
|
|
5
|
+
configSchema:
|
|
6
|
+
# Minimal JSON Schema for configuration
|
|
7
|
+
type: object
|
|
8
|
+
properties: {}
|
|
9
|
+
exampleConfig: {}
|
|
10
|
+
commandFunction:
|
|
11
|
+
# Simple command to start the MCP server on stdio without additional configuration
|
|
12
|
+
|-
|
|
13
|
+
() => ({
|
|
14
|
+
command: 'node',
|
|
15
|
+
args: ['dist/index.js']
|
|
16
|
+
})
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { FastMCP } from 'fastmcp';
|
|
3
|
+
import { createServer, startServer } from './server/config.js';
|
|
4
|
+
import { registerAllTools } from './tools/index.js';
|
|
5
|
+
|
|
6
|
+
// Create and configure the MCP server
|
|
7
|
+
const server = createServer();
|
|
8
|
+
|
|
9
|
+
// Register all tools
|
|
10
|
+
const services = registerAllTools(server);
|
|
11
|
+
|
|
12
|
+
// Start the server
|
|
13
|
+
startServer(server);
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { MoonPhaseName } from '../types/moon.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Parameters for getting moon phase
|
|
6
|
+
*/
|
|
7
|
+
export const MoonPhaseParamsSchema = z.object({
|
|
8
|
+
date: z.string().optional().describe('Date to get moon phase for (YYYY-MM-DD format). Defaults to current date.'),
|
|
9
|
+
latitude: z.number().min(-90).max(90).optional().describe('Latitude for location-specific calculations'),
|
|
10
|
+
longitude: z.number().min(-180).max(180).optional().describe('Longitude for location-specific calculations'),
|
|
11
|
+
format: z.enum(['json', 'text']).optional().describe('Output format (json or text)')
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
export type MoonPhaseParams = z.infer<typeof MoonPhaseParamsSchema>;
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Parameters for getting moon phases for a date range
|
|
18
|
+
*/
|
|
19
|
+
export const MoonPhasesRangeParamsSchema = z.object({
|
|
20
|
+
start_date: z.string().describe('Start date (YYYY-MM-DD format)'),
|
|
21
|
+
end_date: z.string().describe('End date (YYYY-MM-DD format)'),
|
|
22
|
+
latitude: z.number().min(-90).max(90).optional().describe('Latitude for location-specific calculations'),
|
|
23
|
+
longitude: z.number().min(-180).max(180).optional().describe('Longitude for location-specific calculations'),
|
|
24
|
+
format: z.enum(['json', 'text']).optional().describe('Output format (json or text)')
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
export type MoonPhasesRangeParams = z.infer<typeof MoonPhasesRangeParamsSchema>;
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Parameters for getting next moon phase
|
|
31
|
+
*/
|
|
32
|
+
export const NextMoonPhaseParamsSchema = z.object({
|
|
33
|
+
phase: z.enum([
|
|
34
|
+
MoonPhaseName.NEW_MOON,
|
|
35
|
+
MoonPhaseName.FIRST_QUARTER,
|
|
36
|
+
MoonPhaseName.FULL_MOON,
|
|
37
|
+
MoonPhaseName.LAST_QUARTER
|
|
38
|
+
]).describe('Moon phase to find'),
|
|
39
|
+
date: z.string().optional().describe('Starting date (YYYY-MM-DD format). Defaults to current date.'),
|
|
40
|
+
count: z.number().positive().optional().describe('Number of occurrences to return. Defaults to 1.'),
|
|
41
|
+
format: z.enum(['json', 'text']).optional().describe('Output format (json or text)')
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
export type NextMoonPhaseParams = z.infer<typeof NextMoonPhaseParamsSchema>;
|