Beach Safety MCP
# šļø 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
ā If you find this useful, please star the repo ā it helps others discover it.
## What You Get
- š **Waves** ā height, period, direction
- š«ļø **Swell** ā swell height, period, direction
- šØ **Wind** ā speed and direction
- š”ļø **Temperature** ā air and water
- āļø **UV Index** ā current UV + daily max, day/night aware *(free, no 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, UV index |
| NOAA NWS | Rip current risk, surf zone forecast |
UV index data comes from Open-Meteo at no cost ā no API key needed.
## Installation
### 1. Clone / copy the project
```bash
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
```bash
mcporter config add beach-safety \
--command python3 \
--args "path/to/beach-safety-mcp/src/server.py" \
--cwd "path/to/beach-safety-mcp/config"
```
### Add to mcporter manually
Or manually add to `~/.openclaw/workspace/config/mcporter.json`:
```json
{
"beach-safety": {
"command": "python3",
"args": ["/full/path/to/beach-safety-mcp/src/server.py"]
}
}
```
### 3. Test it
```bash
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
```bash
python3 beach_lookup.py "Waikiki"
python3 beach_lookup.py "Praia da Rocha, Portugal"
python3 beach_lookup.py "Bondi Beach, Sydney"
```
### Surf forecast only
```bash
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: current=6 (daily max=9) (Very High) ā sunscreen recommended
*(at night shows current=0 with daily max, UV risk based on max)*
š 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
```
TDQS
Scored across 4 tools
get_beach_json is explicitly 'the same as get_beach_report but in JSON format,' a pure output-format variant that creates real selection ambiguity, and get_surf_forecast/get_uv_forecast are just filtered slices of get_beach_report. The descriptions do explain when to prefer each one, which keeps it readable but the boundaries are functional rather than distinct.
All four tools follow the same get_<subject> snake_case pattern with no style mixing. The only inconsistency is in the subject convention: two use '<condition>_forecast' while the other two use 'beach_<format/output>'.
Four tools is a reasonable, well-scoped size for a beach-conditions service and nothing feels like filler. It is slightly thin, however, since the surf and UV tools mostly duplicate subsets of the comprehensive report.
The surface covers the core beach-safety read concerns: waves, swell, rip current risk, wind, temperature, UV, and an aggregate safety score, with geocoding handled. Minor gaps remain, such as tide times and water-quality or hazard alerts, which matter for beach safety but are not strictly required.