Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, email [email protected] and we’ll put it right.

io.github.cyanheads/noaa-marine-mcp-server

REMOTE · NOAA-MARINE.CASEYJHAND.COM · 2 COMPONENTS · SCANNED AUG 3

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

+6 this week 68 Trust /100
Trust breakdown (6 categories)

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. How we score →

Endpoint Security66
  • The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
  • 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. See how to fix → View diagnostics → Unverified
  • HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
  • The HSTS (Strict-Transport-Security) header is present. View diagnostics → Pass
  • DNSSEC is configured correctly; the domain's records validate against the full chain to the root. View diagnostics → Pass
Transport & Reachability100
Schema Quality & AI Usability61
  • AI-judged instruction clarity (excellent).Pass
  • 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. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management27
  • Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 100% of tool parameters carry a description.Pass
  • Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Install

Add this component to your MCP client. Where a client-specific snippet is available, pick your client below and copy it straight into your config; otherwise use the connection detail shown.

remote · noaa-marine.caseyjhand.com

# add to Claude Code
claude mcp add --transport http cyanheads-noaa-marine-mcp-server https://noaa-marine.caseyjhand.com/mcp
# ~/.codex/config.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
    }
  }
}
# add to OpenClaw
openclaw mcp add cyanheads-noaa-marine-mcp-server --url https://noaa-marine.caseyjhand.com/mcp --transport streamable-http
# ~/.hermes/config.yaml
mcp_servers:
  cyanheads-noaa-marine-mcp-server:
    url: "https://noaa-marine.caseyjhand.com/mcp"
// mcp.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 we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 3 Aug 26 +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.

  • 1 Aug 26 +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.

  • 31 Jul 26 +2
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 30 Jul 26 0
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 29 Jul 26 +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.

  • 28 Jul 26 +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.

  • 27 Jul 26 0
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 26 Jul 26 62

    First indexed and scored.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 3 Aug 2026 · Probed https://noaa-marine.caseyjhand.com/mcp

TLS valid

Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .

Subject Issuer Valid from Valid until Key Signature Serial
CN=caseyjhand.com CN=WE1,O=Google Trust Services,C=US 7 Jul 2026 5 Oct 2026 ECDSA 256 ECDSA-SHA256 5aad900eb2055a0b0ea55912ec19680c
SANs: caseyjhand.com, *.caseyjhand.com
CN=WE1,O=Google Trust Services,C=US (CA) CN=GTS Root R4,O=Google Trust Services LLC,C=US 13 Dec 2023 20 Feb 2029 ECDSA 256 ECDSA-SHA384 7ff31977972c224a76155d13b6d685e3
CN=GTS Root R4,O=Google Trust Services LLC,C=US (CA) CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE 15 Nov 2023 28 Jan 2028 ECDSA 384 SHA256-RSA 7fe530bf331343bedd821610493d8a1b
DNSSEC secure

Validation of noaa-marine.caseyjhand.com. Secure

Zone DS Keys Algorithms Outcome
. trust_anchor 20326, 38696 8, 8 Verified
com. present 19718 13 Verified
caseyjhand.com. present 2371 13 Verified
noaa-marine.caseyjhand.com. Verified address RRset verified with the apex keys
Authentication No authorisation required

The endpoint answered without asking for a token. Anyone who knows the URL can reach it.

Result No authorisation required
HTTP status 200
Header Value
strict-transport-security max-age=63072000; includeSubDomains; preload
x-content-type-options nosniff
Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://noaa-marine.caseyjhand.com/mcp Verified 200
http (plaintext) http://noaa-marine.caseyjhand.com/mcp HTTPS enforced 301 https://noaa-marine.caseyjhand.com/mcp
MCP tools — 7 exposed · ~2,426 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability.

Tool Tokens
noaa_marine_find_stations ~570

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.

