Clairwave
by clairwave · remote · no sign-in to list tools · v0.4.0 · published by GitHub user clairwave
Ocean acoustics: propagation models, bathymetry, sound speed, vessel noise, live AIS. Open.
13 tools: 7 change things and 6 only read.
Scanned Oct 21, 2026
- Deletes or cancels0Claude Code: deny
- Can't be undone0Claude Code: ask
- Changes things7Claude Code: ask: see these tools
- Only reads6Claude Code: allow: see these tools
2 checks matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.
claude mcp add --transport http clairwave https://www.clairwave.com/mcpFindings
Matches of fixed checks, with the text they matched.
The server marks "run_transmission_loss" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}; The name "run_transmission_loss" says "run": a word for a change.
The description is 2,095 characters long, over the 2,000 this check looks for.
What this check looks forMatched text
description ends: "...her), moderate shipping, in the analysis band. Units: dB re 1 µPa (SL @ 1 m)."
Tools
Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.
13 tools
Changes things 7Claude Code: ask
aboutWhat Clairwave provides, which models/data back each tool, and limits.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it What Clairwave provides, which models/data back each tool, and limits.
Annotations the server declares
- title: About Clairwave
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
estimate_detection_rangeSonar detection range along a bearing from a location (lat/lon or `place`).1 finding
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Info
The description is 2,095 characters long, over the 2,000 this check looks for.
What this check looks forMatched text
description ends: "...her), moderate shipping, in the analysis band. Units: dB re 1 µPa (SL @ 1 m)."
Description, as the server wrote it Sonar detection range along a bearing from a location (lat/lon or `place`). Transmission loss (TL) is ALWAYS computed: RAM parabolic equation with the location's bathymetry, seasonal sound speed (`month`, default: current month) and seabed. Every other sonar-equation term is optional — anything not given gets a stated, typical default listed in `assumptions` with its source. Tell the user which values were assumed. Detection threshold DT is derived from processing gain (unless given): detection index d from `pd`/`pfa` (default 0.5 / 1e-4 → d ≈ 13.8), then passive (incoherent energy detector): DT = 5·log10(d / (B·T)), B = analysis band, T = `integration_time_s` (default 1 s); active (matched filter): DT = 10·log10(d / (2·B·τ)), B = `bandwidth_hz` (default 100 Hz LFM), τ = `pulse_length_s` (default 0.5 s). DT is in-band SNR, so it can be negative — that IS the processing gain. mode="passive": SE = SL − TL − (NL − DI) − DT. Default target = merchant ship (bulk carrier, AIS 70, 200 m @ 12 kn, JOMOPANS-ECHO decidecade band level) at 6 m; receiver ½ water depth (≤ 30 m), omni (DI 0 — give directivity_index_db for an array). `frequency_hz` is optional: the tool always also evaluates the target's MOST DETECTABLE 1/3-octave band in 50–2000 Hz (`best_band`) — ships are loudest there; a user frequency is reported as asked. If you give `source_level_db` without `frequency_hz`, the range is evaluated at 50 Hz. mode="active" (monostatic, `frequency_hz` required): SE = SL − 2·TL + TS − (NL − DI) − DT, TL from the sonar to the target depth. Defaults: hull sonar at 7 m, SL 220 dB, TS 10 dB (large underwater object, beam aspect), target ½ water depth (≤ 50 m), DI 20 dB (hull array). Noise-limited only: reverberation is NOT included (often the limit in shallow water). NL (unless given) = Wenz ambient noise at the CURRENT forecast wind at the point (Clairwave weather), moderate shipping, in the analysis band. Units: dB re 1 µPa (SL @ 1 m).
Annotations the server declares
- title: Detection range (sonar equation, passive or active)
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
habitat_received_levelBroadband received level (dB re 1 uPa) at a fixed site — a fish farm, reef, hydrophone or marine protected area — from the ships around it, power-summed.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it Broadband received level (dB re 1 uPa) at a fixed site — a fish farm, reef, hydrophone or marine protected area — from the ships around it, power-summed. Each vessel's source level comes from its AIS class, speed and size; transmission loss is a fast broadband model, so this is a screening estimate (use run_transmission_loss for exact site physics). hours_back = 0 uses the live snapshot; > 0 reconstructs a time series from the AIS archive in 10-minute bins (max/median/quiet levels). Location: lat/lon or `place`. Show `open_url` to the user as a clickable link.
Annotations the server declares
- title: Habitat received level (vessel noise)
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
run_bellhop_volumeFull 3D transmission-loss volume around a source (lat/lon or `place`) with Bellhop (all bearings), stored on the platform under a run id.No findings
Why it is in this group
- The name "run_bellhop_volume" says "run": a word for a change.
Description, as the server wrote it Full 3D transmission-loss volume around a source (lat/lon or `place`) with Bellhop (all bearings), stored on the platform under a run id. Show `open_url` to the user as a clickable link: it opens this run visualized. Returns the run id, the replication metadata (SSP, seabed, bounding box) and file links (uint8 TL cube .npy + JSON sidecar). Any frequency and radius (keep radius <= ~50 km for reasonable run times).
Annotations the server declares
- title: Bellhop 3D TL volume (stored run)
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
run_transmission_lossRun a physically grounded transmission-loss simulation (RAM parabolic equation) from a source at (lat, lon or `place`, depth) along a compass bearing.1 finding
Why it is in this group
- The name "run_transmission_loss" says "run": a word for a change.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "run_transmission_loss" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}; The name "run_transmission_loss" says "run": a word for a change.
Description, as the server wrote it Run a physically grounded transmission-loss simulation (RAM parabolic equation) from a source at (lat, lon or `place`, depth) along a compass bearing. Bathymetry, the seasonal sound-speed profile (`month`) and seabed parameters are fetched for the location automatically. Returns TL vs range at the receiver depths (default: source depth, 10 m, 100 m, mid-water), grid statistics, and the full replication bundle. Show `open_url` to the user as a clickable link.
Annotations the server declares
- title: Transmission loss (RAM PE)
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
vessel_source_levelUnderwater radiated-noise source level of a ship (monopole, dB re 1 uPa m, 6 m reference source depth): decidecade spectrum (10 Hz - 100 kHz; model bands to 31.5 kHz, validated 20 …No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it Underwater radiated-noise source level of a ship (monopole, dB re 1 uPa m, 6 m reference source depth): decidecade spectrum (10 Hz - 100 kHz; model bands to 31.5 kHz, validated 20 Hz - 20 kHz) and broadband level, from the JOMOPANS-ECHO reference spectrum model (MacGillivray & de Jong 2021, J. Mar. Sci. Eng. 9:369), fitted to 1862 measured ship passes. Individual ships scatter about +/-6 dB rms per band. Give an MMSI (live AIS type/speed/length are used) or explicit AIS ship_type / speed / length. vessel_class overrides the AIS mapping (e.g. "vehicle_carrier", which has no AIS type). Missing speed = the class reference speed; missing length = the class mean length of the measured ships. The spectrum is usable directly as `sl_spectrum`.
Annotations the server declares
- title: Vessel source level
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
vessels_nearLive AIS vessels within radius_km of a point (lat/lon or `place`), nearest first, with position, course/speed, type, dimensions and last-update time.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it Live AIS vessels within radius_km of a point (lat/lon or `place`), nearest first, with position, course/speed, type, dimensions and last-update time.
Annotations the server declares
- title: Vessels near a point (AIS)
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
Only reads 6Claude Code: allow
get_bathymetrySeafloor depth from Clairwave-served global bathymetry (~450 m resolution).No findings
Why it is in this group
- The name "get_bathymetry" says "get": a word for reading.
Description, as the server wrote it Seafloor depth from Clairwave-served global bathymetry (~450 m resolution). Location: lat/lon or `place` (name resolved to a water point, echoed in `location`). Without a bearing: depth at the point. With a bearing (compass degrees, 0 = north): a depth profile along that transect out to range_km.
Annotations the server declares
- title: Bathymetry
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
get_sound_speed_profileSeasonal sound-speed profile c(z) at a location (lat/lon or `place` name, e.g.No findings
Why it is in this group
- The name "get_sound_speed_profile" says "get": a word for reading.
Description, as the server wrote it Seasonal sound-speed profile c(z) at a location (lat/lon or `place` name, e.g. "Halifax approaches") for a calendar month (1-12), from Clairwave-served seasonal temperature/salinity climatology, plus the seabed parameters (compressional/shear speed, density ratio, attenuation, sediment type) at the same point. Cached per 0.1 degree.
Annotations the server declares
- title: Sound speed profile
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
get_vesselEverything about one vessel: live AIS position/track and static particulars, plus its 3D model (unique photo-derived model if generated, else the class archetype) with GLB URL (bow…No findings
Why it is in this group
- The name "get_vessel" says "get": a word for reading.
Description, as the server wrote it Everything about one vessel: live AIS position/track and static particulars, plus its 3D model (unique photo-derived model if generated, else the class archetype) with GLB URL (bow=+Z, up=+Y) and platform links.
Annotations the server declares
- title: Vessel details + 3D model
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
get_vessel_photoPhotograph of a vessel from Wikimedia Commons, with attribution.No findings
Why it is in this group
- The name "get_vessel_photo" says "get": a word for reading.
Description, as the server wrote it Photograph of a vessel from Wikimedia Commons, with attribution.
Annotations the server declares
- title: Vessel photo
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
resolve_placeTurn a place name ('outside Halifax', 'Strait of Hormuz', 'Bergen, Norway') into water coordinates.No findings
Why it is in this group
- The name "resolve_place" says "resolve": a word for reading.
Description, as the server wrote it Turn a place name ('outside Halifax', 'Strait of Hormuz', 'Bergen, Norway') into water coordinates. Maritime gazetteer first (ports resolve to their approaches, straits/seas to a representative point), then OpenStreetMap. Points on land or shallower than min_depth_m are walked seaward along the gazetteer bearing (or the nearest direction) until deep enough; the original point and the snap are reported. offshore_km pushes the point further out along seaward_bearing_deg. All location tools also accept `place` directly, so a separate call is only needed to inspect.
Annotations the server declares
- title: Resolve place name
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
search_vesselsSearch live AIS vessels by name or MMSI prefix (global feed).No findings
Why it is in this group
- The name "search_vessels" says "search": a word for reading.
Description, as the server wrote it Search live AIS vessels by name or MMSI prefix (global feed).
Annotations the server declares
- title: Search vessels (AIS)
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Install
Pinned to version 0.4.0. Values in angle brackets are yours to fill in.
claude mcp add --transport http clairwave https://www.clairwave.com/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__clairwave__resolve_place",
"mcp__clairwave__get_bathymetry",
"mcp__clairwave__get_sound_speed_profile",
"mcp__clairwave__search_vessels",
"mcp__clairwave__get_vessel",
"mcp__clairwave__get_vessel_photo"
],
"ask": [
"mcp__clairwave__run_transmission_loss",
"mcp__clairwave__estimate_detection_range",
"mcp__clairwave__run_bellhop_volume",
"mcp__clairwave__vessels_near",
"mcp__clairwave__vessel_source_level",
"mcp__clairwave__habitat_received_level",
"mcp__clairwave__about"
],
"deny": []
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as clairwave. Review it before you use it.
