@cyanheads/noaa-marine-mcp-server 0.1.6 → 0.1.7

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 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.1.7
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.1.7
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
@@ -7,7 +7,7 @@
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.1.7-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
 
@@ -211,7 +211,7 @@ MCP_TRANSPORT_TYPE=http MCP_HTTP_PORT=3010 bun run start:http
211
211
 
212
212
  ### Prerequisites
213
213
 
214
- - [Bun v1.3.11](https://bun.sh/) or higher (or Node.js v24+).
214
+ - [Bun v1.3.14](https://bun.sh/) or higher (or Node.js v24+).
215
215
  - No external API keys needed — NOAA CO-OPS and NDBC are fully open.
216
216
 
217
217
  ### 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.
@@ -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.
@@ -102,5 +102,10 @@ export declare const noaaMarineFindStations: import("@cyanheads/mcp-ts-core").To
102
102
  readonly code: JsonRpcErrorCode.NotFound;
103
103
  readonly when: "No stations match the query, location, or filters.";
104
104
  readonly recovery: "Widen the search by increasing radius_km, removing type filters, or using a broader query.";
105
+ }, {
106
+ readonly reason: "incomplete_coordinates";
107
+ readonly code: JsonRpcErrorCode.InvalidParams;
108
+ readonly when: "Only one of latitude/longitude was supplied — proximity search needs the pair.";
109
+ readonly recovery: "Supply both latitude and longitude to search by proximity, or drop both and search by query or state instead.";
105
110
  }], undefined>;
106
111
  //# 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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAmWjC,CAAC"}