NameTypeReqDescription
latitudenumberCenter 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.
limitintegerMaximum number of stations to return. Defaults to 20.
longitudenumberCenter 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.
querystringStation 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_kmnumberSearch radius in kilometers when latitude/longitude are provided. Defaults to 100 km.
sourcestringData source to search: coops (tide/water-level/current stations), ndbc (buoys), or all (default).
statestringFilter 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".
typesarrayFilter 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…
NameTypeReqDescription
stationsarrayyesStations matching the search criteria, sorted by distance (if lat/lon provided) or name.
total_foundnumberyesTotal stations matching the filters before the limit was applied.
truncatedbooleanTrue when total_found exceeds the limit and not all matching stations are returned. Increase limit or narrow filters to see more.

No examples provided.

noaa_marine_get_conditions ~274

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.

NameTypeReqDescription
station_idstringyesNDBC buoy station ID (5-character alphanumeric, e.g. "46041" for Cape Elizabeth). Obtain from noaa_marine_find_stations with source="ndbc" and types=["met"].
NameTypeReqDescription
air_temp_cyesAir temperature in °C. Null if not reported.
average_period_secyesAverage wave period in seconds. Null if not reported.
dew_point_cyesDew point temperature in °C. Null if not reported.
dominant_period_secyesDominant wave period in seconds. Null if not reported.
gust_speed_msyesWind gust speed in m/s. Null if not reported.
latitudenumberyesStation latitude in decimal degrees.
longitudenumberyesStation longitude in decimal degrees.
mean_wave_direction_degyesMean wave direction in degrees true. Null if not reported.
observed_atstringyesISO 8601 UTC timestamp of the observation row used.
pressure_hpayesAtmospheric pressure in hPa. Null if not reported.
sourcestringyesData source — always "ndbc" for this tool.
station_idstringyesStation ID echoed from the request — for chaining.
station_namestringyesStation name from the NDBC active stations list.
tide_ftyesTide height in feet. NOTE: always in feet regardless of other unit settings. Rarely populated at offshore buoys. Null if not reported.
visibility_nmiyesVisibility in nautical miles. NOTE: always in nautical miles regardless of other unit settings. Null if not reported.
water_temp_cyesSea-surface temperature in °C. Null if not reported.
wave_height_myesSignificant wave height in meters. Null if not reported.
wind_direction_degyesWind direction in degrees true (0–360). Null if not reported by the buoy.
wind_speed_msyesWind speed in m/s. Null if not reported.

No examples provided.

noaa_marine_get_current_profile ~223

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.

NameTypeReqDescription
station_idstringyesNDBC station ID (5-character alphanumeric, e.g. "44033"). Obtain from noaa_marine_find_stations with source="ndbc" and types=["current_profile"].
NameTypeReqDescription
bin_countnumberyesNumber of depth bins in the profile.
binsarrayyesDepth-binned current measurements, shallowest first (NDBC source order).
latitudeyesStation 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.
longitudeyesStation longitude in decimal degrees. Null when the station is absent from the NDBC active-stations list.
observed_atstringyesISO 8601 UTC timestamp of the observation.
sourcestringyesData source — always "ndbc" for this tool.
station_idstringyesStation ID echoed from the request — for chaining.
station_namestringyesStation name from the NDBC active stations list.

No examples provided.

noaa_marine_get_currents ~344

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.

NameTypeReqDescription
begin_datestringyesStart date in YYYYMMDD format, e.g. "20240601".
end_datestringyesEnd date in YYYYMMDD format (inclusive), e.g. "20240607".
intervalstringPrediction interval: MAX_SLACK (default) returns max flood, max ebb, and slack water events — ideal for passage planning. 6min returns a continuous current curve.
station_idstringyesCO-OPS current station ID (alphanumeric, e.g. "ACT4176"). Obtain from noaa_marine_find_stations with types=["current"].
time_zonestringTime zone for returned timestamps. lst_ldt = local standard/daylight time (default); gmt = UTC; lst = local standard time year-round.
unitsstringUnit system: english = knots; metric = m/s.
NameTypeReqDescription
eventsarrayMax flood, max ebb, and slack events. Present for MAX_SLACK interval.
predictionsarray6-minute continuous current predictions. Present for 6min interval.
station_idstringyesStation ID echoed from the request — for chaining.
station_namestringyesStation name as returned by CO-OPS.
unitsstringyesSpeed units: "english" (knots) or "metric" (m/s).

