# `noaa_marine__noaa_marine_get_conditions`

**Get Marine Conditions**

Live marine conditions from an NDBC buoy: wave height, period and direction, wind speed, gust and 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 — except TIDE, which is in feet, and VIS, in nautical miles, both rarely populated at offshore buoys; a numeric field is null when the buoy sensor did not report a value, which is normal offshore. Row cadence varies by station from 5 to 60 minutes, so observed_at can be that old, and NDBC writes each block of columns on its own cycle, so any block can resolve from an earlier row within 90 minutes of observed_at. Waves carry their own waves_observed_at, null when no wave sample falls inside that window, and any other block read from an earlier row is named with its measurement time in the response notice. Use noaa_marine_find_stations with source="ndbc" and types=\["met"\] to find station IDs near a location, since 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, most of those have no observation file, and omitting the types filter surfaces station IDs this tool cannot read.

- Server: [NOAA Tides & Currents](https://gateway.mcpharbor.dev/docs/servers/noaa_marine) (`dev.mcpharbor.gateway/noaa_marine`)
- Price per call: $0.0001 (100 micro-USD); only tools/call is charged
- Endpoint: `https://gateway.mcpharbor.dev/mcp` or `https://gateway.mcpharbor.dev/mcp/noaa_marine`
- Upstream tool: exposed by the provider; called through this gateway as `noaa_marine__noaa_marine_get_conditions`
- Provider terms: <https://tidesandcurrents.noaa.gov/disclaimers.html> (verified 2026-09-19)
- Upstream API documentation: <https://api.tidesandcurrents.noaa.gov/api/prod/>
- Rate limit: 300 requests per minute
- Attribution required: NOS requests attribution whenever its material is reproduced and re-disseminated; content must not be modified and presented as official government material; predictions are forecast guidance, not for navigation reliance. The optional 'application' parameter should identify the gateway.

## 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"\].

## Example call

Request headers and body:

```http
POST /mcp HTTP/1.1
Host: gateway.mcpharbor.dev
Authorization: Bearer <your gateway API key>
Content-Type: application/json
Accept: application/json, text/event-stream
MCP-Protocol-Version: 2026-07-28
Mcp-Method: tools/call
Mcp-Name: noaa_marine__noaa_marine_get_conditions
```

```json
{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "_meta": {
      "io.modelcontextprotocol/clientCapabilities": {},
      "io.modelcontextprotocol/clientInfo": {
        "name": "example-agent",
        "version": "1.0.0"
      },
      "io.modelcontextprotocol/protocolVersion": "2026-07-28"
    },
    "arguments": {
      "station_id": "example"
    },
    "name": "noaa_marine__noaa_marine_get_conditions"
  }
}
```

A successful response:

```json
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "_meta": {
      "dev.mcpharbor.gateway/call": {
        "chargedMicroUsd": 100,
        "id": "<the id of this charge>"
      }
    },
    "content": [
      {
        "text": "<whatever the upstream tool returned>",
        "type": "text"
      }
    ],
    "resultType": "complete"
  }
}
```

This call costs $0.0001 (100 micro-USD). Reading this page and listing the tool cost nothing.
The `dev.mcpharbor.gateway/call` record in the result is the receipt for that charge. Each
POST is metered separately, so sending the same call again buys another one: see
[agent.txt](https://gateway.mcpharbor.dev/agent.txt), section 7, before retrying.

## Attribution

This provider requires the attribution below wherever you use results from its tools.
Reproduce it verbatim:

> NOS requests attribution whenever its material is reproduced and re-disseminated; content must not be modified and presented as official government material; predictions are forecast guidance, not ...

## Tool definition

Exactly as `tools/list` returns it (free):

```json
{
  "_meta": {
    "dev.mcpharbor.gateway/pricing": {
      "currency": "USD",
      "pricePerCallMicroUsd": 100
    }
  },
  "annotations": {
    "openWorldHint": true,
    "readOnlyHint": true
  },
  "description": "Live marine conditions from an NDBC buoy: wave height, period and direction, wind speed, gust and 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 — except TIDE, which is in feet, and VIS, in nautical miles, both rarely populated at offshore buoys; a numeric field is null when the buoy sensor did not report a value, which is normal offshore. Row cadence varies by station from 5 to 60 minutes, so observed_at can be that old, and NDBC writes each block of columns on its own cycle, so any block can resolve from an earlier row within 90 minutes of observed_at. Waves carry their own waves_observed_at, null when no wave sample falls inside that window, and any other block read from an earlier row is named with its measurement time in the response notice. Use noaa_marine_find_stations with source=\"ndbc\" and types=[\"met\"] to find station IDs near a location, since 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, most of those have no observation file, and omitting the types filter surfaces station IDs this tool cannot read.",
  "inputSchema": {
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "additionalProperties": false,
    "properties": {
      "station_id": {
        "description": "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\"].",
        "pattern": "^[A-Za-z0-9_-]{1,20}$",
        "type": "string"
      }
    },
    "required": [
      "station_id"
    ],
    "type": "object"
  },
  "name": "noaa_marine__noaa_marine_get_conditions",
  "outputSchema": {
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "additionalProperties": false,
    "anyOf": [
      {
        "not": {
          "required": [
            "error"
          ]
        },
        "required": [
          "station_id",
          "station_name",
          "latitude",
          "longitude",
          "observed_at",
          "source",
          "wind_direction_deg",
          "wind_speed_ms",
          "gust_speed_ms",
          "wave_height_m",
          "dominant_period_sec",
          "average_period_sec",
          "mean_wave_direction_deg",
          "waves_observed_at",
          "pressure_hpa",
          "air_temp_c",
          "water_temp_c",
          "dew_point_c",
          "visibility_nmi",
          "tide_ft"
        ]
      },
      {
        "required": [
          "error"
        ]
      }
    ],
    "properties": {
      "air_temp_c": {
        "description": "Air temperature in °C. Null if not reported.",
        "type": [
          "number",
          "null"
        ]
      },
      "average_period_sec": {
        "description": "Average wave period in seconds. Null if not reported.",
        "type": [
          "number",
          "null"
        ]
      },
      "dew_point_c": {
        "description": "Dew point temperature in °C. Null if not reported.",
        "type": [
          "number",
          "null"
        ]
      },
      "dominant_period_sec": {
        "description": "Dominant wave period in seconds. Null if not reported.",
        "type": [
          "number",
          "null"
        ]
      },
      "error": {
        "additionalProperties": {},
        "description": "Present when the call failed. Absent on success.",
        "properties": {
          "code": {
            "description": "JSON-RPC error code for this failure.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          },
          "data": {
            "additionalProperties": {},
            "properties": {
              "reason": {
                "description": "Machine-readable failure mode. Declared by this tool: `buoy_not_found`: NDBC returned 404 for the station ID. `no_sensor_data`: Buoy file exists but all sensor fields are MM (missing) — buoy offline or sensor failure. Other values are possible when a failure originates below the handler.",
                "examples": [
                  "buoy_not_found",
                  "no_sensor_data"
                ],
                "type": "string"
              },
              "recovery": {
                "additionalProperties": {},
                "description": "Actionable next step for the caller.",
                "properties": {
                  "hint": {
                    "type": "string"
                  }
                },
                "required": [
                  "hint"
                ],
                "type": "object"
              },
              "retryable": {
                "description": "Whether retrying may succeed.",
                "type": "boolean"
              }
            },
            "type": "object"
          },
          "message": {
            "description": "Human-readable description of what went wrong.",
            "type": "string"
          }
        },
        "required": [
          "code",
          "message"
        ],
        "type": "object"
      },
      "gust_speed_ms": {
        "description": "Wind gust speed in m/s. Null if not reported.",
        "type": [
          "number",
          "null"
        ]
      },
      "latitude": {
        "description": "Station latitude in decimal degrees. Null when the station is absent from the NDBC active-stations list — the realtime feed carries observations but no coordinates.",
        "type": [
          "number",
          "null"
        ]
      },
      "longitude": {
        "description": "Station longitude in decimal degrees. Null when the station is absent from the NDBC active-stations list.",
        "type": [
          "number",
          "null"
        ]
      },
      "mean_wave_direction_deg": {
        "description": "Mean wave direction in degrees true. Null if not reported.",
        "type": [
          "number",
          "null"
        ]
      },
      "notice": {
        "description": "Present when a sensor block other than waves was read from a row older than observed_at, naming each such block, the output fields it fills, and the time those values were measured. Absent when every block outside the wave columns came from the newest row.",
        "type": "string"
      },
      "observed_at": {
        "description": "ISO 8601 UTC timestamp of the newest data row. Always a valid instant — a row whose upstream time columns are malformed is rejected rather than timestamped with the current time. A sensor block NDBC wrote on an earlier row was measured before this time: waves report theirs in waves_observed_at, and any other block is named with its own time in the notice.",
        "type": "string"
      },
      "pressure_hpa": {
        "description": "Atmospheric pressure in hPa. Null if not reported.",
        "type": [
          "number",
          "null"
        ]
      },
      "source": {
        "description": "Data source — always \"ndbc\" for this tool.",
        "type": "string"
      },
      "station_id": {
        "description": "Station ID echoed from the request — for chaining.",
        "type": "string"
      },
      "station_name": {
        "description": "Station name from the NDBC active stations list.",
        "type": "string"
      },
      "tide_ft": {
        "description": "Tide height in feet. NOTE: always in feet regardless of other unit settings. Rarely populated at offshore buoys. Null if not reported.",
        "type": [
          "number",
          "null"
        ]
      },
      "visibility_nmi": {
        "description": "Visibility in nautical miles. NOTE: always in nautical miles regardless of other unit settings. Null if not reported.",
        "type": [
          "number",
          "null"
        ]
      },
      "water_temp_c": {
        "description": "Sea-surface temperature in °C. Null if not reported.",
        "type": [
          "number",
          "null"
        ]
      },
      "wave_height_m": {
        "description": "Significant wave height in meters. Null if not reported.",
        "type": [
          "number",
          "null"
        ]
      },
      "waves_observed_at": {
        "description": "ISO 8601 UTC timestamp of the row the four wave fields were read from. NDBC runs its wave pass on a slower cycle than the met row, so this can be older than observed_at; it applies to all four wave fields, which are never sampled apart. Null when no wave sample falls inside the 90-minute look-back window, including when the buoy has no wave sensor.",
        "type": [
          "string",
          "null"
        ]
      },
      "wind_direction_deg": {
        "description": "Wind direction in degrees true (0–360). Null if not reported by the buoy.",
        "type": [
          "number",
          "null"
        ]
      },
      "wind_speed_ms": {
        "description": "Wind speed in m/s. Null if not reported.",
        "type": [
          "number",
          "null"
        ]
      }
    },
    "type": "object"
  },
  "title": "Get Marine Conditions"
}
```
