Skip to content
Docs navigation
Guides

Check gusts against a lift limit

Ask /v1/weather for hourly rows with the uncertainty section, then compare each hour's gust to your limit.

The request

GET/v1/weather

ParameterValueWhat it does
locationDenver, COFree-text location name.
includecurrent,hourly,alerts,uncertaintyComma-separated list of sections to include.
hourly_hours48Number of hours for the hourly forecast.

Call it

# first, read the key from .env (never source it as shell):
export SMARTERWEATHER_API_KEY="$(sed -n 's/^\(export \)\{0,1\}SMARTERWEATHER_API_KEY=//p' .env | tail -n 1 | tr -d "\r\"' ")"
curl "https://api.smarterweather.com/v1/weather?location=Denver,%20CO&include=current,hourly,alerts,uncertainty&hourly_hours=48" \
  -H "Authorization: Bearer $SMARTERWEATHER_API_KEY"
// save as sample.mjs; run: node --env-file=.env sample.mjs (Node 20.6+, ESM top-level await)
const res = await fetch(
  "https://api.smarterweather.com/v1/weather?location=Denver,%20CO&include=current,hourly,alerts,uncertainty&hourly_hours=48",
  { headers: { Authorization: `Bearer ${process.env.SMARTERWEATHER_API_KEY}` } },
);
if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);
const data = await res.json();
console.log(JSON.stringify(data, null, 2));
# pip install requests python-dotenv
import os, sys, requests
from dotenv import load_dotenv

load_dotenv(".env")  # ./.env in the current directory; variables already set are kept

r = requests.get(
    "https://api.smarterweather.com/v1/weather?location=Denver,%20CO&include=current,hourly,alerts,uncertainty&hourly_hours=48",
    headers={"Authorization": f"Bearer {os.environ['SMARTERWEATHER_API_KEY']}"},
)
if not r.ok:
    sys.exit(f"{r.status_code} {r.text}")
data = r.json()
print(data)
package main

import (
	"fmt"
	"io"
	"log"
	"net/http"
	"os"
)

func main() {
	req, err := http.NewRequest("GET", "https://api.smarterweather.com/v1/weather?location=Denver,%20CO&include=current,hourly,alerts,uncertainty&hourly_hours=48", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer "+os.Getenv("SMARTERWEATHER_API_KEY"))
	res, err := http.DefaultClient.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer res.Body.Close()
	body, err := io.ReadAll(res.Body)
	if err != nil {
		log.Fatal(err)
	}
	if res.StatusCode < 200 || res.StatusCode > 299 {
		log.Fatalf("%s %s", res.Status, body)
	}
	fmt.Println(string(body))
}
{
  "name": "find_best_window",
  "arguments": {
    "location": "Denver, CO",
    "hours": 48,
    "activity_duration_hours": 1,
    "daylight_only": false,
    "criteria": {
      "max_wind_gust": 25
    }
  }
}

Your agent can ask the same question through the hosted weather MCP (36 tools).

Run this tool

One-click installs are global; for the key, put the per-project config in the project's .cursor/mcp.json / .vscode/mcp.json.

The key is read from SMARTERWEATHER_API_KEY, the same as on every docs page and in the playground. The code is identical to the playground's “Call it yourself”.

What it answers

Example answer from the recorded sample, Oct 15, 2026 · Denver, CO

Gusts top 25 mph for 2 of the next 46 hours, first at 3 PM Thursday.

  • Peak gust34.2 mphhourly[0].wind_gust
  • NBM spread at the peak±3.5 mphhourly[0].uncertainty.wind_gust_stddev
  • Hours over 25 mph2hourly[].wind_gust
  • Active alerts1 (Freeze Warning)alerts[].event

NBM, GFS, HRRR, RTMA and MRMS via NOAA/NWS · NBM issued Oct 15, 12 PM MDT (2 h 52 min before this response)

Fields it reads:

  • hourly[].wind_gust
  • hourly[].time
  • location.timezone
  • units.wind_speed
  • hourly[].uncertainty.wind_gust_stddev
  • alerts[].event

Gotchas

  • The limit is yours. The API returns hourly wind_gust and does not know it.
  • include replaces the default sections. Add uncertainty next to every section you read to get hourly[].uncertainty.wind_gust_stddev, the spread around each gust.
  • Gusts are in mph by default. units=metric returns kph.
Run it in the playground