Calculate sound speed in seawater from practical salinity, temperature, and pressure using the Gibbs Seawater Oceanographic Toolbox.
Scanned 9/7/2026
Install to Claude Code
npx -y skills add InternScience/scp --skill seawater-sound-speed-calculation --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Seawater Sound Speed Calculation?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/internscience-seawater-sound-speed-calculation)More formats (shields.io, HTML) on the badges page.
---
name: seawater-sound-speed-calculation
description: Calculate sound speed in seawater from practical salinity, temperature, and pressure using the Gibbs Seawater Oceanographic Toolbox.
license: MIT license
metadata:
skill-author: PJLab
---
# Seawater Sound Speed Calculation
## Usage
### 1. MCP Server Definition
```python
import asyncio
import json
from mcp.client.streamable_http import streamablehttp_client
from mcp import ClientSession
class OceanClient:
"""OceanGSW-Tool MCP Client"""
def __init__(self, server_url: str, api_key: str):
self.server_url = server_url
self.api_key = api_key
self.session = None
async def connect(self):
"""Establish connection and initialize session"""
try:
self.transport = streamablehttp_client(
url=self.server_url,
headers={"SCP-HUB-API-KEY": self.api_key}
)
self.read, self.write, self.get_session_id = await self.transport.__aenter__()
self.session_ctx = ClientSession(self.read, self.write)
self.session = await self.session_ctx.__aenter__()
await self.session.initialize()
return True
except Exception as e:
print(f"✗ connect failure: {e}")
return False
async def disconnect(self):
"""Disconnect from server"""
try:
if self.session:
await self.session_ctx.__aexit__(None, None, None)
if hasattr(self, 'transport'):
await self.transport.__aexit__(None, None, None)
except Exception as e:
print(f"✗ disconnect error: {e}")
def parse_result(self, result):
"""Parse MCP tool call result"""
try:
if hasattr(result, 'content') and result.content:
content = result.content[0]
if hasattr(content, 'text'):
return json.loads(content.text)
return str(result)
except Exception as e:
return {"error": f"parse error: {e}", "raw": str(result)}
```
### 2. Sound Speed Calculation Workflow
This workflow calculates sound speed in seawater using thermodynamic equations.
**Workflow Steps:**
1. **Calculate Absolute Salinity** - Convert practical salinity to absolute salinity
2. **Calculate Conservative Temperature** - Convert in-situ temperature to conservative temperature
3. **Calculate Sound Speed** - Compute speed of sound in seawater
**Implementation:**
```python
## Initialize client
client = OceanClient(
"https://scp.intern-ai.org.cn/api/v1/mcp/34/OceanGSW-Tool",
"<your-api-key>"
)
if not await client.connect():
print("connection failed")
exit()
## Input: Seawater properties
input_params = {
'SP': [35.0, 5.0], # Practical salinity (PSU)
't': [15.0, 10.0], # In-situ temperature (°C)
'p': [1000.0, 1000.0], # Pressure (dbar)
'lon': [120.0, 165.0], # Longitude (degrees East)
'lat': [30.0, 45.0] # Latitude (degrees North)
}
## Step 1: Calculate absolute salinity (SA)
result = await client.session.call_tool(
"gsw_example_absolute_salinity",
arguments={
"SP": input_params['SP'],
'p': input_params['p'],
'lon': input_params['lon'],
'lat': input_params['lat']
}
)
result_data = client.parse_result(result)
SA_result = result_data["st"]
print("Absolute Salinity:")
for i, sa in enumerate(SA_result):
print(f" SP={input_params['SP'][i]} → SA={sa:.4f} g/kg")
## Step 2: Calculate conservative temperature (CT)
result = await client.session.call_tool(
"gsw_example_conservative_temperature",
arguments={
"SA": SA_result,
't': input_params['t'],
'p': input_params['p']
}
)
result_data = client.parse_result(result)
CT_result = result_data["st"]
print("\nConservative Temperature:")
for i, ct in enumerate(CT_result):
print(f" t={input_params['t'][i]}°C → CT={ct:.4f}°C")
## Step 3: Calculate sound speed
result = await client.session.call_tool(
"gsw_example_sound_speed",
arguments={
"SA": SA_result,
'CT': CT_result,
'p': input_params['p']
}
)
result_data = client.parse_result(result)
sound_speed_result = result_data["st"]["sound_speed"]
print("\nSound Speed Results:")
for i, speed in enumerate(sound_speed_result):
print(f"{i+1}. SA={SA_result[i]:.2f} g/kg, CT={CT_result[i]:.2f}°C, p={input_params['p'][i]} dbar")
print(f" Sound speed: {speed:.2f} m/s\n")
await client.disconnect()
```
### Tool Descriptions
**OceanGSW-Tool Server:**
- `gsw_example_absolute_salinity`: Calculate absolute salinity
- Args:
- `SP` (list): Practical salinity (PSU)
- `p` (list): Pressure (dbar)
- `lon` (list): Longitude (degrees East)
- `lat` (list): Latitude (degrees North)
- Returns: Absolute salinity (g/kg)
- `gsw_example_conservative_temperature`: Calculate conservative temperature
- Args:
- `SA` (list): Absolute salinity (g/kg)
- `t` (list): In-situ temperature (°C)
- `p` (list): Pressure (dbar)
- Returns: Conservative temperature (°C)
- `gsw_example_sound_speed`: Calculate sound speed
- Args:
- `SA` (list): Absolute salinity (g/kg)
- `CT` (list): Conservative temperature (°C)
- `p` (list): Pressure (dbar)
- Returns: Sound speed (m/s)
### Input/Output
**Input:**
- `SP`: Practical salinity (0-42 PSU typical range)
- `t`: In-situ temperature (-2 to 40°C)
- `p`: Sea pressure (0-11000 dbar)
- `lon`: Longitude (-180 to 180°E)
- `lat`: Latitude (-90 to 90°N)
**Output:**
- Sound speed in m/s (typically 1400-1600 m/s in ocean)
### Use Cases
- Underwater acoustics and sonar systems
- Ocean circulation modeling
- Submarine navigation
- Marine seismic surveys
- Oceanographic research
### Performance Notes
- **Standards**: TEOS-10 (Thermodynamic Equation of Seawater)
- **Accuracy**: ±0.02 m/s
- **Execution time**: <1 second for batch calculations
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!