Skip to main content

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=MSL for 2D comparison, datum=NAVD for 3D comparison
  • Small systematic offsets (1–5 cm) between LMSL and MSL are expected

Quick Start

git clone https://github.com/oceanmodeling/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

Metadata

Release files for stofs-mcp 0.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for stofs-mcp 0.2.0
File Size Uploaded
stofs_mcp-0.2.0.tar.gz 55.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for stofs-mcp 0.2.0
File Interpreter ABI Platform
stofs_mcp-0.2.0-py3-none-any.whl Python 3 none any Details

Total release size: 92.5 kB

Release files / stofs_mcp-0.2.0.tar.gz

Download URL stofs_mcp-0.2.0.tar.gz
Size 55.4 kB
Tags Source
SHA-256 checksum
How to use checksums
a9135dc72c0c5a6ab7ac8687adac16e79d2cb53823cc8375adba394ca5fde209
BLAKE2b-256 checksum
How to use checksums
84c271d02145b2b52715a421c2702ead374f67988464548620de7b054c219ac1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.

Transparency log

Release files / stofs_mcp-0.2.0-py3-none-any.whl

Download URL stofs_mcp-0.2.0-py3-none-any.whl
Size 37.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
5160f5ff63ff76c5d7ead2883f168359e7a471503341c4735fa61b89d631f21e
BLAKE2b-256 checksum
How to use checksums
670190e8c1ceb22c4c42454a11a7cbd6a9fcd0e83331fe9515cc3c0388f1d717
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.2.0 This release

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page