Releases: cyanheads/noaa-marine-mcp-server
Release list
v0.3.0: NDBC ocean observations
NDBC ocean observations
Added: noaa_marine_get_ocean_observations — NDBC .ocean sub-surface water-column data (temperature, conductivity, salinity, dissolved oxygen, chlorophyll, turbidity, pH, redox per reported depth); latest observation, one reading per depth; best-effort with a typed observations_not_found error (#16).
Changed: tsc-alias ^1.8.17 -> ^1.9.1 (dev).
Gates: devcheck clean (zero warnings), 117 tests, docker build+run verified, live field-tested against real NDBC.
v0.2.0: NDBC current profiles, platform axis
NDBC current profiles, platform axis
New tool for NDBC observed depth-binned currents; station type now splits into a data-capability axis and a new NDBC platform-class field — breaking output changes on find_stations and the station resource.
Added:
noaa_marine_get_current_profile— NDBC ADCP observed current profile by depth bin (#15)current_profiletypes filter value reaching NDBC observed-currents stations (#15)
Changed:
platformfield carries the NDBC physical class (buoy/fixed/oilrig/dart/tao/usv/other);typeis now purely the data-capability axis and optional on both find_stations and the station resource (#14)- NDBC currents capability renamed
currents→current_profile, ending its collision with CO-OPScurrent(#15)
Fixed:
- Fabricated
buoycapability/type removed — a station with no reported data capability now reports an empty capabilities list instead of an invented buoy value; thebuoytypes filter now matches platform class (#13)
104 tests pass; bun run devcheck clean.
v0.1.7: Station discovery filter fixes and supply-chain hardening
Station discovery filter fixes and supply-chain hardening
Four noaa_marine_find_stations/get_conditions bugs fixed; mcp-ts-core bumped to 0.10.14 alongside new install and Docker build hardening.
Fixed:
noaa_marine_find_stationsrejects a lone latitude/longitude asincomplete_coordinatesinstead of returning the full station list sorted by name; blank queries are trimmed and treated as omitted (#9)- NDBC
typesfilter now matches computedcapabilitiesinstead of atype-string heuristic —metno longer admits stations NDBC flagsmet="n"(#10) noaa_marine_get_conditionsguidance now points atfind_stationswithtypes=["met"]instead of an unfiltered search that could return the same non-conditions-capable station (#11)- The
typefieldfind_stationsreturns now reflects the matched filter capability, falling back to the first computed capability when unfiltered, instead of always the first CO-OPS capability or a hardcoded "buoy" for NDBC rows (#12)
Security:
bunfig.tomlgains a 3-dayinstall.minimumReleaseAgeguard (framework excluded) and@socketsecurity/bun-security-scanneras the install scannerDockerfilebuild-stage install now runs with--ignore-scripts; base images pinned tooven/bun:1.3.14instead of the floating1.3tag
Dependency bumps:
@cyanheads/mcp-ts-core^0.10.9 → ^0.10.14@types/node^26.0.1 → ^26.1.1ignore^7.0.5 → ^7.0.6vitest^4.1.9 → ^4.1.10
88 tests pass; bun run devcheck clean.
v0.1.6: CO-OPS date validation and NDBC classification fixes
CO-OPS date validation and NDBC classification fixes
Local date-range validation, preserved no_sensor_data, state-scoped NDBC exclusion, and blank-name labels.
Fixed:
- CO-OPS date tools reject invalid or reversed ranges locally as
invalid_date_rangeinstead of a mislabeledstation_not_found(#7) get_conditionspreservesno_sensor_datafor sensorless buoys instead of remapping tobuoy_not_found(#6)find_stationsexcludes state-less NDBC buoys when astatefilter is set (#5)- Blank or whitespace NDBC station names normalized to an
NDBC <id>label (#8)
Dependencies:
@biomejs/biome^2.5.0 → ^2.5.1@types/node^26.0.0 → ^26.0.1
73 tests pass; bun run devcheck clean.
v0.1.5: mcp-ts-core ^0.10.9 maintenance
mcp-ts-core ^0.10.9 maintenance
Framework-maintenance release — no source or behavior changes.
Dependency bumps:
@cyanheads/mcp-ts-core^0.10.6 → ^0.10.9@types/node^25.9.3 → ^26.0.0vitest^4.1.8 → ^4.1.9
Added:
check-dependency-specifiersdevcheck step — fails on floating specifiers in package.json and bun.lock workspaces (cyanheads/mcp-ts-core#246)- Plugin-manifest packaging checks in lint:packaging, gated by devcheck.config.json packaging.pluginManifests (cyanheads/mcp-ts-core#240)
ctx.contentcollector available via the framework dep — image/audio blocks ride content[] only (cyanheads/mcp-ts-core#239)
Changed:
- Fresh-scaffold devcheck guards synced from 0.10.7 (build-changelog --check empty-tree, not-a-git-repo self-guards, worktree-deletion guard)
- Vendored skills/ re-synced to mcp-ts-core 0.10.9
50 tests pass; bun run devcheck clean.
v0.1.4: mcp-ts-core ^0.10.6, sharper CO-OPS error codes, bundle agent-doc stripping
mcp-ts-core ^0.10.6, sharper CO-OPS error codes, bundle agent-doc stripping
Framework adoption pass plus three definition refinements and MCPB bundle hardening.
Added:
- noaa_marine_find_stations: optional truncated flag when total_found exceeds limit
- Explicit name/title in createApp()
Changed:
- CO-OPS errors: station_not_found → NotFound, date_range_exceeded → ValidationError (tide, water-level, currents)
- bundle script strips dependency-shipped agent docs (skills/, .claude/, .agents/, SKILL.md) from the .mcpb
- Dockerfile: APP_VERSION OCI label arg + HTTP-mode healthcheck
Dependency bumps:
- @cyanheads/mcp-ts-core ^0.9.21 → ^0.10.6
- @biomejs/biome ^2.4.16 → ^2.5.0
- @types/node ^25.9.2 → ^25.9.3
50 tests pass; bun run devcheck clean.
v0.1.3: CO-OPS error typing, interval fix, and null current direction
CO-OPS error typing, interval fix, and null current direction
Four bug fixes addressing CO-OPS API correctness and error-handling fidelity.
Fixed:
- CO-OPS body errors now map to typed
CoopsBodyError(retryable: false) with acoopsReasondiscriminator; tools surface typed contract reasons viactx.fail()instead of generic ServiceUnavailable (#1) - Tide predictions
interval=6minnow translates tointerval=6before hitting the CO-OPS API; previously returned 'No Predictions data was found' for every 6-min request (#3)
Changed:
noaa_marine_get_currentsdirection —directionis nownumber | null; absent CO-OPS Direction maps to null instead of 0° (#4)noaa_marine_find_stations— description clarifies CO-OPS current stations are cataloged by capability, not prediction availability (#2)
50 tests pass; bun run devcheck clean.
v0.1.2: Public hosted endpoint
Public hosted endpoint
Server is now available at https://noaa-marine.caseyjhand.com/mcp.
Added:
server.jsonremotes entry (streamable-http, noaa-marine.caseyjhand.com/mcp)- README hosted-server link block and Public Hosted Instance client config
Changed:
@types/node^25.9.1 → ^25.9.2
bun run devcheck clean; build passes.
v0.1.1: Initial public release — 5 tools, 1 resource over NOAA CO-OPS and NDBC
Initial public release — 5 tools, 1 resource over NOAA CO-OPS and NDBC
Keyless MCP server wrapping NOAA CO-OPS Tides & Currents and NDBC buoy APIs. No API key required.
Added:
- noaa_marine_find_stations — discover CO-OPS/NDBC stations by lat/lon proximity or name/state
- noaa_marine_get_tide_predictions — high/low tide predictions (hilo or 6-min intervals, configurable datum)
- noaa_marine_get_water_level — observed water levels + paired predictions for storm surge/drawdown residual
- noaa_marine_get_currents — tidal current predictions (MAX_SLACK or 6-min continuous)
- noaa_marine_get_conditions — live NDBC buoy conditions: waves, wind, SST, pressure, temperature
- noaa-marine://station/{station_id} resource — unified station metadata for CO-OPS and NDBC
Security:
- Station ID regex /^[A-Za-z0-9_-]{1,20}$/ on all station_id inputs (5 tools + 1 resource)
- Stripped raw upstream URL from CO-OPS error messages to prevent log injection
45 tests pass; bun run devcheck clean.