@cyanheads/noaa-marine-mcp-server 0.1.6 → 0.2.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/AGENTS.md +3 -3
- package/CLAUDE.md +3 -3
- package/Dockerfile +10 -6
- package/README.md +20 -8
- package/changelog/0.1.x/0.1.7.md +29 -0
- package/changelog/0.2.x/0.2.0.md +22 -0
- package/changelog/template.md +5 -3
- package/dist/index.js +7 -2
- 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 +19 -9
- 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 +8 -1
- package/dist/mcp-server/tools/definitions/noaa-marine-find-stations.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/noaa-marine-find-stations.tool.js +121 -84
- package/dist/mcp-server/tools/definitions/noaa-marine-find-stations.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/noaa-marine-get-conditions.tool.d.ts +2 -2
- package/dist/mcp-server/tools/definitions/noaa-marine-get-conditions.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/noaa-marine-get-conditions.tool.js +8 -5
- 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.d.ts +33 -0
- package/dist/mcp-server/tools/definitions/noaa-marine-get-current-profile.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/noaa-marine-get-current-profile.tool.js +131 -0
- package/dist/mcp-server/tools/definitions/noaa-marine-get-current-profile.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/noaa-marine-get-currents.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/noaa-marine-get-currents.tool.js +2 -0
- package/dist/mcp-server/tools/definitions/noaa-marine-get-currents.tool.js.map +1 -1
- package/dist/services/ndbc/ndbc-service.d.ts +13 -1
- package/dist/services/ndbc/ndbc-service.d.ts.map +1 -1
- package/dist/services/ndbc/ndbc-service.js +84 -0
- package/dist/services/ndbc/ndbc-service.js.map +1 -1
- package/dist/services/ndbc/types.d.ts +23 -0
- package/dist/services/ndbc/types.d.ts.map +1 -1
- package/package.json +8 -7
- package/server.json +3 -3
package/AGENTS.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# Developer Protocol
|
|
2
2
|
|
|
3
3
|
**Server:** noaa-marine-mcp-server
|
|
4
|
-
**Version:** 0.
|
|
5
|
-
**Framework:** [@cyanheads/mcp-ts-core](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) `^0.10.
|
|
4
|
+
**Version:** 0.2.0
|
|
5
|
+
**Framework:** [@cyanheads/mcp-ts-core](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) `^0.10.14`
|
|
6
6
|
**Engines:** Bun ≥1.3.0, Node ≥24.0.0
|
|
7
7
|
**MCP SDK:** `@modelcontextprotocol/sdk` ^1.29.0
|
|
8
8
|
**Zod:** ^4.4.3
|
|
@@ -269,7 +269,6 @@ Available skills:
|
|
|
269
269
|
| `tool-defs-analysis` | Read-only audit of MCP definition language across the surface — voice, leaks, defaults, recovery hints, output descriptions |
|
|
270
270
|
| `security-pass` | Audit server for MCP-flavored security gaps: output injection, scope blast radius, input sinks, tenant isolation |
|
|
271
271
|
| `code-simplifier` | Post-session cleanup against `git diff` — modernize syntax, consolidate duplication, align with the codebase |
|
|
272
|
-
| `devcheck` | Lint, format, typecheck, audit |
|
|
273
272
|
| `polish-docs-meta` | Finalize docs, README, metadata, and agent protocol for shipping |
|
|
274
273
|
| `git-wrapup` | Land working-tree changes as a versioned commit + annotated tag — version bump, changelog, verify, tag. Local only. |
|
|
275
274
|
| `release-and-publish` | Push + npm + MCP Registry + GH Release + Docker. Picks up from `git-wrapup` |
|
|
@@ -283,6 +282,7 @@ Available skills:
|
|
|
283
282
|
| `api-context` | Context interface, logger, state, progress |
|
|
284
283
|
| `api-errors` | McpError, JsonRpcErrorCode, error patterns |
|
|
285
284
|
| `api-linter` | Definition linter rule catalog — invoked by `bun run lint:mcp` and `devcheck` |
|
|
285
|
+
| `api-mirror` | MirrorService: persistent self-refreshing local mirror (embedded SQLite + FTS5) of a bulk upstream dataset — Tier 3 opt-in |
|
|
286
286
|
| `api-services` | LLM, Speech, Graph services |
|
|
287
287
|
| `api-testing` | createMockContext, mcpTest fixture, test patterns |
|
|
288
288
|
| `techniques` | Reusable response/data-shaping patterns (outline-on-overflow, etc.) |
|
package/CLAUDE.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# Developer Protocol
|
|
2
2
|
|
|
3
3
|
**Server:** noaa-marine-mcp-server
|
|
4
|
-
**Version:** 0.
|
|
5
|
-
**Framework:** [@cyanheads/mcp-ts-core](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) `^0.10.
|
|
4
|
+
**Version:** 0.2.0
|
|
5
|
+
**Framework:** [@cyanheads/mcp-ts-core](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) `^0.10.14`
|
|
6
6
|
**Engines:** Bun ≥1.3.0, Node ≥24.0.0
|
|
7
7
|
**MCP SDK:** `@modelcontextprotocol/sdk` ^1.29.0
|
|
8
8
|
**Zod:** ^4.4.3
|
|
@@ -269,7 +269,6 @@ Available skills:
|
|
|
269
269
|
| `tool-defs-analysis` | Read-only audit of MCP definition language across the surface — voice, leaks, defaults, recovery hints, output descriptions |
|
|
270
270
|
| `security-pass` | Audit server for MCP-flavored security gaps: output injection, scope blast radius, input sinks, tenant isolation |
|
|
271
271
|
| `code-simplifier` | Post-session cleanup against `git diff` — modernize syntax, consolidate duplication, align with the codebase |
|
|
272
|
-
| `devcheck` | Lint, format, typecheck, audit |
|
|
273
272
|
| `polish-docs-meta` | Finalize docs, README, metadata, and agent protocol for shipping |
|
|
274
273
|
| `git-wrapup` | Land working-tree changes as a versioned commit + annotated tag — version bump, changelog, verify, tag. Local only. |
|
|
275
274
|
| `release-and-publish` | Push + npm + MCP Registry + GH Release + Docker. Picks up from `git-wrapup` |
|
|
@@ -283,6 +282,7 @@ Available skills:
|
|
|
283
282
|
| `api-context` | Context interface, logger, state, progress |
|
|
284
283
|
| `api-errors` | McpError, JsonRpcErrorCode, error patterns |
|
|
285
284
|
| `api-linter` | Definition linter rule catalog — invoked by `bun run lint:mcp` and `devcheck` |
|
|
285
|
+
| `api-mirror` | MirrorService: persistent self-refreshing local mirror (embedded SQLite + FTS5) of a bulk upstream dataset — Tier 3 opt-in |
|
|
286
286
|
| `api-services` | LLM, Speech, Graph services |
|
|
287
287
|
| `api-testing` | createMockContext, mcpTest fixture, test patterns |
|
|
288
288
|
| `techniques` | Reusable response/data-shaping patterns (outline-on-overflow, etc.) |
|
package/Dockerfile
CHANGED
|
@@ -4,15 +4,17 @@
|
|
|
4
4
|
# This stage installs all dependencies (including dev), builds the TypeScript
|
|
5
5
|
# source code into JavaScript, and prepares the production assets.
|
|
6
6
|
# ==============================================================================
|
|
7
|
-
FROM oven/bun:1.3 AS build
|
|
7
|
+
FROM oven/bun:1.3.14 AS build
|
|
8
8
|
|
|
9
9
|
WORKDIR /usr/src/app
|
|
10
10
|
|
|
11
11
|
# Copy dependency manifests for optimized layer caching
|
|
12
12
|
COPY package.json bun.lock ./
|
|
13
13
|
|
|
14
|
-
# Install all dependencies (including dev dependencies for building)
|
|
15
|
-
|
|
14
|
+
# Install all dependencies (including dev dependencies for building).
|
|
15
|
+
# The BuildKit cache mount persists Bun's global package cache across builds.
|
|
16
|
+
RUN --mount=type=cache,target=/root/.bun/install/cache \
|
|
17
|
+
bun install --frozen-lockfile --ignore-scripts
|
|
16
18
|
|
|
17
19
|
# Copy the rest of the source code
|
|
18
20
|
COPY . .
|
|
@@ -28,7 +30,7 @@ RUN bun run build
|
|
|
28
30
|
# application. It uses a slim base image and only includes production
|
|
29
31
|
# dependencies and build artifacts.
|
|
30
32
|
# ==============================================================================
|
|
31
|
-
FROM oven/bun:1.3-slim AS production
|
|
33
|
+
FROM oven/bun:1.3.14-slim AS production
|
|
32
34
|
|
|
33
35
|
WORKDIR /usr/src/app
|
|
34
36
|
|
|
@@ -49,13 +51,15 @@ COPY package.json bun.lock ./
|
|
|
49
51
|
|
|
50
52
|
# Install only production dependencies, ignoring any lifecycle scripts (like 'prepare')
|
|
51
53
|
# that are not needed in the final production image.
|
|
52
|
-
RUN bun
|
|
54
|
+
RUN --mount=type=cache,target=/root/.bun/install/cache \
|
|
55
|
+
bun install --production --frozen-lockfile --ignore-scripts
|
|
53
56
|
|
|
54
57
|
# Conditionally install OpenTelemetry optional peer dependencies (Tier 3).
|
|
55
58
|
# These are not bundled by default to keep the base image lean. Enable at build time
|
|
56
59
|
# with: docker build --build-arg OTEL_ENABLED=true
|
|
57
60
|
ARG OTEL_ENABLED=true
|
|
58
|
-
RUN
|
|
61
|
+
RUN --mount=type=cache,target=/root/.bun/install/cache \
|
|
62
|
+
if [ "$OTEL_ENABLED" = "true" ]; then \
|
|
59
63
|
bun add @hono/otel \
|
|
60
64
|
@opentelemetry/instrumentation-http \
|
|
61
65
|
@opentelemetry/exporter-metrics-otlp-http \
|
package/README.md
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
<div align="center">
|
|
2
2
|
<h1>@cyanheads/noaa-marine-mcp-server</h1>
|
|
3
3
|
<p><b>Find NOAA tide stations and NDBC buoys, fetch tide predictions, water levels, tidal currents, and live buoy conditions via MCP. STDIO or Streamable HTTP.</b>
|
|
4
|
-
<div>
|
|
4
|
+
<div>6 Tools • 1 Resource</div>
|
|
5
5
|
</p>
|
|
6
6
|
</div>
|
|
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
|
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
|
|
30
30
|
## Tools
|
|
31
31
|
|
|
32
|
-
|
|
32
|
+
Six tools covering the full US marine operational workflow — station discovery, tide predictions, observed water levels, tidal current predictions and profiles, and live offshore buoy conditions:
|
|
33
33
|
|
|
34
34
|
| Tool | Description |
|
|
35
35
|
|:-----|:------------|
|
|
@@ -38,13 +38,14 @@ Five tools covering the full US marine operational workflow — station discover
|
|
|
38
38
|
| `noaa_marine_get_water_level` | Observed water level (real-time or historical) for a CO-OPS station, paired with predictions to compute storm surge or anomalous drawdown. |
|
|
39
39
|
| `noaa_marine_get_currents` | Tidal current predictions for a CO-OPS current station: max flood/ebb speeds, slack times, and directions. Defaults to MAX_SLACK (practical passage-planning view). |
|
|
40
40
|
| `noaa_marine_get_conditions` | Live marine conditions from an NDBC buoy: wave height/period/direction, wind, sea-surface temp, air temp, and barometric pressure. |
|
|
41
|
+
| `noaa_marine_get_current_profile` | Observed ocean-current depth profile from an NDBC ADCP buoy: speed and direction at each depth bin. Distinct from `noaa_marine_get_currents`, which is a CO-OPS tidal-current forecast. |
|
|
41
42
|
|
|
42
43
|
### `noaa_marine_find_stations`
|
|
43
44
|
|
|
44
45
|
Unified station discovery across CO-OPS (3,450+ tide/water-level stations, 4,430+ current stations) and NDBC (1,354+ active buoys worldwide).
|
|
45
46
|
|
|
46
|
-
- Filter by proximity (latitude/longitude + radius), name substring, state/territory, source (CO-OPS vs NDBC), or
|
|
47
|
-
- Returns unified station list with source,
|
|
47
|
+
- Filter by proximity (latitude/longitude + radius), name substring, state/territory, source (CO-OPS vs NDBC), or `types`: data capabilities (tide, current, water_level, met, current_profile) or NDBC platform class (buoy)
|
|
48
|
+
- 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)
|
|
48
49
|
- Station lists are cached in-memory (6-hour TTL) — first call after startup may be slightly slower
|
|
49
50
|
- Required first step: CO-OPS and NDBC use non-overlapping ID systems; guessing a station ID reliably fails
|
|
50
51
|
|
|
@@ -94,11 +95,22 @@ Live NDBC buoy observations (most recent ~45 days, updated every 10 minutes).
|
|
|
94
95
|
- All sensor fields nullable (`null` when buoy sensor did not report — normal for offshore buoys)
|
|
95
96
|
- All values in SI units except `TIDE` (feet) and `VIS` (nautical miles), which are rarely populated at offshore buoys
|
|
96
97
|
|
|
98
|
+
---
|
|
99
|
+
|
|
100
|
+
### `noaa_marine_get_current_profile`
|
|
101
|
+
|
|
102
|
+
Observed ocean-current depth profile from an NDBC ADCP buoy — the most recent measurement at each depth bin.
|
|
103
|
+
|
|
104
|
+
- Depth (m), direction (degrees true, the direction the current flows toward), and speed (cm/s) per bin
|
|
105
|
+
- Distinct from `noaa_marine_get_currents`: this is an NDBC *observed* acoustic-Doppler measurement, not a CO-OPS tidal-current *prediction*
|
|
106
|
+
- Most NDBC stations serve no ADCP profile — use `find_stations` with `source="ndbc"` and `types: ["current_profile"]` to discover the ones that do
|
|
107
|
+
- Direction or speed is `null` for a bin when NDBC did not report that component
|
|
108
|
+
|
|
97
109
|
## Resources and prompts
|
|
98
110
|
|
|
99
111
|
| Type | Name | Description |
|
|
100
112
|
|:-----|:-----|:------------|
|
|
101
|
-
| Resource | `noaa-marine://station/{station_id}` | Metadata for a CO-OPS or NDBC station by ID: name, coordinates, source, capabilities, and
|
|
113
|
+
| 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. |
|
|
102
114
|
|
|
103
115
|
All resource data is also reachable via tools. Use `noaa_marine_find_stations` to discover station IDs before accessing the resource.
|
|
104
116
|
|
|
@@ -125,7 +137,7 @@ Agent-friendly output:
|
|
|
125
137
|
- Datum echoed on every tide/water-level response — agents can state units and reference correctly without assumptions
|
|
126
138
|
- `total_found` on `find_stations` shows count before `limit` slice so agents know whether to re-query
|
|
127
139
|
- All NDBC sensor fields explicitly nullable with per-field unit documentation — agents don't fabricate missing readings
|
|
128
|
-
- Typed station source (`coops` | `ndbc`)
|
|
140
|
+
- Typed station source (`coops` | `ndbc`) on every station record, plus a data-capability `type` and (NDBC only) a `platform` class where applicable — agents can branch on data, not string parsing
|
|
129
141
|
|
|
130
142
|
## Getting started
|
|
131
143
|
|
|
@@ -211,7 +223,7 @@ MCP_TRANSPORT_TYPE=http MCP_HTTP_PORT=3010 bun run start:http
|
|
|
211
223
|
|
|
212
224
|
### Prerequisites
|
|
213
225
|
|
|
214
|
-
- [Bun v1.3.
|
|
226
|
+
- [Bun v1.3.14](https://bun.sh/) or higher (or Node.js v24+).
|
|
215
227
|
- No external API keys needed — NOAA CO-OPS and NDBC are fully open.
|
|
216
228
|
|
|
217
229
|
### Installation
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "Four bug fixes: noaa_marine_find_stations rejects incomplete lat/lon pairs, fixes its NDBC met filter and type field; noaa_marine_get_conditions guidance now points at conditions-capable stations; mcp-ts-core ^0.10.14, supply-chain hardening"
|
|
3
|
+
breaking: false
|
|
4
|
+
security: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# 0.1.7 — 2026-07-15
|
|
8
|
+
|
|
9
|
+
## Fixed
|
|
10
|
+
|
|
11
|
+
- **`noaa_marine_find_stations`** — a lone `latitude` or `longitude` now rejects locally as `incomplete_coordinates` (`ValidationError`) instead of silently dropping the proximity filter and returning the full station list sorted by name; a whitespace-only `query` is trimmed and treated as omitted rather than matching runs of spaces in station names. ([#9](https://github.com/cyanheads/noaa-marine-mcp-server/issues/9))
|
|
12
|
+
- **`noaa_marine_find_stations`** — the NDBC `types` filter now matches each station's computed `capabilities` array instead of a `type`-string heuristic, so a `met` filter no longer admits stations NDBC flags `met="n"`; met-capable stations no longer fall through to a plain `buoy` match. ([#10](https://github.com/cyanheads/noaa-marine-mcp-server/issues/10))
|
|
13
|
+
- **`noaa_marine_find_stations`** — the returned `type` field now reflects the capability that matched a `types` filter (falling back to the station's first capability when unfiltered) instead of always the first-computed CO-OPS capability or a hardcoded `"buoy"` for every NDBC row. ([#12](https://github.com/cyanheads/noaa-marine-mcp-server/issues/12))
|
|
14
|
+
- **`noaa_marine_get_conditions`** — description and both `buoy_not_found`/`no_sensor_data` recovery messages now point to `noaa_marine_find_stations` with `source="ndbc"` and `types=["met"]` instead of an unfiltered search that could return the same non-conditions-capable station. ([#11](https://github.com/cyanheads/noaa-marine-mcp-server/issues/11))
|
|
15
|
+
|
|
16
|
+
## Security
|
|
17
|
+
|
|
18
|
+
- **`bunfig.toml`** — `install.minimumReleaseAge` set to 3 days (`259200`s), blocking freshly-published package versions from `bun install`/`bun update` as a guard against newly-compromised releases; `@cyanheads/mcp-ts-core` is excluded via `minimumReleaseAgeExcludes` for same-day framework adoption. `install.security.scanner` set to `@socketsecurity/bun-security-scanner` (new dependency), scanning every package before install.
|
|
19
|
+
- **`Dockerfile`** — the build stage's `bun install` now runs with `--ignore-scripts` (previously ran devDependency lifecycle scripts unrestricted); both stages pin the exact `oven/bun:1.3.14` / `1.3.14-slim` images instead of the floating `1.3` / `1.3-slim` tags.
|
|
20
|
+
|
|
21
|
+
## Dependencies
|
|
22
|
+
|
|
23
|
+
- `@cyanheads/mcp-ts-core` ^0.10.9 → ^0.10.14
|
|
24
|
+
- `@types/node` ^26.0.1 → ^26.1.1
|
|
25
|
+
- `ignore` ^7.0.5 → ^7.0.6
|
|
26
|
+
- `vitest` ^4.1.9 → ^4.1.10
|
|
27
|
+
- `@socketsecurity/bun-security-scanner` ^1.1.2 (new)
|
|
28
|
+
|
|
29
|
+
Bun `packageManager` pin bumped `1.3.11` → `1.3.14`. `package.json` `author` standardized to `Casey Hand <casey@caseyjhand.com> (https://caseyjhand.com)`. Skills under `skills/` re-synced to mcp-ts-core 0.10.14.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "Adds noaa_marine_get_current_profile (NDBC observed currents) and a current_profile filter; type is now purely the data-capability axis with platform as a separate field, and the fabricated buoy capability is removed — breaking output changes"
|
|
3
|
+
breaking: true
|
|
4
|
+
security: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# 0.2.0 — 2026-07-16
|
|
8
|
+
|
|
9
|
+
## Added
|
|
10
|
+
|
|
11
|
+
- **`noaa_marine_get_current_profile`** — new tool reading an NDBC station's `.adcp` realtime feed for the latest observed ocean-current profile: depth (m), direction (degrees true), and speed (cm/s) per depth bin. Distinct from `noaa_marine_get_currents`, which returns CO-OPS tidal-current *predictions*, not observed data. ([#15](https://github.com/cyanheads/noaa-marine-mcp-server/issues/15))
|
|
12
|
+
- **`current_profile`** — new `types` filter value on `noaa_marine_find_stations`, reaching NDBC stations with observed-current data; previously no filter value matched them. ([#15](https://github.com/cyanheads/noaa-marine-mcp-server/issues/15))
|
|
13
|
+
|
|
14
|
+
## Changed
|
|
15
|
+
|
|
16
|
+
- **`platform`** — new field on `noaa_marine_find_stations` NDBC rows and the station resource: the NDBC physical platform class (`buoy`, `fixed`, `oilrig`, `dart`, `tao`, `usv`, `other`). Absent for CO-OPS, which has no platform taxonomy. ([#14](https://github.com/cyanheads/noaa-marine-mcp-server/issues/14))
|
|
17
|
+
- **`type`** — now exclusively the data-capability axis (`tide`, `current`, `water_level`, `met`, `current_profile`), consistent between `find_stations` and the station resource, and optional — omitted when a station has no data capability. The resource previously emitted CO-OPS's undocumented station reference code (R/T/S) here instead. ([#14](https://github.com/cyanheads/noaa-marine-mcp-server/issues/14))
|
|
18
|
+
- **NDBC observed-currents capability** — renamed `currents` → `current_profile` in `capabilities`, `type`, and the `types` filter, removing its one-letter collision with CO-OPS's `current` (tidal-current predictions). ([#15](https://github.com/cyanheads/noaa-marine-mcp-server/issues/15))
|
|
19
|
+
|
|
20
|
+
## Fixed
|
|
21
|
+
|
|
22
|
+
- **Fabricated `buoy` capability** — `noaa_marine_find_stations` and the station resource no longer report `capabilities: ["buoy"]` / `type: "buoy"` for an NDBC station with no reported met or current data; such a station now reports an empty `capabilities` array, and the `types` filter's `buoy` value matches a station's real platform class instead of falling back to any station with no other capability. ([#13](https://github.com/cyanheads/noaa-marine-mcp-server/issues/13))
|
package/changelog/template.md
CHANGED
|
@@ -15,9 +15,11 @@ summary: ""
|
|
|
15
15
|
# usage. Flagged as `Breaking` in the rollup.
|
|
16
16
|
breaking: false
|
|
17
17
|
|
|
18
|
-
# Set `true`
|
|
19
|
-
#
|
|
20
|
-
#
|
|
18
|
+
# Set `true` ONLY for a security fix in THIS project's own source code — a
|
|
19
|
+
# vulnerability or hardening in code you ship. A dependency or transitive CVE
|
|
20
|
+
# bump is routine maintenance, NOT a security release: record it under
|
|
21
|
+
# `## Dependencies` (with the advisory ID) and leave this `false`. When true,
|
|
22
|
+
# pairs with the `## Security` section below and flags `Security` in the rollup.
|
|
21
23
|
security: false
|
|
22
24
|
|
|
23
25
|
# Optional free-form notes for maintenance agents processing this release.
|
package/dist/index.js
CHANGED
|
@@ -8,6 +8,7 @@ import { getServerConfig } from './config/server-config.js';
|
|
|
8
8
|
import { noaaMarineStationResource } from './mcp-server/resources/definitions/noaa-marine-station.resource.js';
|
|
9
9
|
import { noaaMarineFindStations } from './mcp-server/tools/definitions/noaa-marine-find-stations.tool.js';
|
|
10
10
|
import { noaaMarineGetConditions } from './mcp-server/tools/definitions/noaa-marine-get-conditions.tool.js';
|
|
11
|
+
import { noaaMarineGetCurrentProfile } from './mcp-server/tools/definitions/noaa-marine-get-current-profile.tool.js';
|
|
11
12
|
import { noaaMarineGetCurrents } from './mcp-server/tools/definitions/noaa-marine-get-currents.tool.js';
|
|
12
13
|
import { noaaMarineGetTidePredictions } from './mcp-server/tools/definitions/noaa-marine-get-tide-predictions.tool.js';
|
|
13
14
|
import { noaaMarineGetWaterLevel } from './mcp-server/tools/definitions/noaa-marine-get-water-level.tool.js';
|
|
@@ -22,6 +23,7 @@ await createApp({
|
|
|
22
23
|
noaaMarineGetWaterLevel,
|
|
23
24
|
noaaMarineGetCurrents,
|
|
24
25
|
noaaMarineGetConditions,
|
|
26
|
+
noaaMarineGetCurrentProfile,
|
|
25
27
|
],
|
|
26
28
|
resources: [noaaMarineStationResource],
|
|
27
29
|
prompts: [],
|
|
@@ -30,8 +32,11 @@ await createApp({
|
|
|
30
32
|
'then call the appropriate data tool. ' +
|
|
31
33
|
'CO-OPS provides tide predictions (noaa_marine_get_tide_predictions), ' +
|
|
32
34
|
'observed water levels and storm surge (noaa_marine_get_water_level), ' +
|
|
33
|
-
'and tidal
|
|
34
|
-
'NDBC provides live buoy conditions — waves, wind, sea-surface temp (noaa_marine_get_conditions)
|
|
35
|
+
'and tidal-current predictions (noaa_marine_get_currents). ' +
|
|
36
|
+
'NDBC provides live buoy conditions — waves, wind, sea-surface temp (noaa_marine_get_conditions) — ' +
|
|
37
|
+
'and observed ocean-current depth profiles (noaa_marine_get_current_profile). ' +
|
|
38
|
+
'The two current tools are distinct: get_currents is CO-OPS tidal-current predictions (forecast), ' +
|
|
39
|
+
'get_current_profile is NDBC observed depth-binned currents from an ADCP buoy. ' +
|
|
35
40
|
'All water height data is referenced to MLLW by default (US nautical chart datum).',
|
|
36
41
|
setup(core) {
|
|
37
42
|
const serverConfig = getServerConfig();
|
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,qBAAqB,EAAE,MAAM,iEAAiE,CAAC;AACxG,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;
|
|
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,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;KAC5B;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,oGAAoG;QACpG,+EAA+E;QAC/E,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;;wCAoGpC,CAAC"}
|
|
@@ -8,7 +8,10 @@ import { getCoopsService } from '../../../services/coops/coops-service.js';
|
|
|
8
8
|
import { getNdbcService } from '../../../services/ndbc/ndbc-service.js';
|
|
9
9
|
export const noaaMarineStationResource = resource('noaa-marine://station/{station_id}', {
|
|
10
10
|
name: 'noaa_marine_station',
|
|
11
|
-
description: 'Metadata for a CO-OPS or NDBC station by ID: name, coordinates, source, capabilities, and
|
|
11
|
+
description: 'Metadata for a CO-OPS or NDBC station by ID: name, coordinates, source, data capabilities, and — for NDBC — ' +
|
|
12
|
+
'the physical platform class. `type` is the primary data capability (same meaning as in noaa_marine_find_stations), ' +
|
|
13
|
+
'omitted when the station reports no data capability; `platform` is the NDBC platform class ' +
|
|
14
|
+
'(buoy, fixed, oilrig, dart, tao, usv, other) and is a separate axis, absent for CO-OPS. ' +
|
|
12
15
|
'CO-OPS station IDs are numeric (tide/water-level) or alphanumeric (current stations). ' +
|
|
13
16
|
'NDBC station IDs are 5-character alphanumeric codes. ' +
|
|
14
17
|
'Use noaa_marine_find_stations to discover station IDs.',
|
|
@@ -39,6 +42,7 @@ export const noaaMarineStationResource = resource('noaa-marine://station/{statio
|
|
|
39
42
|
current.find((s) => s.id.toUpperCase() === id) ??
|
|
40
43
|
waterLevel.find((s) => s.id.toUpperCase() === id);
|
|
41
44
|
if (match) {
|
|
45
|
+
// A CO-OPS match came from one of the three lists, so at least one capability is present.
|
|
42
46
|
const caps = [];
|
|
43
47
|
if (tide.some((s) => s.id.toUpperCase() === id))
|
|
44
48
|
caps.push('tide');
|
|
@@ -46,8 +50,6 @@ export const noaaMarineStationResource = resource('noaa-marine://station/{statio
|
|
|
46
50
|
caps.push('current');
|
|
47
51
|
if (waterLevel.some((s) => s.id.toUpperCase() === id))
|
|
48
52
|
caps.push('water_level');
|
|
49
|
-
if (caps.length === 0)
|
|
50
|
-
caps.push('tide');
|
|
51
53
|
const result = {
|
|
52
54
|
station_id: match.id,
|
|
53
55
|
name: match.name,
|
|
@@ -56,10 +58,13 @@ export const noaaMarineStationResource = resource('noaa-marine://station/{statio
|
|
|
56
58
|
longitude: match.lng,
|
|
57
59
|
capabilities: caps,
|
|
58
60
|
};
|
|
61
|
+
// `type` is the primary data capability — the same axis find_stations reports. The CO-OPS
|
|
62
|
+
// catalog `type` code (R/T/S reference classes) is a different, undocumented axis and is not
|
|
63
|
+
// surfaced here; CO-OPS has no platform class.
|
|
64
|
+
if (caps[0])
|
|
65
|
+
result.type = caps[0];
|
|
59
66
|
if (match.state)
|
|
60
67
|
result.state = match.state;
|
|
61
|
-
if (match.type)
|
|
62
|
-
result.type = match.type;
|
|
63
68
|
return result;
|
|
64
69
|
}
|
|
65
70
|
}
|
|
@@ -67,22 +72,27 @@ export const noaaMarineStationResource = resource('noaa-marine://station/{statio
|
|
|
67
72
|
if (ndbcResult.status === 'fulfilled') {
|
|
68
73
|
const match = ndbcResult.value.find((s) => s.id.toUpperCase() === id);
|
|
69
74
|
if (match) {
|
|
75
|
+
// Data capabilities from the catalog flags only — no fabricated "buoy" when both are off (#13).
|
|
76
|
+
// `current_profile` (NDBC observed ocean currents) is named apart from CO-OPS `current`.
|
|
70
77
|
const caps = [];
|
|
71
78
|
if (match.hasMet)
|
|
72
79
|
caps.push('met');
|
|
73
80
|
if (match.hasCurrents)
|
|
74
|
-
caps.push('
|
|
75
|
-
if (caps.length === 0)
|
|
76
|
-
caps.push('buoy');
|
|
81
|
+
caps.push('current_profile');
|
|
77
82
|
const result = {
|
|
78
83
|
station_id: match.id,
|
|
79
84
|
name: match.name,
|
|
80
85
|
source: 'ndbc',
|
|
81
86
|
latitude: match.lat,
|
|
82
87
|
longitude: match.lon,
|
|
83
|
-
type: match.type ?? 'buoy',
|
|
84
88
|
capabilities: caps,
|
|
85
89
|
};
|
|
90
|
+
// `type` is the primary data capability (same axis as find_stations), omitted when the
|
|
91
|
+
// station serves no data. `platform` is the NDBC physical class — a separate axis (#14).
|
|
92
|
+
if (caps[0])
|
|
93
|
+
result.type = caps[0];
|
|
94
|
+
if (match.type)
|
|
95
|
+
result.platform = match.type;
|
|
86
96
|
if (match.owner)
|
|
87
97
|
result.owner = match.owner;
|
|
88
98
|
return result;
|
|
@@ -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":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAEjE,MAAM,CAAC,MAAM,yBAAyB,GAAG,QAAQ,CAAC,oCAAoC,EAAE;IACtF,IAAI,EAAE,qBAAqB;IAC3B,WAAW,EACT,
|
|
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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"}
|
|
@@ -77,6 +77,7 @@ export declare const noaaMarineFindStations: import("@cyanheads/mcp-ts-core").To
|
|
|
77
77
|
met: "met";
|
|
78
78
|
tide: "tide";
|
|
79
79
|
current: "current";
|
|
80
|
+
current_profile: "current_profile";
|
|
80
81
|
buoy: "buoy";
|
|
81
82
|
}>>>;
|
|
82
83
|
limit: z.ZodDefault<z.ZodNumber>;
|
|
@@ -88,7 +89,8 @@ export declare const noaaMarineFindStations: import("@cyanheads/mcp-ts-core").To
|
|
|
88
89
|
coops: "coops";
|
|
89
90
|
ndbc: "ndbc";
|
|
90
91
|
}>;
|
|
91
|
-
type: z.ZodString
|
|
92
|
+
type: z.ZodOptional<z.ZodString>;
|
|
93
|
+
platform: z.ZodOptional<z.ZodString>;
|
|
92
94
|
latitude: z.ZodNumber;
|
|
93
95
|
longitude: z.ZodNumber;
|
|
94
96
|
distance_km: z.ZodOptional<z.ZodNumber>;
|
|
@@ -102,5 +104,10 @@ export declare const noaaMarineFindStations: import("@cyanheads/mcp-ts-core").To
|
|
|
102
104
|
readonly code: JsonRpcErrorCode.NotFound;
|
|
103
105
|
readonly when: "No stations match the query, location, or filters.";
|
|
104
106
|
readonly recovery: "Widen the search by increasing radius_km, removing type filters, or using a broader query.";
|
|
107
|
+
}, {
|
|
108
|
+
readonly reason: "incomplete_coordinates";
|
|
109
|
+
readonly code: JsonRpcErrorCode.InvalidParams;
|
|
110
|
+
readonly when: "Only one of latitude/longitude was supplied — proximity search needs the pair.";
|
|
111
|
+
readonly recovery: "Supply both latitude and longitude to search by proximity, or drop both and search by query or state instead.";
|
|
105
112
|
}], undefined>;
|
|
106
113
|
//# sourceMappingURL=noaa-marine-find-stations.tool.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"noaa-marine-find-stations.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/noaa-marine-find-stations.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AA0EjE,eAAO,MAAM,sBAAsB
|
|
1
|
+
{"version":3,"file":"noaa-marine-find-stations.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/noaa-marine-find-stations.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AA0EjE,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cA0YjC,CAAC"}
|