@cyanheads/noaa-marine-mcp-server 0.3.2 → 0.4.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 (43) hide show
  1. package/AGENTS.md +3 -3
  2. package/CLAUDE.md +3 -3
  3. package/README.md +11 -7
  4. package/changelog/0.4.x/0.4.0.md +31 -0
  5. package/dist/index.js +1 -12
  6. package/dist/index.js.map +1 -1
  7. package/dist/mcp-server/resources/definitions/noaa-marine-station.resource.d.ts +12 -1
  8. package/dist/mcp-server/resources/definitions/noaa-marine-station.resource.d.ts.map +1 -1
  9. package/dist/mcp-server/resources/definitions/noaa-marine-station.resource.js +40 -13
  10. package/dist/mcp-server/resources/definitions/noaa-marine-station.resource.js.map +1 -1
  11. package/dist/mcp-server/tools/definitions/noaa-marine-find-stations.tool.d.ts +30 -6
  12. package/dist/mcp-server/tools/definitions/noaa-marine-find-stations.tool.d.ts.map +1 -1
  13. package/dist/mcp-server/tools/definitions/noaa-marine-find-stations.tool.js +253 -39
  14. package/dist/mcp-server/tools/definitions/noaa-marine-find-stations.tool.js.map +1 -1
  15. package/dist/mcp-server/tools/definitions/noaa-marine-get-conditions.tool.d.ts +6 -3
  16. package/dist/mcp-server/tools/definitions/noaa-marine-get-conditions.tool.d.ts.map +1 -1
  17. package/dist/mcp-server/tools/definitions/noaa-marine-get-conditions.tool.js +53 -16
  18. package/dist/mcp-server/tools/definitions/noaa-marine-get-conditions.tool.js.map +1 -1
  19. package/dist/mcp-server/tools/definitions/noaa-marine-get-current-profile.tool.d.ts.map +1 -1
  20. package/dist/mcp-server/tools/definitions/noaa-marine-get-current-profile.tool.js +4 -9
  21. package/dist/mcp-server/tools/definitions/noaa-marine-get-current-profile.tool.js.map +1 -1
  22. package/dist/mcp-server/tools/definitions/noaa-marine-get-currents.tool.d.ts.map +1 -1
  23. package/dist/mcp-server/tools/definitions/noaa-marine-get-currents.tool.js +1 -8
  24. package/dist/mcp-server/tools/definitions/noaa-marine-get-currents.tool.js.map +1 -1
  25. package/dist/mcp-server/tools/definitions/noaa-marine-get-ocean-observations.tool.d.ts +2 -2
  26. package/dist/mcp-server/tools/definitions/noaa-marine-get-ocean-observations.tool.d.ts.map +1 -1
  27. package/dist/mcp-server/tools/definitions/noaa-marine-get-ocean-observations.tool.js +8 -19
  28. package/dist/mcp-server/tools/definitions/noaa-marine-get-ocean-observations.tool.js.map +1 -1
  29. package/dist/mcp-server/tools/definitions/noaa-marine-get-tide-predictions.tool.d.ts.map +1 -1
  30. package/dist/mcp-server/tools/definitions/noaa-marine-get-tide-predictions.tool.js +1 -6
  31. package/dist/mcp-server/tools/definitions/noaa-marine-get-tide-predictions.tool.js.map +1 -1
  32. package/dist/mcp-server/tools/definitions/noaa-marine-get-water-level.tool.d.ts +7 -1
  33. package/dist/mcp-server/tools/definitions/noaa-marine-get-water-level.tool.d.ts.map +1 -1
  34. package/dist/mcp-server/tools/definitions/noaa-marine-get-water-level.tool.js +24 -6
  35. package/dist/mcp-server/tools/definitions/noaa-marine-get-water-level.tool.js.map +1 -1
  36. package/dist/services/ndbc/ndbc-service.d.ts +9 -0
  37. package/dist/services/ndbc/ndbc-service.d.ts.map +1 -1
  38. package/dist/services/ndbc/ndbc-service.js +249 -110
  39. package/dist/services/ndbc/ndbc-service.js.map +1 -1
  40. package/dist/services/ndbc/types.d.ts +55 -15
  41. package/dist/services/ndbc/types.d.ts.map +1 -1
  42. package/package.json +3 -3
  43. package/server.json +3 -3
