Skip to content
Docs navigation

Weather data built for agents

The weather data our own agent runs on, for your agents and your code. Connect an agent to the Weather MCP, or call the REST API with an API key.

Smarter Weather covers the 50 US states and DC only. Coverage details

curl "https://api.smarterweather.com/v1/weather?lat=42.3601&lon=-71.0589" \
  -H "Authorization: Bearer ${SMARTERWEATHER_API_KEY:?set SMARTERWEATHER_API_KEY first, see developers.smarterweather.com/quickstart}"
// 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?lat=42.3601&lon=-71.0589",
  { 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",
    params={"lat":"42.3601","lon":"-71.0589"},
    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?lat=42.3601&lon=-71.0589", 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))
}
location
{
  "lat": 42.3601,
  "lon": -71.0589,
  "name": "Boston",
  "region": "MA",
  "timezone": "America/New_York",
  "county": "Suffolk"
}
current
{
  "time": "2026-04-20T14:45:00Z",
  "temperature": 58.4,
  "feels_like": 58.4,
  "humidity": 62,
  "dew_point": 45.2,
  "pressure": 30.05,
  "wind_speed": 11.3,
  "wind_gust": 17.8,
  "wind_direction": 240,
  "visibility": 10,
  "cloud_cover": 35,
  "uv_index": 5,
  "precip_rate": 0,
  "precip_type": "none",
  "conditions": "Partly Cloudy",
  "icon": "partly-cloudy-day",
  "severe": false
}
hourly
[
  {
    "time": "2026-04-20T15:00:00Z",
    "temperature": 58.4,
    "feels_like": 58.4,
    "humidity": 62,
    "wind_speed": 11.3,
    "wind_direction": 240,
    "precip_probability": 5,
    "precip_amount": 0,
    "conditions": "Partly Cloudy",
    "icon": "partly-cloudy-day"
  },
  {
    "time": "2026-04-20T16:00:00Z",
    "temperature": 59.1,
    "feels_like": 59.1,
    "humidity": 60,
    "wind_speed": 12.1,
    "wind_direction": 245,
    "precip_probability": 5,
    "precip_amount": 0,
    "conditions": "Partly Cloudy",
    "icon": "partly-cloudy-day"
  },
  {
    "time": "2026-04-20T17:00:00Z",
    "temperature": 59.6,
    "feels_like": 59.6,
    "humidity": 58,
    "wind_speed": 12.4,
    "wind_direction": 245,
    "precip_probability": 5,
    "precip_amount": 0,
    "conditions": "Partly Cloudy",
    "icon": "partly-cloudy-day"
  }
]
daily
[
  {
    "date": "2026-04-20",
    "high": 61,
    "low": 44.5,
    "humidity_avg": 55,
    "wind_speed_max": 14.2,
    "wind_direction": 240,
    "precip_probability": 10,
    "precip_total": 0,
    "snow_total": 0,
    "conditions": "Partly Cloudy",
    "icon": "partly-cloudy-day",
    "day": {
      "temperature": 61,
      "wind_speed": 14.2,
      "wind_direction": 240,
      "precip_probability": 10,
      "precip_total": 0,
      "conditions": "Partly Cloudy",
      "icon": "partly-cloudy-day",
      "narrative": "Partly cloudy with a high near 61. West winds 10 to 15 mph."
    },
    "night": {
      "temperature": 44.5,
      "wind_speed": 6.8,
      "wind_direction": 260,
      "precip_probability": 5,
      "precip_total": 0,
      "conditions": "Mostly Clear",
      "icon": "mostly-clear-night",
      "narrative": "Mostly clear with a low around 45. Winds becoming light."
    }
  }
]
alerts
[]
outlooks
[]
astro
{
  "civil_dawn": "2026-04-20T09:37:00Z",
  "sunrise": "2026-04-20T10:05:00Z",
  "solar_noon": "2026-04-20T16:47:00Z",
  "sunset": "2026-04-20T23:29:00Z",
  "civil_dusk": "2026-04-20T23:57:00Z",
  "day_length": 48240,
  "daylight_length": 51600,
  "moonrise": "2026-04-20T11:42:00Z",
  "moonset": "2026-04-21T01:18:00Z",
  "moon_phase": 0.15,
  "moon_phase_name": "Waxing Crescent",
  "moon_illumination": 0.22,
  "polar": null
}
gis
{
  "lat": 42.3601,
  "lon": -71.0589,
  "city": "Boston",
  "state": "MA",
  "county": "Suffolk",
  "population": null,
  "timezone": "America/New_York",
  "nearest_radar": {
    "id": "BOX",
    "name": "Boston",
    "lat": 41.9558,
    "lon": -71.1369,
    "distance_km": 45.4
  },
  "nearest_station": {
    "id": "KBOS",
    "name": "Boston Logan International Airport",
    "state": "MA",
    "lat": 42.3656,
    "lon": -71.0096,
    "distance_km": 4.1,
    "elevation_m": 6
  }
}
units
{
  "temperature": "F",
  "wind_speed": "mph",
  "pressure": "inHg",
  "visibility": "mi",
  "precip_amount": "in"
}
attribution
{
  "sources": [
    "NOAA/NWS",
    "NBM",
    "GFS",
    "HRRR",
    "RTMA",
    "MRMS"
  ],
  "notice": "Data sourced from NOAA/NWS public products. Derived products produced by Smarter Weather."
}
meta
{
  "schema_version": "1.0.0",
  "generated_at": "2026-04-20T15:00:04Z",
  "freshness": [
    {
      "source": "rtma",
      "product_id": "rtma_conus_2p5km",
      "reference_time": "2026-04-20T14:45:00Z",
      "latest_valid": "2026-04-20T14:45:00Z",
      "age_seconds": 904
    },
    {
      "source": "hrrr",
      "product_id": "hrrr_conus_3km",
      "reference_time": "2026-04-20T14:00:00Z",
      "latest_valid": "2026-04-20T15:00:00Z",
      "age_seconds": 3604
    }
  ],
  "warnings": []
}

