Comprehensive beach and surf conditions for any beach in the world — rip current risk, waves, swell, wind, temperature, UV, and safety scores. MCP server + CLI.
🏖️ Beach Safety MCP
Get comprehensive beach and surf conditions for any beach in the world — just say the name. No API keys needed for most data.
"How's the surf at Waikiki?" → instant full report
What You Get
- 🌊 Waves — height, period, direction
- 🌫️ Swell — swell height, period, direction
- 💨 Wind — speed and direction
- 🌡️ Temperature — air and water
- ☀️ UV Index — sun protection guidance (requires free OpenUV API key)
- ⚠️ Rip Current Risk — Low / Moderate / High
- 🛡️ Safety Score — 1-10 with recommendations
Data Sources (all free — no API keys)
| Source | Data | |--------|------| | OpenStreetMap / Photons | Beach name → coordinates | | Open-Meteo Marine | Wave height, swell, ocean currents | | Open-Meteo Weather | Air temp, wind, precipitation | | NOAA NWS | Rip current risk, surf zone forecast |
Optional: Add a free OpenUV API key (openuv.io) for UV index — 50 requests/day free.
export OPENUV_API_KEY="your-free-key-from-openuv.io"
Set it once in your shell profile and UV data will be included automatically. Or pass it directly to the tool.
Installation
1. Clone / copy the project
git clone <repo-url>
cd beach-safety-mcp
Or just copy the src/server.py file to wherever you want it.
2. Add to mcporter
mcporter config add beach-safety \
--command python3 \
--args "path/to/beach-safety-mcp/src/server.py" \
--cwd "path/to/beach-safety-mcp/config"
Set OpenUV API key (for UV index)
UV data requires a free API key from openuv.io (50 requests/day free):
export OPENUV_API_KEY="your-free-key"
Add this to your shell profile (~/.zshrc) to have it available always.
Add to mcporter manually
Or manually add to ~/.openclaw/workspace/config/mcporter.json:
{
"beach-safety": {
"command": "python3",
"args": ["/full/path/to/beach-safety-mcp/src/server.py"]
}
}
3. Test it
mcporter call beach-safety.get_beach_json beach_name="Waikiki"
Usage
From any AI assistant (via mcporter)
get_beach_report(beach_name="Waikiki")
get_beach_report(beach_name="Bondi Beach, Sydney")
get_beach_report(beach_name="Cocoa Beach, FL")
Just say the beach name — coordinates are auto-resolved.
From the CLI
python3 beach_lookup.py "Waikiki"
python3 beach_lookup.py "Praia da Rocha, Portugal"
python3 beach_lookup.py "Bondi Beach, Sydney"
Surf forecast only
mcporter call beach-safety.get_surf_forecast lat=21.27 lon=-157.82
Example Output
🌊 Bondi Beach, Sydney Beach Conditions
Lat/Lon: -33.8907, 151.2724
Updated: 2026-03-23T10:30:00Z UTC
🛡️ SAFETY (Score: 8/10)
Rip Current Risk: Moderate
Safety: Moderate rip current risk
🌊 WAVES
Wave Height: 2.8 ft (0.84m)
Wave Period: 6.7 sec
Swell: 2.4 ft @ 4.8 sec from E
💨 WIND
Speed: 4.0 mph from NE
🌡️ TEMPERATURE
Air: 68°F | Water: 75°F
☀️ UV INDEX
UV: 6 — Moderate — Protection needed 10am-4pm
📋 RECOMMENDATIONS:
⚠️ Swim near a lifeguard. Be aware of rip currents.
Safety Score Guide
| Score | Meaning | Action | |-------|---------|--------| | 9-10 | Generally safe | Enjoy with normal precautions | | 7-8 | Minor concerns | Caution advised | | 4-6 | Caution | Swim near lifeguard | | 1-3 | Dangerous | Stay out of the water |
Notes
- Works for any beach worldwide — just name it
- NOAA surf zone data is most detailed for US coasts
- Open-Meteo marine data covers global oceans
- Some less-famous beaches may not resolve — try adding country/state (e.g., "Kuta Beach, Bali, Indonesia")
- Beach name → coordinates powered by OpenStreetMap + Photons (free)
Project Structure
beach-safety-mcp/
├── src/
│ └── server.py # MCP server (Python, stdio)
├── beach_lookup.py # CLI tool
├── LICENSE # MIT License
└── README.md