@@ -73,19 +73,115 @@ const STATE_CODES = [
73
73
  'AS',
74
74
  'MP',
75
75
  ];
76
+ /** Filter values only a CO-OPS row can carry. */
77
+ const COOPS_FILTER_VALUES = ['tide', 'current', 'water_level'];
78
+ /** Filter values only an NDBC row can carry — three data capabilities plus the buoy platform token. */
79
+ const NDBC_FILTER_VALUES = ['met', 'current_profile', 'water_quality', 'buoy'];
80
+ /**
81
+ * The narrowing dimensions the handler applied, echoed on a zero-match search so the
82
+ * caller can tell an unsatisfiable filter combination from a genuine miss.
83
+ */
84
+ const AppliedSearchSchema = z.object({
85
+ catalogs_read: z
86
+ .array(z.string().describe('Catalog name: coops or ndbc.'))
87
+ .describe('Catalogs this search actually fetched. Empty when source and state cancelled each other out and no catalog was read.'),
88
+ center: z
89
+ .object({
90
+ latitude: z.number().describe('Center latitude the proximity filter used.'),
91
+ longitude: z.number().describe('Center longitude the proximity filter used.'),
92
+ })
93
+ .optional()
94
+ .describe('Proximity-search center, present only when latitude and longitude were supplied.'),
95
+ query: z
96
+ .string()
97
+ .optional()
98
+ .describe('The name/ID substring as the server used it — trimmed and lowercased. Omitted when no query was supplied or it was blank.'),
99
+ radius_km: z
100
+ .number()
101
+ .optional()
102
+ .describe('Radius bound in km, present only when a center was given. Applies whenever a center is present and defaults to 100 km.'),
103
+ source: z.string().describe('The source filter applied: coops, ndbc, or all.'),
104
+ state: z
105
+ .string()
106
+ .optional()
107
+ .describe('The state filter applied. Restricts results to CO-OPS and excludes NDBC.'),
108
+ types: z
109
+ .array(z.string().describe('A requested capability or platform filter value.'))
110
+ .optional()
111
+ .describe('The resolved types filter. Omitted when no types filter narrowed the search.'),
112
+ types_by_source: z
113
+ .object({
114
+ coops: z
115
+ .array(z.string().describe('CO-OPS-only filter value.'))
116
+ .describe('Requested values only a CO-OPS row can carry.'),
117
+ ndbc: z
118
+ .array(z.string().describe('NDBC-only filter value.'))
119
+ .describe('Requested values only an NDBC row can carry.'),
120
+ })
121
+ .optional()
122
+ .describe('The requested types split by the source that can carry them — every value belongs to exactly one source, so a single-source types filter reduces the search to that source.'),
123
+ });
124
+ /** Which station catalogs this search tried to read, and how each one answered. */
125
+ const SourceReportSchema = z.object({
126
+ answered: z
127
+ .array(z.string().describe('Catalog name: coops or ndbc.'))
128
+ .describe('Catalogs that returned a station list — the results cover these only.'),
129
+ attempted: z
130
+ .array(z.string().describe('Catalog name: coops or ndbc.'))
131
+ .describe('Catalogs this search needed, after source and state decided which to read.'),
132
+ failed: z
133
+ .array(z.string().describe('Catalog name: coops or ndbc.'))
134
+ .describe('Catalogs whose fetch rejected. A station served only by one of these is missing.'),
135
+ });
136
+ /**
137
+ * Explains a zero-match search from the dimensions that were actually applied. Every clause
138
+ * names a filter the handler used, so an unsatisfiable combination reads differently from a
139
+ * genuine miss and the recovery points at the filter worth changing.
140
+ */
141
+ function describeEmptySearch(applied) {
142
+ if (applied.catalogs_read.length === 0) {
143
+ return [
144
+ 'No catalog was searched: state is a CO-OPS-only filter that excludes NDBC buoys, and',
145
+ `source="${applied.source}" excludes CO-OPS, so the two leave nothing to read.`,
146
+ `Drop state to reach NDBC buoys by query or coordinates, or keep state="${applied.state}" and set source="coops".`,
147
+ ].join(' ');
148
+ }
149
+ const applied_clauses = [];
150
+ const widen = [];
151
+ if (applied.state) {
152
+ applied_clauses.push(`state="${applied.state}" restricted the search to CO-OPS and excluded NDBC buoys, which carry no state`);
153
+ widen.push('drop state and search by query or coordinates to reach NDBC buoys');
154
+ }
155
+ if (applied.types && applied.types_by_source) {
156
+ const list = applied.types.map((t) => `"${t}"`).join(', ');
157
+ const { coops, ndbc } = applied.types_by_source;
158
+ if (ndbc.length === 0) {
159
+ applied_clauses.push(`types ${list} are CO-OPS-only values, so no NDBC row can carry them`);
160
+ }
161
+ else if (coops.length === 0) {
162
+ applied_clauses.push(`types ${list} are NDBC-only values, so no CO-OPS row can carry them`);
163
+ }
164
+ else {
165
+ applied_clauses.push(`types ${list} kept only stations carrying one of those values`);
166
+ }
167
+ widen.push('drop types or request another capability');
168
+ }
169
+ if (applied.query) {
170
+ applied_clauses.push(`query "${applied.query}" matched no station name or ID in ${applied.catalogs_read.join(' or ')}`);
171
+ widen.push('shorten the query or check its spelling');
172
+ }
173
+ if (applied.center && applied.radius_km !== undefined) {
174
+ applied_clauses.push(`radius_km ${applied.radius_km} bounded the search around ${applied.center.latitude}, ${applied.center.longitude} — this bound applies whenever a center is given and defaults to 100 km`);
175
+ widen.push('increase radius_km (max 1000)');
176
+ }
177
+ const head = applied_clauses.length > 0
178
+ ? `No station matched. Applied: ${applied_clauses.join('; ')}.`
179
+ : `No station matched, and no narrowing filter was applied — ${applied.catalogs_read.join(' and ')} returned no stations at all.`;
180
+ return widen.length > 0 ? `${head} To widen: ${widen.join(', or ')}.` : head;
181
+ }
76
182
  export const noaaMarineFindStations = tool('noaa_marine_find_stations', {
77
183
  title: 'Find Marine Stations',
78
- description: 'Find CO-OPS tide/water-level/current stations and NDBC buoys near a location or by name/state. ' +
79
- 'Returns a unified station list with source, data capabilities, coordinates, and — for NDBC — the physical platform class. ' +
80
- 'This is the required first step to resolve place names or coordinates to station IDs before calling data tools. ' +
81
- 'CO-OPS station IDs are numeric (e.g. 9447130 for Seattle); current station IDs are alphanumeric (e.g. ACT4176). ' +
82
- 'NDBC buoy IDs are 5-character alphanumeric codes (e.g. 46041). ' +
83
- 'Two axes are reported separately: `capabilities`/`type` describe the data products a station serves ' +
84
- '(tide, current, water_level, met, current_profile), while `platform` is the NDBC physical classification ' +
85
- '(buoy, fixed, oilrig, dart, tao, usv, other). CO-OPS stations carry no platform class. ' +
86
- 'Provide latitude and longitude together for proximity search, or query/state for name-based search — both may be combined. ' +
87
- 'Note: CO-OPS current stations are cataloged by monitoring capability, not prediction availability. ' +
88
- 'If noaa_marine_get_currents returns no_predictions for a station, try the next nearest current station.',
184
+ description: `Find CO-OPS tide, water-level and current stations and NDBC buoys near a location, by name, or by station ID, returning a unified list with source, data capabilities, coordinates, and — for NDBC — the physical platform class. This is the required first step for resolving a place name, a coordinate pair, or a bare station number to the station IDs the data tools take: CO-OPS tide and water-level IDs are numeric (e.g. 9447130 for Seattle), CO-OPS current IDs are alphanumeric (e.g. ACT4176), and NDBC buoy IDs are 5-character alphanumeric codes (e.g. 46041). Two axes are reported separately — capabilities and type name the data products a station serves (tide, current, water_level, met, current_profile, water_quality), while platform is the NDBC physical classification (buoy, fixed, oilrig, dart, tao, usv, other) that CO-OPS stations do not carry. Supply latitude and longitude together for a proximity search, or query for a name-or-ID substring matched against both sources, or state for CO-OPS coverage in one state; the filters combine, and results lead with an exact ID match unless a proximity search is ordering them by distance. A search that matches nothing is a success with total_found: 0 carrying an echo of the filters that were applied, and a search whose catalogs did not all answer says which source is missing. Note that CO-OPS current stations are cataloged by monitoring capability rather than prediction availability, so when noaa_marine_get_currents returns no_predictions for one, try the next nearest current station.`,
89
185
  annotations: { readOnlyHint: true, openWorldHint: true },
90
186
  input: z.object({
91
187
  latitude: z
@@ -111,8 +207,10 @@ export const noaaMarineFindStations = tool('noaa_marine_find_stations', {
111
207
  query: z
112
208
  .string()
113
209
  .optional()
114
- .describe('Station name substring to match, case-insensitive. E.g. "seattle", "puget sound". ' +
115
- 'NDBC rows also match on station ID. Blank or whitespace-only values are treated as omitted.'),
210
+ .describe('Station name or station ID substring to match, case-insensitive, on both sources. ' +
211
+ 'E.g. "seattle", "puget sound", "9447130", "46041". A station whose ID matches exactly is ' +
212
+ 'returned ahead of name matches, unless latitude/longitude were supplied — a proximity ' +
213
+ 'search orders by distance instead. Blank or whitespace-only values are treated as omitted.'),
116
214
  state: z
117
215
  .enum(STATE_CODES)
118
216
  .optional()
@@ -125,15 +223,24 @@ export const noaaMarineFindStations = tool('noaa_marine_find_stations', {
125
223
  .describe('Data source to search: coops (tide/water-level/current stations), ndbc (buoys), or all (default).'),
126
224
  types: z
127
225
  .array(z
128
- .enum(['tide', 'current', 'water_level', 'met', 'current_profile', 'buoy'])
129
- .describe("Filter value. Five are data capabilities, matched against a station's capabilities list: " +
226
+ .enum([
227
+ 'tide',
228
+ 'current',
229
+ 'water_level',
230
+ 'met',
231
+ 'current_profile',
232
+ 'water_quality',
233
+ 'buoy',
234
+ ])
235
+ .describe("Filter value. Six are data capabilities, matched against a station's capabilities list: " +
130
236
  'tide (CO-OPS tide predictions → noaa_marine_get_tide_predictions), ' +
131
237
  'current (CO-OPS tidal-current predictions → noaa_marine_get_currents), ' +
132
238
  'water_level (CO-OPS observed water levels → noaa_marine_get_water_level), ' +
133
239
  'met (NDBC meteorological → noaa_marine_get_conditions), ' +
134
240
  'current_profile (NDBC observed ocean-current depth profile → noaa_marine_get_current_profile; ' +
135
- 'note this is a different data product and source than CO-OPS `current`). ' +
136
- 'The sixth, buoy, is a physical-platform filter (NDBC platform class equals buoy), not a data ' +
241
+ 'note this is a different data product and source than CO-OPS `current`), ' +
242
+ 'water_quality (NDBC sub-surface water-column sensors → noaa_marine_get_ocean_observations). ' +
243
+ 'The seventh, buoy, is a physical-platform filter (NDBC platform class equals buoy), not a data ' +
137
244
  'capability — use it to select buoy-class platforms regardless of what data they serve.'))
138
245
  .optional()
139
246
  .describe('Filter by data capability or NDBC platform class. Every returned station matches at least one requested ' +
@@ -183,31 +290,63 @@ export const noaaMarineFindStations = tool('noaa_marine_find_stations', {
183
290
  capabilities: z
184
291
  .array(z.string().describe('Capability identifier, e.g. "tide", "water_level".'))
185
292
  .describe('Data products available at this station: any of tide, current, water_level (CO-OPS) or met, ' +
186
- 'current_profile (NDBC). Empty when the station reports no data capability — platform still identifies it.'),
293
+ 'current_profile, water_quality (NDBC). Empty when the station reports no data capability — ' +
294
+ 'platform still identifies it.'),
187
295
  })
188
296
  .describe('A single station matching the search criteria.'))
189
- .describe('Stations matching the search criteria, sorted by distance (if lat/lon provided) or name.'),
297
+ .describe('Stations matching the search criteria, sorted by distance (if lat/lon provided) or by exact ID match then name. Empty when nothing matched.'),
190
298
  total_found: z
191
299
  .number()
192
- .describe('Total stations matching the filters before the limit was applied.'),
300
+ .describe('Total stations matching the filters before the limit was applied. Zero when nothing matched.'),
193
301
  truncated: z
194
302
  .boolean()
195
303
  .optional()
196
304
  .describe('True when total_found exceeds the limit and not all matching stations are returned. Increase limit or narrow filters to see more.'),
197
305
  }),
198
- errors: [
199
- {
200
- reason: 'no_results',
201
- code: JsonRpcErrorCode.NotFound,
202
- when: 'No stations match the query, location, or filters.',
203
- recovery: 'Widen the search by increasing radius_km, removing type filters, or using a broader query.',
306
+ enrichment: {
307
+ applied_search: AppliedSearchSchema.optional().describe('The narrowing dimensions this search applied, echoed when nothing matched so the caller can see which filter emptied the result.'),
308
+ notice: z
309
+ .string()
310
+ .optional()
311
+ .describe('Guidance about the result set: why a search matched nothing, which catalog did not answer, or that the list was capped.'),
312
+ sources: SourceReportSchema.optional().describe('Which station catalogs were attempted, answered, and failed. Present only when a catalog fetch rejected, so a partial result set is never read as a complete one.'),
313
+ },
314
+ enrichmentTrailer: {
315
+ applied_search: {
316
+ render: (v) => {
317
+ const parts = [
318
+ `source=${v.source}`,
319
+ `catalogs read: ${v.catalogs_read.join(', ') || 'none'}`,
320
+ ];
321
+ if (v.state)
322
+ parts.push(`state=${v.state}`);
323
+ if (v.types)
324
+ parts.push(`types=[${v.types.join(', ')}]`);
325
+ if (v.query)
326
+ parts.push(`query="${v.query}"`);
327
+ if (v.center && v.radius_km !== undefined) {
328
+ parts.push(`within ${v.radius_km} km of ${v.center.latitude}, ${v.center.longitude}`);
329
+ }
330
+ return `**Applied search:** ${parts.join(' · ')}`;
331
+ },
332
+ },
333
+ sources: {
334
+ render: (v) => `**Sources:** attempted ${v.attempted.join(', ')} · answered ${v.answered.join(', ') || 'none'} · failed ${v.failed.join(', ') || 'none'}`,
204
335
  },
336
+ },
337
+ errors: [
205
338
  {
206
339
  reason: 'incomplete_coordinates',
207
340
  code: JsonRpcErrorCode.InvalidParams,
208
341
  when: 'Only one of latitude/longitude was supplied — proximity search needs the pair.',
209
342
  recovery: 'Supply both latitude and longitude to search by proximity, or drop both and search by query or state instead.',
210
343
  },
344
+ {
345
+ reason: 'sources_unavailable',
346
+ code: JsonRpcErrorCode.ServiceUnavailable,
347
+ when: 'Every station catalog this search needed failed to load, so no station list could be searched.',
348
+ recovery: 'Retry the search in a few moments — a catalog is cached for six hours once a fetch succeeds.',
349
+ },
211
350
  ],
212
351
  async handler(input, ctx) {
213
352
  const coopsSvc = getCoopsService();
@@ -223,7 +362,7 @@ export const noaaMarineFindStations = tool('noaa_marine_find_stations', {
223
362
  const center = lat !== undefined && lon !== undefined ? { lat, lon } : undefined;
224
363
  // Blank/whitespace-only queries carry no search intent — treat them as omitted
225
364
  // rather than substring-matching station names that contain runs of spaces.
226
- const query = input.query?.trim().toLowerCase();
365
+ const query = input.query?.trim().toLowerCase() || undefined;
227
366
  // An empty types array means the same thing as no types array.
228
367
  const typeFilter = input.types?.length ? input.types : undefined;
229
368
  /**
@@ -233,6 +372,12 @@ export const noaaMarineFindStations = tool('noaa_marine_find_stations', {
233
372
  * capability — both flow through one predicate.
234
373
  */
235
374
  const matchesTypeFilter = (tokens) => !typeFilter || typeFilter.some((t) => tokens.includes(t));
375
+ /**
376
+ * True when the station's name or ID carries the query substring. CO-OPS IDs are what tide
377
+ * tables and charts print, so an ID query must reach them the way it already reaches NDBC
378
+ * IDs — both sources run the same predicate so the two can't drift apart.
379
+ */
380
+ const matchesQuery = (name, id) => !query || name.toLowerCase().includes(query) || id.toLowerCase().includes(query);
236
381
  /**
237
382
  * The data capability a row leads with — always drawn from `capabilities`, never the
238
383
  * platform class. Under a capability filter this is the first requested capability the
@@ -242,6 +387,8 @@ export const noaaMarineFindStations = tool('noaa_marine_find_stations', {
242
387
  */
243
388
  const primaryTypeFor = (capabilities) => typeFilter?.find((t) => capabilities.includes(t)) ?? capabilities[0];
244
389
  const results = [];
390
+ /** `source:id` of every row whose station ID equals the query exactly — these lead the list. */
391
+ const exactIdMatches = new Set();
245
392
  // Fetch CO-OPS and NDBC lists in parallel.
246
393
  // `state` is a CO-OPS-only filter — NDBC buoys carry no state, so a state-scoped
247
394
  // search must exclude them (otherwise state-less global buoys flood the results).
@@ -257,6 +404,26 @@ export const noaaMarineFindStations = tool('noaa_marine_find_stations', {
257
404
  : Promise.resolve(null),
258
405
  includeNdbc ? ndbcSvc.getActiveStations(ctx) : Promise.resolve(null),
259
406
  ]);
407
+ // A rejected leg is a source the caller never got to search. Record it rather than
408
+ // letting the surviving source's rows read as the whole catalog.
409
+ const attempted = [];
410
+ const failed = [];
411
+ if (includeCoops) {
412
+ attempted.push('coops');
413
+ if (coopsResults.status === 'rejected')
414
+ failed.push('coops');
415
+ }
416
+ if (includeNdbc) {
417
+ attempted.push('ndbc');
418
+ if (ndbcResult.status === 'rejected')
419
+ failed.push('ndbc');
420
+ }
421
+ const answered = attempted.filter((s) => !failed.includes(s));
422
+ // Every catalog the search needed is down. Zero rows here is an upstream failure, not an
423
+ // empty search, so it must not be reported as one.
424
+ if (attempted.length > 0 && answered.length === 0) {
425
+ throw ctx.fail('sources_unavailable', `The ${failed.join(' and ')} station ${failed.length > 1 ? 'catalogs' : 'catalog'} could not be read, so no station list was searched.`, { ...ctx.recoveryFor('sources_unavailable'), failed_sources: failed });
426
+ }
260
427
  // Process CO-OPS stations
261
428
  if (coopsResults.status === 'fulfilled' && coopsResults.value) {
262
429
  const [tideStations, currentStations, waterLevelStations] = coopsResults.value;
@@ -279,7 +446,7 @@ export const noaaMarineFindStations = tool('noaa_marine_find_stations', {
279
446
  continue;
280
447
  if (input.state && s.state !== input.state)
281
448
  continue;
282
- if (query && !s.name.toLowerCase().includes(query))
449
+ if (!matchesQuery(s.name, s.id))
283
450
  continue;
284
451
  const entry = {
285
452
  station_id: s.id,
@@ -300,6 +467,8 @@ export const noaaMarineFindStations = tool('noaa_marine_find_stations', {
300
467
  continue;
301
468
  entry.distance_km = Math.round(dist * 10) / 10;
302
469
  }
470
+ if (query && s.id.toLowerCase() === query)
471
+ exactIdMatches.add(`coops:${s.id}`);
303
472
  results.push(entry);
304
473
  }
305
474
  }
@@ -309,13 +478,16 @@ export const noaaMarineFindStations = tool('noaa_marine_find_stations', {
309
478
  // Data capabilities come only from the NDBC catalog flags — never the platform class.
310
479
  // `current_profile` is NDBC observed ocean currents (the .adcp profile
311
480
  // noaa_marine_get_current_profile reads), named apart from CO-OPS `current` (tidal-current
312
- // predictions) so both stay filterable without a one-letter collision. When both flags are
313
- // off the list stays empty — a bare platform is not a fabricated "buoy" capability (#13).
481
+ // predictions) so both stay filterable without a one-letter collision. `water_quality` is
482
+ // the sub-surface water-column flag noaa_marine_get_ocean_observations reads. When every
483
+ // flag is off the list stays empty — a bare platform is not a fabricated "buoy" capability (#13).
314
484
  const capabilities = [];
315
485
  if (s.hasMet)
316
486
  capabilities.push('met');
317
487
  if (s.hasCurrents)
318
488
  capabilities.push('current_profile');
489
+ if (s.hasWaterQuality)
490
+ capabilities.push('water_quality');
319
491
  // Platform class (buoy/fixed/oilrig/dart/tao/usv/other) is a separate axis. Fold it into
320
492
  // the tokens the filter matches so a `buoy` platform filter reaches bare platforms; only
321
493
  // platform values present in the `types` enum (currently just `buoy`) are ever requestable.
@@ -323,7 +495,7 @@ export const noaaMarineFindStations = tool('noaa_marine_find_stations', {
323
495
  const matchTokens = platform ? [...capabilities, platform] : capabilities;
324
496
  if (!matchesTypeFilter(matchTokens))
325
497
  continue;
326
- if (query && !s.name.toLowerCase().includes(query) && !s.id.toLowerCase().includes(query))
498
+ if (!matchesQuery(s.name, s.id))
327
499
  continue;
328
500
  const entry = {
329
501
  station_id: s.id,
@@ -344,35 +516,77 @@ export const noaaMarineFindStations = tool('noaa_marine_find_stations', {
344
516
  continue;
345
517
  entry.distance_km = Math.round(dist * 10) / 10;
346
518
  }
519
+ if (query && s.id.toLowerCase() === query)
520
+ exactIdMatches.add(`ndbc:${s.id}`);
347
521
  results.push(entry);
348
522
  }
349
523
  }
350
- // Sort: by distance if lat/lon provided, otherwise by name
524
+ // Sort: by distance if lat/lon provided, otherwise exact ID matches first, then by name.
525
+ // NDBC mirrors CO-OPS gauges under names that start with the CO-OPS number, so a plain
526
+ // name sort puts the mirror ahead of the station that actually carries the queried ID.
351
527
  if (center) {
352
528
  results.sort((a, b) => (a.distance_km ?? 9999) - (b.distance_km ?? 9999));
353
529
  }
354
530
  else {
355
- results.sort((a, b) => a.name.localeCompare(b.name));
531
+ const idRank = (r) => exactIdMatches.has(`${r.source}:${r.station_id}`) ? 0 : 1;
532
+ results.sort((a, b) => idRank(a) - idRank(b) || a.name.localeCompare(b.name));
356
533
  }
357
534
  const total_found = results.length;
535
+ const stations = results.slice(0, input.limit);
536
+ const truncated = stations.length < total_found;
537
+ // One notice reaches the caller, so every source of guidance composes into it —
538
+ // ctx.enrich.truncated() writes `notice` last-wins and would otherwise erase the rest.
539
+ const notices = [];
540
+ if (failed.length > 0) {
541
+ const report = { answered, attempted, failed };
542
+ ctx.enrich({ sources: report });
543
+ notices.push(`The ${failed.join(' and ')} ${failed.length > 1 ? 'catalogs' : 'catalog'} could not be read, so these results cover ${answered.join(' and ')} only — a station carried only by ${failed.join(' or ')} is missing from them.`);
544
+ }
358
545
  if (total_found === 0) {
359
- throw ctx.fail('no_results', 'No stations match the specified search criteria.', {
360
- ...ctx.recoveryFor('no_results'),
546
+ const applied = {
547
+ catalogs_read: answered,
548
+ source: input.source,
549
+ ...(center ? { center: { latitude: center.lat, longitude: center.lon } } : {}),
550
+ ...(center ? { radius_km: input.radius_km } : {}),
551
+ ...(query ? { query } : {}),
552
+ ...(input.state ? { state: input.state } : {}),
553
+ ...(typeFilter
554
+ ? {
555
+ types: [...typeFilter],
556
+ types_by_source: {
557
+ coops: typeFilter.filter((t) => COOPS_FILTER_VALUES.includes(t)),
558
+ ndbc: typeFilter.filter((t) => NDBC_FILTER_VALUES.includes(t)),
559
+ },
560
+ }
561
+ : {}),
562
+ };
563
+ ctx.enrich({ applied_search: applied });
564
+ notices.push(describeEmptySearch(applied));
565
+ }
566
+ if (truncated) {
567
+ ctx.enrich.truncated({
568
+ shown: stations.length,
569
+ cap: input.limit,
570
+ ceiling: total_found,
571
+ guidance: [
572
+ `Showing ${stations.length} of ${total_found} matches — raise limit (max 200) or narrow the filters to reach the rest.`,
573
+ ...notices,
574
+ ].join(' '),
361
575
  });
362
576
  }
363
- const stations = results.slice(0, input.limit);
364
- if (stations.length < total_found) {
365
- ctx.enrich.truncated({ shown: stations.length, cap: input.limit, ceiling: total_found });
577
+ else if (notices.length > 0) {
578
+ ctx.enrich.notice(notices.join(' '));
366
579
  }
367
580
  ctx.log.info('Station search complete', {
368
581
  total_found,
369
582
  returned: stations.length,
370
583
  source: input.source,
584
+ failed_sources: failed,
371
585
  });
372
586
  return {
373
587
  stations,
374
588
  total_found,
375
- ...(stations.length < total_found ? { truncated: true } : {}),
589
+ ...(truncated ? { truncated: true } : {}),
376
590
  };
377
591
  },
378
592
  format: (result) => {
@@ -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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"}
@@ -9,8 +9,8 @@ export declare const noaaMarineGetConditions: import("@cyanheads/mcp-ts-core").T
9
9
  }, z.core.$strip>, z.ZodObject<{
10
10
  station_id: z.ZodString;
11
11
  station_name: z.ZodString;
12
- latitude: z.ZodNumber;
13
- longitude: z.ZodNumber;
12
+ latitude: z.ZodNullable<z.ZodNumber>;
13
+ longitude: z.ZodNullable<z.ZodNumber>;
14
14
  observed_at: z.ZodString;
15
15
  source: z.ZodString;
16
16
  wind_direction_deg: z.ZodNullable<z.ZodNumber>;
@@ -20,6 +20,7 @@ export declare const noaaMarineGetConditions: import("@cyanheads/mcp-ts-core").T
20
20
  dominant_period_sec: z.ZodNullable<z.ZodNumber>;
21
21
  average_period_sec: z.ZodNullable<z.ZodNumber>;
22
22
  mean_wave_direction_deg: z.ZodNullable<z.ZodNumber>;
23
+ waves_observed_at: z.ZodNullable<z.ZodString>;
23
24
  pressure_hpa: z.ZodNullable<z.ZodNumber>;
24
25
  air_temp_c: z.ZodNullable<z.ZodNumber>;
25
26
  water_temp_c: z.ZodNullable<z.ZodNumber>;
@@ -36,5 +37,7 @@ export declare const noaaMarineGetConditions: import("@cyanheads/mcp-ts-core").T
36
37
  readonly code: JsonRpcErrorCode.NotFound;
37
38
  readonly when: "Buoy file exists but all sensor fields are MM (missing) — buoy offline or sensor failure.";
38
39
  readonly recovery: "This station may be temporarily offline — try a nearby one from noaa_marine_find_stations with source=\"ndbc\" and types=[\"met\"].";
39
- }], undefined>;
40
+ }], {
41
+ readonly notice: z.ZodOptional<z.ZodString>;
42
+ }>;
40
43
  //# 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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cA+LlC,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;AAiB3E,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAqOlC,CAAC"}