MCP server for NOAA STOFS storm surge forecast access and validation against CO-OPS observations
Project description
STOFS MCP Server
MCP server providing AI assistants with access to NOAA's Storm Tide Operational Forecast System (STOFS) — operational storm surge and water level forecasts, and validation against CO-OPS observations.
Status: Ready
Tools
| Tool | Description |
|---|---|
stofs_list_cycles |
List available STOFS forecast cycles on AWS S3 |
stofs_get_station_forecast |
Get water level forecast time series at a CO-OPS station |
stofs_get_point_forecast |
Get forecast at arbitrary lat/lon (nearest STOFS station) |
stofs_get_gridded_forecast |
Forecast at any lat/lon via OPeNDAP (regular grid, no download) |
stofs_compare_with_observations |
Compare STOFS forecast vs CO-OPS observations (bias, RMSE, correlation) |
stofs_get_max_water_level |
Get top stations by peak predicted water level in a cycle |
stofs_get_system_info |
STOFS model specifications, datums, cycle schedule |
stofs_list_stations |
List STOFS output stations, filter by state/region/proximity |
STOFS Models
STOFS-2D-Global (ADCIRC)
- Domain: Global unstructured mesh (~12.8M nodes)
- Cycles: 4x daily — 00, 06, 12, 18 UTC
- Forecast: 180 hours (7.5 days)
- Stations: ~385 output points at 6-minute resolution
- Datum: LMSL (Local Mean Sea Level)
- Data: s3://noaa-gestofs-pds
STOFS-3D-Atlantic (SCHISM)
- Domain: US East Coast + Gulf of Mexico + Puerto Rico (~2.9M nodes)
- Cycles: 1x daily — 12 UTC
- Forecast: 96 hours (4 days)
- Stations: ~108 output points at 6-minute resolution
- Datum: NAVD88
- Data: s3://noaa-nos-stofs3d-pds
Vertical Datums
⚠️ Datum differences matter when comparing models and observations:
- STOFS-2D station files: LMSL (Local Mean Sea Level)
- STOFS-3D station files: NAVD88
- CO-OPS API: Use
datum=MSLfor 2D comparison,datum=NAVDfor 3D comparison- Small systematic offsets (1–5 cm) between LMSL and MSL are expected
Quick Start
git clone https://github.com/mansurjisan/ocean-mcp.git
cd ocean-mcp/servers/stofs-mcp
uv sync
Configure your MCP client
{
"mcpServers": {
"stofs": {
"command": "uv",
"args": ["run", "--directory", "/path/to/ocean-mcp/servers/stofs-mcp", "python", "-m", "stofs_mcp"]
}
}
}
Example Queries
- "What is the latest STOFS-2D-Global forecast cycle?"
- "Get the water level forecast for The Battery, NY (station 8518750)"
- "Compare STOFS forecast vs observations at Boston for the past 24 hours"
- "Find STOFS stations within 50 km of New Orleans"
- "What are the top 10 stations with highest predicted water levels?"
- "Get the surge-only forecast at Charleston, SC"
- "Show me the STOFS forecast near lat 29.95, lon -90.07"
- "Get the STOFS forecast at lat 36.85, lon -75.98 (Virginia Beach) using the gridded product"
Running Tests
# Unit tests (fast, no network)
uv run pytest tests/test_utils.py -v
# Live integration tests (requires internet, downloads ~5–10 MB)
uv run pytest tests/test_live.py -v -s
Data Sources
- AWS S3 (primary):
noaa-gestofs-pds(2D-Global),noaa-nos-stofs3d-pds(3D-Atlantic) - NOMADS OPeNDAP:
nomads.ncep.noaa.gov/dods/stofs_2d_glo/(remote slice of regular-grid data, ~2-day window) - CO-OPS API:
api.tidesandcurrents.noaa.gov(for observation validation)
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file stofs_mcp-0.1.0.tar.gz.
File metadata
- Download URL: stofs_mcp-0.1.0.tar.gz
- Upload date:
- Size: 38.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.4 {"installer":{"name":"uv","version":"0.10.4","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d96123eb5193def72028e7db6a33e62ec266192eb10f3e6fc2bcb178d0b57ea5
|
|
| MD5 |
3eccccb1a38fc24202fcea2f85ab9a4b
|
|
| BLAKE2b-256 |
e359205eac2d64e38a69f1dd8f4af49340c56ab61fc1cb6c18ce35e05e21337a
|
File details
Details for the file stofs_mcp-0.1.0-py3-none-any.whl.
File metadata
- Download URL: stofs_mcp-0.1.0-py3-none-any.whl
- Upload date:
- Size: 32.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.4 {"installer":{"name":"uv","version":"0.10.4","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
eb312149529d0c55c1d331eed1ea69e07f4ee01ee985e65c82837d837760095c
|
|
| MD5 |
fe5a53309163503e94e67dd991398037
|
|
| BLAKE2b-256 |
ec6c9a1690bbf70539a0bfd8a9f3167285f191cb83413a23a2370e50759babac
|