@cyanheads/noaa-marine-mcp-server 0.3.0 → 0.3.2
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 +71 -49
- package/CLAUDE.md +71 -49
- package/Dockerfile +10 -5
- package/LICENSE +1 -1
- package/README.md +75 -81
- package/changelog/0.3.x/0.3.1.md +29 -0
- package/changelog/0.3.x/0.3.2.md +30 -0
- package/changelog/template.md +62 -40
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/dist/mcp-server/resources/definitions/noaa-marine-station.resource.d.ts.map +1 -1
- package/dist/mcp-server/resources/definitions/noaa-marine-station.resource.js +1 -0
- package/dist/mcp-server/resources/definitions/noaa-marine-station.resource.js.map +1 -1
- package/dist/mcp-server/tools/definitions/noaa-marine-find-stations.tool.d.ts +23 -23
- package/dist/mcp-server/tools/definitions/noaa-marine-get-conditions.tool.js +1 -1
- package/dist/mcp-server/tools/definitions/noaa-marine-get-conditions.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/noaa-marine-get-current-profile.tool.js +1 -1
- package/dist/mcp-server/tools/definitions/noaa-marine-get-current-profile.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/noaa-marine-get-currents.tool.d.ts +2 -2
- package/dist/mcp-server/tools/definitions/noaa-marine-get-currents.tool.js +2 -2
- package/dist/mcp-server/tools/definitions/noaa-marine-get-currents.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/noaa-marine-get-ocean-observations.tool.js +1 -1
- package/dist/mcp-server/tools/definitions/noaa-marine-get-ocean-observations.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/noaa-marine-get-tide-predictions.tool.d.ts +5 -5
- package/dist/mcp-server/tools/definitions/noaa-marine-get-tide-predictions.tool.js +2 -2
- package/dist/mcp-server/tools/definitions/noaa-marine-get-tide-predictions.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/noaa-marine-get-water-level.tool.d.ts +5 -5
- package/dist/mcp-server/tools/definitions/noaa-marine-get-water-level.tool.js +2 -2
- package/dist/mcp-server/tools/definitions/noaa-marine-get-water-level.tool.js.map +1 -1
- package/dist/services/coops/coops-service.d.ts.map +1 -1
- package/dist/services/coops/coops-service.js.map +1 -1
- package/dist/services/ndbc/ndbc-service.d.ts.map +1 -1
- package/dist/services/ndbc/ndbc-service.js +3 -1
- package/dist/services/ndbc/ndbc-service.js.map +1 -1
- package/package.json +12 -11
- package/server.json +3 -3
package/README.md
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
<div align="center">
|
|
9
9
|
|
|
10
|
-
[](./CHANGELOG.md) [](./LICENSE) [](https://github.com/users/cyanheads/packages/container/package/noaa-marine-mcp-server) [](https://modelcontextprotocol.io/) [](https://www.npmjs.com/package/@cyanheads/noaa-marine-mcp-server) [](https://www.typescriptlang.org/) [](https://bun.sh/)
|
|
11
11
|
|
|
12
12
|
</div>
|
|
13
13
|
|
|
@@ -27,127 +27,120 @@
|
|
|
27
27
|
|
|
28
28
|
---
|
|
29
29
|
|
|
30
|
-
##
|
|
30
|
+
## Overview
|
|
31
31
|
|
|
32
|
-
|
|
32
|
+
US tide, current, and buoy data from NOAA CO-OPS and NDBC. Find tide, water-level, and current stations plus NDBC buoys, then fetch tide predictions, observed water levels, tidal currents, and live buoy conditions from any MCP client. Runs as a stdio process, a local Streamable HTTP server, or the public hosted endpoint above.
|
|
33
|
+
|
|
34
|
+
### Tools
|
|
33
35
|
|
|
34
36
|
| Tool | Description |
|
|
35
37
|
|:-----|:------------|
|
|
36
|
-
| `noaa_marine_find_stations` | Find CO-OPS tide/water-level/current stations and NDBC buoys
|
|
37
|
-
| `noaa_marine_get_tide_predictions` | High/low tide predictions
|
|
38
|
-
| `noaa_marine_get_water_level` | Observed water level
|
|
39
|
-
| `noaa_marine_get_currents` |
|
|
40
|
-
| `noaa_marine_get_conditions` | Live
|
|
41
|
-
| `noaa_marine_get_current_profile` | Observed ocean-current depth profile from an NDBC ADCP buoy
|
|
42
|
-
| `noaa_marine_get_ocean_observations` | Sub-surface water-column observations
|
|
38
|
+
| `noaa_marine_find_stations` | Find CO-OPS tide/water-level/current stations and NDBC buoys by location, name, state, or data capability. |
|
|
39
|
+
| `noaa_marine_get_tide_predictions` | High/low tide predictions or a 6-minute curve for a CO-OPS tide station. |
|
|
40
|
+
| `noaa_marine_get_water_level` | Observed water level paired with predictions for a CO-OPS station, with a storm-surge residual summary. |
|
|
41
|
+
| `noaa_marine_get_currents` | CO-OPS tidal current predictions — max flood/ebb/slack events or a 6-minute curve. |
|
|
42
|
+
| `noaa_marine_get_conditions` | Live NDBC buoy conditions: waves, wind, sea-surface and air temperature, pressure. |
|
|
43
|
+
| `noaa_marine_get_current_profile` | Observed ocean-current depth profile from an NDBC ADCP buoy. |
|
|
44
|
+
| `noaa_marine_get_ocean_observations` | Sub-surface water-column observations (temperature, salinity, oxygen, and more) from an NDBC station. |
|
|
43
45
|
|
|
44
|
-
###
|
|
46
|
+
### Resources
|
|
45
47
|
|
|
46
|
-
|
|
48
|
+
| Resource | Description |
|
|
49
|
+
|:---|:---|
|
|
50
|
+
| `noaa-marine://station/{station_id}` | Metadata for a CO-OPS or NDBC station by ID: name, coordinates, source, data capabilities, and — for NDBC — physical platform class. |
|
|
47
51
|
|
|
48
|
-
|
|
49
|
-
- Returns a unified station list with source, coordinates, distance, data capabilities, and — for NDBC — the physical platform class (buoy, fixed, oilrig, dart, tao, usv, other)
|
|
50
|
-
- Station lists are cached in-memory (6-hour TTL) — first call after startup may be slightly slower
|
|
51
|
-
- Required first step: CO-OPS and NDBC use non-overlapping ID systems; guessing a station ID reliably fails
|
|
52
|
+
All resource data is also reachable via tools — use `noaa_marine_find_stations` to discover station IDs before accessing the resource.
|
|
52
53
|
|
|
53
|
-
|
|
54
|
+
## Capability reference
|
|
55
|
+
|
|
56
|
+
### `noaa_marine_find_stations` <sub>tool</sub>
|
|
54
57
|
|
|
55
|
-
|
|
58
|
+
- Filter by proximity (`latitude`/`longitude` + `radius_km`, default 100 km, max 1000 km), name/ID substring, US state/territory (CO-OPS only), source (`coops`/`ndbc`/`all`), or `types`: data capabilities (`tide`, `current`, `water_level`, `met`, `current_profile`) or NDBC platform class (`buoy`)
|
|
59
|
+
- Returns up to `limit` (default 20, max 200) unified stations with source, coordinates, distance, data capabilities, and — for NDBC — physical platform class (buoy, fixed, oilrig, dart, tao, usv, other)
|
|
60
|
+
- `total_found` and `truncated` report the full match count before the limit is applied
|
|
61
|
+
- Station lists are cached in-memory with a 6-hour TTL — first call after startup may be slightly slower
|
|
62
|
+
- Typed `incomplete_coordinates` error when only one of latitude/longitude is supplied; `no_results` when nothing matches
|
|
56
63
|
|
|
57
|
-
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
### `noaa_marine_get_tide_predictions` <sub>tool</sub>
|
|
58
67
|
|
|
59
|
-
-
|
|
68
|
+
- `hilo` (default, high/low events) or `6min` continuous curve; up to 1 year per request
|
|
60
69
|
- Eight datums: MLLW (default, US nautical chart), MHHW, MSL, MTL, MHW, MLW, CD, STND
|
|
61
|
-
- Time zone
|
|
62
|
-
-
|
|
63
|
-
- Maximum date range: 1 year per request (typed error `date_range_exceeded` for longer ranges)
|
|
70
|
+
- Time zone (`lst_ldt` default, `gmt`, `lst`) and units (`english` default feet, `metric` meters)
|
|
71
|
+
- Typed `date_range_exceeded`, `invalid_date_range`, `station_not_found`, and `no_predictions` errors
|
|
64
72
|
|
|
65
73
|
---
|
|
66
74
|
|
|
67
|
-
### `noaa_marine_get_water_level`
|
|
68
|
-
|
|
69
|
-
Observed water level vs. predicted — the storm surge view.
|
|
75
|
+
### `noaa_marine_get_water_level` <sub>tool</sub>
|
|
70
76
|
|
|
71
|
-
- 6-minute observed water level
|
|
72
|
-
- Paired tide predictions fetched in parallel
|
|
73
|
-
-
|
|
74
|
-
-
|
|
77
|
+
- 6-minute observed water level with quality flags (`p` preliminary, `v` verified) and optional sensor `sigma`
|
|
78
|
+
- Paired 6-minute tide predictions fetched in parallel — failure degrades gracefully, observed levels still return
|
|
79
|
+
- `residual_summary` (max surge, max drawdown) only when both series are present
|
|
80
|
+
- Up to 31 days per request; typed `date_range_exceeded`, `station_not_found`, and `no_data` errors
|
|
75
81
|
|
|
76
82
|
---
|
|
77
83
|
|
|
78
|
-
### `noaa_marine_get_currents`
|
|
84
|
+
### `noaa_marine_get_currents` <sub>tool</sub>
|
|
79
85
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
-
|
|
83
|
-
-
|
|
84
|
-
- Current station IDs use alphanumeric format (e.g., `ACT4176`), distinct from numeric tide station IDs — use `find_stations` with `types: ["current"]` to discover them
|
|
86
|
+
- `MAX_SLACK` (default): max flood, max ebb, and slack events only — the actionable view for passage planning
|
|
87
|
+
- `6min`: continuous current curve; units `english` (knots, default) or `metric` (m/s)
|
|
88
|
+
- Current station IDs are alphanumeric (e.g. `ACT4176`), distinct from numeric tide/water-level IDs
|
|
89
|
+
- Up to 1 year per request; typed `date_range_exceeded`, `invalid_date_range`, `station_not_found`, and `no_predictions` errors
|
|
85
90
|
|
|
86
91
|
---
|
|
87
92
|
|
|
88
|
-
### `noaa_marine_get_conditions`
|
|
89
|
-
|
|
90
|
-
Live NDBC buoy observations (most recent ~45 days, updated every 10 minutes).
|
|
93
|
+
### `noaa_marine_get_conditions` <sub>tool</sub>
|
|
91
94
|
|
|
92
|
-
- Wave height
|
|
93
|
-
-
|
|
94
|
-
-
|
|
95
|
-
-
|
|
96
|
-
- All sensor fields nullable (`null` when buoy sensor did not report — normal for offshore buoys)
|
|
97
|
-
- All values in SI units except `TIDE` (feet) and `VIS` (nautical miles), which are rarely populated at offshore buoys
|
|
95
|
+
- Wave height/period/direction, wind speed/gust/direction, sea-surface and air temperature, dew point, barometric pressure
|
|
96
|
+
- All values SI except `tide_ft` (feet) and `visibility_nmi` (nautical miles), both rarely populated at offshore buoys
|
|
97
|
+
- Every sensor field is nullable — `null` when the buoy did not report, never a fabricated value
|
|
98
|
+
- Updated roughly every 10 minutes; typed `buoy_not_found` and `no_sensor_data` errors
|
|
98
99
|
|
|
99
100
|
---
|
|
100
101
|
|
|
101
|
-
### `noaa_marine_get_current_profile`
|
|
102
|
-
|
|
103
|
-
Observed ocean-current depth profile from an NDBC ADCP buoy — the most recent measurement at each depth bin.
|
|
102
|
+
### `noaa_marine_get_current_profile` <sub>tool</sub>
|
|
104
103
|
|
|
105
|
-
- Depth (m), direction (degrees true,
|
|
106
|
-
-
|
|
107
|
-
- Most NDBC stations serve no ADCP profile
|
|
108
|
-
- Direction or speed is `null`
|
|
104
|
+
- Depth (m), direction (degrees true, flow-toward), and speed (cm/s) per bin, shallowest first
|
|
105
|
+
- Observed NDBC ADCP measurement — distinct from `noaa_marine_get_currents`, a CO-OPS tidal-current *prediction*
|
|
106
|
+
- Most NDBC stations serve no ADCP profile; use `find_stations` with `types: ["current_profile"]` to discover ones that do
|
|
107
|
+
- Direction or speed is `null` per bin when the sensor did not report that component; typed `profile_not_found` and `no_current_data` errors
|
|
109
108
|
|
|
110
|
-
|
|
109
|
+
---
|
|
111
110
|
|
|
112
|
-
|
|
111
|
+
### `noaa_marine_get_ocean_observations` <sub>tool</sub>
|
|
113
112
|
|
|
114
|
-
- Water temperature
|
|
115
|
-
-
|
|
116
|
-
- Sensor coverage is sparse — most stations report only temperature and salinity;
|
|
117
|
-
-
|
|
113
|
+
- Water temperature, conductivity, salinity, dissolved oxygen (% and ppm), chlorophyll, turbidity, pH, and redox potential per depth
|
|
114
|
+
- Water-column counterpart to `noaa_marine_get_conditions` (surface weather and sea state)
|
|
115
|
+
- Sensor coverage is sparse — most stations report only temperature and salinity; unreported values are `null`, never a fabricated zero
|
|
116
|
+
- No capability filter identifies ocean-sensor coverage — call on candidate `source="ndbc"` IDs and expect `observations_not_found` on stations with no `.ocean` file
|
|
118
117
|
|
|
119
|
-
|
|
118
|
+
---
|
|
120
119
|
|
|
121
|
-
|
|
122
|
-
|:-----|:-----|:------------|
|
|
123
|
-
| Resource | `noaa-marine://station/{station_id}` | Metadata for a CO-OPS or NDBC station by ID: name, coordinates, source, data capabilities, state, and — for NDBC — physical platform class. |
|
|
120
|
+
### `noaa-marine://station/{station_id}` <sub>resource</sub>
|
|
124
121
|
|
|
125
|
-
|
|
122
|
+
- Station record as `application/json` — name, coordinates, source, capabilities, state, and (NDBC) platform class
|
|
123
|
+
- `station_id` comes from `noaa_marine_find_stations`
|
|
124
|
+
- Cached with a 6-hour TTL (`cacheHint`)
|
|
126
125
|
|
|
127
126
|
## Features
|
|
128
127
|
|
|
129
|
-
Built on [`@cyanheads/mcp-ts-core`](https://
|
|
130
|
-
|
|
131
|
-
- Declarative tool and resource definitions — single file per primitive, framework handles registration and validation
|
|
132
|
-
- Unified error handling — handlers throw, framework catches, classifies, and formats with typed error contracts
|
|
133
|
-
- Structured logging with optional OpenTelemetry tracing
|
|
134
|
-
- STDIO and Streamable HTTP transports
|
|
135
|
-
- Pluggable auth: `none`, `jwt`, `oauth`
|
|
128
|
+
Built on [`@cyanheads/mcp-ts-core`](https://github.com/cyanheads/mcp-ts-core): stdio and Streamable HTTP transports, pluggable auth (`none` / `jwt` / `oauth`), swappable storage (`in-memory`, `filesystem`, `Supabase`, `Cloudflare KV/R2/D1`), structured logging with optional OpenTelemetry tracing.
|
|
136
129
|
|
|
137
|
-
|
|
130
|
+
CO-OPS / NDBC-specific:
|
|
138
131
|
|
|
139
132
|
- In-memory station cache (6-hour TTL) for CO-OPS and NDBC station lists — discovery is fast after first startup
|
|
140
133
|
- CO-OPS and NDBC integrated in a unified station model — `find_stations` fans out across both sources in parallel
|
|
141
|
-
- NDBC fixed-width text parser
|
|
142
|
-
- Paired water-level
|
|
134
|
+
- NDBC fixed-width text parser normalizes `MM` (missing sensor data) to `null`, never passes it through as a string
|
|
135
|
+
- Paired water-level and prediction fetches for storm-surge residual computation
|
|
143
136
|
- CO-OPS `application=` courtesy parameter sent on every request (configurable via `NOAA_APPLICATION_ID`)
|
|
144
137
|
|
|
145
138
|
Agent-friendly output:
|
|
146
139
|
|
|
147
|
-
- Datum echoed on every tide/water-level response
|
|
148
|
-
- `total_found` on `find_stations` shows count before `limit` slice so agents know whether to re-query
|
|
149
|
-
- All NDBC sensor fields explicitly nullable
|
|
150
|
-
- Typed station source (`coops` | `ndbc`)
|
|
140
|
+
- Datum echoed on every tide/water-level response so agents state units and reference correctly without assumptions
|
|
141
|
+
- `total_found` on `find_stations` shows the count before the `limit` slice, so agents know whether to re-query
|
|
142
|
+
- All NDBC sensor fields explicitly nullable — agents don't fabricate missing readings
|
|
143
|
+
- Typed station `source` (`coops` | `ndbc`) plus a data-capability `type` and (NDBC only) a `platform` class — agents branch on data, not string parsing
|
|
151
144
|
|
|
152
145
|
## Getting started
|
|
153
146
|
|
|
@@ -168,7 +161,7 @@ Connect directly via Streamable HTTP — no install, no API key:
|
|
|
168
161
|
}
|
|
169
162
|
```
|
|
170
163
|
|
|
171
|
-
### Self-
|
|
164
|
+
### Self-Hosted / Local
|
|
172
165
|
|
|
173
166
|
Add the following to your MCP client configuration file:
|
|
174
167
|
|
|
@@ -233,7 +226,7 @@ MCP_TRANSPORT_TYPE=http MCP_HTTP_PORT=3010 bun run start:http
|
|
|
233
226
|
|
|
234
227
|
### Prerequisites
|
|
235
228
|
|
|
236
|
-
- [Bun v1.
|
|
229
|
+
- [Bun v1.4.0](https://bun.sh/) or higher (or Node.js v24+).
|
|
237
230
|
- No external API keys needed — NOAA CO-OPS and NDBC are fully open.
|
|
238
231
|
|
|
239
232
|
### Installation
|
|
@@ -271,6 +264,7 @@ cp .env.example .env
|
|
|
271
264
|
| `MCP_TRANSPORT_TYPE` | Transport: `stdio` or `http`. | `stdio` |
|
|
272
265
|
| `MCP_HTTP_PORT` | Port for HTTP server. | `3010` |
|
|
273
266
|
| `MCP_AUTH_MODE` | Auth mode: `none`, `jwt`, or `oauth`. | `none` |
|
|
267
|
+
| `MCP_SESSION_MODE` | HTTP session mode: `auto`, `stateful`, or `stateless`. The server declares `stateless` in `src/index.ts`; set this to override. | `stateless` |
|
|
274
268
|
| `MCP_LOG_LEVEL` | Log level (RFC 5424). | `info` |
|
|
275
269
|
| `LOGS_DIR` | Directory for log files (Node.js only). | `<project-root>/logs` |
|
|
276
270
|
| `OTEL_ENABLED` | Enable [OpenTelemetry instrumentation](https://github.com/cyanheads/mcp-ts-core/tree/main/docs/telemetry). | `false` |
|
|
@@ -316,7 +310,7 @@ The Dockerfile defaults to HTTP transport, stateless session mode, and logs to `
|
|
|
316
310
|
| `src/config/` | `NOAA_APPLICATION_ID` env var parsing with Zod. |
|
|
317
311
|
| `src/services/coops/` | CO-OPS Tides & Currents API client: station list cache, data fetch, error detection. |
|
|
318
312
|
| `src/services/ndbc/` | NDBC buoy service: active stations XML parser, realtime text parser. |
|
|
319
|
-
| `src/mcp-server/tools/` |
|
|
313
|
+
| `src/mcp-server/tools/` | Seven tool definitions (`*.tool.ts`). |
|
|
320
314
|
| `src/mcp-server/resources/` | Station metadata resource (`noaa-marine-station.resource.ts`). |
|
|
321
315
|
| `tests/` | Vitest tests mirroring `src/`. |
|
|
322
316
|
| `docs/` | Design doc and directory tree. |
|
|
@@ -333,7 +327,7 @@ See [`CLAUDE.md`/`AGENTS.md`](./CLAUDE.md) for development guidelines and archit
|
|
|
333
327
|
|
|
334
328
|
## Contributing
|
|
335
329
|
|
|
336
|
-
Issues
|
|
330
|
+
Issues are welcome. Run checks and tests before submitting:
|
|
337
331
|
|
|
338
332
|
```sh
|
|
339
333
|
bun run devcheck
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "Adopts mcp-ts-core 0.12.3 with MCP 2026-07-28 compatibility, strict tool inputs, cache hints, and an explicit stateless HTTP default"
|
|
3
|
+
breaking: false
|
|
4
|
+
security: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# 0.3.1 — 2026-08-24
|
|
8
|
+
|
|
9
|
+
## Added
|
|
10
|
+
|
|
11
|
+
- **MCP cache hints** — definition lists advertise a 24-hour public TTL, while station metadata advertises a 6-hour public TTL to MCP 2026-07-28 clients.
|
|
12
|
+
- **Community health files** — adds contribution guidance and a code of conduct; private vulnerability reports use `security@caseyjhand.com`.
|
|
13
|
+
|
|
14
|
+
## Changed
|
|
15
|
+
|
|
16
|
+
- **MCP protocol behavior** — `@cyanheads/mcp-ts-core` `^0.10.14 → 0.12.3` serves MCP 2026-07-28 and 2025-era clients, rejects undeclared root tool arguments, and declares the structured error envelope.
|
|
17
|
+
- **HTTP sessions** — `.env.example`, the Docker image, and README now explicitly use `MCP_SESSION_MODE=stateless`; the framework's `auto` schema default remains documented as resolving to stateful.
|
|
18
|
+
- **Framework contracts** — services pass the unified `Context` directly, and CO-OPS/NDBC error mapping reads the canonical `data.status` field.
|
|
19
|
+
- **Project tooling** — adopts the current mcp-ts-core TypeScript, packaging, MCPB cleanup, dependency, documentation, and skill scaffolds.
|
|
20
|
+
|
|
21
|
+
## Dependencies
|
|
22
|
+
|
|
23
|
+
- `@cyanheads/mcp-ts-core` `^0.10.14 → 0.12.3`
|
|
24
|
+
- `@biomejs/biome` `^2.5.1 → ^2.5.10`
|
|
25
|
+
- `@types/node` `^26.1.1 → ^26.2.0`
|
|
26
|
+
- `tsc-alias` `^1.9.1 → ^1.9.2`
|
|
27
|
+
- `typescript` `^6.0.3 → ^7.0.2`
|
|
28
|
+
- `vitest` `^4.1.10 → ^4.1.11`
|
|
29
|
+
- Bun `packageManager` and Docker images `1.3.14 → 1.4.0`
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "Adopts mcp-ts-core 0.13.2: sessionMode is declared in src/index.ts rather than left to MCP_SESSION_MODE, argument rejections carry the structured error envelope, a CO-OPS/NDBC 500 now retries, and the framework skill tree moves to framework-skills/."
|
|
3
|
+
breaking: false
|
|
4
|
+
security: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# 0.3.2 — 2026-09-16
|
|
8
|
+
|
|
9
|
+
## Added
|
|
10
|
+
|
|
11
|
+
- **`createApp({ sessionMode: 'stateless' })`** declares the HTTP session posture in `src/index.ts` instead of relying on the `MCP_SESSION_MODE` env default; the `/.well-known/mcp.json` server card now publishes the resolved mode under `_meta` key `io.github.cyanheads.mcp-ts-core/sessionMode`.
|
|
12
|
+
- **`bun run audit:fix`** (`bun audit fix`) — first response to a transitive advisory, ahead of `bun update <name>`, `bun dedupe`, and `audit:refresh`.
|
|
13
|
+
|
|
14
|
+
## Changed
|
|
15
|
+
|
|
16
|
+
- **Framework** `@cyanheads/mcp-ts-core` `0.12.3` → `^0.13.2`.
|
|
17
|
+
- **Argument rejections carry `structuredContent.error`** — an invalid tool call now returns `isError: true` with `error.code` `-32602` alongside the existing readable text.
|
|
18
|
+
- **A CO-OPS/NDBC upstream 500 retries** instead of failing on the first attempt; a 501 carries `data.retryable: false` (cyanheads/mcp-ts-core#323).
|
|
19
|
+
- **`NOAA_APPLICATION_ID`** reads an empty string or an unsubstituted `${…}` placeholder as unset, falling back to the `noaa-marine-mcp-server` default instead of sending the literal text (cyanheads/mcp-ts-core#427).
|
|
20
|
+
- **`SIGTERM`/`SIGINT` end the process explicitly** — exit `0` once shutdown settles, `1` on the 10s ceiling.
|
|
21
|
+
- **Bun engines floor raised to `>=1.4.0`.**
|
|
22
|
+
- **Framework skill tree moved `skills/` → `framework-skills/`** so the `.mcpb` bundle and plugin installs no longer ship development skills (cyanheads/mcp-ts-core#428).
|
|
23
|
+
- **Repo docs refreshed** — README restructured around an Overview and a per-primitive capability reference; issue forms, `CONTRIBUTING.md`, and `.claude-plugin/plugin.json` (`$schema`, keywords) updated for the current conventions.
|
|
24
|
+
|
|
25
|
+
## Dependencies
|
|
26
|
+
|
|
27
|
+
- `zod` `^4.4.3` → `^4.6.4`
|
|
28
|
+
- `@biomejs/biome` `^2.5.10` → `^2.5.13`
|
|
29
|
+
- `ignore` `^7.0.6` → `^7.0.9`
|
|
30
|
+
- `tsc-alias` `^1.9.2` → `^1.9.5`
|
package/changelog/template.md
CHANGED
|
@@ -4,10 +4,11 @@
|
|
|
4
4
|
# to author a new release. Set that file's H1 to `# <version> — YYYY-MM-DD`
|
|
5
5
|
# with a concrete date.
|
|
6
6
|
|
|
7
|
-
# Required. One-line GitHub Release-style headline. 350 character cap
|
|
8
|
-
# Default short and scannable. Don't pad, don't stitch
|
|
9
|
-
#
|
|
10
|
-
#
|
|
7
|
+
# Required. One-line GitHub Release-style headline. 350 character cap — a
|
|
8
|
+
# ceiling, not a target. Default short and scannable. Don't pad, don't stitch
|
|
9
|
+
# unrelated changes with commas/semicolons into an inventory — pick the
|
|
10
|
+
# headline, like a tag's theme line. Quotes required: unquoted YAML treats
|
|
11
|
+
# `: ` inside the value as a key separator and fails GitHub's strict parser.
|
|
11
12
|
summary: ""
|
|
12
13
|
|
|
13
14
|
# Set `true` when consumers must change code to upgrade: API removals,
|
|
@@ -24,9 +25,10 @@ security: false
|
|
|
24
25
|
|
|
25
26
|
# Optional free-form notes for maintenance agents processing this release.
|
|
26
27
|
# Not rendered in CHANGELOG — consumed by agents running `maintenance` on
|
|
27
|
-
# downstream servers.
|
|
28
|
-
#
|
|
29
|
-
#
|
|
28
|
+
# downstream servers. ADOPTION STEPS ONLY — new files to create, fields to
|
|
29
|
+
# populate, one-time migration steps. Never a second rendering of the body:
|
|
30
|
+
# if a body bullet already says it, name the bullet's symbol instead of
|
|
31
|
+
# re-explaining. Omit the field entirely when there's nothing to say.
|
|
30
32
|
# agent-notes: |
|
|
31
33
|
# <instructions for downstream maintenance agents>
|
|
32
34
|
---
|
|
@@ -41,17 +43,54 @@ security: false
|
|
|
41
43
|
each bullet with the symbol or concept name in **bold** so they can skip
|
|
42
44
|
what's irrelevant and zoom in on what's not.
|
|
43
45
|
|
|
44
|
-
Tone: terse, fact-dense, not verbose.
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
46
|
+
Tone: terse, fact-dense, not verbose. Bullet shape: **symbol** + what
|
|
47
|
+
changed + at most one consumer-facing caveat. One sentence by default, two
|
|
48
|
+
when the second carries weight — a bullet past ~40 words or three sentences
|
|
49
|
+
is wrong. The depth lives one hop away: the linked issue carries the why,
|
|
50
|
+
the commit diff carries the how. The changelog names what changed and what
|
|
51
|
+
a consumer does about it; a reader who wants mechanism opens the link.
|
|
52
|
+
|
|
53
|
+
Model length on THIS guide, never on the previous entry — entries modeled
|
|
54
|
+
on entries compound.
|
|
55
|
+
|
|
56
|
+
Cut (each has shipped as a wall of text; these are the cruft):
|
|
57
|
+
- History/justification narration — how the bug worked, why the old
|
|
58
|
+
behavior was wrong. One short clause at most; the issue carries the story.
|
|
59
|
+
- Design-rationale defense — "chosen over Y because…", "guarding the
|
|
60
|
+
getter is not enough…". That is the author arguing with a reviewer;
|
|
61
|
+
reviewers read the PR, not the changelog.
|
|
62
|
+
- Defensive unchanged-clauses — "X is unchanged", "byte-identical to
|
|
63
|
+
<prev>". Keep one only where its absence would cause a real misread,
|
|
64
|
+
as a short parenthetical.
|
|
65
|
+
- Edge-case inventories — marker lists, not-flagged lists, escape tables.
|
|
66
|
+
Tests and the issue carry those.
|
|
67
|
+
- Mechanism walkthroughs (JSDoc, CLAUDE.md/AGENTS.md, or the relevant
|
|
68
|
+
skill own those), ceremonial framings ("This release introduces…"),
|
|
69
|
+
backwards-compat paragraphs, file-by-file test enumerations. Prefer
|
|
70
|
+
code/symbol names over English re-explanations.
|
|
71
|
+
|
|
72
|
+
Verified ≠ included: the every-claim-verified-from-the-diff rule bounds
|
|
73
|
+
the TRUTH of what you write, never the AMOUNT.
|
|
74
|
+
|
|
75
|
+
Example — same fact, right size:
|
|
76
|
+
|
|
77
|
+
TOO LONG: **`fetchWithTimeout`'s `timeoutMs` bounds the whole exchange**
|
|
78
|
+
(#341). `fetch` resolves once headers arrive and the deadline was
|
|
79
|
+
cleared as the helper returned, so a peer that answered promptly and
|
|
80
|
+
then stalled the stream held the request open indefinitely. A 2xx
|
|
81
|
+
carrying a body now comes back as a passthrough wrapper that disarms
|
|
82
|
+
the deadline when the body closes, errors, or is cancelled; …
|
|
83
|
+
[+90 more words of mechanism and edge cases]
|
|
84
|
+
|
|
85
|
+
RIGHT: **`fetchWithTimeout`'s `timeoutMs` now bounds the whole
|
|
86
|
+
exchange, not just the headers** (#341). A stalled body aborts with
|
|
87
|
+
the same `Timeout` error; the returned `Response` is a wrapper, so
|
|
88
|
+
identity assertions (`toBe(response)`) no longer hold.
|
|
52
89
|
|
|
53
90
|
Narrative intro: skip by default. Add one short sentence only when the
|
|
54
|
-
release theme genuinely needs framing the bullets can't carry.
|
|
91
|
+
release theme genuinely needs framing the bullets can't carry. When many
|
|
92
|
+
bullets share one upgrade consequence, state it ONCE — intro line or
|
|
93
|
+
agent-notes — never per bullet.
|
|
55
94
|
|
|
56
95
|
Sections: Keep a Changelog order — Added, Changed, Deprecated, Removed,
|
|
57
96
|
Fixed, Security. Include only sections with entries; delete the rest
|
|
@@ -78,30 +117,13 @@ security: false
|
|
|
78
117
|
in that unrelated item's metadata.
|
|
79
118
|
|
|
80
119
|
TAG ANNOTATIONS — the annotated tag body renders as the GitHub Release body
|
|
81
|
-
via `gh release create --notes-from-tag`.
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
Dependency bumps: ← section header
|
|
89
|
-
← blank line
|
|
90
|
-
- `@cyanheads/mcp-ts-core` ^0.9.1 → ^0.9.6 ← bullet
|
|
91
|
-
← blank line
|
|
92
|
-
Changed: ← only sections with entries
|
|
93
|
-
← blank line
|
|
94
|
-
- `format()` output includes `query` in text mode
|
|
95
|
-
← blank line
|
|
96
|
-
Added:
|
|
97
|
-
← blank line
|
|
98
|
-
- `manifest.json` scaffolded for MCPB bundle support
|
|
99
|
-
- Install badges (Claude Desktop, Cursor, VS Code)
|
|
100
|
-
← blank line
|
|
101
|
-
<N> tests pass; `bun run devcheck` clean. ← footer
|
|
102
|
-
|
|
103
|
-
Never a flat comma-separated string. Always structured markdown with
|
|
104
|
-
sections. The tag must scan well as a rendered GitHub Release page.
|
|
120
|
+
via `gh release create --notes-from-tag`. It is a condensed digest of this
|
|
121
|
+
entry, never a copy, and its format is owned by the `release-and-publish`
|
|
122
|
+
skill (step 4, "Create the annotated tag"): the entry's `summary:` as the
|
|
123
|
+
theme line without the version, flat headline bullets — no Keep-a-Changelog
|
|
124
|
+
section headers, no gates line — at most one deps line, issue backlinks,
|
|
125
|
+
and the changelog link last. In release-PR mode the `git-wrapup` skill
|
|
126
|
+
authors that digest as the PR body's `## Changes` and the tag copies it.
|
|
105
127
|
-->
|
|
106
128
|
|
|
107
129
|
## Added
|
package/dist/index.js
CHANGED
|
@@ -18,6 +18,7 @@ import { initNdbcService } from './services/ndbc/ndbc-service.js';
|
|
|
18
18
|
await createApp({
|
|
19
19
|
name: 'noaa-marine-mcp-server',
|
|
20
20
|
title: 'noaa-marine-mcp-server',
|
|
21
|
+
sessionMode: 'stateless',
|
|
21
22
|
tools: [
|
|
22
23
|
noaaMarineFindStations,
|
|
23
24
|
noaaMarineGetTidePredictions,
|
|
@@ -29,6 +30,11 @@ await createApp({
|
|
|
29
30
|
],
|
|
30
31
|
resources: [noaaMarineStationResource],
|
|
31
32
|
prompts: [],
|
|
33
|
+
cacheHints: {
|
|
34
|
+
'tools/list': { ttlMs: 86_400_000, cacheScope: 'public' },
|
|
35
|
+
'resources/list': { ttlMs: 86_400_000, cacheScope: 'public' },
|
|
36
|
+
'resources/templates/list': { ttlMs: 86_400_000, cacheScope: 'public' },
|
|
37
|
+
},
|
|
32
38
|
instructions: 'US marine conditions via NOAA CO-OPS and NDBC. ' +
|
|
33
39
|
'Start with noaa_marine_find_stations to resolve a location or name to station IDs, ' +
|
|
34
40
|
'then call the appropriate data tool. ' +
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,yBAAyB,EAAE,MAAM,oEAAoE,CAAC;AAC/G,OAAO,EAAE,sBAAsB,EAAE,MAAM,kEAAkE,CAAC;AAC1G,OAAO,EAAE,uBAAuB,EAAE,MAAM,mEAAmE,CAAC;AAC5G,OAAO,EAAE,2BAA2B,EAAE,MAAM,wEAAwE,CAAC;AACrH,OAAO,EAAE,qBAAqB,EAAE,MAAM,iEAAiE,CAAC;AACxG,OAAO,EAAE,8BAA8B,EAAE,MAAM,2EAA2E,CAAC;AAC3H,OAAO,EAAE,4BAA4B,EAAE,MAAM,yEAAyE,CAAC;AACvH,OAAO,EAAE,uBAAuB,EAAE,MAAM,oEAAoE,CAAC;AAC7G,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAElE,MAAM,SAAS,CAAC;IACd,IAAI,EAAE,wBAAwB;IAC9B,KAAK,EAAE,wBAAwB;IAC/B,KAAK,EAAE;QACL,sBAAsB;QACtB,4BAA4B;QAC5B,uBAAuB;QACvB,qBAAqB;QACrB,uBAAuB;QACvB,2BAA2B;QAC3B,8BAA8B;KAC/B;IACD,SAAS,EAAE,CAAC,yBAAyB,CAAC;IACtC,OAAO,EAAE,EAAE;IACX,YAAY,EACV,iDAAiD;QACjD,qFAAqF;QACrF,uCAAuC;QACvC,uEAAuE;QACvE,uEAAuE;QACvE,4DAA4D;QAC5D,mGAAmG;QACnG,2EAA2E;QAC3E,qIAAqI;QACrI,mGAAmG;QACnG,gFAAgF;QAChF,mFAAmF;IAErF,KAAK,CAAC,IAAI;QACR,MAAM,YAAY,GAAG,eAAe,EAAE,CAAC;QACvC,gBAAgB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QAC1D,eAAe,EAAE,CAAC;IACpB,CAAC;CACF,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,yBAAyB,EAAE,MAAM,oEAAoE,CAAC;AAC/G,OAAO,EAAE,sBAAsB,EAAE,MAAM,kEAAkE,CAAC;AAC1G,OAAO,EAAE,uBAAuB,EAAE,MAAM,mEAAmE,CAAC;AAC5G,OAAO,EAAE,2BAA2B,EAAE,MAAM,wEAAwE,CAAC;AACrH,OAAO,EAAE,qBAAqB,EAAE,MAAM,iEAAiE,CAAC;AACxG,OAAO,EAAE,8BAA8B,EAAE,MAAM,2EAA2E,CAAC;AAC3H,OAAO,EAAE,4BAA4B,EAAE,MAAM,yEAAyE,CAAC;AACvH,OAAO,EAAE,uBAAuB,EAAE,MAAM,oEAAoE,CAAC;AAC7G,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAElE,MAAM,SAAS,CAAC;IACd,IAAI,EAAE,wBAAwB;IAC9B,KAAK,EAAE,wBAAwB;IAC/B,WAAW,EAAE,WAAW;IACxB,KAAK,EAAE;QACL,sBAAsB;QACtB,4BAA4B;QAC5B,uBAAuB;QACvB,qBAAqB;QACrB,uBAAuB;QACvB,2BAA2B;QAC3B,8BAA8B;KAC/B;IACD,SAAS,EAAE,CAAC,yBAAyB,CAAC;IACtC,OAAO,EAAE,EAAE;IACX,UAAU,EAAE;QACV,YAAY,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE;QACzD,gBAAgB,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE;QAC7D,0BAA0B,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE;KACxE;IACD,YAAY,EACV,iDAAiD;QACjD,qFAAqF;QACrF,uCAAuC;QACvC,uEAAuE;QACvE,uEAAuE;QACvE,4DAA4D;QAC5D,mGAAmG;QACnG,2EAA2E;QAC3E,qIAAqI;QACrI,mGAAmG;QACnG,gFAAgF;QAChF,mFAAmF;IAErF,KAAK,CAAC,IAAI;QACR,MAAM,YAAY,GAAG,eAAe,EAAE,CAAC;QACvC,gBAAgB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QAC1D,eAAe,EAAE,CAAC;IACpB,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"noaa-marine-station.resource.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/resources/definitions/noaa-marine-station.resource.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAY,CAAC,EAAE,MAAM,wBAAwB,CAAC;AAKrD,eAAO,MAAM,yBAAyB;;
|
|
1
|
+
{"version":3,"file":"noaa-marine-station.resource.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/resources/definitions/noaa-marine-station.resource.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAY,CAAC,EAAE,MAAM,wBAAwB,CAAC;AAKrD,eAAO,MAAM,yBAAyB;;wCAqGpC,CAAC"}
|
|
@@ -16,6 +16,7 @@ export const noaaMarineStationResource = resource('noaa-marine://station/{statio
|
|
|
16
16
|
'NDBC station IDs are 5-character alphanumeric codes. ' +
|
|
17
17
|
'Use noaa_marine_find_stations to discover station IDs.',
|
|
18
18
|
mimeType: 'application/json',
|
|
19
|
+
cacheHint: { ttlMs: 21_600_000, cacheScope: 'public' },
|
|
19
20
|
params: z.object({
|
|
20
21
|
station_id: z
|
|
21
22
|
.string()
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"noaa-marine-station.resource.js","sourceRoot":"","sources":["../../../../src/mcp-server/resources/definitions/noaa-marine-station.resource.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"noaa-marine-station.resource.js","sourceRoot":"","sources":["../../../../src/mcp-server/resources/definitions/noaa-marine-station.resource.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,75 +10,75 @@ export declare const noaaMarineFindStations: import("@cyanheads/mcp-ts-core").To
|
|
|
10
10
|
radius_km: z.ZodDefault<z.ZodNumber>;
|
|
11
11
|
query: z.ZodOptional<z.ZodString>;
|
|
12
12
|
state: z.ZodOptional<z.ZodEnum<{
|
|
13
|
-
ID: "ID";
|
|
14
|
-
AL: "AL";
|
|
15
13
|
AK: "AK";
|
|
16
|
-
|
|
14
|
+
AL: "AL";
|
|
17
15
|
AR: "AR";
|
|
16
|
+
AS: "AS";
|
|
17
|
+
AZ: "AZ";
|
|
18
18
|
CA: "CA";
|
|
19
19
|
CO: "CO";
|
|
20
20
|
CT: "CT";
|
|
21
|
+
DC: "DC";
|
|
21
22
|
DE: "DE";
|
|
22
23
|
FL: "FL";
|
|
23
24
|
GA: "GA";
|
|
25
|
+
GU: "GU";
|
|
24
26
|
HI: "HI";
|
|
27
|
+
IA: "IA";
|
|
28
|
+
ID: "ID";
|
|
25
29
|
IL: "IL";
|
|
26
30
|
IN: "IN";
|
|
27
|
-
IA: "IA";
|
|
28
31
|
KS: "KS";
|
|
29
32
|
KY: "KY";
|
|
30
33
|
LA: "LA";
|
|
31
|
-
ME: "ME";
|
|
32
|
-
MD: "MD";
|
|
33
34
|
MA: "MA";
|
|
35
|
+
MD: "MD";
|
|
36
|
+
ME: "ME";
|
|
34
37
|
MI: "MI";
|
|
35
38
|
MN: "MN";
|
|
36
|
-
MS: "MS";
|
|
37
39
|
MO: "MO";
|
|
40
|
+
MP: "MP";
|
|
41
|
+
MS: "MS";
|
|
38
42
|
MT: "MT";
|
|
43
|
+
NC: "NC";
|
|
44
|
+
ND: "ND";
|
|
39
45
|
NE: "NE";
|
|
40
|
-
NV: "NV";
|
|
41
46
|
NH: "NH";
|
|
42
47
|
NJ: "NJ";
|
|
43
48
|
NM: "NM";
|
|
49
|
+
NV: "NV";
|
|
44
50
|
NY: "NY";
|
|
45
|
-
NC: "NC";
|
|
46
|
-
ND: "ND";
|
|
47
51
|
OH: "OH";
|
|
48
52
|
OK: "OK";
|
|
49
53
|
OR: "OR";
|
|
50
54
|
PA: "PA";
|
|
55
|
+
PR: "PR";
|
|
51
56
|
RI: "RI";
|
|
52
57
|
SC: "SC";
|
|
53
58
|
SD: "SD";
|
|
54
59
|
TN: "TN";
|
|
55
60
|
TX: "TX";
|
|
56
61
|
UT: "UT";
|
|
57
|
-
VT: "VT";
|
|
58
62
|
VA: "VA";
|
|
63
|
+
VI: "VI";
|
|
64
|
+
VT: "VT";
|
|
59
65
|
WA: "WA";
|
|
60
|
-
WV: "WV";
|
|
61
66
|
WI: "WI";
|
|
67
|
+
WV: "WV";
|
|
62
68
|
WY: "WY";
|
|
63
|
-
DC: "DC";
|
|
64
|
-
PR: "PR";
|
|
65
|
-
VI: "VI";
|
|
66
|
-
GU: "GU";
|
|
67
|
-
AS: "AS";
|
|
68
|
-
MP: "MP";
|
|
69
69
|
}>>;
|
|
70
70
|
source: z.ZodDefault<z.ZodEnum<{
|
|
71
|
+
all: "all";
|
|
71
72
|
coops: "coops";
|
|
72
73
|
ndbc: "ndbc";
|
|
73
|
-
all: "all";
|
|
74
74
|
}>>;
|
|
75
75
|
types: z.ZodOptional<z.ZodArray<z.ZodEnum<{
|
|
76
|
-
|
|
77
|
-
met: "met";
|
|
78
|
-
tide: "tide";
|
|
76
|
+
buoy: "buoy";
|
|
79
77
|
current: "current";
|
|
80
78
|
current_profile: "current_profile";
|
|
81
|
-
|
|
79
|
+
met: "met";
|
|
80
|
+
tide: "tide";
|
|
81
|
+
water_level: "water_level";
|
|
82
82
|
}>>>;
|
|
83
83
|
limit: z.ZodDefault<z.ZodNumber>;
|
|
84
84
|
}, z.core.$strip>, z.ZodObject<{
|