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_report, get_surf_forecast, and get_uv_forecast have distinct, well-explained scopes with explicit guidance on when to use each. The main ambiguity is get_beach_json vs get_beach_report, which return the same data in different formats, so an agent could trivially misselect between them.
All four tools follow a clean get_<noun>_<format> snake_case pattern (get_beach_json, get_beach_report, get_surf_forecast, get_uv_forecast). Naming is fully predictable and consistent.
Four tightly scoped tools easily fit the beach safety domain, and each earns its place (full report, JSON variant, surf focus, UV focus). No bloat or missing core capability at this count.
Coverage of conditions, surf, and UV is solid for a beach safety surface, but tide tables, water quality, and hazard advisories are absent. These are minor gaps an agent can work around but are relevant for full beach safety.