Accurate weather forecasts using Open-Meto API (no key required)

Fetch current weather conditions and 7-day daily forecasts for any location using the Open-Meteo API. Includes geocoding to resolve city names to coordinates. Free, no API key required.

Audits

Pending

Install

openclaw skills install open-meteo-weather

Open-Meteo Weather

Current weather conditions and 7-day daily forecasts for any location. Uses the free Open-Meteo API with built-in geocoding. No API key, no authentication, no rate limits for non-commercial use.

Quick Reference

ActionEndpoint
Geocode city to lat/lonGET https://geocoding-api.open-meteo.com/v1/search?name={city}&count=1&language=en
Current + 7-day forecastGET https://api.open-meteo.com/v1/forecast?latitude={lat}&longitude={lon}&current=temperature_2m,relative_humidity_2m,apparent_temperature,weather_code,wind_speed_10m,wind_direction_10m,precipitation&daily=temperature_2m_max,temperature_2m_min,precipitation_sum,precipitation_probability_max,sunrise,sunset,wind_speed_10m_max,weather_code&timezone=auto

Units

Default to metric. On the first weather request in a session, ask the user: "Do you prefer Celsius or Fahrenheit?" Remember their answer for the rest of the session.

For metric (default), no extra parameters needed.

For imperial, append these parameters to the forecast URL:

&temperature_unit=fahrenheit&wind_speed_unit=mph&precipitation_unit=inch

The response current_units and daily_units objects reflect the chosen system.

Geocoding

Resolve a city name to latitude/longitude before calling the forecast API.

Endpoint: GET https://geocoding-api.open-meteo.com/v1/search

ParameterRequiredDescription
nameYesCity name (minimum 2 characters)
countNoNumber of results (default 10, max 100). Use 1 for best match.
languageNoResponse language (default en)

Example:

curl "https://geocoding-api.open-meteo.com/v1/search?name=Berlin&count=1&language=en"

Extract from the response:

FieldDescription
results[0].latitudeLatitude (WGS84)
results[0].longitudeLongitude (WGS84)
results[0].nameResolved city name
results[0].countryCountry name
results[0].admin1State/province

If results is empty or missing, tell the user the location was not found and ask them to be more specific.

If multiple cities share the same name, use count=5 and present the options (name, admin1, country) so the user can pick the right one.

Current Conditions

Include the current parameter in the forecast call.

Parameters to request:

current=temperature_2m,relative_humidity_2m,apparent_temperature,weather_code,wind_speed_10m,wind_direction_10m,precipitation

Response fields:

FieldDescription
current.temperature_2mTemperature at 2m height
current.apparent_temperatureFeels-like temperature (wind chill / heat index)
current.relative_humidity_2mRelative humidity percentage
current.weather_codeWMO code (see Weather Codes below)
current.wind_speed_10mWind speed at 10m height
current.wind_direction_10mWind direction in degrees
current.precipitationPrecipitation in the last hour

Units are in the current_units object. Always include the unit when presenting values.

Convert wind_direction_10m degrees to the nearest compass direction: N (338-22), NE (23-67), E (68-112), SE (113-157), S (158-202), SW (203-247), W (248-292), NW (293-337).

Daily Forecast

Include the daily parameter. Always add timezone=auto so times are in the location's local timezone.

Parameters to request:

daily=temperature_2m_max,temperature_2m_min,precipitation_sum,precipitation_probability_max,sunrise,sunset,wind_speed_10m_max,weather_code&timezone=auto

All daily fields are arrays indexed by day. daily.time contains date strings (YYYY-MM-DD).

FieldDescription
daily.time[i]Date
daily.weather_code[i]WMO code for the day
daily.temperature_2m_max[i]High temperature
daily.temperature_2m_min[i]Low temperature
daily.precipitation_sum[i]Total precipitation
daily.precipitation_probability_max[i]Max precipitation probability (%)
daily.sunrise[i]Sunrise time (ISO 8601, local)
daily.sunset[i]Sunset time (ISO 8601, local)
daily.wind_speed_10m_max[i]Max wind speed

Weather Codes

WMO weather interpretation codes returned in weather_code fields:

CodeDescription
0Clear sky
1Mainly clear
2Partly cloudy
3Overcast
45Fog
48Depositing rime fog
51Light drizzle
53Moderate drizzle
55Dense drizzle
56Light freezing drizzle
57Dense freezing drizzle
61Slight rain
63Moderate rain
65Heavy rain
66Light freezing rain
67Heavy freezing rain
71Slight snow
73Moderate snow
75Heavy snow
77Snow grains
80Slight rain showers
81Moderate rain showers
82Violent rain showers
85Slight snow showers
86Heavy snow showers
95Thunderstorm
96Thunderstorm with slight hail
99Thunderstorm with heavy hail

Use the description when presenting weather to the user. Do NOT show the numeric code.

Response Formatting

Present a concise summary. Do NOT show raw JSON, API URLs, or technical details.

Current conditions format:

Weather in {city}, {country}
{weather description}, {temperature} (feels like {apparent_temperature})
Humidity: {humidity}%
Wind: {speed} from the {compass_direction}
Precipitation: {amount}

Forecast format:

After current conditions, show the 7-day outlook as a compact list with one line per day:

Mon Feb 24: Partly cloudy, 8/3C, 10% rain, wind 15 km/h
Tue Feb 25: Rain, 6/2C, 80% rain, 4.2mm, wind 25 km/h

If the user asks a specific question ("Will it rain tomorrow?", "What's the temperature on Friday?"), answer directly instead of showing the full forecast.

Error Handling

If any API call returns a non-200 status or the response cannot be parsed, inform the user that the weather service is temporarily unavailable and suggest trying again in a few minutes. Do NOT show raw error messages or status codes.