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.
Available components
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
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
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
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
claude mcp add --transport http cyanheads-noaa-marine-mcp-server https://noaa-marine.caseyjhand.com/mcp
[mcp_servers.cyanheads-noaa-marine-mcp-server] url = "https://noaa-marine.caseyjhand.com/mcp"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"cyanheads-noaa-marine-mcp-server": {
"type": "remote",
"url": "https://noaa-marine.caseyjhand.com/mcp",
"enabled": true
}
}
} openclaw mcp add cyanheads-noaa-marine-mcp-server --url https://noaa-marine.caseyjhand.com/mcp --transport streamable-http
mcp_servers:
cyanheads-noaa-marine-mcp-server:
url: "https://noaa-marine.caseyjhand.com/mcp" {
"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.
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.
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 |
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.
noaa_marine_find_stations Find Marine 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.
| Name | Type | Req | Description |
|---|---|---|---|
| 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… |
| Name | Type | Req | Description |
|---|---|---|---|
| stations | array | yes | Stations matching the search criteria, sorted by distance (if lat/lon provided) or name. |
| total_found | number | yes | 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. |
No examples provided.
noaa_marine_get_conditions Get Marine 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.
| Name | Type | Req | Description |
|---|---|---|---|
| station_id | string | yes | 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"]. |
| Name | Type | Req | Description |
|---|---|---|---|
| air_temp_c | — | yes | Air temperature in °C. Null if not reported. |
| average_period_sec | — | yes | Average wave period in seconds. Null if not reported. |
| dew_point_c | — | yes | Dew point temperature in °C. Null if not reported. |
| dominant_period_sec | — | yes | Dominant wave period in seconds. Null if not reported. |
| gust_speed_ms | — | yes | Wind gust speed in m/s. Null if not reported. |
| latitude | number | yes | Station latitude in decimal degrees. |
| longitude | number | yes | Station longitude in decimal degrees. |
| mean_wave_direction_deg | — | yes | Mean wave direction in degrees true. Null if not reported. |
| observed_at | string | yes | ISO 8601 UTC timestamp of the observation row used. |
| pressure_hpa | — | yes | Atmospheric pressure in hPa. Null if not reported. |
| source | string | yes | Data source — always "ndbc" for this tool. |
| station_id | string | yes | Station ID echoed from the request — for chaining. |
| station_name | string | yes | Station name from the NDBC active stations list. |
| tide_ft | — | yes | Tide height in feet. NOTE: always in feet regardless of other unit settings. Rarely populated at offshore buoys. Null if not reported. |
| visibility_nmi | — | yes | Visibility in nautical miles. NOTE: always in nautical miles regardless of other unit settings. Null if not reported. |
| water_temp_c | — | yes | Sea-surface temperature in °C. Null if not reported. |
| wave_height_m | — | yes | Significant wave height in meters. Null if not reported. |
| wind_direction_deg | — | yes | Wind direction in degrees true (0–360). Null if not reported by the buoy. |
| wind_speed_ms | — | yes | Wind speed in m/s. Null if not reported. |
No examples provided.
noaa_marine_get_current_profile Get Ocean 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.
| Name | Type | Req | Description |
|---|---|---|---|
| station_id | string | yes | NDBC station ID (5-character alphanumeric, e.g. "44033"). Obtain from noaa_marine_find_stations with source="ndbc" and types=["current_profile"]. |
| Name | Type | Req | Description |
|---|---|---|---|
| bin_count | number | yes | Number of depth bins in the profile. |
| bins | array | yes | Depth-binned current measurements, shallowest first (NDBC source order). |
| latitude | — | yes | 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 | — | yes | Station longitude in decimal degrees. Null when the station is absent from the NDBC active-stations list. |
| observed_at | string | yes | ISO 8601 UTC timestamp of the observation. |
| source | string | yes | Data source — always "ndbc" for this tool. |
| station_id | string | yes | Station ID echoed from the request — for chaining. |
| station_name | string | yes | Station name from the NDBC active stations list. |
No examples provided.
noaa_marine_get_currents Get Tidal 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.
| Name | Type | Req | Description |
|---|---|---|---|
| begin_date | string | yes | Start date in YYYYMMDD format, e.g. "20240601". |
| end_date | string | yes | 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 | yes | 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. |
| Name | Type | Req | Description |
|---|---|---|---|
| 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 | yes | Station ID echoed from the request — for chaining. |
| station_name | string | yes | Station name as returned by CO-OPS. |
| units | string | yes | Speed units: "english" (knots) or "metric" (m/s). |
No examples provided.
noaa_marine_get_ocean_observations 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.
| Name | Type | Req | Description |
|---|---|---|---|
| station_id | string | yes | 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… |
| Name | Type | Req | Description |
|---|---|---|---|
| latitude | — | yes | 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 | — | yes | Station longitude in decimal degrees. Null when the station is absent from the NDBC active-stations list. |
| observed_at | string | yes | ISO 8601 UTC timestamp of the observation. |
| reading_count | number | yes | Number of per-depth readings in the latest observation (usually 1). |
| readings | array | yes | Per-depth readings sharing the most recent observation timestamp, in NDBC source order. |
| source | string | yes | Data source — always "ndbc" for this tool. |
| station_id | string | yes | Station ID echoed from the request — for chaining. |
| station_name | string | yes | Station name from the NDBC active stations list. |
No examples provided.
noaa_marine_get_tide_predictions 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.
| Name | Type | Req | Description |
|---|---|---|---|
| begin_date | string | yes | 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 | yes | 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 | yes | 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. |
| Name | Type | Req | Description |
|---|---|---|---|
| datum | string | yes | Tidal datum used (e.g. MLLW) — echoed for correct interpretation of heights. |
| predictions | array | yes | Tide predictions for the requested date range. |
| station_id | string | yes | Station ID echoed from the request — for chaining. |
| station_name | string | yes | Station name as returned by CO-OPS — confirms the correct station was queried. |
| units | string | yes | Height units: "english" (feet) or "metric" (meters). |
No examples provided.
noaa_marine_get_water_level 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.
| Name | Type | Req | Description |
|---|---|---|---|
| begin_date | string | yes | 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 | yes | End date in YYYYMMDD format (inclusive), e.g. "20240601". |
| station_id | string | yes | 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. |
| Name | Type | Req | Description |
|---|---|---|---|
| datum | string | yes | Tidal datum used — echoed for correct interpretation of water heights. |
| observations | array | yes | 6-minute observed water level readings. |
| predictions | array | yes | 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 | yes | Station ID echoed from the request — for chaining. |
| station_name | string | yes | Station name as returned by CO-OPS. |
| units | string | yes | Height units: "english" (feet) or "metric" (meters). |
No examples provided.