@cyanheads/noaa-marine-mcp-server 0.1.1
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/AGENTS.md +387 -0
- package/CLAUDE.md +387 -0
- package/Dockerfile +99 -0
- package/LICENSE +201 -0
- package/README.md +300 -0
- package/changelog/0.1.x/0.1.1.md +28 -0
- package/changelog/template.md +127 -0
- package/dist/config/server-config.d.ts +12 -0
- package/dist/config/server-config.d.ts.map +1 -0
- package/dist/config/server-config.js +20 -0
- package/dist/config/server-config.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +40 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp-server/resources/definitions/noaa-marine-station.resource.d.ts +9 -0
- package/dist/mcp-server/resources/definitions/noaa-marine-station.resource.d.ts.map +1 -0
- package/dist/mcp-server/resources/definitions/noaa-marine-station.resource.js +96 -0
- package/dist/mcp-server/resources/definitions/noaa-marine-station.resource.js.map +1 -0
- package/dist/mcp-server/tools/definitions/noaa-marine-find-stations.tool.d.ts +105 -0
- package/dist/mcp-server/tools/definitions/noaa-marine-find-stations.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/noaa-marine-find-stations.tool.js +338 -0
- package/dist/mcp-server/tools/definitions/noaa-marine-find-stations.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/noaa-marine-get-conditions.tool.d.ts +40 -0
- package/dist/mcp-server/tools/definitions/noaa-marine-get-conditions.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/noaa-marine-get-conditions.tool.js +164 -0
- package/dist/mcp-server/tools/definitions/noaa-marine-get-conditions.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/noaa-marine-get-currents.tool.d.ts +59 -0
- package/dist/mcp-server/tools/definitions/noaa-marine-get-currents.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/noaa-marine-get-currents.tool.js +227 -0
- package/dist/mcp-server/tools/definitions/noaa-marine-get-currents.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/noaa-marine-get-tide-predictions.tool.d.ts +60 -0
- package/dist/mcp-server/tools/definitions/noaa-marine-get-tide-predictions.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/noaa-marine-get-tide-predictions.tool.js +180 -0
- package/dist/mcp-server/tools/definitions/noaa-marine-get-tide-predictions.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/noaa-marine-get-water-level.tool.d.ts +65 -0
- package/dist/mcp-server/tools/definitions/noaa-marine-get-water-level.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/noaa-marine-get-water-level.tool.js +232 -0
- package/dist/mcp-server/tools/definitions/noaa-marine-get-water-level.tool.js.map +1 -0
- package/dist/services/coops/coops-service.d.ts +74 -0
- package/dist/services/coops/coops-service.d.ts.map +1 -0
- package/dist/services/coops/coops-service.js +217 -0
- package/dist/services/coops/coops-service.js.map +1 -0
- package/dist/services/coops/types.d.ts +66 -0
- package/dist/services/coops/types.d.ts.map +1 -0
- package/dist/services/coops/types.js +6 -0
- package/dist/services/coops/types.js.map +1 -0
- package/dist/services/ndbc/ndbc-service.d.ts +28 -0
- package/dist/services/ndbc/ndbc-service.d.ts.map +1 -0
- package/dist/services/ndbc/ndbc-service.js +213 -0
- package/dist/services/ndbc/ndbc-service.js.map +1 -0
- package/dist/services/ndbc/types.d.ts +60 -0
- package/dist/services/ndbc/types.d.ts.map +1 -0
- package/dist/services/ndbc/types.js +6 -0
- package/dist/services/ndbc/types.js.map +1 -0
- package/package.json +105 -0
- package/server.json +113 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"noaa-marine-find-stations.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/noaa-marine-find-stations.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview noaa_marine_get_conditions tool — live NDBC buoy marine conditions.
|
|
3
|
+
* @module mcp-server/tools/definitions/noaa-marine-get-conditions.tool
|
|
4
|
+
*/
|
|
5
|
+
import { z } from '@cyanheads/mcp-ts-core';
|
|
6
|
+
import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
|
|
7
|
+
export declare const noaaMarineGetConditions: import("@cyanheads/mcp-ts-core").ToolDefinition<z.ZodObject<{
|
|
8
|
+
station_id: z.ZodString;
|
|
9
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
10
|
+
station_id: z.ZodString;
|
|
11
|
+
station_name: z.ZodString;
|
|
12
|
+
latitude: z.ZodNumber;
|
|
13
|
+
longitude: z.ZodNumber;
|
|
14
|
+
observed_at: z.ZodString;
|
|
15
|
+
source: z.ZodString;
|
|
16
|
+
wind_direction_deg: z.ZodNullable<z.ZodNumber>;
|
|
17
|
+
wind_speed_ms: z.ZodNullable<z.ZodNumber>;
|
|
18
|
+
gust_speed_ms: z.ZodNullable<z.ZodNumber>;
|
|
19
|
+
wave_height_m: z.ZodNullable<z.ZodNumber>;
|
|
20
|
+
dominant_period_sec: z.ZodNullable<z.ZodNumber>;
|
|
21
|
+
average_period_sec: z.ZodNullable<z.ZodNumber>;
|
|
22
|
+
mean_wave_direction_deg: z.ZodNullable<z.ZodNumber>;
|
|
23
|
+
pressure_hpa: z.ZodNullable<z.ZodNumber>;
|
|
24
|
+
air_temp_c: z.ZodNullable<z.ZodNumber>;
|
|
25
|
+
water_temp_c: z.ZodNullable<z.ZodNumber>;
|
|
26
|
+
dew_point_c: z.ZodNullable<z.ZodNumber>;
|
|
27
|
+
visibility_nmi: z.ZodNullable<z.ZodNumber>;
|
|
28
|
+
tide_ft: z.ZodNullable<z.ZodNumber>;
|
|
29
|
+
}, z.core.$strip>, readonly [{
|
|
30
|
+
readonly reason: "buoy_not_found";
|
|
31
|
+
readonly code: JsonRpcErrorCode.NotFound;
|
|
32
|
+
readonly when: "NDBC returned 404 for the station ID.";
|
|
33
|
+
readonly recovery: "Verify the station ID using noaa_marine_find_stations with source=\"ndbc\" and try again.";
|
|
34
|
+
}, {
|
|
35
|
+
readonly reason: "no_sensor_data";
|
|
36
|
+
readonly code: JsonRpcErrorCode.NotFound;
|
|
37
|
+
readonly when: "Buoy file exists but all sensor fields are MM (missing) — buoy offline or sensor failure.";
|
|
38
|
+
readonly recovery: "The buoy may be temporarily offline. Try a nearby buoy via noaa_marine_find_stations.";
|
|
39
|
+
}], undefined>;
|
|
40
|
+
//# sourceMappingURL=noaa-marine-get-conditions.tool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"noaa-marine-get-conditions.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/noaa-marine-get-conditions.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAY,MAAM,+BAA+B,CAAC;AAG3E,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAmLlC,CAAC"}
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview noaa_marine_get_conditions tool — live NDBC buoy marine conditions.
|
|
3
|
+
* @module mcp-server/tools/definitions/noaa-marine-get-conditions.tool
|
|
4
|
+
*/
|
|
5
|
+
import { tool, z } from '@cyanheads/mcp-ts-core';
|
|
6
|
+
import { JsonRpcErrorCode, McpError } from '@cyanheads/mcp-ts-core/errors';
|
|
7
|
+
import { getNdbcService } from '../../../services/ndbc/ndbc-service.js';
|
|
8
|
+
export const noaaMarineGetConditions = tool('noaa_marine_get_conditions', {
|
|
9
|
+
title: 'Get Marine Conditions',
|
|
10
|
+
description: 'Live marine conditions from an NDBC buoy: wave height/period/direction, wind speed/gust/direction, ' +
|
|
11
|
+
'sea-surface temperature, air temperature, barometric pressure, and dew point. ' +
|
|
12
|
+
'All values are SI units — wind in m/s, wave height in m, pressure in hPa, temperatures in °C. ' +
|
|
13
|
+
'Exceptions: TIDE is in feet and VIS is in nautical miles (rarely populated at offshore buoys). ' +
|
|
14
|
+
'Numeric fields are null when the buoy sensor did not report a value — this is normal for offshore buoys. ' +
|
|
15
|
+
'Observations are updated approximately every 10 minutes; data may be 10–20 minutes old. ' +
|
|
16
|
+
'Use noaa_marine_find_stations with source="ndbc" to find buoy station IDs near a location.',
|
|
17
|
+
annotations: { readOnlyHint: true, openWorldHint: true },
|
|
18
|
+
input: z.object({
|
|
19
|
+
station_id: z
|
|
20
|
+
.string()
|
|
21
|
+
.regex(/^[A-Za-z0-9_-]{1,20}$/)
|
|
22
|
+
.describe('NDBC buoy station ID (5-character alphanumeric, e.g. "46041" for Cape Elizabeth). ' +
|
|
23
|
+
'Obtain from noaa_marine_find_stations with source="ndbc".'),
|
|
24
|
+
}),
|
|
25
|
+
output: z.object({
|
|
26
|
+
station_id: z.string().describe('Station ID echoed from the request — for chaining.'),
|
|
27
|
+
station_name: z.string().describe('Station name from the NDBC active stations list.'),
|
|
28
|
+
latitude: z.number().describe('Station latitude in decimal degrees.'),
|
|
29
|
+
longitude: z.number().describe('Station longitude in decimal degrees.'),
|
|
30
|
+
observed_at: z.string().describe('ISO 8601 UTC timestamp of the observation row used.'),
|
|
31
|
+
source: z.string().describe('Data source — always "ndbc" for this tool.'),
|
|
32
|
+
wind_direction_deg: z
|
|
33
|
+
.number()
|
|
34
|
+
.nullable()
|
|
35
|
+
.describe('Wind direction in degrees true (0–360). Null if not reported by the buoy.'),
|
|
36
|
+
wind_speed_ms: z.number().nullable().describe('Wind speed in m/s. Null if not reported.'),
|
|
37
|
+
gust_speed_ms: z.number().nullable().describe('Wind gust speed in m/s. Null if not reported.'),
|
|
38
|
+
wave_height_m: z
|
|
39
|
+
.number()
|
|
40
|
+
.nullable()
|
|
41
|
+
.describe('Significant wave height in meters. Null if not reported.'),
|
|
42
|
+
dominant_period_sec: z
|
|
43
|
+
.number()
|
|
44
|
+
.nullable()
|
|
45
|
+
.describe('Dominant wave period in seconds. Null if not reported.'),
|
|
46
|
+
average_period_sec: z
|
|
47
|
+
.number()
|
|
48
|
+
.nullable()
|
|
49
|
+
.describe('Average wave period in seconds. Null if not reported.'),
|
|
50
|
+
mean_wave_direction_deg: z
|
|
51
|
+
.number()
|
|
52
|
+
.nullable()
|
|
53
|
+
.describe('Mean wave direction in degrees true. Null if not reported.'),
|
|
54
|
+
pressure_hpa: z
|
|
55
|
+
.number()
|
|
56
|
+
.nullable()
|
|
57
|
+
.describe('Atmospheric pressure in hPa. Null if not reported.'),
|
|
58
|
+
air_temp_c: z.number().nullable().describe('Air temperature in °C. Null if not reported.'),
|
|
59
|
+
water_temp_c: z
|
|
60
|
+
.number()
|
|
61
|
+
.nullable()
|
|
62
|
+
.describe('Sea-surface temperature in °C. Null if not reported.'),
|
|
63
|
+
dew_point_c: z
|
|
64
|
+
.number()
|
|
65
|
+
.nullable()
|
|
66
|
+
.describe('Dew point temperature in °C. Null if not reported.'),
|
|
67
|
+
visibility_nmi: z
|
|
68
|
+
.number()
|
|
69
|
+
.nullable()
|
|
70
|
+
.describe('Visibility in nautical miles. NOTE: always in nautical miles regardless of other unit settings. Null if not reported.'),
|
|
71
|
+
tide_ft: z
|
|
72
|
+
.number()
|
|
73
|
+
.nullable()
|
|
74
|
+
.describe('Tide height in feet. NOTE: always in feet regardless of other unit settings. Rarely populated at offshore buoys. Null if not reported.'),
|
|
75
|
+
}),
|
|
76
|
+
errors: [
|
|
77
|
+
{
|
|
78
|
+
reason: 'buoy_not_found',
|
|
79
|
+
code: JsonRpcErrorCode.NotFound,
|
|
80
|
+
when: 'NDBC returned 404 for the station ID.',
|
|
81
|
+
recovery: 'Verify the station ID using noaa_marine_find_stations with source="ndbc" and try again.',
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
reason: 'no_sensor_data',
|
|
85
|
+
code: JsonRpcErrorCode.NotFound,
|
|
86
|
+
when: 'Buoy file exists but all sensor fields are MM (missing) — buoy offline or sensor failure.',
|
|
87
|
+
recovery: 'The buoy may be temporarily offline. Try a nearby buoy via noaa_marine_find_stations.',
|
|
88
|
+
},
|
|
89
|
+
],
|
|
90
|
+
async handler(input, ctx) {
|
|
91
|
+
const ndbcSvc = getNdbcService();
|
|
92
|
+
// Get station metadata for name/coordinates
|
|
93
|
+
const stations = await ndbcSvc.getActiveStations(ctx);
|
|
94
|
+
const meta = stations.find((s) => s.id.toUpperCase() === input.station_id.toUpperCase());
|
|
95
|
+
let obs;
|
|
96
|
+
try {
|
|
97
|
+
obs = await ndbcSvc.fetchObservation(input.station_id, ctx);
|
|
98
|
+
}
|
|
99
|
+
catch (err) {
|
|
100
|
+
// fetchWithTimeout intercepts 404 before our notFound() check in the service runs.
|
|
101
|
+
// Re-classify as the typed contract reason so data.reason is populated.
|
|
102
|
+
if (err instanceof McpError && err.code === JsonRpcErrorCode.NotFound) {
|
|
103
|
+
throw ctx.fail('buoy_not_found', `NDBC buoy ${input.station_id} not found — verify the ID with noaa_marine_find_stations.`, {
|
|
104
|
+
...ctx.recoveryFor('buoy_not_found'),
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
throw err;
|
|
108
|
+
}
|
|
109
|
+
ctx.log.info('NDBC conditions fetched', {
|
|
110
|
+
station_id: input.station_id,
|
|
111
|
+
observed_at: obs.observedAt,
|
|
112
|
+
});
|
|
113
|
+
return {
|
|
114
|
+
station_id: input.station_id.toUpperCase(),
|
|
115
|
+
station_name: meta?.name ?? input.station_id,
|
|
116
|
+
latitude: meta?.lat ?? 0,
|
|
117
|
+
longitude: meta?.lon ?? 0,
|
|
118
|
+
observed_at: obs.observedAt,
|
|
119
|
+
source: 'ndbc',
|
|
120
|
+
wind_direction_deg: obs.windDirectionDeg,
|
|
121
|
+
wind_speed_ms: obs.windSpeedMs,
|
|
122
|
+
gust_speed_ms: obs.gustSpeedMs,
|
|
123
|
+
wave_height_m: obs.waveHeightM,
|
|
124
|
+
dominant_period_sec: obs.dominantPeriodSec,
|
|
125
|
+
average_period_sec: obs.averagePeriodSec,
|
|
126
|
+
mean_wave_direction_deg: obs.meanWaveDirectionDeg,
|
|
127
|
+
pressure_hpa: obs.pressureHpa,
|
|
128
|
+
air_temp_c: obs.airTempC,
|
|
129
|
+
water_temp_c: obs.waterTempC,
|
|
130
|
+
dew_point_c: obs.dewPointC,
|
|
131
|
+
visibility_nmi: obs.visibilityNmi,
|
|
132
|
+
tide_ft: obs.tideFt,
|
|
133
|
+
};
|
|
134
|
+
},
|
|
135
|
+
format: (result) => {
|
|
136
|
+
const fmt = (v, unit) => (v !== null ? `${v} ${unit}` : 'not reported');
|
|
137
|
+
const lines = [
|
|
138
|
+
`## Marine Conditions — ${result.station_name} (${result.station_id})`,
|
|
139
|
+
`**Observed at:** ${result.observed_at} · **Source:** ${result.source}`,
|
|
140
|
+
`**Location:** ${result.latitude}, ${result.longitude}`,
|
|
141
|
+
'',
|
|
142
|
+
'### Wind',
|
|
143
|
+
`Direction: ${fmt(result.wind_direction_deg, '°T')} · Speed: ${fmt(result.wind_speed_ms, 'm/s')} · Gust: ${fmt(result.gust_speed_ms, 'm/s')}`,
|
|
144
|
+
'',
|
|
145
|
+
'### Waves',
|
|
146
|
+
`Height: ${fmt(result.wave_height_m, 'm')} · Dominant period: ${fmt(result.dominant_period_sec, 's')} · Avg period: ${fmt(result.average_period_sec, 's')}`,
|
|
147
|
+
`Direction: ${fmt(result.mean_wave_direction_deg, '°T')}`,
|
|
148
|
+
'',
|
|
149
|
+
'### Atmospheric',
|
|
150
|
+
`Pressure: ${fmt(result.pressure_hpa, 'hPa')} · Air temp: ${fmt(result.air_temp_c, '°C')} · Dew point: ${fmt(result.dew_point_c, '°C')}`,
|
|
151
|
+
'',
|
|
152
|
+
'### Water',
|
|
153
|
+
`Sea surface temp: ${fmt(result.water_temp_c, '°C')}`,
|
|
154
|
+
];
|
|
155
|
+
if (result.visibility_nmi !== null) {
|
|
156
|
+
lines.push(`Visibility: ${result.visibility_nmi} nmi`);
|
|
157
|
+
}
|
|
158
|
+
if (result.tide_ft !== null) {
|
|
159
|
+
lines.push(`Tide: ${result.tide_ft} ft`);
|
|
160
|
+
}
|
|
161
|
+
return [{ type: 'text', text: lines.join('\n') }];
|
|
162
|
+
},
|
|
163
|
+
});
|
|
164
|
+
//# sourceMappingURL=noaa-marine-get-conditions.tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"noaa-marine-get-conditions.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/noaa-marine-get-conditions.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview noaa_marine_get_currents tool — tidal current predictions from CO-OPS.
|
|
3
|
+
* @module mcp-server/tools/definitions/noaa-marine-get-currents.tool
|
|
4
|
+
*/
|
|
5
|
+
import { z } from '@cyanheads/mcp-ts-core';
|
|
6
|
+
import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
|
|
7
|
+
export declare const noaaMarineGetCurrents: import("@cyanheads/mcp-ts-core").ToolDefinition<z.ZodObject<{
|
|
8
|
+
station_id: z.ZodString;
|
|
9
|
+
begin_date: z.ZodString;
|
|
10
|
+
end_date: z.ZodString;
|
|
11
|
+
time_zone: z.ZodDefault<z.ZodEnum<{
|
|
12
|
+
lst_ldt: "lst_ldt";
|
|
13
|
+
gmt: "gmt";
|
|
14
|
+
lst: "lst";
|
|
15
|
+
}>>;
|
|
16
|
+
units: z.ZodDefault<z.ZodEnum<{
|
|
17
|
+
english: "english";
|
|
18
|
+
metric: "metric";
|
|
19
|
+
}>>;
|
|
20
|
+
interval: z.ZodDefault<z.ZodEnum<{
|
|
21
|
+
"6min": "6min";
|
|
22
|
+
MAX_SLACK: "MAX_SLACK";
|
|
23
|
+
}>>;
|
|
24
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
25
|
+
station_id: z.ZodString;
|
|
26
|
+
station_name: z.ZodString;
|
|
27
|
+
units: z.ZodString;
|
|
28
|
+
events: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
29
|
+
time: z.ZodString;
|
|
30
|
+
type: z.ZodEnum<{
|
|
31
|
+
flood: "flood";
|
|
32
|
+
ebb: "ebb";
|
|
33
|
+
slack: "slack";
|
|
34
|
+
}>;
|
|
35
|
+
speed: z.ZodOptional<z.ZodNumber>;
|
|
36
|
+
direction: z.ZodOptional<z.ZodNumber>;
|
|
37
|
+
}, z.core.$strip>>>;
|
|
38
|
+
predictions: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
39
|
+
time: z.ZodString;
|
|
40
|
+
speed: z.ZodNumber;
|
|
41
|
+
direction: z.ZodNumber;
|
|
42
|
+
}, z.core.$strip>>>;
|
|
43
|
+
}, z.core.$strip>, readonly [{
|
|
44
|
+
readonly reason: "station_not_found";
|
|
45
|
+
readonly code: JsonRpcErrorCode.InvalidParams;
|
|
46
|
+
readonly when: "CO-OPS returned an error for the station ID — current stations require alphanumeric IDs.";
|
|
47
|
+
readonly recovery: "Use noaa_marine_find_stations with types=[\"current\"] to obtain a valid current station ID like ACT4176.";
|
|
48
|
+
}, {
|
|
49
|
+
readonly reason: "date_range_exceeded";
|
|
50
|
+
readonly code: JsonRpcErrorCode.InvalidParams;
|
|
51
|
+
readonly when: "Requested date range exceeds the 1-year CO-OPS limit.";
|
|
52
|
+
readonly recovery: "Split the request into multiple calls each spanning at most 1 year.";
|
|
53
|
+
}, {
|
|
54
|
+
readonly reason: "no_predictions";
|
|
55
|
+
readonly code: JsonRpcErrorCode.NotFound;
|
|
56
|
+
readonly when: "Station exists but CO-OPS returned no current-prediction data for the date range.";
|
|
57
|
+
readonly recovery: "The station may be inactive or not a prediction station. Try a different station from noaa_marine_find_stations.";
|
|
58
|
+
}], undefined>;
|
|
59
|
+
//# sourceMappingURL=noaa-marine-get-currents.tool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"noaa-marine-get-currents.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/noaa-marine-get-currents.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAY,MAAM,+BAA+B,CAAC;AAO3E,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAuRhC,CAAC"}
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview noaa_marine_get_currents tool — tidal current predictions from CO-OPS.
|
|
3
|
+
* @module mcp-server/tools/definitions/noaa-marine-get-currents.tool
|
|
4
|
+
*/
|
|
5
|
+
import { tool, z } from '@cyanheads/mcp-ts-core';
|
|
6
|
+
import { JsonRpcErrorCode, McpError } from '@cyanheads/mcp-ts-core/errors';
|
|
7
|
+
import { getCoopsService } from '../../../services/coops/coops-service.js';
|
|
8
|
+
function parseDateStr(s) {
|
|
9
|
+
return new Date(`${s.slice(0, 4)}-${s.slice(4, 6)}-${s.slice(6, 8)}T00:00:00Z`);
|
|
10
|
+
}
|
|
11
|
+
export const noaaMarineGetCurrents = tool('noaa_marine_get_currents', {
|
|
12
|
+
title: 'Get Tidal Currents',
|
|
13
|
+
description: 'Tidal current predictions for a CO-OPS current station: max flood/ebb speeds, slack times, and directions. ' +
|
|
14
|
+
'Defaults to MAX_SLACK interval — the practical planning view showing when currents peak and when slack water occurs. ' +
|
|
15
|
+
'Optionally returns 6-minute continuous predictions for detailed analysis. ' +
|
|
16
|
+
'Current station IDs use alphanumeric format (e.g. ACT4176), distinct from numeric tide/water-level IDs. ' +
|
|
17
|
+
'Date range is limited to 1 year per request. ' +
|
|
18
|
+
'Use noaa_marine_find_stations with types=["current"] to obtain valid current station IDs.',
|
|
19
|
+
annotations: { readOnlyHint: true, idempotentHint: true, openWorldHint: true },
|
|
20
|
+
input: z.object({
|
|
21
|
+
station_id: z
|
|
22
|
+
.string()
|
|
23
|
+
.regex(/^[A-Za-z0-9_-]{1,20}$/)
|
|
24
|
+
.describe('CO-OPS current station ID (alphanumeric, e.g. "ACT4176"). ' +
|
|
25
|
+
'Obtain from noaa_marine_find_stations with types=["current"].'),
|
|
26
|
+
begin_date: z
|
|
27
|
+
.string()
|
|
28
|
+
.regex(/^\d{8}$/)
|
|
29
|
+
.describe('Start date in YYYYMMDD format, e.g. "20240601".'),
|
|
30
|
+
end_date: z
|
|
31
|
+
.string()
|
|
32
|
+
.regex(/^\d{8}$/)
|
|
33
|
+
.describe('End date in YYYYMMDD format (inclusive), e.g. "20240607".'),
|
|
34
|
+
time_zone: z
|
|
35
|
+
.enum(['lst_ldt', 'gmt', 'lst'])
|
|
36
|
+
.default('lst_ldt')
|
|
37
|
+
.describe('Time zone for returned timestamps. lst_ldt = local standard/daylight time (default); ' +
|
|
38
|
+
'gmt = UTC; lst = local standard time year-round.'),
|
|
39
|
+
units: z
|
|
40
|
+
.enum(['english', 'metric'])
|
|
41
|
+
.default('english')
|
|
42
|
+
.describe('Unit system: english = knots; metric = m/s.'),
|
|
43
|
+
interval: z
|
|
44
|
+
.enum(['MAX_SLACK', '6min'])
|
|
45
|
+
.default('MAX_SLACK')
|
|
46
|
+
.describe('Prediction interval: MAX_SLACK (default) returns max flood, max ebb, and slack water events — ' +
|
|
47
|
+
'ideal for passage planning. 6min returns a continuous current curve.'),
|
|
48
|
+
}),
|
|
49
|
+
output: z.object({
|
|
50
|
+
station_id: z.string().describe('Station ID echoed from the request — for chaining.'),
|
|
51
|
+
station_name: z.string().describe('Station name as returned by CO-OPS.'),
|
|
52
|
+
units: z.string().describe('Speed units: "english" (knots) or "metric" (m/s).'),
|
|
53
|
+
events: z
|
|
54
|
+
.array(z
|
|
55
|
+
.object({
|
|
56
|
+
time: z.string().describe('Event datetime in the requested time zone.'),
|
|
57
|
+
type: z
|
|
58
|
+
.enum(['flood', 'ebb', 'slack'])
|
|
59
|
+
.describe('Current event type: flood (onshore/inbound flow), ebb (offshore/outbound flow), or slack (near-zero current).'),
|
|
60
|
+
speed: z
|
|
61
|
+
.number()
|
|
62
|
+
.optional()
|
|
63
|
+
.describe('Current speed in the requested units. Absent for slack events.'),
|
|
64
|
+
direction: z
|
|
65
|
+
.number()
|
|
66
|
+
.optional()
|
|
67
|
+
.describe('True bearing direction in degrees (0–360). Absent for slack events.'),
|
|
68
|
+
})
|
|
69
|
+
.describe('A single max flood, max ebb, or slack current event.'))
|
|
70
|
+
.optional()
|
|
71
|
+
.describe('Max flood, max ebb, and slack events. Present for MAX_SLACK interval.'),
|
|
72
|
+
predictions: z
|
|
73
|
+
.array(z
|
|
74
|
+
.object({
|
|
75
|
+
time: z.string().describe('Prediction datetime in the requested time zone.'),
|
|
76
|
+
speed: z.number().describe('Current speed in the requested units.'),
|
|
77
|
+
direction: z.number().describe('True bearing direction in degrees (0–360).'),
|
|
78
|
+
})
|
|
79
|
+
.describe('A single 6-minute current prediction.'))
|
|
80
|
+
.optional()
|
|
81
|
+
.describe('6-minute continuous current predictions. Present for 6min interval.'),
|
|
82
|
+
}),
|
|
83
|
+
errors: [
|
|
84
|
+
{
|
|
85
|
+
reason: 'station_not_found',
|
|
86
|
+
code: JsonRpcErrorCode.InvalidParams,
|
|
87
|
+
when: 'CO-OPS returned an error for the station ID — current stations require alphanumeric IDs.',
|
|
88
|
+
recovery: 'Use noaa_marine_find_stations with types=["current"] to obtain a valid current station ID like ACT4176.',
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
reason: 'date_range_exceeded',
|
|
92
|
+
code: JsonRpcErrorCode.InvalidParams,
|
|
93
|
+
when: 'Requested date range exceeds the 1-year CO-OPS limit.',
|
|
94
|
+
recovery: 'Split the request into multiple calls each spanning at most 1 year.',
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
reason: 'no_predictions',
|
|
98
|
+
code: JsonRpcErrorCode.NotFound,
|
|
99
|
+
when: 'Station exists but CO-OPS returned no current-prediction data for the date range.',
|
|
100
|
+
recovery: 'The station may be inactive or not a prediction station. Try a different station from noaa_marine_find_stations.',
|
|
101
|
+
},
|
|
102
|
+
],
|
|
103
|
+
async handler(input, ctx) {
|
|
104
|
+
const begin = parseDateStr(input.begin_date);
|
|
105
|
+
const end = parseDateStr(input.end_date);
|
|
106
|
+
const diffDays = (end.getTime() - begin.getTime()) / (1000 * 60 * 60 * 24);
|
|
107
|
+
if (diffDays > 365) {
|
|
108
|
+
throw ctx.fail('date_range_exceeded', `Date range of ${Math.ceil(diffDays)} days exceeds the 1-year limit.`, { ...ctx.recoveryFor('date_range_exceeded') });
|
|
109
|
+
}
|
|
110
|
+
const svc = getCoopsService();
|
|
111
|
+
// Fetch station list (for name resolution) and predictions in parallel.
|
|
112
|
+
// CO-OPS currents_predictions API does not return station metadata — station list is best-effort.
|
|
113
|
+
const [currentStations, predResult] = await Promise.allSettled([
|
|
114
|
+
svc.getStations('currentpredictions', ctx),
|
|
115
|
+
svc.fetchCurrentPredictions({
|
|
116
|
+
station: input.station_id,
|
|
117
|
+
begin_date: input.begin_date,
|
|
118
|
+
end_date: input.end_date,
|
|
119
|
+
time_zone: input.time_zone,
|
|
120
|
+
units: input.units,
|
|
121
|
+
interval: input.interval,
|
|
122
|
+
}, ctx),
|
|
123
|
+
]);
|
|
124
|
+
const stationMeta = currentStations.status === 'fulfilled'
|
|
125
|
+
? currentStations.value.find((s) => s.id === input.station_id)
|
|
126
|
+
: undefined;
|
|
127
|
+
if (predResult.status === 'rejected') {
|
|
128
|
+
const err = predResult.reason;
|
|
129
|
+
// CO-OPS returns HTTP 400 for invalid station IDs — fetchWithTimeout intercepts before JSON parsing.
|
|
130
|
+
if (err instanceof McpError) {
|
|
131
|
+
const statusCode = err.data?.statusCode;
|
|
132
|
+
if (statusCode === 400) {
|
|
133
|
+
throw ctx.fail('station_not_found', `CO-OPS rejected station ${input.station_id} — current stations need alphanumeric IDs. Use noaa_marine_find_stations with types=["current"].`, { ...ctx.recoveryFor('station_not_found') });
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
throw err;
|
|
137
|
+
}
|
|
138
|
+
const result = predResult.value;
|
|
139
|
+
if (input.interval === 'MAX_SLACK') {
|
|
140
|
+
const raw = result.events ?? [];
|
|
141
|
+
if (raw.length === 0) {
|
|
142
|
+
throw ctx.fail('no_predictions', `No current predictions for station ${input.station_id} in the date range.`, { ...ctx.recoveryFor('no_predictions') });
|
|
143
|
+
}
|
|
144
|
+
const events = raw.map((e) => {
|
|
145
|
+
const typeRaw = (e.Type ?? '').toLowerCase();
|
|
146
|
+
const type = typeRaw.includes('flood')
|
|
147
|
+
? 'flood'
|
|
148
|
+
: typeRaw.includes('ebb')
|
|
149
|
+
? 'ebb'
|
|
150
|
+
: 'slack';
|
|
151
|
+
const entry = {
|
|
152
|
+
time: e.Time,
|
|
153
|
+
type,
|
|
154
|
+
};
|
|
155
|
+
if (e.Velocity_Major) {
|
|
156
|
+
const speed = Number.parseFloat(e.Velocity_Major);
|
|
157
|
+
if (!Number.isNaN(speed))
|
|
158
|
+
entry.speed = Math.abs(speed);
|
|
159
|
+
}
|
|
160
|
+
const dirStr = type === 'flood' ? e.meanFloodDir : type === 'ebb' ? e.meanEbbDir : undefined;
|
|
161
|
+
if (dirStr) {
|
|
162
|
+
const dir = Number.parseFloat(dirStr);
|
|
163
|
+
if (!Number.isNaN(dir))
|
|
164
|
+
entry.direction = dir;
|
|
165
|
+
}
|
|
166
|
+
return entry;
|
|
167
|
+
});
|
|
168
|
+
ctx.log.info('Current predictions (MAX_SLACK) fetched', {
|
|
169
|
+
station_id: input.station_id,
|
|
170
|
+
event_count: events.length,
|
|
171
|
+
});
|
|
172
|
+
return {
|
|
173
|
+
station_id: input.station_id,
|
|
174
|
+
station_name: stationMeta?.name ?? result.stationName,
|
|
175
|
+
units: input.units,
|
|
176
|
+
events,
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
// 6-min interval
|
|
180
|
+
const raw6 = result.predictions ?? [];
|
|
181
|
+
if (raw6.length === 0) {
|
|
182
|
+
throw ctx.fail('no_predictions', `No 6-min current predictions for station ${input.station_id} in the date range.`, { ...ctx.recoveryFor('no_predictions') });
|
|
183
|
+
}
|
|
184
|
+
const predictions = raw6.map((p) => ({
|
|
185
|
+
time: p.Time,
|
|
186
|
+
speed: Math.abs(Number.parseFloat(p.Velocity_Major ?? '0')),
|
|
187
|
+
direction: Number.parseFloat(p.Direction ?? '0'),
|
|
188
|
+
}));
|
|
189
|
+
ctx.log.info('Current predictions (6min) fetched', {
|
|
190
|
+
station_id: input.station_id,
|
|
191
|
+
count: predictions.length,
|
|
192
|
+
});
|
|
193
|
+
return {
|
|
194
|
+
station_id: input.station_id,
|
|
195
|
+
station_name: stationMeta?.name ?? result.stationName,
|
|
196
|
+
units: input.units,
|
|
197
|
+
predictions,
|
|
198
|
+
};
|
|
199
|
+
},
|
|
200
|
+
format: (result) => {
|
|
201
|
+
const lines = [
|
|
202
|
+
`## Tidal Currents — ${result.station_name} (${result.station_id})`,
|
|
203
|
+
`**Units:** ${result.units}`,
|
|
204
|
+
'',
|
|
205
|
+
];
|
|
206
|
+
if (result.events && result.events.length > 0) {
|
|
207
|
+
lines.push(`**Events** (${result.events.length} max/slack events):`);
|
|
208
|
+
for (const e of result.events) {
|
|
209
|
+
const speed = e.speed !== undefined ? ` ${e.speed} ${result.units === 'metric' ? 'm/s' : 'kt'}` : '';
|
|
210
|
+
const dir = e.direction !== undefined ? ` @${e.direction}°` : '';
|
|
211
|
+
lines.push(`${e.time}: ${e.type}${speed}${dir}`);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
if (result.predictions && result.predictions.length > 0) {
|
|
215
|
+
lines.push(`**6-min predictions** (${result.predictions.length} records):`);
|
|
216
|
+
const toShow = result.predictions.slice(0, 10);
|
|
217
|
+
for (const p of toShow) {
|
|
218
|
+
lines.push(`${p.time}: ${p.speed} ${result.units === 'metric' ? 'm/s' : 'kt'} @${p.direction}°`);
|
|
219
|
+
}
|
|
220
|
+
if (result.predictions.length > 10) {
|
|
221
|
+
lines.push(`... and ${result.predictions.length - 10} more`);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
return [{ type: 'text', text: lines.join('\n') }];
|
|
225
|
+
},
|
|
226
|
+
});
|
|
227
|
+
//# sourceMappingURL=noaa-marine-get-currents.tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"noaa-marine-get-currents.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/noaa-marine-get-currents.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview noaa_marine_get_tide_predictions tool — high/low tide predictions from CO-OPS.
|
|
3
|
+
* @module mcp-server/tools/definitions/noaa-marine-get-tide-predictions.tool
|
|
4
|
+
*/
|
|
5
|
+
import { z } from '@cyanheads/mcp-ts-core';
|
|
6
|
+
import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
|
|
7
|
+
export declare const noaaMarineGetTidePredictions: import("@cyanheads/mcp-ts-core").ToolDefinition<z.ZodObject<{
|
|
8
|
+
station_id: z.ZodString;
|
|
9
|
+
begin_date: z.ZodString;
|
|
10
|
+
end_date: z.ZodString;
|
|
11
|
+
datum: z.ZodDefault<z.ZodEnum<{
|
|
12
|
+
MLLW: "MLLW";
|
|
13
|
+
MHHW: "MHHW";
|
|
14
|
+
MSL: "MSL";
|
|
15
|
+
MTL: "MTL";
|
|
16
|
+
MHW: "MHW";
|
|
17
|
+
MLW: "MLW";
|
|
18
|
+
CD: "CD";
|
|
19
|
+
STND: "STND";
|
|
20
|
+
}>>;
|
|
21
|
+
time_zone: z.ZodDefault<z.ZodEnum<{
|
|
22
|
+
lst_ldt: "lst_ldt";
|
|
23
|
+
gmt: "gmt";
|
|
24
|
+
lst: "lst";
|
|
25
|
+
}>>;
|
|
26
|
+
units: z.ZodDefault<z.ZodEnum<{
|
|
27
|
+
english: "english";
|
|
28
|
+
metric: "metric";
|
|
29
|
+
}>>;
|
|
30
|
+
interval: z.ZodDefault<z.ZodEnum<{
|
|
31
|
+
"6min": "6min";
|
|
32
|
+
hilo: "hilo";
|
|
33
|
+
}>>;
|
|
34
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
35
|
+
station_id: z.ZodString;
|
|
36
|
+
station_name: z.ZodString;
|
|
37
|
+
datum: z.ZodString;
|
|
38
|
+
units: z.ZodString;
|
|
39
|
+
predictions: z.ZodArray<z.ZodObject<{
|
|
40
|
+
time: z.ZodString;
|
|
41
|
+
height: z.ZodNumber;
|
|
42
|
+
type: z.ZodOptional<z.ZodString>;
|
|
43
|
+
}, z.core.$strip>>;
|
|
44
|
+
}, z.core.$strip>, readonly [{
|
|
45
|
+
readonly reason: "station_not_found";
|
|
46
|
+
readonly code: JsonRpcErrorCode.InvalidParams;
|
|
47
|
+
readonly when: "CO-OPS returned an error for the station ID — likely wrong type or invalid ID.";
|
|
48
|
+
readonly recovery: "Use noaa_marine_find_stations with types=[\"tide\"] to obtain a valid tide station ID.";
|
|
49
|
+
}, {
|
|
50
|
+
readonly reason: "date_range_exceeded";
|
|
51
|
+
readonly code: JsonRpcErrorCode.InvalidParams;
|
|
52
|
+
readonly when: "Requested date range exceeds the 1-year CO-OPS limit.";
|
|
53
|
+
readonly recovery: "Split the request into multiple calls each spanning at most 1 year.";
|
|
54
|
+
}, {
|
|
55
|
+
readonly reason: "no_predictions";
|
|
56
|
+
readonly code: JsonRpcErrorCode.NotFound;
|
|
57
|
+
readonly when: "Station exists but CO-OPS returned no prediction data for the date range.";
|
|
58
|
+
readonly recovery: "The station may be inactive or not a prediction station. Try a different station ID from noaa_marine_find_stations.";
|
|
59
|
+
}], undefined>;
|
|
60
|
+
//# sourceMappingURL=noaa-marine-get-tide-predictions.tool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"noaa-marine-get-tide-predictions.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/noaa-marine-get-tide-predictions.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAY,MAAM,+BAA+B,CAAC;AAQ3E,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAuNvC,CAAC"}
|