noaa-marine-mcp-server
Server Details
Find NOAA tide stations and NDBC buoys, fetch tide predictions, currents, and live conditions.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP
- URL
- Repository
- cyanheads/noaa-marine-mcp-server
- GitHub Stars
- 1
- Server Listing
- @cyanheads/noaa-marine-mcp-server
Available Tools
7 toolsnoaa_marine_find_stationsFind Marine StationsARead-onlyInspect
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 | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of stations to return. Defaults to 20. | |
| query | No | 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. | |
| state | No | 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 | No | 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. Omit to return all stations. | |
| source | No | Data source to search: coops (tide/water-level/current stations), ndbc (buoys), or all (default). | all |
| latitude | No | 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. | |
| longitude | No | 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. | |
| radius_km | No | Search radius in kilometers when latitude/longitude are provided. Defaults to 100 km. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Present when the call failed. Absent on success. |
| stations | No | Stations matching the search criteria, sorted by distance (if lat/lon provided) or name. |
| truncated | No | True when total_found exceeds the limit and not all matching stations are returned. Increase limit or narrow filters to see more. |
| total_found | No | Total stations matching the filters before the limit was applied. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds valuable behavioral context beyond annotations: it explains the distinction between data capabilities and physical platform (the two axes), notes that CO-OPS current stations are cataloged by monitoring capability, and warns about no_predictions from noaa_marine_get_currents. This is substantive, though it does not disclose rate limits or pagination details, which are minor for a read-only search tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is slightly long (about 200 words) but each sentence contributes unique information—ID formats, axes, search requirements, and the no_predictions note. It is front-loaded with the primary purpose and then provides necessary technical specifics. No redundant statements; it earns a 4 for being structured and efficient despite its length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 8 parameters, an output schema, and multiple search modes, the description is remarkably complete. It covers the two filtering axes, the source-specific behavior, the ID formats, and the prerequisite nature for other data tools. Since an output schema exists, it doesn't need to detail return values, and it doesn't. Nothing critical is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds meaning beyond the schema: it clarifies that 'state' applies only to CO-OPS stations (excluding NDBC), that the 'buoy' type filters by physical platform rather than data capability, and that latitude/longitude must be provided together. This helps the agent avoid common parameter misuse, earning a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Find') with a clear resource ('CO-OPS tide/water-level/current stations and NDBC buoys') and distinguishes it from sibling data tools by noting it is the 'required first step to resolve place names or coordinates to station IDs before calling data tools.' It also clarifies the unified station list content, making the tool's role unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool: 'This is the required first step... before calling data tools.' It also gives practical guidance on search modes ('Provide latitude and longitude together for proximity search, or query/state for name-based search'), and mentions the fallback behavior when no_predictions are encountered. This goes beyond implicit usage and clearly routes the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
noaa_marine_get_conditionsGet Marine ConditionsARead-onlyInspect
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 | Required | Description | Default |
|---|---|---|---|
| station_id | 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"]. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Present when the call failed. Absent on success. |
| source | No | Data source — always "ndbc" for this tool. |
| tide_ft | No | Tide height in feet. NOTE: always in feet regardless of other unit settings. Rarely populated at offshore buoys. Null if not reported. |
| latitude | No | Station latitude in decimal degrees. |
| longitude | No | Station longitude in decimal degrees. |
| air_temp_c | No | Air temperature in °C. Null if not reported. |
| station_id | No | Station ID echoed from the request — for chaining. |
| dew_point_c | No | Dew point temperature in °C. Null if not reported. |
| observed_at | No | ISO 8601 UTC timestamp of the observation row used. |
| pressure_hpa | No | Atmospheric pressure in hPa. Null if not reported. |
| station_name | No | Station name from the NDBC active stations list. |
| water_temp_c | No | Sea-surface temperature in °C. Null if not reported. |
| gust_speed_ms | No | Wind gust speed in m/s. Null if not reported. |
| wave_height_m | No | Significant wave height in meters. Null if not reported. |
| wind_speed_ms | No | Wind speed in m/s. Null if not reported. |
| visibility_nmi | No | Visibility in nautical miles. NOTE: always in nautical miles regardless of other unit settings. Null if not reported. |
| average_period_sec | No | Average wave period in seconds. Null if not reported. |
| wind_direction_deg | No | Wind direction in degrees true (0–360). Null if not reported by the buoy. |
| dominant_period_sec | No | Dominant wave period in seconds. Null if not reported. |
| mean_wave_direction_deg | No | Mean wave direction in degrees true. Null if not reported. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true and openWorldHint=true; the description adds significant behavioral context: unit conventions (SI except TIDE/VIS), the possibility of null values as normal (sensor non-reporting), the ~10-minute update cadence with potential 10–20 min staleness, and the note that many NDBC stations lack data. No contradiction and rich beyond what annotations convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is structured logically: core data first, then units, then nulls and staleness, then usage guidance. Every sentence contributes new information—no filler. It is appropriately sized for the tool's complexity and front-loads the most critical facts.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has an output schema (so return structure is documented elsewhere) and one parameter with full schema coverage, the description comprehensively covers the non-obvious context: unit exceptions, null behavior, freshness, and station-finding prerequisites. An agent can call this tool correctly with no gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter station_id has complete schema coverage (100%), so the baseline is 3. The description reinforces the schema's guidance by explaining how to obtain valid station IDs via the find tool and why 'met' type matters, adding practical value beyond the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('get'), a specific resource ('live marine conditions from an NDBC buoy'), and enumerates the exact measurements returned. It clearly differentiates from siblings by its focus on real-time buoy observations rather than forecasts or other marine data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly instructs to first use noaa_marine_find_stations with source='ndbc' and types=['met'] to obtain station IDs, and warns that omitting the types filter will yield IDs this tool cannot read. This gives clear when-to-use guidance and a key prerequisite, leaving no room for misinterpretation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
noaa_marine_get_current_profileGet Ocean Current ProfileARead-onlyInspect
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 | Required | Description | Default |
|---|---|---|---|
| station_id | Yes | NDBC station ID (5-character alphanumeric, e.g. "44033"). Obtain from noaa_marine_find_stations with source="ndbc" and types=["current_profile"]. |
Output Schema
| Name | Required | Description |
|---|---|---|
| bins | No | Depth-binned current measurements, shallowest first (NDBC source order). |
| error | No | Present when the call failed. Absent on success. |
| source | No | Data source — always "ndbc" for this tool. |
| latitude | No | 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. |
| bin_count | No | Number of depth bins in the profile. |
| longitude | No | Station longitude in decimal degrees. Null when the station is absent from the NDBC active-stations list. |
| station_id | No | Station ID echoed from the request — for chaining. |
| observed_at | No | ISO 8601 UTC timestamp of the observation. |
| station_name | No | Station name from the NDBC active stations list. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond annotations (readOnlyHint, openWorldHint) by detailing return units (depth in meters, direction in degrees true, speed in cm/s), null behavior when sensor components are missing, and the fact that depth bins are reported only when NDBC provides a depth. These behavioral details are crucial for correct interpretation and are not present in annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences and dense with information: core purpose, measurement details, distinction from sibling, null handling, and lookup instructions. It is front-loaded with the most important facts and contains no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers all essential aspects: purpose, return fields and units, distinction from the closest sibling, null semantics, and station discovery method. With an output schema present (as indicated), the return shape is already documented, so nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description reinforces the station_id origin and adds a caution about unfiltered find_stations queries returning incompatible IDs. While this is more usage guidance than new parameter format, it is actionable and directly tied to the parameter, justifying a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: 'Observed ocean-current depth profile from an NDBC ADCP buoy' and specifies it returns the most recent measurement of speed and direction at each depth bin. Explicitly distinguishes from noaa_marine_get_currents (tidal predictions), making the tool's unique purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use guidance: contrasts with noaa_marine_get_currents and directs the user to noaa_marine_find_stations with source='ndbc' and types=['current_profile'] to obtain compatible station IDs. Also warns that unfiltered searches yield unusable IDs, which is a clear usage constraint.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
noaa_marine_get_currentsGet Tidal CurrentsARead-onlyIdempotentInspect
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 | Required | Description | Default |
|---|---|---|---|
| units | No | Unit system: english = knots; metric = m/s. | english |
| end_date | Yes | End date in YYYYMMDD format (inclusive), e.g. "20240607". | |
| interval | No | Prediction interval: MAX_SLACK (default) returns max flood, max ebb, and slack water events — ideal for passage planning. 6min returns a continuous current curve. | MAX_SLACK |
| time_zone | No | Time zone for returned timestamps. lst_ldt = local standard/daylight time (default); gmt = UTC; lst = local standard time year-round. | lst_ldt |
| begin_date | Yes | Start date in YYYYMMDD format, e.g. "20240601". | |
| station_id | Yes | CO-OPS current station ID (alphanumeric, e.g. "ACT4176"). Obtain from noaa_marine_find_stations with types=["current"]. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Present when the call failed. Absent on success. |
| units | No | Speed units: "english" (knots) or "metric" (m/s). |
| events | No | Max flood, max ebb, and slack events. Present for MAX_SLACK interval. |
| station_id | No | Station ID echoed from the request — for chaining. |
| predictions | No | 6-minute continuous current predictions. Present for 6min interval. |
| station_name | No | Station name as returned by CO-OPS. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint, openWorldHint, and idempotentHint. The description adds valuable behavioral context beyond that: it specifies the data source (CO-OPS forecast predictions, not observations), the 1-year date range limit, and warns that current station IDs are alphanumeric and distinct from numeric tide/water-level IDs. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence contributes value: core capability, sibling distinction, default interval rationale, optional detail mode, station ID caveat, and date limit. It is front-loaded with the primary purpose and flows logically, with no fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema (which covers return values) and the rich annotations, the description covers all essential context: data source (CO-OPS forecast vs observations), how to obtain valid inputs (find_stations), key constraints (1-year limit, station ID format), and the distinction from sibling tools. An agent has everything needed to decide when and how to invoke this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema documentation covers all 6 parameters with descriptions, enums, defaults, and patterns (100% coverage), so the baseline is 3. The description supplements this by clarifying the station_id format (alphanumeric, distinct from numeric IDs) and noting the 1-year date range constraint, which helps agents understand the scope of begin_date/end_date beyond what the schema states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it provides tidal current predictions for a CO-OPS station, listing the specific outputs (max flood/ebb speeds, slack times, directions). It also explicitly names the sibling noaa_marine_get_current_profile and contrasts it (NDBC observed ocean-current measurements, depth-binned), so an agent can immediately distinguish the two without inspecting their schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly directs users to noaa_marine_find_stations for obtaining valid station IDs and highlights the difference from noaa_marine_get_current_profile for observed data. It also explains when to use the default MAX_SLACK interval (planning view) versus the optional 6-minute continuous predictions (detailed analysis), providing clear context for choosing this tool over alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
noaa_marine_get_ocean_observationsGet Ocean ObservationsARead-onlyInspect
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 | Required | Description | Default |
|---|---|---|---|
| station_id | 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 this is a best-effort call on any NDBC station. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Present when the call failed. Absent on success. |
| source | No | Data source — always "ndbc" for this tool. |
| latitude | No | 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. |
| readings | No | Per-depth readings sharing the most recent observation timestamp, in NDBC source order. |
| longitude | No | Station longitude in decimal degrees. Null when the station is absent from the NDBC active-stations list. |
| station_id | No | Station ID echoed from the request — for chaining. |
| observed_at | No | ISO 8601 UTC timestamp of the observation. |
| station_name | No | Station name from the NDBC active stations list. |
| reading_count | No | Number of per-depth readings in the latest observation (usually 1). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, but the description goes further, disclosing that unreported values come back null (not zero), that lat/lon are null when a station is absent from the active list, and that sensor coverage is sparse. It also specifies the error condition. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but each sentence earns its place, covering purpose, distinctions, data behavior, and failure modes. It is front-loaded with the core purpose and follows a logical structure, though slightly dense.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema (so return values do not need describing), the description covers data list, null-handling policy, coordinate behavior, station coverage caveats, and error handling. It also connects to sibling tools. Nothing essential is missing for an agent to call this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the schema itself provides a detailed station_id description with pattern and example. The tool description supplements this by explaining that station IDs should be sourced from find_stations and that coverage is not guaranteed, adding practical context beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb-resource pairing: 'Live sub-surface oceanographic observations from an NDBC station's water-quality sensors.' It enumerates the data types returned and explicitly contrasts with the sibling noaa_marine_get_conditions, leaving no ambiguity about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use guidance: 'use this tool for what the water is doing below the surface, that one for weather and sea state at the buoy.' Also instructs how to obtain candidate IDs via noaa_marine_find_stations with source="ndbc" and warns that many stations will produce an observations_not_found error. This thoroughly differentiates from alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
noaa_marine_get_tide_predictionsGet Tide PredictionsARead-onlyIdempotentInspect
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 | Required | Description | Default |
|---|---|---|---|
| datum | No | Tidal datum reference plane. MLLW (default) is the US nautical chart datum. MSL = mean sea level; MHHW = mean higher high water (flooding reference). | MLLW |
| units | No | Unit system for heights: english = feet; metric = meters. | english |
| end_date | Yes | End date in YYYYMMDD format (inclusive), e.g. "20240607". | |
| interval | No | Prediction interval: hilo (default) returns only high and low tide events; 6min returns a continuous prediction curve at 6-minute intervals. | hilo |
| time_zone | No | Time zone for returned timestamps. lst_ldt = local standard/daylight time (default); gmt = UTC; lst = local standard time year-round. | lst_ldt |
| begin_date | Yes | Start date in YYYYMMDD format, e.g. "20240601". | |
| station_id | Yes | CO-OPS tide station ID (numeric, e.g. "9447130" for Seattle). Obtain from noaa_marine_find_stations with types=["tide"]. |
Output Schema
| Name | Required | Description |
|---|---|---|
| datum | No | Tidal datum used (e.g. MLLW) — echoed for correct interpretation of heights. |
| error | No | Present when the call failed. Absent on success. |
| units | No | Height units: "english" (feet) or "metric" (meters). |
| station_id | No | Station ID echoed from the request — for chaining. |
| predictions | No | Tide predictions for the requested date range. |
| station_name | No | Station name as returned by CO-OPS — confirms the correct station was queried. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds valuable non-obvious behavior: the 1-year request cap, the hilo vs 6min return granularity, the H/L tide-type coding, and the MLLW datum default rationale. No contradiction with annotations — 'predictions' aligns with readOnly semantics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Five sentences, front-loaded with the core purpose, then layering return format, datum, constraints, and routing. Dense but each sentence earns its place — the only minor issue is the paragraph wall could use slight structural separation, but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter tool with a rich schema and an output schema (so return values need not be spelled out), the description covers the critical operational constraints: date-range cap, interval modes, datum meaning, and the prerequisite station-ID resolution. Moderately complex tool, and nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with detailed per-parameter descriptions and enums, so the schema carries the load — baseline 3 is appropriate. The description does add a touch of context (MLLW as US chart datum, hilo vs 6min behavior), but these largely echo the schema's own parameter descriptions, so marginal value above baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: 'High/low tide predictions for a CO-OPS tide station over a date range.' It clearly differentiates from siblings by naming the data type (tides) and the station source (CO-OPS), letting an agent distinguish it from get_water_level, get_currents, and get_conditions without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit pre-usage routing: 'Use noaa_marine_find_stations first to resolve a station name or location to a numeric station ID.' Also flags the 1-year date-range limit and directs splitting longer ranges. It lacks explicit when-not-to-use guidance versus the water_level sibling, but the resolution step and limit are clear, actionable context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
noaa_marine_get_water_levelGet Water LevelARead-onlyIdempotentInspect
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 | Required | Description | Default |
|---|---|---|---|
| datum | No | Tidal datum reference plane. MLLW (default) is the US nautical chart datum. MSL = mean sea level; MHHW = mean higher high water (flooding reference). | MLLW |
| units | No | Unit system: english = feet; metric = meters. | english |
| end_date | Yes | End date in YYYYMMDD format (inclusive), e.g. "20240601". | |
| time_zone | No | Time zone for returned timestamps. lst_ldt = local standard/daylight time (default); gmt = UTC; lst = local standard time year-round. | lst_ldt |
| begin_date | Yes | Start date in YYYYMMDD format, e.g. "20240601". | |
| station_id | Yes | CO-OPS water-level station ID (numeric, e.g. "9447130" for Seattle). Obtain from noaa_marine_find_stations with types=["water_level"]. |
Output Schema
| Name | Required | Description |
|---|---|---|
| datum | No | Tidal datum used — echoed for correct interpretation of water heights. |
| error | No | Present when the call failed. Absent on success. |
| units | No | Height units: "english" (feet) or "metric" (meters). |
| station_id | No | Station ID echoed from the request — for chaining. |
| predictions | No | Paired 6-minute tide predictions for the same period. May be empty if CO-OPS predictions are unavailable for this station. |
| observations | No | 6-minute observed water level readings. |
| station_name | No | Station name as returned by CO-OPS. |
| residual_summary | No | Summary of observed-minus-predicted residuals in the requested units. Only present when both observations and predictions are available. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, so safety is covered. The description adds valuable behavioral details: 6-minute observation/prediction interval, the residual calculation (observed−predicted) and its interpretation for surge/drawdown, and the date range limit. These go well beyond the annotations and enrich agent understanding.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact—four sentences that sequentially cover purpose, key output feature, constraint, and prerequisite. Every sentence earns its place, and the most important information (what it does) is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity and that an output schema exists, the description covers all necessary operational aspects: station resolution, date limits, output granularity, and interpretation of residuals. Nothing critical for successful invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all parameters are documented (e.g., datum meanings, units, time zones). The description adds no new parameter-specific semantics; its mention of station_id from find_stations duplicates the schema. However, it does contextualize the date parameters with the 31-day limit, which provides slight value beyond the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific resource (CO-OPS water-level station), the data type (observed water level), and the paired predictions, which distinguishes it from siblings like get_conditions or get_tide_predictions. The mention of residual analysis adds specificity to what the tool returns.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly instructs to use noaa_marine_find_stations first, which is a clear prerequisite and usage guideline. It also provides the 31-day date range constraint and advises splitting longer ranges. However, it does not explicitly contrast with alternative tools like get_tide_predictions, though the purpose clarity covers that implicitly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Frequently Asked Questions
Claiming proves that you control a remote MCP connector. It does not move, proxy, or interrupt the server.
Open the connector listing, choose Claim ownership, and sign in to Glama.
Complete one verification method:
GitHub identity — fastest for official registry listings. For a namespace such as
io.github.alice/server, link the matching GitHub user or an account that owns the GitHub organization, then choose Claim with GitHub.HTTP challenge — works when you can deploy a public file. Generate a token, publish the exact JSON Glama shows at
/.well-known/glama.jsonon the same origin as the connector, then choose Check HTTP challenge.DNS challenge — works when you control DNS but cannot change the server. Generate a token, create the exact TXT record Glama shows, wait for it to propagate, then choose Check DNS challenge.
After verification, Glama sends a confirmation email and gives you access to listing details, thumbnails, health checks, and analytics. Keep the HTTP file or DNS record in place: Glama periodically checks it and ownership remains verified while the token is discoverable.
The HTTP ownership file has this structure:
{
"$schema": "https://glama.ai/mcp/schemas/connector.json",
"claim": "glama_claim_..."
}Claim tokens are opaque, stable, and bound to the signed-in Glama account. They contain no email address or other personal information. If Glama can no longer discover a verified HTTP or DNS token, it starts a seven-day grace period before removing claim-based access. Restore the same token during that period to keep ownership verified. Never publish an email address, Glama session token, GitHub token, or connector credential as ownership proof.
If verification fails, confirm that you copied the current token exactly. The HTTP file must be public, return valid JSON with a successful HTTP response, and stay on the connector's origin. DNS changes may need more time to propagate. A claim cannot transfer to a different origin or hostname: if the connector target changes, Glama starts the grace period and the new target must be claimed separately after the previous claim is released.
For a connector linked to the official MCP Registry, registry updates continue to replace its name, description, and URL by default. After claiming, open Manage connector and enable Use Glama listing details as the source of truth if edits made on Glama should be preserved. Categories and thumbnails are always managed on Glama; registry linkage and technical connection settings continue to sync.
Control your server's listing on Glama, including description and metadata
Access analytics and receive server usage reports
Get monitoring and health status updates for your server
Feature your server to boost visibility and reach more users
To improve your MCP server's ranking:
Claim ownership of the server listing
Complete the server profile with an accurate description and thumbnail
Provide a test profile so Glama can connect to and evaluate the server
Keep tool definitions clear and complete to earn a high Tool Definition Quality Score (TDQS)
Route real usage through the Glama Gateway; more recorded successful server uses also improve the ranking
For users:
Full audit trail – every tool call is logged with inputs and outputs for compliance and debugging
Granular tool control – enable or disable individual tools per connector to limit what your AI agents can do
Centralized credential management – store and rotate API keys and OAuth tokens in one place
Change alerts – get notified when a connector changes its schema, adds or removes tools, or updates tool definitions, so nothing breaks silently
For server owners:
Proven adoption – public usage metrics on your listing show real-world traction and build trust with prospective users
Tool-level analytics – see which tools are being used most, helping you prioritize development and documentation
Direct user feedback – users can report issues and suggest improvements through the listing, giving you a channel you would not have otherwise
The connector status is unhealthy when Glama is unable to successfully connect to the server. This can happen for several reasons:
The server is experiencing an outage
The URL of the server is wrong
Credentials required to access the server are missing or invalid
If you are the owner of this MCP connector and would like to make modifications to the listing, including providing test credentials for accessing the server, please contact support@glama.ai.
Discussions
No comments yet. Be the first to start the discussion!
Related MCP Connectors
NOAA Tides & Currents — observations, predictions, datums, station metadata
Search NOAA climate stations and datasets, fetch historical weather observations.
NOAA tides and currents: water levels, tide predictions, currents, met data, flooding, sun and moon
Search NOAA CDO stations and datasets, fetch historical weather observations.
Related MCP Servers
- AlicenseNot gradedqualityFmaintenanceProvides NOAA tide predictions and observed water levels, allowing AI agents to query tide stations and current water level data.5MIT
- FlicenseNot gradedqualityCmaintenanceProvides Canadian tide predictions from the IWLS API, enabling retrieval of 7-day tide forecasts and station listings for monitoring stations across Canada.
- AlicenseNot gradedqualityBmaintenanceProvides real-time water temperature and tide predictions for any lake, river, ocean, bay, or beach using NOAA, USGS, and other sources.MIT
- AlicenseNot gradedqualityAmaintenanceGet US weather forecasts, active alerts, and current observations via the National Weather Service API.3831Apache 2.0
Glama MCP Gateway
Add one secure layer between your agents and this server.
TDQS
Each tool has a clearly distinct purpose: station discovery, live buoy conditions, NDBC current profiles, CO-OPS tidal current predictions, tide predictions, and water levels. The descriptions explicitly differentiate similar-named tools (e.g., get_currents vs get_current_profile), leaving no ambiguity.
All tool names follow a consistent 'noaa_marine_verb_noun' pattern using snake_case. Verbs are descriptive (find, get) and nouns specify the data (stations, conditions, current_profile, etc.). No mixing of styles or abbreviations.
With 6 tools, the server covers the essential operations for NOAA marine data: one discovery tool and five data retrieval tools covering conditions, currents (two types), tides, and water levels. This is well-scoped for the domain—neither too sparse nor overwhelming.
The tool set covers core marine data retrieval (discovery, buoy conditions, current profiles, tidal currents, tide predictions, water levels). Minor gaps exist, such as the absence of CO-OPS current observations (only predictions) or NDBC wave spectra, but the main workflows are supported.