@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.
Files changed (35) hide show
  1. package/AGENTS.md +3 -3
  2. package/CLAUDE.md +3 -3
  3. package/Dockerfile +10 -6
  4. package/README.md +20 -8
  5. package/changelog/0.1.x/0.1.7.md +29 -0
  6. package/changelog/0.2.x/0.2.0.md +22 -0
  7. package/changelog/template.md +5 -3
  8. package/dist/index.js +7 -2
  9. package/dist/index.js.map +1 -1
  10. package/dist/mcp-server/resources/definitions/noaa-marine-station.resource.d.ts.map +1 -1
  11. package/dist/mcp-server/resources/definitions/noaa-marine-station.resource.js +19 -9
  12. package/dist/mcp-server/resources/definitions/noaa-marine-station.resource.js.map +1 -1
  13. package/dist/mcp-server/tools/definitions/noaa-marine-find-stations.tool.d.ts +8 -1
  14. package/dist/mcp-server/tools/definitions/noaa-marine-find-stations.tool.d.ts.map +1 -1
  15. package/dist/mcp-server/tools/definitions/noaa-marine-find-stations.tool.js +121 -84
  16. package/dist/mcp-server/tools/definitions/noaa-marine-find-stations.tool.js.map +1 -1
  17. package/dist/mcp-server/tools/definitions/noaa-marine-get-conditions.tool.d.ts +2 -2
  18. package/dist/mcp-server/tools/definitions/noaa-marine-get-conditions.tool.d.ts.map +1 -1
  19. package/dist/mcp-server/tools/definitions/noaa-marine-get-conditions.tool.js +8 -5
  20. package/dist/mcp-server/tools/definitions/noaa-marine-get-conditions.tool.js.map +1 -1
  21. package/dist/mcp-server/tools/definitions/noaa-marine-get-current-profile.tool.d.ts +33 -0
  22. package/dist/mcp-server/tools/definitions/noaa-marine-get-current-profile.tool.d.ts.map +1 -0
  23. package/dist/mcp-server/tools/definitions/noaa-marine-get-current-profile.tool.js +131 -0
  24. package/dist/mcp-server/tools/definitions/noaa-marine-get-current-profile.tool.js.map +1 -0
  25. package/dist/mcp-server/tools/definitions/noaa-marine-get-currents.tool.d.ts.map +1 -1
  26. package/dist/mcp-server/tools/definitions/noaa-marine-get-currents.tool.js +2 -0
  27. package/dist/mcp-server/tools/definitions/noaa-marine-get-currents.tool.js.map +1 -1
  28. package/dist/services/ndbc/ndbc-service.d.ts +13 -1
  29. package/dist/services/ndbc/ndbc-service.d.ts.map +1 -1
  30. package/dist/services/ndbc/ndbc-service.js +84 -0
  31. package/dist/services/ndbc/ndbc-service.js.map +1 -1
  32. package/dist/services/ndbc/types.d.ts +23 -0
  33. package/dist/services/ndbc/types.d.ts.map +1 -1
  34. package/package.json +8 -7
  35. 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.1.6
5
- **Framework:** [@cyanheads/mcp-ts-core](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) `^0.10.9`
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.1.6
5
- **Framework:** [@cyanheads/mcp-ts-core](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) `^0.10.9`
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
- RUN bun install --frozen-lockfile
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 install --production --frozen-lockfile --ignore-scripts
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 if [ "$OTEL_ENABLED" = "true" ]; then \
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>5 Tools • 1 Resource</div>
4
+ <div>6 Tools • 1 Resource</div>
5
5
  </p>
6
6
  </div>
7
7
 
8
8
  <div align="center">
9
9
 
10
- [![Version](https://img.shields.io/badge/Version-0.1.6-blue.svg?style=flat-square)](./CHANGELOG.md) [![License](https://img.shields.io/badge/License-Apache%202.0-orange.svg?style=flat-square)](./LICENSE) [![Docker](https://img.shields.io/badge/Docker-ghcr.io-2496ED?style=flat-square&logo=docker&logoColor=white)](https://github.com/users/cyanheads/packages/container/package/noaa-marine-mcp-server) [![MCP SDK](https://img.shields.io/badge/MCP%20SDK-^1.29.0-green.svg?style=flat-square)](https://modelcontextprotocol.io/) [![npm](https://img.shields.io/npm/v/@cyanheads/noaa-marine-mcp-server?style=flat-square&logo=npm&logoColor=white)](https://www.npmjs.com/package/@cyanheads/noaa-marine-mcp-server) [![TypeScript](https://img.shields.io/badge/TypeScript-^6.0.3-3178C6.svg?style=flat-square)](https://www.typescriptlang.org/) [![Bun](https://img.shields.io/badge/Bun-v1.3.11-blueviolet.svg?style=flat-square)](https://bun.sh/)
10
+ [![Version](https://img.shields.io/badge/Version-0.2.0-blue.svg?style=flat-square)](./CHANGELOG.md) [![License](https://img.shields.io/badge/License-Apache%202.0-orange.svg?style=flat-square)](./LICENSE) [![Docker](https://img.shields.io/badge/Docker-ghcr.io-2496ED?style=flat-square&logo=docker&logoColor=white)](https://github.com/users/cyanheads/packages/container/package/noaa-marine-mcp-server) [![MCP SDK](https://img.shields.io/badge/MCP%20SDK-^1.29.0-green.svg?style=flat-square)](https://modelcontextprotocol.io/) [![npm](https://img.shields.io/npm/v/@cyanheads/noaa-marine-mcp-server?style=flat-square&logo=npm&logoColor=white)](https://www.npmjs.com/package/@cyanheads/noaa-marine-mcp-server) [![TypeScript](https://img.shields.io/badge/TypeScript-^6.0.3-3178C6.svg?style=flat-square)](https://www.typescriptlang.org/) [![Bun](https://img.shields.io/badge/Bun-v1.3.14-blueviolet.svg?style=flat-square)](https://bun.sh/)
11
11
 
12
12
  </div>
13
13
 
@@ -29,7 +29,7 @@
29
29
 
30
30
  ## Tools
31
31
 
32
- Five tools covering the full US marine operational workflow — station discovery, tide predictions, observed water levels, tidal current predictions, and live offshore buoy conditions:
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 type (tide, current, water_level, buoy, met)
47
- - Returns unified station list with source, type, capabilities, coordinates, and distance
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 state. |
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`) and type fields on every station record — agents can branch on data, not string parsing
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.11](https://bun.sh/) or higher (or Node.js v24+).
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))
@@ -15,9 +15,11 @@ summary: ""
15
15
  # usage. Flagged as `Breaking` in the rollup.
16
16
  breaking: false
17
17
 
18
- # Set `true` if this release contains any security fix. Pairs with the
19
- # `## Security` section below. Flagged as `Security` in the rollup so
20
- # users can triage upgrade urgency at a glance.
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 current predictions (noaa_marine_get_currents). ' +
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;KACxB;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,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,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;;wCA0FpC,CAAC"}
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 state. ' +
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('currents');
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":"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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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"}
@@ -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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAsVjC,CAAC"}
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"}