# io.github.cyanheads/noaa-marine-mcp-server (remote · noaa-marine.caseyjhand.com)

Find NOAA tide stations and NDBC buoys, fetch tide predictions, currents, and live conditions.

- Trust score: 68/100 (medium)
- Change this week: +6
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

- remote · `noaa-marine.caseyjhand.com`: 68/100 (this document), [markdown](https://verifymcp.io/servers/cyanheads-noaa-marine-mcp-server/noaa-marine.md), [page](https://verifymcp.io/servers/cyanheads-noaa-marine-mcp-server/noaa-marine)
- npm · `@cyanheads/noaa-marine-mcp-server`: 35/100, [markdown](https://verifymcp.io/servers/cyanheads-noaa-marine-mcp-server/cyanheads-noaa-marine-mcp-server.md), [page](https://verifymcp.io/servers/cyanheads-noaa-marine-mcp-server/cyanheads-noaa-marine-mcp-server)

## Channel facts

- Endpoint: `https://noaa-marine.caseyjhand.com/mcp`
- Transports: `streamable-http`
- Auth: `none`
- Version: `0.3.0`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-03.

- **Endpoint Security**: 66/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - Authorisation not fully verified: no authorisation is required to call this server, and 7 tool(s) never declared a destructiveHint. The MCP spec treats an absent hint as destructive by default, so we cannot call this surface safe.
  - HTTPS is enforced; there's no plaintext access path.
  - The HSTS (Strict-Transport-Security) header is present.
  - DNSSEC is configured correctly; the domain's records validate against the full chain to the root.
- **Transport & Reachability**: 100/100
  - Verified streamable-http transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 61/100
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 2632 tokens (~376/item across 7 items; 7 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 27/100
  - Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
  - Structured output schemas are declared (100% of tools); any adoption earns full credit.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### Claude

```bash
claude mcp add --transport http cyanheads-noaa-marine-mcp-server https://noaa-marine.caseyjhand.com/mcp
```

### Codex

```toml
[mcp_servers.cyanheads-noaa-marine-mcp-server]
url = "https://noaa-marine.caseyjhand.com/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "cyanheads-noaa-marine-mcp-server": {
      "type": "remote",
      "url": "https://noaa-marine.caseyjhand.com/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add cyanheads-noaa-marine-mcp-server --url https://noaa-marine.caseyjhand.com/mcp --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  cyanheads-noaa-marine-mcp-server:
    url: "https://noaa-marine.caseyjhand.com/mcp"
```

### Other

```json
{
  "mcpServers": {
    "cyanheads-noaa-marine-mcp-server": {
      "type": "http",
      "url": "https://noaa-marine.caseyjhand.com/mcp"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-03 (score 68, +1)

No change was recorded against any check on this day. Stability & Change Management went from 23 to 27. That category is still filling its 30-day observation window: 7 days of observed history at the previous scan, 8 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-08-01 (score 67, +1)

No change was recorded against any check on this day. Stability & Change Management went from 17 to 20. That category is still filling its 30-day observation window: 5 days of observed history at the previous scan, 6 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-07-31 (score 66, +2)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-30 (score 64, 0)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-29 (score 64, +1)

No change was recorded against any check on this day. Stability & Change Management went from 7 to 10. That category is still filling its 30-day observation window: 2 days of observed history at the previous scan, 3 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-07-28 (score 63, +1)

No change was recorded against any check on this day. Stability & Change Management went from 3 to 7. That category is still filling its 30-day observation window: 1 days of observed history at the previous scan, 2 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-07-27 (score 62, 0)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-26 (score 62)

First indexed and scored.

## MCP tools (7)

### `noaa_marine_find_stations` (~570 tokens)

Find Marine Stations

Find CO-OPS tide/water-level/current stations and NDBC buoys near a location or by name/state. Returns a unified station list with source, data capabilities, coordinates, and — for NDBC — the physical platform class. This is the required first step to resolve place names or coordinates to station IDs before calling data tools. CO-OPS station IDs are numeric (e.g. 9447130 for Seattle); current station IDs are alphanumeric (e.g. ACT4176). NDBC buoy IDs are 5-character alphanumeric codes (e.g. 46041). Two axes are reported separately: `capabilities`/`type` describe the data products a station serves (tide, current, water_level, met, current_profile), while `platform` is the NDBC physical classification (buoy, fixed, oilrig, dart, tao, usv, other). CO-OPS stations carry no platform class. Provide latitude and longitude together for proximity search, or query/state for name-based search — both may be combined. Note: CO-OPS current stations are cataloged by monitoring capability, not prediction availability. If noaa_marine_get_currents returns no_predictions for a station, try the next nearest current station.

Input parameters:

- `latitude` (number): Center latitude in decimal degrees for proximity search. Required together with longitude — supplying only one is rejected rather than silently ignored. Optionally pair with radius_km.
- `limit` (integer): Maximum number of stations to return. Defaults to 20.
- `longitude` (number): Center longitude in decimal degrees for proximity search. Required together with latitude — supplying only one is rejected rather than silently ignored. Optionally pair with radius_km.
- `query` (string): Station name substring to match, case-insensitive. E.g. "seattle", "puget sound". NDBC rows also match on station ID. Blank or whitespace-only values are treated as omitted.
- `radius_km` (number): Search radius in kilometers when latitude/longitude are provided. Defaults to 100 km.
- `source` (string): Data source to search: coops (tide/water-level/current stations), ndbc (buoys), or all (default).
- `state` (string): Filter by 2-letter US state or territory code. Applies to CO-OPS stations only — providing it restricts results to CO-OPS and excludes NDBC buoys (which carry no state). E.g. "WA", "CA", "PR".
- `types` (array): Filter by data capability or NDBC platform class. Every returned station matches at least one requested value — a capability value against its capabilities list, or buoy against its platform class. O…

Output parameters:

- `stations` (array): Stations matching the search criteria, sorted by distance (if lat/lon provided) or name.
- `total_found` (number): Total stations matching the filters before the limit was applied.
- `truncated` (boolean): True when total_found exceeds the limit and not all matching stations are returned. Increase limit or narrow filters to see more.

### `noaa_marine_get_tide_predictions` (~357 tokens)

Get Tide Predictions

High/low tide predictions for a CO-OPS tide station over a date range. Returns time, height, and tide type (H=high, L=low) for each event when using the default hilo interval, or 6-minute interval predictions for a detailed tide curve. Datum defaults to MLLW (mean lower low water — standard for US nautical charts). Date range is limited to 1 year per request; split longer ranges across multiple calls. Use noaa_marine_find_stations first to resolve a station name or location to a numeric station ID.

Input parameters:

- `begin_date` (string, required): Start date in YYYYMMDD format, e.g. "20240601".
- `datum` (string): Tidal datum reference plane. MLLW (default) is the US nautical chart datum. MSL = mean sea level; MHHW = mean higher high water (flooding reference).
- `end_date` (string, required): End date in YYYYMMDD format (inclusive), e.g. "20240607".
- `interval` (string): Prediction interval: hilo (default) returns only high and low tide events; 6min returns a continuous prediction curve at 6-minute intervals.
- `station_id` (string, required): CO-OPS tide station ID (numeric, e.g. "9447130" for Seattle). Obtain from noaa_marine_find_stations with types=["tide"].
- `time_zone` (string): Time zone for returned timestamps. lst_ldt = local standard/daylight time (default); gmt = UTC; lst = local standard time year-round.
- `units` (string): Unit system for heights: english = feet; metric = meters.

Output parameters:

- `datum` (string): Tidal datum used (e.g. MLLW) — echoed for correct interpretation of heights.
- `predictions` (array): Tide predictions for the requested date range.
- `station_id` (string): Station ID echoed from the request — for chaining.
- `station_name` (string): Station name as returned by CO-OPS — confirms the correct station was queried.
- `units` (string): Height units: "english" (feet) or "metric" (meters).

### `noaa_marine_get_water_level` (~306 tokens)

Get Water Level

Observed water level (real-time or historical) for a CO-OPS water-level station, with paired predictions for comparison. The difference (residual = observed − predicted) indicates storm surge (positive) or anomalous drawdown (negative). Returns 6-minute observations alongside 6-minute predictions. Date range is limited to 31 days per request; split longer ranges into multiple calls. Use noaa_marine_find_stations first to resolve a station name or location to a valid station ID.

Input parameters:

- `begin_date` (string, required): Start date in YYYYMMDD format, e.g. "20240601".
- `datum` (string): Tidal datum reference plane. MLLW (default) is the US nautical chart datum. MSL = mean sea level; MHHW = mean higher high water (flooding reference).
- `end_date` (string, required): End date in YYYYMMDD format (inclusive), e.g. "20240601".
- `station_id` (string, required): CO-OPS water-level station ID (numeric, e.g. "9447130" for Seattle). Obtain from noaa_marine_find_stations with types=["water_level"].
- `time_zone` (string): Time zone for returned timestamps. lst_ldt = local standard/daylight time (default); gmt = UTC; lst = local standard time year-round.
- `units` (string): Unit system: english = feet; metric = meters.

Output parameters:

- `datum` (string): Tidal datum used — echoed for correct interpretation of water heights.
- `observations` (array): 6-minute observed water level readings.
- `predictions` (array): Paired 6-minute tide predictions for the same period. May be empty if CO-OPS predictions are unavailable for this station.
- `residual_summary` (object): Summary of observed-minus-predicted residuals in the requested units. Only present when both observations and predictions are available.
- `station_id` (string): Station ID echoed from the request — for chaining.
- `station_name` (string): Station name as returned by CO-OPS.
- `units` (string): Height units: "english" (feet) or "metric" (meters).

### `noaa_marine_get_currents` (~344 tokens)

Get Tidal Currents

Tidal current predictions for a CO-OPS current station: max flood/ebb speeds, slack times, and directions. These are forecast tidal-current predictions from CO-OPS — distinct from noaa_marine_get_current_profile, which returns NDBC observed ocean-current measurements binned by depth. Defaults to MAX_SLACK interval — the practical planning view showing when currents peak and when slack water occurs. Optionally returns 6-minute continuous predictions for detailed analysis. Current station IDs use alphanumeric format (e.g. ACT4176), distinct from numeric tide/water-level IDs. Date range is limited to 1 year per request. Use noaa_marine_find_stations with types=["current"] to obtain valid current station IDs.

Input parameters:

- `begin_date` (string, required): Start date in YYYYMMDD format, e.g. "20240601".
- `end_date` (string, required): End date in YYYYMMDD format (inclusive), e.g. "20240607".
- `interval` (string): Prediction interval: MAX_SLACK (default) returns max flood, max ebb, and slack water events — ideal for passage planning. 6min returns a continuous current curve.
- `station_id` (string, required): CO-OPS current station ID (alphanumeric, e.g. "ACT4176"). Obtain from noaa_marine_find_stations with types=["current"].
- `time_zone` (string): Time zone for returned timestamps. lst_ldt = local standard/daylight time (default); gmt = UTC; lst = local standard time year-round.
- `units` (string): Unit system: english = knots; metric = m/s.

Output parameters:

- `events` (array): Max flood, max ebb, and slack events. Present for MAX_SLACK interval.
- `predictions` (array): 6-minute continuous current predictions. Present for 6min interval.
- `station_id` (string): Station ID echoed from the request — for chaining.
- `station_name` (string): Station name as returned by CO-OPS.
- `units` (string): Speed units: "english" (knots) or "metric" (m/s).

### `noaa_marine_get_conditions` (~274 tokens)

Get Marine Conditions

Live marine conditions from an NDBC buoy: wave height/period/direction, wind speed/gust/direction, sea-surface temperature, air temperature, barometric pressure, and dew point. All values are SI units — wind in m/s, wave height in m, pressure in hPa, temperatures in °C. Exceptions: TIDE is in feet and VIS is in nautical miles (rarely populated at offshore buoys). Numeric fields are null when the buoy sensor did not report a value — this is normal for offshore buoys. Observations are updated approximately every 10 minutes; data may be 10–20 minutes old. Use noaa_marine_find_stations with source="ndbc" and types=["met"] to find station IDs near a location — met-flagged stations are the ones most likely to serve live conditions. Roughly a third of active NDBC stations report neither meteorological nor current data, and most of those have no observation file, so omitting the types filter will surface station IDs this tool cannot read.

Input parameters:

- `station_id` (string, required): NDBC buoy station ID (5-character alphanumeric, e.g. "46041" for Cape Elizabeth). Obtain from noaa_marine_find_stations with source="ndbc" and types=["met"].

Output parameters:

- `air_temp_c`: Air temperature in °C. Null if not reported.
- `average_period_sec`: Average wave period in seconds. Null if not reported.
- `dew_point_c`: Dew point temperature in °C. Null if not reported.
- `dominant_period_sec`: Dominant wave period in seconds. Null if not reported.
- `gust_speed_ms`: Wind gust speed in m/s. Null if not reported.
- `latitude` (number): Station latitude in decimal degrees.
- `longitude` (number): Station longitude in decimal degrees.
- `mean_wave_direction_deg`: Mean wave direction in degrees true. Null if not reported.
- `observed_at` (string): ISO 8601 UTC timestamp of the observation row used.
- `pressure_hpa`: Atmospheric pressure in hPa. Null if not reported.
- `source` (string): Data source — always "ndbc" for this tool.
- `station_id` (string): Station ID echoed from the request — for chaining.
- `station_name` (string): Station name from the NDBC active stations list.
- `tide_ft`: Tide height in feet. NOTE: always in feet regardless of other unit settings. Rarely populated at offshore buoys. Null if not reported.
- `visibility_nmi`: Visibility in nautical miles. NOTE: always in nautical miles regardless of other unit settings. Null if not reported.
- `water_temp_c`: Sea-surface temperature in °C. Null if not reported.
- `wave_height_m`: Significant wave height in meters. Null if not reported.
- `wind_direction_deg`: Wind direction in degrees true (0–360). Null if not reported by the buoy.
- `wind_speed_ms`: Wind speed in m/s. Null if not reported.

### `noaa_marine_get_current_profile` (~223 tokens)

Get Ocean Current Profile

Observed ocean-current depth profile from an NDBC ADCP buoy: the most recent measurement of current speed and direction at each depth bin. Returns depth in meters, direction in degrees true (the direction the current flows toward), and speed in cm/s. Distinct from noaa_marine_get_currents, which returns CO-OPS tidal-current predictions (forecast max flood/ebb/slack) rather than these observed acoustic-Doppler measurements. A depth bin is reported whenever NDBC gives it a depth; its direction or speed is null when the sensor did not report that component. Use noaa_marine_find_stations with source="ndbc" and types=["current_profile"] to find station IDs — most NDBC stations serve no ADCP profile, so an unfiltered search returns IDs this tool cannot read.

Input parameters:

- `station_id` (string, required): NDBC station ID (5-character alphanumeric, e.g. "44033"). Obtain from noaa_marine_find_stations with source="ndbc" and types=["current_profile"].

Output parameters:

- `bin_count` (number): Number of depth bins in the profile.
- `bins` (array): Depth-binned current measurements, shallowest first (NDBC source order).
- `latitude`: Station latitude in decimal degrees. Null when the station is absent from the NDBC active-stations list — the ADCP feed carries current data but no coordinates.
- `longitude`: Station longitude in decimal degrees. Null when the station is absent from the NDBC active-stations list.
- `observed_at` (string): ISO 8601 UTC timestamp of the observation.
- `source` (string): Data source — always "ndbc" for this tool.
- `station_id` (string): Station ID echoed from the request — for chaining.
- `station_name` (string): Station name from the NDBC active stations list.

### `noaa_marine_get_ocean_observations` (~352 tokens)

Get Ocean Observations

Live sub-surface oceanographic observations from an NDBC station's water-quality sensors: at each reported depth, water temperature, conductivity, salinity, dissolved oxygen (both saturation percent and concentration in ppm), chlorophyll, turbidity, pH, and redox potential. This is the water-column counterpart to noaa_marine_get_conditions, which returns surface meteorological and wave data (wind, waves, sea-surface temperature) — use this tool for what the water is doing below the surface, that one for weather and sea state at the buoy. Returns the most recent observation as one reading per reported depth; most stations report a single depth, but some report several at the same time. Sensor coverage is sparse — most stations populate only water temperature and salinity — and any value the station did not report comes back null rather than a fabricated zero. Latitude and longitude are null when the station is absent from the NDBC active-stations list. Sub-surface sensors are on only a subset of NDBC stations and are not marked by any station-catalog flag, so no capability filter guarantees coverage: call this on candidate NDBC station IDs from noaa_marine_find_stations with source="ndbc", and expect the observations_not_found error on the many stations that serve no .ocean file.

Input parameters:

- `station_id` (string, required): NDBC station ID (5-character alphanumeric, e.g. "44033" or "TIBC1"). Obtain candidate IDs from noaa_marine_find_stations with source="ndbc" — ocean-sensor coverage is not flagged in the catalog, so t…

Output parameters:

- `latitude`: Station latitude in decimal degrees. Null when the station is absent from the NDBC active-stations list — the .ocean feed carries observations but no coordinates.
- `longitude`: Station longitude in decimal degrees. Null when the station is absent from the NDBC active-stations list.
- `observed_at` (string): ISO 8601 UTC timestamp of the observation.
- `reading_count` (number): Number of per-depth readings in the latest observation (usually 1).
- `readings` (array): Per-depth readings sharing the most recent observation timestamp, in NDBC source order.
- `source` (string): Data source — always "ndbc" for this tool.
- `station_id` (string): Station ID echoed from the request — for chaining.
- `station_name` (string): Station name from the NDBC active stations list.

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/cyanheads-noaa-marine-mcp-server/noaa-marine#diagnostics

## Score history

- 2026-08-03: 68
- 2026-08-02: 67
- 2026-08-01: 67
- 2026-07-31: 66
- 2026-07-30: 64
- 2026-07-29: 64
- 2026-07-28: 63
- 2026-07-27: 62
- 2026-07-26: 62

## Links

- Remote endpoint: https://noaa-marine.caseyjhand.com/mcp
- Repository: https://github.com/cyanheads/noaa-marine-mcp-server
- Changelog RSS feed: https://verifymcp.io/servers/cyanheads-noaa-marine-mcp-server/noaa-marine/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/cyanheads-noaa-marine-mcp-server/noaa-marine/changelog.json
- HTML version of this page: https://verifymcp.io/servers/cyanheads-noaa-marine-mcp-server/noaa-marine