@@ -80,7 +80,7 @@ export const noaaMarineFindStations = tool('noaa_marine_find_stations', {
80
80
  'This is the required first step to resolve place names or coordinates to station IDs before calling data tools. ' +
81
81
  'CO-OPS station IDs are numeric (e.g. 9447130 for Seattle); current station IDs are alphanumeric (e.g. ACT4176). ' +
82
82
  'NDBC buoy IDs are 5-character alphanumeric codes (e.g. 46041). ' +
83
- 'Provide latitude/longitude for proximity search, or query/state for name-based search — both may be combined. ' +
83
+ 'Provide latitude and longitude together for proximity search, or query/state for name-based search — both may be combined. ' +
84
84
  'Note: CO-OPS current stations are cataloged by monitoring capability, not prediction availability. ' +
85
85
  'If noaa_marine_get_currents returns no_predictions for a station, try the next nearest current station.',
86
86
  annotations: { readOnlyHint: true, openWorldHint: true },
@@ -90,13 +90,15 @@ export const noaaMarineFindStations = tool('noaa_marine_find_stations', {
90
90
  .min(-90)
91
91
  .max(90)
92
92
  .optional()
93
- .describe('Center latitude in decimal degrees for proximity search. Pair with longitude and optionally radius_km.'),
93
+ .describe('Center latitude in decimal degrees for proximity search. Required together with longitude — ' +
94
+ 'supplying only one is rejected rather than silently ignored. Optionally pair with radius_km.'),
94
95
  longitude: z
95
96
  .number()
96
97
  .min(-180)
97
98
  .max(180)
98
99
  .optional()
99
- .describe('Center longitude in decimal degrees for proximity search. Pair with latitude and optionally radius_km.'),
100
+ .describe('Center longitude in decimal degrees for proximity search. Required together with latitude — ' +
101
+ 'supplying only one is rejected rather than silently ignored. Optionally pair with radius_km.'),
100
102
  radius_km: z
101
103
  .number()
102
104
  .min(1)
@@ -106,7 +108,8 @@ export const noaaMarineFindStations = tool('noaa_marine_find_stations', {
106
108
  query: z
107
109
  .string()
108
110
  .optional()
109
- .describe('Station name substring to search (case-insensitive token match). E.g. "seattle", "puget sound".'),
111
+ .describe('Station name substring to match, case-insensitive. E.g. "seattle", "puget sound". ' +
112
+ 'NDBC rows also match on station ID. Blank or whitespace-only values are treated as omitted.'),
110
113
  state: z
111
114
  .enum(STATE_CODES)
112
115
  .optional()
@@ -120,10 +123,14 @@ export const noaaMarineFindStations = tool('noaa_marine_find_stations', {
120
123
  types: z
121
124
  .array(z
122
125
  .enum(['tide', 'current', 'water_level', 'buoy', 'met'])
123
- .describe('Station capability type: tide (CO-OPS tide predictions), current (CO-OPS current predictions), ' +
124
- 'water_level (CO-OPS observed water levels), buoy (NDBC buoy), met (NDBC meteorological).'))
126
+ .describe('Station capability, matched against the capabilities list of each station: tide (CO-OPS tide predictions), ' +
127
+ 'current (CO-OPS current predictions), water_level (CO-OPS observed water levels), ' +
128
+ 'met (NDBC meteorological — the stations noaa_marine_get_conditions reads), ' +
129
+ 'buoy (NDBC station reporting neither met nor currents).'))
125
130
  .optional()
126
- .describe('Filter by station type/capability. Omit to return all types.'),
131
+ .describe('Filter by station capability. Every returned station carries at least one of the requested values in its ' +
132
+ 'capabilities list. Omit to return all types. NDBC stations whose only capability is currents match none ' +
133
+ 'of these values — reach them with source="ndbc" and no types filter, or by name/ID via query.'),
127
134
  limit: z
128
135
  .number()
129
136
  .int()
@@ -143,7 +150,10 @@ export const noaaMarineFindStations = tool('noaa_marine_find_stations', {
143
150
  .describe('Data source: coops (CO-OPS) or ndbc (NDBC buoy).'),
144
151
  type: z
145
152
  .string()
146
- .describe('Station type/capability string, e.g. "tide", "current", "water_level", "buoy".'),
153
+ .describe('The capability this row leads with — always one of the values in capabilities. When a types filter ' +
154
+ 'is set this is the first requested capability the station has, so it never contradicts the filter; ' +
155
+ 'otherwise it is the first capability. This is a data-product capability, not the physical platform ' +
156
+ 'classification — for that, read the noaa-marine://station/{station_id} resource.'),
147
157
  latitude: z.number().describe('Station latitude in decimal degrees.'),
148
158
  longitude: z.number().describe('Station longitude in decimal degrees.'),
149
159
  distance_km: z
@@ -175,14 +185,40 @@ export const noaaMarineFindStations = tool('noaa_marine_find_stations', {
175
185
  when: 'No stations match the query, location, or filters.',
176
186
  recovery: 'Widen the search by increasing radius_km, removing type filters, or using a broader query.',
177
187
  },
188
+ {
189
+ reason: 'incomplete_coordinates',
190
+ code: JsonRpcErrorCode.InvalidParams,
191
+ when: 'Only one of latitude/longitude was supplied — proximity search needs the pair.',
192
+ recovery: 'Supply both latitude and longitude to search by proximity, or drop both and search by query or state instead.',
193
+ },
178
194
  ],
179
195
  async handler(input, ctx) {
180
196
  const coopsSvc = getCoopsService();
181
197
  const ndbcSvc = getNdbcService();
198
+ // A lone latitude or longitude cannot anchor a proximity search. Reject the pair
199
+ // outright rather than silently dropping the distance filter and returning the
200
+ // global list sorted by name, which reads as a successful location search.
201
+ const { latitude: lat, longitude: lon } = input;
202
+ if ((lat === undefined) !== (lon === undefined)) {
203
+ const missing = lat === undefined ? 'latitude' : 'longitude';
204
+ throw ctx.fail('incomplete_coordinates', `Proximity search needs both latitude and longitude — ${missing} is missing.`, { ...ctx.recoveryFor('incomplete_coordinates') });
205
+ }
206
+ const center = lat !== undefined && lon !== undefined ? { lat, lon } : undefined;
207
+ // Blank/whitespace-only queries carry no search intent — treat them as omitted
208
+ // rather than substring-matching station names that contain runs of spaces.
209
+ const query = input.query?.trim().toLowerCase();
210
+ // An empty types array means the same thing as no types array.
211
+ const typeFilter = input.types?.length ? input.types : undefined;
212
+ /** True when the station carries at least one of the requested capabilities. */
213
+ const matchesTypeFilter = (capabilities) => !typeFilter || typeFilter.some((t) => capabilities.includes(t));
214
+ /**
215
+ * The capability a row leads with. Under a types filter this is the first requested
216
+ * capability the station actually has, so `type` can never contradict the filter that
217
+ * selected the row; unfiltered, it is the station's first capability. Both this and
218
+ * matchesTypeFilter read the same capabilities array, so the two agree by construction.
219
+ */
220
+ const primaryTypeFor = (capabilities) => typeFilter?.find((t) => capabilities.includes(t)) ?? capabilities[0] ?? 'unknown';
182
221
  const results = [];
183
- const lat = input.latitude;
184
- const lon = input.longitude;
185
- const hasLatLon = lat !== undefined && lat !== null && lon !== undefined && lon !== null;
186
222
  // Fetch CO-OPS and NDBC lists in parallel.
187
223
  // `state` is a CO-OPS-only filter — NDBC buoys carry no state, so a state-scoped
188
224
  // search must exclude them (otherwise state-less global buoys flood the results).
@@ -201,70 +237,40 @@ export const noaaMarineFindStations = tool('noaa_marine_find_stations', {
201
237
  // Process CO-OPS stations
202
238
  if (coopsResults.status === 'fulfilled' && coopsResults.value) {
203
239
  const [tideStations, currentStations, waterLevelStations] = coopsResults.value;
204
- const tideSet = new Set();
205
- const currentSet = new Set();
206
- const waterLevelSet = new Set();
207
- for (const s of tideStations)
208
- tideSet.add(s.id);
209
- for (const s of currentStations)
210
- currentSet.add(s.id);
211
- for (const s of waterLevelStations)
212
- waterLevelSet.add(s.id);
213
- // Build unique station map — a station can appear in multiple lists
240
+ // Build unique station map — a station can appear in multiple lists, and each list
241
+ // it appears in IS one of its capabilities, so membership needs no separate index.
214
242
  const allCoops = new Map();
215
- for (const s of tideStations) {
216
- if (!allCoops.has(s.id))
217
- allCoops.set(s.id, { ...s, capabilities: [] });
218
- const entry = allCoops.get(s.id);
219
- if (entry && !entry.capabilities.includes('tide'))
220
- entry.capabilities.push('tide');
221
- }
222
- for (const s of currentStations) {
223
- if (!allCoops.has(s.id))
224
- allCoops.set(s.id, { ...s, capabilities: [] });
225
- const entry = allCoops.get(s.id);
226
- if (entry && !entry.capabilities.includes('current'))
227
- entry.capabilities.push('current');
228
- }
229
- for (const s of waterLevelStations) {
230
- if (!allCoops.has(s.id))
231
- allCoops.set(s.id, { ...s, capabilities: [] });
232
- const entry = allCoops.get(s.id);
233
- if (entry && !entry.capabilities.includes('water_level'))
234
- entry.capabilities.push('water_level');
235
- }
236
- for (const [, s] of allCoops) {
237
- // Apply type filter
238
- if (input.types && input.types.length > 0) {
239
- const hasMatch = input.types.some((t) => (t === 'tide' && tideSet.has(s.id)) ||
240
- (t === 'current' && currentSet.has(s.id)) ||
241
- (t === 'water_level' && waterLevelSet.has(s.id)));
242
- if (!hasMatch)
243
- continue;
243
+ const addCapability = (stations, capability) => {
244
+ for (const s of stations) {
245
+ const entry = allCoops.get(s.id) ?? { ...s, capabilities: [] };
246
+ if (!entry.capabilities.includes(capability))
247
+ entry.capabilities.push(capability);
248
+ allCoops.set(s.id, entry);
244
249
  }
245
- // Apply state filter
250
+ };
251
+ addCapability(tideStations, 'tide');
252
+ addCapability(currentStations, 'current');
253
+ addCapability(waterLevelStations, 'water_level');
254
+ for (const s of allCoops.values()) {
255
+ if (!matchesTypeFilter(s.capabilities))
256
+ continue;
246
257
  if (input.state && s.state !== input.state)
247
258
  continue;
248
- // Apply name query
249
- if (input.query) {
250
- const q = input.query.toLowerCase();
251
- if (!s.name.toLowerCase().includes(q))
252
- continue;
253
- }
254
- const primaryType = s.capabilities[0] ?? 'tide';
259
+ if (query && !s.name.toLowerCase().includes(query))
260
+ continue;
255
261
  const entry = {
256
262
  station_id: s.id,
257
263
  name: s.name,
258
264
  source: 'coops',
259
- type: primaryType,
265
+ type: primaryTypeFor(s.capabilities),
260
266
  latitude: s.lat,
261
267
  longitude: s.lng,
262
268
  capabilities: s.capabilities,
263
269
  };
264
270
  if (s.state)
265
271
  entry.state = s.state;
266
- if (hasLatLon && lat !== undefined && lon !== undefined) {
267
- const dist = haversineKm(lat, lon, s.lat, s.lng);
272
+ if (center) {
273
+ const dist = haversineKm(center.lat, center.lon, s.lat, s.lng);
268
274
  if (dist > input.radius_km)
269
275
  continue;
270
276
  entry.distance_km = Math.round(dist * 10) / 10;
@@ -275,18 +281,10 @@ export const noaaMarineFindStations = tool('noaa_marine_find_stations', {
275
281
  // Process NDBC stations
276
282
  if (ndbcResult.status === 'fulfilled' && ndbcResult.value) {
277
283
  for (const s of ndbcResult.value) {
278
- // Apply type filter
279
- if (input.types && input.types.length > 0) {
280
- const hasMatch = input.types.some((t) => (t === 'buoy' || t === 'met') && (s.hasMet || s.type?.toLowerCase().includes('buoy')));
281
- if (!hasMatch)
282
- continue;
283
- }
284
- // Apply name query
285
- if (input.query) {
286
- const q = input.query.toLowerCase();
287
- if (!s.name.toLowerCase().includes(q) && !s.id.toLowerCase().includes(q))
288
- continue;
289
- }
284
+ // Derive capabilities from the NDBC flags BEFORE filtering, so the filter and the
285
+ // reported capabilities read the same array. The station's `type` attribute is a
286
+ // platform classification (buoy/fixed/oilrig/dart/…), not a capability — matching
287
+ // it against a `met` filter admits buoys NDBC flags as met="n".
290
288
  const capabilities = [];
291
289
  if (s.hasMet)
292
290
  capabilities.push('met');
@@ -294,17 +292,21 @@ export const noaaMarineFindStations = tool('noaa_marine_find_stations', {
294
292
  capabilities.push('currents');
295
293
  if (capabilities.length === 0)
296
294
  capabilities.push('buoy');
295
+ if (!matchesTypeFilter(capabilities))
296
+ continue;
297
+ if (query && !s.name.toLowerCase().includes(query) && !s.id.toLowerCase().includes(query))
298
+ continue;
297
299
  const entry = {
298
300
  station_id: s.id,
299
301
  name: s.name,
300
302
  source: 'ndbc',
301
- type: 'buoy',
303
+ type: primaryTypeFor(capabilities),
302
304
  latitude: s.lat,
303
305
  longitude: s.lon,
304
306
  capabilities,
305
307
  };
306
- if (hasLatLon && lat !== undefined && lon !== undefined) {
307
- const dist = haversineKm(lat, lon, s.lat, s.lon);
308
+ if (center) {
309
+ const dist = haversineKm(center.lat, center.lon, s.lat, s.lon);
308
310
  if (dist > input.radius_km)
309
311
  continue;
310
312
  entry.distance_km = Math.round(dist * 10) / 10;
@@ -313,7 +315,7 @@ export const noaaMarineFindStations = tool('noaa_marine_find_stations', {
313
315
  }
314
316
  }
315
317
  // Sort: by distance if lat/lon provided, otherwise by name
316
- if (hasLatLon) {
318
+ if (center) {
317
319
  results.sort((a, b) => (a.distance_km ?? 9999) - (b.distance_km ?? 9999));
318
320
  }
319
321
  else {
@@ -1 +1 @@
1
- {"version":3,"file":"noaa-marine-find-stations.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/noaa-marine-find-stations.tool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"noaa-marine-find-stations.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/noaa-marine-find-stations.tool.ts"],"names":[],"mappings":"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"}
@@ -30,11 +30,11 @@ export declare const noaaMarineGetConditions: import("@cyanheads/mcp-ts-core").T
30
30
  readonly reason: "buoy_not_found";
31
31
  readonly code: JsonRpcErrorCode.NotFound;
32
32
  readonly when: "NDBC returned 404 for the station ID.";
33
- readonly recovery: "Verify the station ID using noaa_marine_find_stations with source=\"ndbc\" and try again.";
33
+ readonly recovery: "Find a conditions-capable station with noaa_marine_find_stations using source=\"ndbc\" and types=[\"met\"] — an unfiltered NDBC search returns stations that have no observation file.";
34
34
  }, {
35
35
  readonly reason: "no_sensor_data";
36
36
  readonly code: JsonRpcErrorCode.NotFound;
37
37
  readonly when: "Buoy file exists but all sensor fields are MM (missing) — buoy offline or sensor failure.";
38
- readonly recovery: "The buoy may be temporarily offline. Try a nearby buoy via noaa_marine_find_stations.";
38
+ readonly recovery: "This station may be temporarily offline — try a nearby one from noaa_marine_find_stations with source=\"ndbc\" and types=[\"met\"].";
39
39
  }], undefined>;
40
40
  //# sourceMappingURL=noaa-marine-get-conditions.tool.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"noaa-marine-get-conditions.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/noaa-marine-get-conditions.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAY,MAAM,+BAA+B,CAAC;AAG3E,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cA4LlC,CAAC"}
1
+ {"version":3,"file":"noaa-marine-get-conditions.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/noaa-marine-get-conditions.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAY,MAAM,+BAA+B,CAAC;AAG3E,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cA+LlC,CAAC"}
@@ -13,14 +13,17 @@ export const noaaMarineGetConditions = tool('noaa_marine_get_conditions', {
13
13
  'Exceptions: TIDE is in feet and VIS is in nautical miles (rarely populated at offshore buoys). ' +
14
14
  'Numeric fields are null when the buoy sensor did not report a value — this is normal for offshore buoys. ' +
15
15
  'Observations are updated approximately every 10 minutes; data may be 10–20 minutes old. ' +
16
- 'Use noaa_marine_find_stations with source="ndbc" to find buoy station IDs near a location.',
16
+ 'Use noaa_marine_find_stations with source="ndbc" and types=["met"] to find station IDs near a location — ' +
17
+ 'met-flagged stations are the ones most likely to serve live conditions. Roughly a third of active NDBC ' +
18
+ 'stations report neither meteorological nor current data, and most of those have no observation file, so ' +
19
+ 'omitting the types filter will surface station IDs this tool cannot read.',
17
20
  annotations: { readOnlyHint: true, openWorldHint: true },
18
21
  input: z.object({
19
22
  station_id: z
20
23
  .string()
21
24
  .regex(/^[A-Za-z0-9_-]{1,20}$/)
22
25
  .describe('NDBC buoy station ID (5-character alphanumeric, e.g. "46041" for Cape Elizabeth). ' +
23
- 'Obtain from noaa_marine_find_stations with source="ndbc".'),
26
+ 'Obtain from noaa_marine_find_stations with source="ndbc" and types=["met"].'),
24
27
  }),
25
28
  output: z.object({
26
29
  station_id: z.string().describe('Station ID echoed from the request — for chaining.'),
@@ -78,13 +81,13 @@ export const noaaMarineGetConditions = tool('noaa_marine_get_conditions', {
78
81
  reason: 'buoy_not_found',
79
82
  code: JsonRpcErrorCode.NotFound,
80
83
  when: 'NDBC returned 404 for the station ID.',
81
- recovery: 'Verify the station ID using noaa_marine_find_stations with source="ndbc" and try again.',
84
+ recovery: 'Find a conditions-capable station with noaa_marine_find_stations using source="ndbc" and types=["met"] — an unfiltered NDBC search returns stations that have no observation file.',
82
85
  },
83
86
  {
84
87
  reason: 'no_sensor_data',
85
88
  code: JsonRpcErrorCode.NotFound,
86
89
  when: 'Buoy file exists but all sensor fields are MM (missing) — buoy offline or sensor failure.',
87
- recovery: 'The buoy may be temporarily offline. Try a nearby buoy via noaa_marine_find_stations.',
90
+ recovery: 'This station may be temporarily offline — try a nearby one from noaa_marine_find_stations with source="ndbc" and types=["met"].',
88
91
  },
89
92
  ],
90
93
  async handler(input, ctx) {
@@ -107,7 +110,7 @@ export const noaaMarineGetConditions = tool('noaa_marine_get_conditions', {
107
110
  if (reason === 'no_sensor_data') {
108
111
  throw ctx.fail('no_sensor_data', `NDBC buoy ${input.station_id} reported no usable sensor data — the buoy file exists but every sensor value is missing (buoy offline or sensor failure).`, { ...ctx.recoveryFor('no_sensor_data') });
109
112
  }
110
- throw ctx.fail('buoy_not_found', `NDBC buoy ${input.station_id} not found — verify the ID with noaa_marine_find_stations.`, { ...ctx.recoveryFor('buoy_not_found') });
113
+ throw ctx.fail('buoy_not_found', `NDBC has no observation file for station ${input.station_id} — use noaa_marine_find_stations with source="ndbc" and types=["met"] to find a conditions-capable station.`, { ...ctx.recoveryFor('buoy_not_found') });
111
114
  }
112
115
  throw err;
113
116
  }
@@ -1 +1 @@
1
- {"version":3,"file":"noaa-marine-get-conditions.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/noaa-marine-get-conditions.tool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"noaa-marine-get-conditions.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/noaa-marine-get-conditions.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAEjE,MAAM,CAAC,MAAM,uBAAuB,GAAG,IAAI,CAAC,4BAA4B,EAAE;IACxE,KAAK,EAAE,uBAAuB;IAC9B,WAAW,EACT,qGAAqG;QACrG,gFAAgF;QAChF,gGAAgG;QAChG,iGAAiG;QACjG,2GAA2G;QAC3G,0FAA0F;QAC1F,2GAA2G;QAC3G,yGAAyG;QACzG,0GAA0G;QAC1G,2EAA2E;IAC7E,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE;IAExD,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,UAAU,EAAE,CAAC;aACV,MAAM,EAAE;aACR,KAAK,CAAC,uBAAuB,CAAC;aAC9B,QAAQ,CACP,oFAAoF;YAClF,6EAA6E,CAChF;KACJ,CAAC;IAEF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oDAAoD,CAAC;QACrF,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kDAAkD,CAAC;QACrF,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;QACrE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;QACvE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qDAAqD,CAAC;QACvF,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4CAA4C,CAAC;QACzE,kBAAkB,EAAE,CAAC;aAClB,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,2EAA2E,CAAC;QACxF,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;QACzF,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+CAA+C,CAAC;QAC9F,aAAa,EAAE,CAAC;aACb,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,0DAA0D,CAAC;QACvE,mBAAmB,EAAE,CAAC;aACnB,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,wDAAwD,CAAC;QACrE,kBAAkB,EAAE,CAAC;aAClB,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,uDAAuD,CAAC;QACpE,uBAAuB,EAAE,CAAC;aACvB,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,4DAA4D,CAAC;QACzE,YAAY,EAAE,CAAC;aACZ,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,oDAAoD,CAAC;QACjE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8CAA8C,CAAC;QAC1F,YAAY,EAAE,CAAC;aACZ,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,sDAAsD,CAAC;QACnE,WAAW,EAAE,CAAC;aACX,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,oDAAoD,CAAC;QACjE,cAAc,EAAE,CAAC;aACd,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CACP,uHAAuH,CACxH;QACH,OAAO,EAAE,CAAC;aACP,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CACP,wIAAwI,CACzI;KACJ,CAAC;IAEF,MAAM,EAAE;QACN;YACE,MAAM,EAAE,gBAAgB;YACxB,IAAI,EAAE,gBAAgB,CAAC,QAAQ;YAC/B,IAAI,EAAE,uCAAuC;YAC7C,QAAQ,EACN,oLAAoL;SACvL;QACD;YACE,MAAM,EAAE,gBAAgB;YACxB,IAAI,EAAE,gBAAgB,CAAC,QAAQ;YAC/B,IAAI,EAAE,2FAA2F;YACjG,QAAQ,EACN,iIAAiI;SACpI;KACF;IAED,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG;QACtB,MAAM,OAAO,GAAG,cAAc,EAAE,CAAC;QAEjC,4CAA4C;QAC5C,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;QACtD,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;QAEzF,IAAI,GAAyD,CAAC;QAC9D,IAAI,CAAC;YACH,GAAG,GAAG,MAAM,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;QAC9D,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,4EAA4E;YAC5E,8EAA8E;YAC9E,8EAA8E;YAC9E,gFAAgF;YAChF,6EAA6E;YAC7E,IAAI,GAAG,YAAY,QAAQ,IAAI,GAAG,CAAC,IAAI,KAAK,gBAAgB,CAAC,QAAQ,EAAE,CAAC;gBACtE,MAAM,MAAM,GAAI,GAAG,CAAC,IAA4C,EAAE,MAAM,CAAC;gBACzE,IAAI,MAAM,KAAK,gBAAgB,EAAE,CAAC;oBAChC,MAAM,GAAG,CAAC,IAAI,CACZ,gBAAgB,EAChB,aAAa,KAAK,CAAC,UAAU,4HAA4H,EACzJ,EAAE,GAAG,GAAG,CAAC,WAAW,CAAC,gBAAgB,CAAC,EAAE,CACzC,CAAC;gBACJ,CAAC;gBACD,MAAM,GAAG,CAAC,IAAI,CACZ,gBAAgB,EAChB,4CAA4C,KAAK,CAAC,UAAU,6GAA6G,EACzK,EAAE,GAAG,GAAG,CAAC,WAAW,CAAC,gBAAgB,CAAC,EAAE,CACzC,CAAC;YACJ,CAAC;YACD,MAAM,GAAG,CAAC;QACZ,CAAC;QAED,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,yBAAyB,EAAE;YACtC,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,WAAW,EAAE,GAAG,CAAC,UAAU;SAC5B,CAAC,CAAC;QAEH,OAAO;YACL,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,WAAW,EAAE;YAC1C,YAAY,EAAE,IAAI,EAAE,IAAI,IAAI,KAAK,CAAC,UAAU;YAC5C,QAAQ,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;YACxB,SAAS,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;YACzB,WAAW,EAAE,GAAG,CAAC,UAAU;YAC3B,MAAM,EAAE,MAAM;YACd,kBAAkB,EAAE,GAAG,CAAC,gBAAgB;YACxC,aAAa,EAAE,GAAG,CAAC,WAAW;YAC9B,aAAa,EAAE,GAAG,CAAC,WAAW;YAC9B,aAAa,EAAE,GAAG,CAAC,WAAW;YAC9B,mBAAmB,EAAE,GAAG,CAAC,iBAAiB;YAC1C,kBAAkB,EAAE,GAAG,CAAC,gBAAgB;YACxC,uBAAuB,EAAE,GAAG,CAAC,oBAAoB;YACjD,YAAY,EAAE,GAAG,CAAC,WAAW;YAC7B,UAAU,EAAE,GAAG,CAAC,QAAQ;YACxB,YAAY,EAAE,GAAG,CAAC,UAAU;YAC5B,WAAW,EAAE,GAAG,CAAC,SAAS;YAC1B,cAAc,EAAE,GAAG,CAAC,aAAa;YACjC,OAAO,EAAE,GAAG,CAAC,MAAM;SACpB,CAAC;IACJ,CAAC;IAED,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE;QACjB,MAAM,GAAG,GAAG,CAAC,CAAgB,EAAE,IAAY,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC;QAE/F,MAAM,KAAK,GAAa;YACtB,0BAA0B,MAAM,CAAC,YAAY,KAAK,MAAM,CAAC,UAAU,GAAG;YACtE,oBAAoB,MAAM,CAAC,WAAW,kBAAkB,MAAM,CAAC,MAAM,EAAE;YACvE,iBAAiB,MAAM,CAAC,QAAQ,KAAK,MAAM,CAAC,SAAS,EAAE;YACvD,EAAE;YACF,UAAU;YACV,cAAc,GAAG,CAAC,MAAM,CAAC,kBAAkB,EAAE,IAAI,CAAC,aAAa,GAAG,CAAC,MAAM,CAAC,aAAa,EAAE,KAAK,CAAC,YAAY,GAAG,CAAC,MAAM,CAAC,aAAa,EAAE,KAAK,CAAC,EAAE;YAC7I,EAAE;YACF,WAAW;YACX,WAAW,GAAG,CAAC,MAAM,CAAC,aAAa,EAAE,GAAG,CAAC,uBAAuB,GAAG,CAAC,MAAM,CAAC,mBAAmB,EAAE,GAAG,CAAC,kBAAkB,GAAG,CAAC,MAAM,CAAC,kBAAkB,EAAE,GAAG,CAAC,EAAE;YAC3J,cAAc,GAAG,CAAC,MAAM,CAAC,uBAAuB,EAAE,IAAI,CAAC,EAAE;YACzD,EAAE;YACF,iBAAiB;YACjB,aAAa,GAAG,CAAC,MAAM,CAAC,YAAY,EAAE,KAAK,CAAC,gBAAgB,GAAG,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,iBAAiB,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC,EAAE;YACxI,EAAE;YACF,WAAW;YACX,qBAAqB,GAAG,CAAC,MAAM,CAAC,YAAY,EAAE,IAAI,CAAC,EAAE;SACtD,CAAC;QAEF,IAAI,MAAM,CAAC,cAAc,KAAK,IAAI,EAAE,CAAC;YACnC,KAAK,CAAC,IAAI,CAAC,eAAe,MAAM,CAAC,cAAc,MAAM,CAAC,CAAC;QACzD,CAAC;QACD,IAAI,MAAM,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;YAC5B,KAAK,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,OAAO,KAAK,CAAC,CAAC;QAC3C,CAAC;QAED,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACpD,CAAC;CACF,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cyanheads/noaa-marine-mcp-server",
3
- "version": "0.1.6",
3
+ "version": "0.1.7",
4
4
  "mcpName": "io.github.cyanheads/noaa-marine-mcp-server",
5
5
  "description": "Find NOAA tide stations and NDBC buoys, fetch tide predictions, water levels, tidal currents, and live buoy conditions via MCP. STDIO or Streamable HTTP.",
6
6
  "type": "module",
@@ -68,7 +68,7 @@
68
68
  "url": "https://github.com/cyanheads/noaa-marine-mcp-server/issues"
69
69
  },
70
70
  "homepage": "https://github.com/cyanheads/noaa-marine-mcp-server#readme",
71
- "author": "cyanheads <casey@caseyjhand.com> (https://github.com/cyanheads/noaa-marine-mcp-server#readme)",
71
+ "author": "Casey Hand <casey@caseyjhand.com> (https://caseyjhand.com)",
72
72
  "funding": [
73
73
  {
74
74
  "type": "github",
@@ -80,7 +80,7 @@
80
80
  }
81
81
  ],
82
82
  "license": "Apache-2.0",
83
- "packageManager": "bun@1.3.11",
83
+ "packageManager": "bun@1.3.14",
84
84
  "engines": {
85
85
  "bun": ">=1.3.0",
86
86
  "node": ">=24.0.0"
@@ -89,17 +89,18 @@
89
89
  "access": "public"
90
90
  },
91
91
  "dependencies": {
92
- "@cyanheads/mcp-ts-core": "^0.10.9",
92
+ "@cyanheads/mcp-ts-core": "^0.10.14",
93
93
  "pino-pretty": "^13.1.3",
94
94
  "zod": "^4.4.3"
95
95
  },
96
96
  "devDependencies": {
97
97
  "@biomejs/biome": "^2.5.1",
98
- "@types/node": "^26.0.1",
98
+ "@socketsecurity/bun-security-scanner": "^1.1.2",
99
+ "@types/node": "^26.1.1",
99
100
  "depcheck": "^1.4.7",
100
- "ignore": "^7.0.5",
101
+ "ignore": "^7.0.6",
101
102
  "tsc-alias": "^1.8.17",
102
103
  "typescript": "^6.0.3",
103
- "vitest": "^4.1.9"
104
+ "vitest": "^4.1.10"
104
105
  }
105
106
  }
package/server.json CHANGED
@@ -6,7 +6,7 @@
6
6
  "url": "https://github.com/cyanheads/noaa-marine-mcp-server",
7
7
  "source": "github"
8
8
  },
9
- "version": "0.1.6",
9
+ "version": "0.1.7",
10
10
  "remotes": [
11
11
  {
12
12
  "type": "streamable-http",
@@ -19,7 +19,7 @@
19
19
  "registryBaseUrl": "https://registry.npmjs.org",
20
20
  "identifier": "@cyanheads/noaa-marine-mcp-server",
21
21
  "runtimeHint": "bun",
22
- "version": "0.1.6",
22
+ "version": "0.1.7",
23
23
  "packageArguments": [
24
24
  {
25
25
  "type": "positional",
@@ -55,7 +55,7 @@
55
55
  "registryBaseUrl": "https://registry.npmjs.org",
56
56
  "identifier": "@cyanheads/noaa-marine-mcp-server",
57
57
  "runtimeHint": "bun",
58
- "version": "0.1.6",
58
+ "version": "0.1.7",
59
59
  "packageArguments": [
60
60
  {
61
61
  "type": "positional",