@pipeworx/noaa-coastwatch

Connect: https://gateway.pipeworx.io/noaa-coastwatch/mcp · Install: one-click buttons

No MCP client? Skip the connection: POST https://gateway.pipeworx.io/v1/tools/search_packs {"query":"..."} to find a tool below, GET /v1/tools/<name> for its schema, POST the same URL with arguments for the data — see For AI agents.

Tools: 4

NOAA CoastWatch’s satellite and model ocean record — sea surface temperature, chlorophyll-a, winds, currents and the full NDBC moored-buoy archive — read live from CoastWatch’s two ERDDAP servers.

Tools

  • noaa_coastwatch_search_datasets(query, protocol?, node?, limit?) — full-text search of the dataset catalogue. Start here: every other tool takes a dataset_id from these results.
  • noaa_coastwatch_dataset_info(dataset_id, node?) — variables, units, axes, time coverage, licence. Call it before querying data; variable names are case-sensitive.
  • noaa_coastwatch_tabledap(dataset_id, variables?, constraints?, node?, limit?) — rows from a tabledap dataset, e.g. hourly NDBC buoy observations back to 1970.
  • noaa_coastwatch_griddap_point(dataset_id, variable, latitude, longitude, time?, depth?, node?) — one gridded value at one time/lat/lon, snapped to the nearest grid cell.

Auth

Keyless. Both nodes serve anonymously. A User-Agent is sent on every request.

Data sources

The two hold different datasets. A dataset_id from one does not resolve on the other, and the error for that is “Currently unknown datasetID=…”, which reads as a broken id rather than a wrong node.

Traps

Protocol-level traps live in shared/src/erddap.ts (shared with ioos-erddap) and are documented in full at the top of that file. The two that bite hardest here:

  • ERDDAP reports “nothing found” as HTTP 404 with a plain-text body, not as an empty table — for a search that matches nothing AND for a tabledap query whose constraints exclude every row. The body is not JSON, so a naive parse loses the message entirely. That message is worth keeping: it names the dataset’s real range (“No data matches time>=2050-01-01 because the numeric variable’s source min=1970-02-26T20:00:00Z, max=2026-09-17T23:35:00Z”).
  • Variable names are case-sensitive and often UPPERCASE. NDBC water temperature is WTMP, air temperature ATMP, wind speed WSPD. A lowercase request is a 400 Unrecognized variable, which reads as “this buoy does not report water temperature”.

One more, local to this pack: the two nodes do not agree on their search columns. The West Coast node returns 17 columns including “Accessible”; the national node returns 15 and omits it. Anything that indexed rows[6] would read the title on one and the ISO-19115 link on the other — a wrong answer, never an error. The shared client indexes by column name.

Tools

Tools

Regenerated from source · build September 18, 2026