Samples read your key from SMARTERWEATHER_API_KEY. Set it up in the Quickstart.

Building with an agent?

The skills CLI needs Node.js 22.20 or later.

npx skills@1.7.4 add https://developers.smarterweather.com --skill smarterweather-onboarding

Then use the onboarding skill to sign up, create an API key, and set up the Weather MCP. SKILL.md

Beyond the forecast

What the data adds to the forecast. A trial key reaches only routes under /v1/weather, /v1/geocode, and /v1/alerts; the others need an API key from a free account.

Experimental

Forecast uncertainty, hourly and daily

Add include=uncertainty to /v1/weather for ensemble spread and threshold probabilities from the National Blend of Models (NBM).
Weather reference →

Radar-tracked storm cells

/v1/storm-tracks returns active storm cells from NEXRAD radar as GeoJSON. Add detailed=true for the cities and population each cell affects.
Storm tracks reference →

Experimental

Recent lightning at a point

/v1/lightning counts GOES satellite flashes near a point and adds MRMS lightning density. A zero count is not yet a guaranteed all-clear.
Observations reference →

Hours that meet your activity criteria

/v1/windows returns runs of forecast hours within your limits for rain chance, temperature, wind, visibility, and cloud ceiling.
Weather reference →

Published skill scores for the models we serve

We grade the models behind our forecast against NOAA analysis and publish the scores, including where a model loses to the local average.
Forecast accuracy →

Three ways in

MCP

Weather MCP

Hosted weather tools your agent's MCP client connects to, with the same data as the REST API.
Set up the Weather MCP →

Agents

Onboarding MCP

Your agent can sign you up, create an API key, and set up the Weather MCP. You approve once in the browser. With no one present, it can get a trial key instead.
Built for agents →

REST

REST API

Call /v1/weather from any application with one API key. Scheduling, logistics, maps, and consumer apps read the same data.
Read the quickstart →
Browse every operation →