lazysurfer-mcp-server, MIT) that gives Claude and other Model Context Protocol clients surf-conditions, forecast, tide and spot tools, and a free read-only HTTP API at backend.lazysurfer.app for NOAA buoy observations, tide predictions and 7-day spot forecasts. No API key is needed for the public endpoints.LazySurfer is a personalized surf forecasting app for iOS and Android built on NOAA buoy data and a custom deep-learning rating model. This page documents the pieces of that stack you can plug into your own tools. Everything here is read-only; session logging, personalized predictions and cloud sync stay inside the app.
The Model Context Protocol is the open standard AI assistants use to call external tools. The LazySurfer MCP server (lazysurfer-mcp-server, bin name lazysurfer-mcp) is a TypeScript/Node.js server that speaks MCP over stdio, so any compatible client — Claude Desktop, Claude Code, Cursor, ChatGPT desktop and others — can ask questions like “What is the buoy reading at Scripps right now?” or “Should I surf Cardiff or Tourmaline this morning?” and get answers backed by live NOAA data.
npx lazysurfer-mcp-server
Or add it to Claude Desktop (~/Library/Application Support/Claude/claude_desktop_config.json on macOS, %APPDATA%\Claude\claude_desktop_config.json on Windows):
{
"mcpServers": {
"lazysurfer": {
"command": "npx",
"args": ["-y", "lazysurfer-mcp-server"]
}
}
}
For Claude Code: claude mcp add lazysurfer -- npx -y lazysurfer-mcp-server. Requires Node.js 18 or newer. The server is licensed MIT.
| Tool | What it does | Needs sign-in? |
|---|---|---|
getCurrentConditions | Live wave height, period, direction, wind and tide at a latitude/longitude, from the nearest NOAA NDBC buoy and NWS wind station. | Buoy and tide: no. Wind-station lookup: yes |
getLatestObservations | Latest raw observations from the NOAA buoy network. | No |
getTideData | NOAA tide predictions and observations for a tide station and date range. | No |
getVirtualBuoyData | Model wave and wind data for any ocean location, including spots with no nearby buoy. | Yes |
getForecast | Multi-day surf forecast (wave height, period, direction, wind) for a location. | Yes |
getSurfRatingPrediction | LazySurfer's deep-learning 1–5 star rating prediction for a spot at given conditions. | Yes |
reportPredictionError | Flag a prediction that did not match reality so it can feed the weekly retrain. | Yes |
searchSpots / getNearbySpots | Find surf spots by name or proximity. | No |
addSession / getSessions / updateSession / deleteSession | Log and manage your surf sessions in your LazySurfer account. | Yes |
getFriendsSessions | Read your friends' recent sessions (social feed). | Yes |
authenticate / checkAuthStatus / signOut | Sign in to your existing LazySurfer account for the tools above that need it. | — |
The server also exposes MCP resources (a set of San Diego spots with coordinates) and prompts (check-conditions, log-session) so assistants can build common workflows without hand-writing tool calls.
The endpoints below on https://backend.lazysurfer.app/api/ are the ones the LazySurfer website itself uses for its spot pages. They are anonymous, read-only and return JSON (or NOAA's plain-text feed for buoy observations). No key, token or sign-up is required.
GET https://backend.lazysurfer.app/api/GetPublicSpotForecastV2?coords=32.87,-117.25
GET https://backend.lazysurfer.app/api/GetPublicSpotForecastV2?coords=32.87,-117.25,33.03,-117.29&startDate=2026-08-22&endDate=2026-08-25
coords (required): comma-separated lat,lon[,lat,lon...] pairs, up to 30 points per request. Coordinates are snapped to the 0.25° model grid (the same grid the app uses), so the lat/lon in the response may differ slightly from what you sent.startDate, endDate (optional): ISO dates to trim the window.forecastDates[] containing forecastDate and forecastVariables[]. Variables follow NOAA WaveWatch III naming: HTSGW (significant wave height, m), PERPW (peak period, s), DIRPW (peak direction, °), SWELL/SWPER/SWDIR (primary swell plus 2/3 suffixed secondary and tertiary swells), WIND (m/s) and WDIR (°).GET https://backend.lazysurfer.app/api/GetLatestObs
Returns NOAA NDBC's latest_obs.txt feed (every reporting buoy worldwide, one row per station: STN LAT LON YYYY MM DD hh mm WDIR WSPD GST WVHT DPD APD MWD PRES PTDY ATMP WTMP DEWP VIS TIDE), served from a 5-minute cache so you can hit it freely without hammering NOAA. Wave height is in meters and wind in m/s, exactly as NDBC publishes it.
GET https://backend.lazysurfer.app/api/GetTidedata?stationId=9410230&begin=20260821&end=20260822&product=predictions
stationId: a NOAA CO-OPS tide station ID (for example 9410230 is La Jolla, 9414290 San Francisco, 8518750 The Battery, NY).begin, end: YYYYMMDD dates.product: predictions (forecast tide heights) or water_level (observed).Personalized rating predictions, the Similarity Score, session storage, push alerts, GEFS ensemble forecasts and virtual-buoy model data are tied to a LazySurfer account and are only reachable through the app or through the MCP server after signing in. There is no public write API.
All observational data comes from the NOAA National Data Buoy Center, NOAA Tides & Currents and NWS wind stations; forecast data is derived from NOAA wave and weather models. NOAA data is in the public domain. If you build on these endpoints, a link back to lazysurfer.app is appreciated but not required.
LazySurfer is built by Nick Peterson (NJP Consulting LLC, San Diego) and has been in the App Store and Google Play since 2019. The rating model is a PyTorch neural network with per-user embeddings, retrained weekly on real logged sessions; on validation it predicts a surfer's own 1–5 star rating with 90% exact-match accuracy and 97.6% within one star. Read how it works for the full pipeline, or email help@lazysurfer.app with API or MCP questions.