devdrops-weather — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited devdrops-weather (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
The endpoint queries OpenWeatherMap's free-tier API. You can query by city name or by latitude/longitude coordinates. /current returns the current conditions; /forecast returns a 5-day, 3-hour forecast grid (40 data points). This endpoint costs $0.001 per query and is in the free tier (5 queries/day/IP before payment).
Note: When called with no parameters, the API returns 402 (payment required with schema). Provide either ?city= or ?lat=&lon= to get data.
| Method | Path | Price | Required params | Optional params |
|---|---|---|---|---|
| GET | /api/weather/current | $0.001 | city OR lat+lon | — |
| GET | /api/weather/forecast | $0.001 | city OR lat+lon | days |
| Param | Type | Description |
|---|---|---|
city | string | City name (e.g. London, New York, Tokyo) |
lat | number | Latitude (-90 to 90) |
lon | number | Longitude (-180 to 180) |
days | number | Forecast days (1–5, default 5) |
| Field | Type | Description |
|---|---|---|
location.name | string | City name as returned by OWM |
location.country | string | ISO 3166 country code |
conditions | string | Weather description (e.g. "light rain") |
icon | string | OWM icon code |
temperature.current | number | Current temp (°C) |
temperature.feels_like | number | Feels-like temp (°C) |
temperature.min / .max | number | Day min/max (°C) |
humidity | number | Humidity % |
wind.speed | number | Wind speed (m/s) |
wind.direction | number | Wind direction (degrees) |
visibility | number | Visibility (metres) |
sunrise / sunset | string | ISO 8601 timestamps |
// City name
const res = await fetch("https://api.devdrops.run/api/weather/current?city=London");
const { data } = await res.json();
console.log(`${data.conditions}, ${data.temperature.current}°C`);
// Coordinates
const res2 = await fetch("https://api.devdrops.run/api/weather/current?lat=51.5&lon=-0.1");import { wrapFetchWithPayment } from "@x402/fetch";
const pay = wrapFetchWithPayment(fetch, walletClient);
const res = await pay("https://api.devdrops.run/api/weather/forecast?city=Paris");curl "https://api.devdrops.run/api/weather/current?city=Tokyo"GET /api/weather/current?city=London{
"product": "weather",
"cached": false,
"data": {
"location": { "name": "London", "country": "GB", "lat": 51.51, "lon": -0.13 },
"conditions": "overcast clouds",
"temperature": { "current": 12.4, "feels_like": 10.8, "min": 10.1, "max": 13.9 },
"humidity": 82,
"wind": { "speed": 5.1, "direction": 240, "gust": 8.2 },
"visibility": 10000,
"sunrise": "2026-04-25T05:19:00.000Z",
"sunset": "2026-04-25T20:06:00.000Z"
},
"timestamp": "2026-04-25T14:00:00.000Z"
}GET /api/weather/forecast?city=BerlinReturns 40 data points (every 3 hours for 5 days) with temperature, conditions, humidity, wind, and precipitation.
GET /api/weather/current?lat=48.8566&lon=2.3522Returns current conditions for Paris by coordinates.
async function travelContext(cities: string[]) {
const forecasts = await Promise.all(
cities.map(city =>
fetch(`https://api.devdrops.run/api/weather/current?city=${encodeURIComponent(city)}`)
.then(r => r.json())
.then(d => ({ city, temp: d.data?.temperature?.current, conditions: d.data?.conditions }))
)
);
return forecasts;
}const res = await fetch("https://api.devdrops.run/api/weather/forecast?city=Edinburgh");
const { data } = await res.json();
const willRain = data.forecasts.some((f: any) => f.conditions.includes("rain"));
const maxTemp = Math.max(...data.forecasts.map((f: any) => f.temperature));
const minTemp = Math.min(...data.forecasts.map((f: any) => f.temperature));
const packingAdvice = [
willRain && "umbrella",
minTemp < 10 && "heavy jacket",
maxTemp > 20 && "sunscreen",
].filter(Boolean);| Status | Meaning |
|---|---|
| 402 | Payment required (free tier exhausted, or no params provided) |
| 503 | OpenWeatherMap API unavailable or API key issue |
Free tier: 5 queries/day/IP. Check X-Free-Tier-Remaining header.
Caching: Current weather cached 30 minutes. Forecast cached 30 minutes.
City names: OWM resolves most major city names. For ambiguous names (e.g. "Springfield"), prefer lat/lon. Non-ASCII names are supported.
Units: All temperatures in Celsius. Wind speed in metres/second. Visibility in metres.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.