No examples provided.

noaa_marine_get_ocean_observations ~352

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.

NameTypeReqDescription
station_idstringyesNDBC 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…
NameTypeReqDescription
latitudeyesStation latitude in decimal degrees. Null when the station is absent from the NDBC active-stations list — the .ocean feed carries observations but no coordinates.
longitudeyesStation longitude in decimal degrees. Null when the station is absent from the NDBC active-stations list.
observed_atstringyesISO 8601 UTC timestamp of the observation.
reading_countnumberyesNumber of per-depth readings in the latest observation (usually 1).
readingsarrayyesPer-depth readings sharing the most recent observation timestamp, in NDBC source order.
sourcestringyesData source — always "ndbc" for this tool.
station_idstringyesStation ID echoed from the request — for chaining.
station_namestringyesStation name from the NDBC active stations list.

No examples provided.

noaa_marine_get_tide_predictions ~357

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.

NameTypeReqDescription
begin_datestringyesStart date in YYYYMMDD format, e.g. "20240601".
datumstringTidal datum reference plane. MLLW (default) is the US nautical chart datum. MSL = mean sea level; MHHW = mean higher high water (flooding reference).
end_datestringyesEnd date in YYYYMMDD format (inclusive), e.g. "20240607".
intervalstringPrediction interval: hilo (default) returns only high and low tide events; 6min returns a continuous prediction curve at 6-minute intervals.
station_idstringyesCO-OPS tide station ID (numeric, e.g. "9447130" for Seattle). Obtain from noaa_marine_find_stations with types=["tide"].
time_zonestringTime zone for returned timestamps. lst_ldt = local standard/daylight time (default); gmt = UTC; lst = local standard time year-round.
unitsstringUnit system for heights: english = feet; metric = meters.
NameTypeReqDescription
datumstringyesTidal datum used (e.g. MLLW) — echoed for correct interpretation of heights.
predictionsarrayyesTide predictions for the requested date range.
station_idstringyesStation ID echoed from the request — for chaining.
station_namestringyesStation name as returned by CO-OPS — confirms the correct station was queried.
unitsstringyesHeight units: "english" (feet) or "metric" (meters).

No examples provided.

noaa_marine_get_water_level ~306

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.

NameTypeReqDescription
begin_datestringyesStart date in YYYYMMDD format, e.g. "20240601".
datumstringTidal datum reference plane. MLLW (default) is the US nautical chart datum. MSL = mean sea level; MHHW = mean higher high water (flooding reference).
end_datestringyesEnd date in YYYYMMDD format (inclusive), e.g. "20240601".
station_idstringyesCO-OPS water-level station ID (numeric, e.g. "9447130" for Seattle). Obtain from noaa_marine_find_stations with types=["water_level"].
time_zonestringTime zone for returned timestamps. lst_ldt = local standard/daylight time (default); gmt = UTC; lst = local standard time year-round.
unitsstringUnit system: english = feet; metric = meters.
NameTypeReqDescription
datumstringyesTidal datum used — echoed for correct interpretation of water heights.
observationsarrayyes6-minute observed water level readings.
predictionsarrayyesPaired 6-minute tide predictions for the same period. May be empty if CO-OPS predictions are unavailable for this station.
residual_summaryobjectSummary of observed-minus-predicted residuals in the requested units. Only present when both observations and predictions are available.
station_idstringyesStation ID echoed from the request — for chaining.
station_namestringyesStation name as returned by CO-OPS.
unitsstringyesHeight units: "english" (feet) or "metric" (meters).

No examples provided.