sw-mcp
https://mcp.smarterweather.com
Registry code: 3a1559994cb77ccc
Smarter Weather: live weather data and forecasts (NOAA/NWS models, radar, satellite, alerts) for the 50 US states and DC only. Every tool is read-only; weather and the people and places it affects. One place: get_forecast (current, daily, alerts; include=hourly). Several places or stops: get_data (`locations`). Warnings: get_alerts (`at` for a past time). Anything else: search_data (plain words) returns the exact call. find_places resolves a place.
Hot tools (core, start here): those above, plus
- endpoint
- https://mcp.smarterweather.com
- protocol
- http-sse ·2025-06-18
- authentication
- none observed
- public key
- none — nobody has proven they own this listing · is it yours? claim it
- karma
- 0 · newcomer
- Is sw-mcp live?
- Yes — it answered the hub's last check (checked 13m ago). It answered 100% of checks over the last 30 days.
- Is sw-mcp free to use?
- Partly — some of its tools are open, others need a key or payment.
- What tools does sw-mcp have?
- 14 tools: get_data, get_current_conditions, get_observed_precipitation, get_forecast_distribution, describe_data, get_context, find_places, call_tool, ….
- Is sw-mcp safe to connect?
- The hub found no text in its card or tool descriptions aimed at the agent reading them. It measures what the server answers, not its code — grant it only the access its tools need.
90 days 99.5%· all time 99.5%
last good check
of 14 tools
- degraded → live
- live → degraded· timeout after 20000ms
- degraded → live
- degraded → live
- live → degraded· timeout after 20000ms
- used for
- get hourly weather forecast
- get nws alerts
- check current conditions
- find the best weather window
- takes → gives
- text → data, images
- tools
- 6 reads
Calls placed through this hub's router, from its own receipts. Every caller and every payer counts the same; the chain total is counted from three payers.
through this hub
successful
what callers paid
Price is per tool, not per server. An agent whose handshake is open can hold tools that demand a key or a payment, and one figure for the whole agent sends callers into a wall.
get_forecast reads 0.01 USDC paid 13h ago
Forecast for one US place: current conditions, daily forecast with sunrise and sunset, active alerts and outlooks in one call, hour by hour with include=hourly, and air quality (AQI) with include=aqi; several places: get_data with `locations`. Blended across NBM, HRRR, GFS, RTMA and SPC; times are UTC ISO 8601, quote daily[].astro.local as local, and if forecast.location.timezone_resolved is false state times as UTC. For hours set `hours` (next N) or `start`+`end` for one stretch hour by hour, and check hourly_coverage (first_time, last_time, truncated) before answering about a specific hour; past last_time say the forecast does not reach that far. Example: {"location": "Portland, OR", "include": "hourly", "hours": 24}.
{ "type": "object", "properties": { "end": { "type": "string", "description": "UTC ISO 8601 end of the stretch, exclusive; at most 168 h past the current hour." }, "lat": { "type": "number", "description": "Latitude in decimal degrees (-90 to 90). Most tools also accept a `location` place-name string instead of lat/lon." }, "lon": { "type": "number", "description": "Longitude in decimal degrees (-180 to 180). For continental US use negative values (west of the prime meridian)." }, "card": { "type": "object", "properties": { "focus": { "type": "string", "description": "ISO 8601 time inside the result's window to preselect." }, "title": { "type": "string", "description": "An answer, not a label; up to 48 characters." }, "actions": { "type": "array", "items": { "type": "object", "required": [ "label", "prompt" ], "properties": { "label": { "type": "string", "description": "Button text, up to 24 characters." }, "prompt": { "type": "string", "description": "Up to 280 characters; no links." } }, "additionalProperties": false }, "description": "Up to two follow-ups the user can tap, each sending its prompt as a new turn; never one the card answers itself." }, "threshold": { "type": "object", "required": [ "op", "value" ], "properties": { "op": { "enum": [ ">=", "<=" ], "type": "string", "description": "At or above, or at or below." }, "value": { "type": "number", "description": "In the result's units." } }, "description": "A line to preselect.", "additionalProperties": false } }, "description": "Shape the card (guide://smarterweather/views): intent only; the server fills the rest from the data.", "additionalProperties": false }, "days": { "type": "integer", "default": 10, "maximum": 14, "minimum": 1, "description": "Daily rows (1-14). Default 10. Does not limit hourly reach." }, "view": { "enum": [ "concise", "detailed" ], "type": "string", "description": "concise (default; REST's is detailed): daily has day_precip_probability / night_precip_probability (precip_probability is their max); hourly is sampled past 24h. detailed: adds CAPE, UV, full day/night periods; hourly adds ceiling, gust and thunderstorm probability, every hour for 48h." }, "hours": { "type": "integer", "maximum": 168, "minimum": 1, "description": "Hourly rows for the next N hours (1-168; default 48 when hourly is asked). Adds hourly." }, "start": { "type": "string", "description": "UTC ISO 8601 start of one stretch, returned hour by hour; needs end, not with hours. Adds hourly." }, "units": { "enum": [ "imperial", "metric", "si" ], "type": "string", "default": "imperial", "description": "Units of every value in and out: imperial (default; °F, mph, in) or metric (°C, km/h, mm). si is deprecated and will be removed; use metric." }, "include": { "type": "string", "default": "current,daily,alerts,outlooks", "description": "Comma-separated sections: current, daily, hourly, alerts, outlooks, aqi. Default \"current,daily,alerts,outlooks\". hours, start or end add hourly." }, "location": { "type": "string", "maxLength": 200, "minLength": 1, "description": "Free-text place: \"City, ST\" (e.g. \"Portland, OR\"), US ZIP, venue/address where enabled, or \"lat,lon\". Use this OR lat+lon, not both." } } }arguments 123 linesget_alerts reads 0.01 USDC paid 13h ago
NWS watches, warnings and advisories in effect at a place (`location`), over a `bbox`, or over a state or county as `area` {product, feature_id} (find_places `boundaries` hands those back), now or at a past instant (`at`). Narrow with `filter` over event, severity, urgency or certainty, and page past 50 with `cursor`; an alert's id is its group_id (each alert's `id`), or its current CAP `message_id`, and `filter` on either with `view: detailed` returns its full text and geometry. Empty means all clear or purged (about 24 h), and a city with none is not a statewide all-clear. Example: {"location": "Wichita, KS", "filter": ["event in Tornado Warning,Severe Thunderstorm Warning"]}.
{ "type": "object", "properties": { "at": { "type": "string", "description": "Time: one instant." }, "area": { "type": "object", "properties": { "filter": { "type": "array", "items": { "type": "string", "description": "`<name> <op> <value>`, op one of == != > >= < <= in (`in`: a comma-separated list); values in request units." }, "minItems": 1, "description": "Selects the referenced product's features; the area is their union (overlaps dissolved), one result element. Per feature: feature_ids, or select the per-feature product over this area." }, "product": { "type": "string", "description": "The referenced product (one that declares query.area_as_reference), or omitted with `geometry`." }, "geometry": { "type": "object", "required": [ "type", "coordinates" ], "properties": { "type": { "const": "MultiPolygon", "description": "Always MultiPolygon." }, "coordinates": { "type": "array", "items": { "type": "array", "items": { "type": "array", "items": { "type": "array", "items": { "type": "number" }, "description": "At least 2 items; at most 3 items." }, "description": "At least 4 items." }, "minItems": 1 }, "minItems": 1, "description": "Polygons of closed [lon, lat] rings, outer ring first." } }, "description": "An inline MultiPolygon, <= 10,000 vertices; send a Polygon as a one-member MultiPolygon.", "additionalProperties": false }, "feature_id": { "type": "string", "description": "The referenced product's portable feature id (FIPS geoid, UGC zone, alert id) (non-empty)." }, "feature_ids": { "type": "array", "items": { "type": "string", "description": "Non-empty." }, "minItems": 1, "description": "Up to 25 feature ids; one result element per feature (at most 25 items)." } }, "description": "Space: a polygon by reference ({product, feature_id | feature_ids | filter}; the product must declare query.area_as_reference) or inline ({geometry}). Over a feature product, the overlay; over a grid, zonal statistics.", "additionalProperties": false }, "bbox": { "type": "array", "items": { "type": "number" }, "description": "Space: [west, south, east, north] in degrees. Items on a feature or text product; a grid needs `stats` (exactly 4 items)." }, "card": { "type": "object", "properties": { "focus": { "type": "string", "description": "ISO 8601 time inside the result's window to preselect." }, "title": { "type": "string", "description": "An answer, not a label; up to 48 characters." }, "actions": { "type": "array", "items": { "type": "object", "required": [ "label", "prompt" ], "properties": { "label": { "type": "string", "description": "Button text, up to 24 characters." }, "prompt": { "type": "string", "description": "Up to 280 characters; no links." } }, "additionalProperties": false }, "description": "Up to two follow-ups the user can tap, each sending its prompt as a new turn; never one the card answers itself." }, "threshold": { "type": "object", "required": [ "op", "value" ], "properties": { "op": { "enum": [ ">=", "<=" ], "type": "string", "description": "At or above, or at or below." }, "value": { "type": "number", "description": "In the result's units." } }, "description": "A line to preselect.", "additionalProperties": false } }, "description": "Shape the card (guide://smarterweather/views): intent only; the server fills the rest from the data.", "additionalProperties": false }, "view": { "enum": [ "concise", "detailed" ], "description": "concise (default): values and feature properties with a centroid and bbox; detailed adds simplified geometry, provenance and raw encodings." }, "limit": { "type": "integer", "description": "Frames per series element (default and max 168), or features per element (max 50); next_cursor continues (>= 1)." }, "cursor": { "type": "string", "description": "next_cursor of the previous page, with the same arguments (non-empty)." }, "filter": { "type": "array", "items": { "type": "string", "description": "`<name> <op> <value>`, op one of == != > >= < <= in (`in`: a comma-separated list); values in request units." }, "minItems": 1, "description": "On a feature product: expressions over its filterable properties, applied before aggregation." }, "location": { "type": "string", "description": "Space: one place (place text, ZIP or `lat,lon`). EDR position; `nearest` on a feature product (non-empty)." } }, "additionalProperties": false }arguments 173 linessearch_data open 16h ago
Search the data catalog: which dataset's values answer a question about weather and the people and places it affects, or what data exists at a point. With `query` it ranks datasets and map layers and returns hits with the next `call` (a named place fills its `area`; add a place if `note` asks) and any verified `example`; without it, it lists datasets at the place with freshness, or all. A place or `domain` keeps datasets covering it; `kind` and `family` filter a listing, rank a query; describe_data lists other variables for get_data. Example: {"query": "snow depth", "location": "Erie, PA"}.
{ "type": "object", "properties": { "lat": { "type": "number", "description": "Latitude (-90 to 90), with lon." }, "lon": { "type": "number", "description": "Longitude (-180 to 180), with lat." }, "kind": { "enum": [ "grid", "snapshot", "feature", "text", "index" ], "type": "string", "description": "grid: forecasts (incl. AQ, UV, HeatRisk, radar nowcast), normals, astronomy, observed daily extremes; snapshot: latest radar mosaics, satellite, analyses, AQ, soil moisture; feature: station obs and normals, soundings, recon, lightning flashes, radar cell detections, reports, alerts, outlooks, places; text: forecaster text; index: climate indices, SSW." }, "limit": { "type": "integer", "description": "Rows (1-10); default 5 with query, all without." }, "query": { "type": "string", "description": "The question in the user's words (2-200 chars); omit to list." }, "domain": { "enum": [ "conus", "alaska", "hawaii", "carib", "global" ], "type": "string", "description": "Coverage filter without a place; global = no filter." }, "family": { "type": "string", "description": "Source family, describe_data's `family` (1-40 chars)." }, "location": { "type": "string", "description": "\"City, ST\", ZIP or \"lat,lon\" (up to 200 chars); not with lat/lon." } }, "additionalProperties": false }arguments 52 linesfind_tools open 16h ago
Lists the weather tools this connection does not show (best times, routes; storm cells, storm reports, lightning; outlooks, forecaster text; forecast accuracy; maps and charts), with when to use each and its required arguments. Run one with call_tool, in this session, no reconnect. With `tools`, returns their full input schemas. Free; no network call.
{ "type": "object", "properties": { "tools": { "type": "array", "items": { "type": "string", "maxLength": 64 }, "maxItems": 5, "minItems": 1, "description": "Tool names: return their full input schemas instead of the list." } } }arguments 15 linesget_status open 3h ago
Data freshness of the weather platform (no inputs needed; refreshed about every 5 minutes): overall state, per-source states (ok / degraded / outage / no_signal), open incidents with their cause (provider outage vs internal processing delay) and active provider advisories. Use it when asked whether data is current, or when other tools return stale-looking data. If a source is degraded or in outage, say the data may be stale rather than presenting it as live. Example: {}.
{ "type": "object", "properties": { "include_ok": { "type": "boolean", "default": false, "description": "true: every monitored source, healthy ones too. false (default): only sources that are not ok." } }, "additionalProperties": false }arguments 11 linesget_data unknown 10h ago
Values, totals, comparisons, best times for a purpose (`criteria`), people/POI counts, station observations, upper-air profiles, climate records, normals, degree days, teleconnection indices and forecaster text from any dataset (models, radar, alerts, outlooks, tropical cyclones, aircraft recon, reference layers) at places, over a bbox or area, along a path, or as items. `select` takes `product:variable` or `product:property`, a standard name or a concept (`population`); one space word, at most one time word (hours, start+end, at; run pins a cycle); `stats` reduces per `step` or area-wide. Example: {"select": ["temperature_2m"], "locations": ["Savannah, GA", "Macon, GA"], "hours": 36}.
{ "type": "object", "required": [ "select" ], "properties": { "at": { "type": "string", "description": "Time: one instant." }, "end": { "type": "string", "description": "Time: window end (with `start`), inclusive." }, "run": { "type": "string", "description": "Time: a model run (reference time), or `latest` (non-empty)." }, "area": { "type": "object", "properties": { "filter": { "type": "array", "items": { "type": "string", "description": "`<name> <op> <value>`, op one of == != > >= < <= in (`in`: a comma-separated list); values in request units." }, "minItems": 1, "description": "Selects the referenced product's features; the area is their union (overlaps dissolved), one result element. Per feature: feature_ids, or select the per-feature product over this area." }, "product": { "type": "string", "description": "The referenced product (one that declares query.area_as_reference), or omitted with `geometry`." }, "geometry": { "type": "object", "required": [ "type", "coordinates" ], "properties": { "type": { "const": "MultiPolygon", "description": "Always MultiPolygon." }, "coordinates": { "type": "array", "items": { "type": "array", "items": { "type": "array", "items": { "type": "array", "items": { "type": "number" }, "description": "At least 2 items; at most 3 items." }, "description": "At least 4 items." }, "minItems": 1 }, "minItems": 1, "description": "Polygons of closed [lon, lat] rings, outer ring first." } }, "description": "An inline MultiPolygon, <= 10,000 vertices; send a Polygon as a one-member MultiPolygon.", "additionalProperties": false }, "feature_id": { "type": "string", "description": "The referenced product's portable feature id (FIPS geoid, UGC zone, alert id) (non-empty)." }, "feature_ids": { "type": "array", "items": { "type": "string", "description": "Non-empty." }, "minItems": 1, "description": "Up to 25 feature ids; one result element per feature (at most 25 items)." } }, "description": "Space: a polygon by reference ({product, feature_id | feature_ids | filter}; the product must declare query.area_as_reference) or inline ({geometry}). Over a feature product, the overlay; over a grid, zonal statistics.", "additionalProperties": false }, "bbox": { "type": "array", "items": { "type": "number" }, "description": "Space: [west, south, east, north] in degrees. Items on a feature or text product; a grid needs `stats` (exactly 4 items)." }, "card": { "type": "object", "properties": { "focus": { "type": "string", "description": "ISO 8601 time inside the result's window to preselect." }, "title": { "type": "string", "description": "An answer, not a label; up to 48 characters." }, "actions": { "type": "array", "items": { "type": "object", "required": [ "label", "prompt" ], "properties": { "label": { "type": "string", "description": "Button text, up to 24 characters." }, "prompt": { "type": "string", "description": "Up to 280 characters; no links." } }, "additionalProperties": false }, "description": "Up to two follow-ups the user can tap, each sending its prompt as a new turn; never one the card answers itself." }, "threshold": { "type": "object", "required": [ "op", "value" ], "properties": { "op": { "enum": [ ">=", "<=" ], "type": "string", "description": "At or above, or at or below." }, "value": { "type": "number", "description": "In the result's units." } }, "description": "A line to preselect.", "additionalProperties": false } }, "description": "Shape the card (guide://smarterweather/views): intent only; the server fills the rest from the data. A card draws for `select: [\"forecast\"]`, the blend, at one place (weather card); `criteria` at one place (suitability); one variable, not a period total or probability, at 2-6 places in one zone over a window (compare rows); forecaster text alone (text card); alerts with no time word (banners); any other feature read (list; with `stats`, tiles); one value per variable at one place: latest, `stats` without `step`, today of up to 3 days, or up to 3 h back of an analysis or observations (tiles); one variable at one place over a window ahead, of period totals, or over 3 h (chart); over such a window, two variables at one place, exactly one a period total or probability (bars under a line); or two in one unit, neither a total nor probability (two lines); or a variable's `_pNN` percentiles, or it and its `_stddev`, hourly or daily (band); or more at one `location` with a distribution or probability: the band, else its bars, the rest in text (ranked); `locations` draws only compare rows; `path`, `cursor` or a truncated or paged series none; anything else answers in text.", "additionalProperties": false }, "path": { "type": "object", "properties": { "speed": { "type": "number", "description": "Travel speed for departure, in the request units (km/h, or mph with imperial) (> 0)." }, "times": { "type": "array", "items": { "type": "string", "description": "RFC 3339 date-time with seconds and an offset (2026-11-04T07:00:00-07:00 or 2026-11-04T14:00:00Z)." }, "description": "The time at each vertex, in vertex order (instead of departure + speed)." }, "geometry": { "type": "object", "required": [ "type", "coordinates" ], "properties": { "type": { "const": "LineString", "description": "Always LineString." }, "coordinates": { "type": "array", "items": { "type": "array", "items": { "type": "number" }, "description": "At least 2 items; at most 3 items." }, "description": "[lon, lat] positions in travel order (at least 2 items)." } }, "description": "The route as a LineString (or send polyline).", "additionalProperties": false }, "polyline": { "type": "string", "description": "The route as an encoded polyline (precision 5), instead of geometry (non-empty)." }, "departure": { "type": "string", "description": "Start time: RFC 3339 with seconds and an offset (2026-11-04T07:00:00-07:00); ETAs follow from speed." }, "departures": { "type": "array", "items": { "type": "string", "description": "RFC 3339 date-time with seconds and an offset (2026-11-04T07:00:00-07:00 or 2026-11-04T14:00:00Z)." }, "minItems": 1, "description": "Up to 3 start times to compare; one result element per departure (at most 3 items)." } }, "description": "Space: a trajectory sampled at each vertex's ETA (no time word or stats): geometry or polyline with times, or departure + speed; departures fans out one element per departure.", "additionalProperties": false }, "step": { "type": "string", "description": "Bucket size for `stats`: PT15M, PT1H, PT3H, PT6H or P1D." }, "view": { "enum": [ "concise", "detailed" ], "description": "concise (default): values and feature properties with a centroid and bbox; detailed adds simplified geometry, provenance and raw encodings." }, "hours": { "type": "integer", "description": "Time: a rolling window of this many hours (ahead for a forecast, back for an analysis) (>= 1)." }, "limit": { "type": "integer", "description": "Frames per series element (default and max 168), or features per element (max 50); next_cursor continues (>= 1)." }, "start": { "type": "string", "description": "Time: window start (with `end`), a date or RFC 3339." }, "stats": { "type": "array", "items": { "type": "string" }, "minItems": 1, "description": "Reducers per `step` bucket, over the whole window, or over the area's cells and features. `cumulative:` prefixes sum and degree_days only (a running total)." }, "units": { "enum": [ "metric", "imperial", "si" ], "default": "imperial", "description": "imperial (default), metric or si (each variable's catalog `units`)." }, "where": { "type": "array", "items": { "type": "string", "description": "`<name> <op> <value>`, op one of == != > >= < <= in (`in`: a comma-separated list); values in request units." }, "minItems": 1, "description": "Value criteria over the selected variables' standard_names, tested per sample: they mask the series, or are the predicate for windows and count reducers." }, "cursor": { "type": "string", "description": "next_cursor of the previous page, with the same arguments (non-empty)." }, "filter": { "type": "array", "items": { "type": "string", "description": "`<name> <op> <value>`, op one of == != > >= < <= in (`in`: a comma-separated list); values in request units." }, "minItems": 1, "description": "On a feature product: expressions over its filterable properties, applied before aggregation." }, "select": { "type": "array", "items": { "type": "string" }, "minItems": 1, "description": "What to read: `product:variable`, `product:*`, `product` (a feature or text product's properties), a bare standard_name (resolved in the place's domain), or `@observed:<standard_name>` / `@forecast:<standard_name>`; or alone, a derived id: `forecast` (the blend), `forecast:hourly`, `forecast:aqi` (at most 25 items)." }, "windows": { "type": "object", "properties": { "light": { "enum": [ "day", "night", "any" ], "description": "Restrict windows to daylight (day), darkness (night) or neither (any)." }, "activity": { "type": "string", "description": "What the windows are for (mow the lawn); where the server rates, only the best window in the request is rated for it (non-empty; at most 200 characters)." }, "min_hours": { "type": "integer", "description": "Shortest run of consecutive hours meeting every `where` expression (>= 1)." }, "max_windows": { "type": "integer", "description": "Most windows to return, earliest first (>= 1)." } }, "description": "Window search over `where`: consecutive runs of at least min_hours.", "additionalProperties": false }, "criteria": { "type": "array", "items": { "type": "object", "properties": { "ok": { "type": "object", "properties": { "max": { "type": "number", "description": "Upper edge." }, "min": { "type": "number", "description": "Lower edge." } }, "description": "The acceptable range, containing ideal; its edges score 0. Required with ideal.", "additionalProperties": false }, "bad": { "type": "object", "properties": { "max": { "type": "number", "description": "Upper edge." }, "min": { "type": "number", "description": "Lower edge." } }, "description": "Where the score reaches -1, outside ok. Default: as far beyond each ok edge as ideal lies inside it.", "additionalProperties": false }, "key": { "type": "string", "description": "A short handle for the result and the chart. Default: the variable's standard name, `expr_<n>` for a formula (n its 1-based position), a mask's label in snake case (else `daylight` / `hours`). Unique within the call (at most 24 characters)." }, "low": { "type": "string", "description": "The words for an hour this criterion limits from below (light wind, no new snow, cold). Default: '<label> low' (at most 16 characters)." }, "var": { "type": "string", "description": "A selected variable's standard_name (one of `select`). Exactly one of var, expr, daylight or hours_of_day." }, "expr": { "type": "string", "description": "A formula over selected standard_names: numbers, + - * /, unary minus, parentheses, abs(x), min(a, b), max(a, b); at most 32 tokens, depth 6 (wind_gusts_10m - wind_speed_10m). Its ranges are in the formula's own units; give `unit` for the chart (at most 120 characters)." }, "high": { "type": "string", "description": "The words for an hour it limits from above (gusty, too hot, cloudy). Default: '<label> high'. Not on a clock mask (at most 16 characters)." }, "must": { "type": "boolean", "description": "true (default): this criterion can make an hour unacceptable. false: a preference; it lowers the score toward 0 but never below it." }, "unit": { "type": "string", "description": "With expr: the unit word for the chart (kt, °F) (at most 12 characters)." }, "after": { "type": "string", "description": "Clock masks only: the words for a gap that starts when the hours end (after dark, after closing). Defaults: daylight sun 'after sunset', civil 'after dark', night 'after dawn'; hours_of_day 'after closing' (at most 16 characters)." }, "glyph": { "type": "string", "description": "The chart's small drawn glyph for this criterion, one of: wind, gust, rain, cloud, sun, snow, visibility, temperature. Default: from the variable's standard name; give it for a formula (a gust factor: gust) or leave it out for none." }, "ideal": { "type": "object", "properties": { "max": { "type": "number", "description": "Upper edge." }, "min": { "type": "number", "description": "Lower edge." } }, "description": "The range that scores +1. An absent side is open (ideal: {max: 30} is 'the lower the better, 30 or less is ideal').", "additionalProperties": false }, "label": { "type": "string", "description": "Words for people (Wind, Fresh snow). Default: the variable's catalog title, else the key humanized (at most 24 characters)." }, "before": { "type": "string", "description": "Clock masks only: the words for a gap that ends when the hours begin (before dawn, before opening). Defaults: daylight sun 'before sunrise', civil 'before dawn', night 'before dusk'; hours_of_day 'before opening' (at most 16 characters)." }, "source": { "enum": [ "model", "user", "memory" ], "description": "Who asked for it: the model's own judgment (default), the user's stated preference, or a remembered preference; carried through to the chart's attribution." }, "window": { "type": "object", "required": [ "hours", "reduce" ], "properties": { "hours": { "type": "integer", "description": "Hours, up to 72 (>= 1)." }, "reduce": { "enum": [ "sum", "mean", "max", "min" ], "description": "How the hours combine." } }, "description": "Score a trailing reduction instead of the sample: the sum, mean, max or min over the `hours` ending at the sample (24 h snowfall: {hours: 24, reduce: sum}). The read looks back over the variable's observed product for the first samples where one serves the place; where none does, those samples have no score.", "additionalProperties": false }, "utility": { "type": "array", "items": { "type": "array", "items": { "type": "number" }, "description": "Exactly 2 items." }, "description": "The general form instead of the ranges: control points [value, score] with values ascending and scores from -1 to 1; linear between, flat beyond the ends. Several ranges, two peaks, any direction: [[0,-1],[6,0],[10,1],[18,1],[24,0],[35,-1]] (at least 2 items; at most 8 items)." }, "daylight": { "enum": [ "sun", "civil", "night" ], "description": "A mask, not a score: hours between the place's sunrise and sunset (sun), civil dawn and dusk (civil), or sunset and sunrise (night) are scored; the rest are unscored (a gap, never poor), read from the sun times at the place, no select needed. A sample counts as inside when more than half of it is. A day without a sunrise or sunset (polar) is unscored. Takes no ranges or must; `before` and `after` name its gaps." }, "hours_of_day": { "type": "object", "required": [ "from", "to" ], "properties": { "to": { "type": "string", "description": "Pattern ^([01]\\d|2[0-3]):[0-5]\\d$." }, "from": { "type": "string", "description": "Pattern ^([01]\\d|2[0-3]):[0-5]\\d$." } }, "description": "A mask on the local clock: hours from `from` to `to` (HH:MM, the place's zone; a span past midnight wraps) are scored, the rest unscored (a gap, never poor); a sample counts as inside when more than half of it is. Operating hours (lifts 08:30-16:00, a pool's hours). Takes no ranges or must; `before` and `after` name its gaps.", "additionalProperties": false } }, "additionalProperties": false }, "description": "What makes an hour good or bad for the caller's purpose: one entry per condition over the selected variables. Each scores every sample from +1 (ideal) through 0 (the acceptable limit) to -1 (unacceptable); the result's `suitability` block carries the per-criterion scores, the combined score (the minimum over the `must` criteria; a `must: false` criterion lowers the score but never below 0), the limiting criterion per sample, the windows of acceptable hours (at least windows.min_hours, default 2; windows.max_windows caps them, windows.activity names the purpose) and the best one. Say the ranges in request units. Send location or locations. With criteria, windows.light is refused: use a daylight criterion (at most 8 items)." }, "location": { "type": "string", "description": "Space: one place (place text, ZIP or `lat,lon`). EDR position; `nearest` on a feature product (non-empty)." }, "locations": { "type": "array", "items": { "type": "string", "description": "Non-empty." }, "minItems": 1, "description": "Space: up to 25 places; one result element per place (at most 25 items)." } }, "additionalProperties": false }arguments 497 linesget_current_conditions reads unknown 10h ago
Current weather right now at a place: the observed analysis at the exact point (temperature, dew point, relative humidity derived from them, wind speed, direction and gusts, pressure, visibility, cloud cover) plus the nearest station report. Values are in `units` (imperial by default; labels in analysis.units); nearest_station is the report as filed, with its distance in meters, and a forecast is get_forecast. Example: {"location": "Pella, IA"}.
{ "type": "object", "required": [ "location" ], "properties": { "card": { "type": "object", "properties": { "focus": { "type": "string", "description": "ISO 8601 time inside the result's window to preselect." }, "title": { "type": "string", "description": "An answer, not a label; up to 48 characters." }, "actions": { "type": "array", "items": { "type": "object", "required": [ "label", "prompt" ], "properties": { "label": { "type": "string", "description": "Button text, up to 24 characters." }, "prompt": { "type": "string", "description": "Up to 280 characters; no links." } }, "additionalProperties": false }, "description": "Up to two follow-ups the user can tap, each sending its prompt as a new turn; never one the card answers itself." }, "threshold": { "type": "object", "required": [ "op", "value" ], "properties": { "op": { "enum": [ ">=", "<=" ], "type": "string", "description": "At or above, or at or below." }, "value": { "type": "number", "description": "In the result's units." } }, "description": "A line to preselect.", "additionalProperties": false } }, "description": "Shape the card (guide://smarterweather/views): intent only; the server fills the rest from the data.", "additionalProperties": false }, "units": { "enum": [ "metric", "imperial", "si" ], "default": "imperial", "description": "imperial (default), metric or si (each variable's catalog `units`)." }, "location": { "type": "string", "description": "Space: one place (place text, ZIP or `lat,lon`). EDR position; `nearest` on a feature product (non-empty)." } }, "additionalProperties": false }arguments 82 linesget_observed_precipitation reads unknown 7h ago
How much rain fell: observed precipitation totals at a place over trailing 1 to 72 h windows (`hours`, default 24), or ending at a past time (`end` with `start`), from radar estimates bias-corrected to rain gauges. Values have about 0.08 in (2 mm) resolution, so 0 means under about 0.04 in, and data runs about an hour behind; `product: nowcast` adds the next hour's radar nowcast (peak intensity, type and start, not an amount). Example: {"location": "Chicago, IL", "hours": 24}.
{ "type": "object", "required": [ "location" ], "properties": { "at": { "type": "string", "description": "Time: one instant." }, "end": { "type": "string", "description": "Time: window end (with `start`), inclusive." }, "card": { "type": "object", "properties": { "focus": { "type": "string", "description": "ISO 8601 time inside the result's window to preselect." }, "title": { "type": "string", "description": "An answer, not a label; up to 48 characters." }, "actions": { "type": "array", "items": { "type": "object", "required": [ "label", "prompt" ], "properties": { "label": { "type": "string", "description": "Button text, up to 24 characters." }, "prompt": { "type": "string", "description": "Up to 280 characters; no links." } }, "additionalProperties": false }, "description": "Up to two follow-ups the user can tap, each sending its prompt as a new turn; never one the card answers itself." }, "threshold": { "type": "object", "required": [ "op", "value" ], "properties": { "op": { "enum": [ ">=", "<=" ], "type": "string", "description": "At or above, or at or below." }, "value": { "type": "number", "description": "In the result's units." } }, "description": "A line to preselect.", "additionalProperties": false } }, "description": "Shape the card (guide://smarterweather/views): intent only; the server fills the rest from the data.", "additionalProperties": false }, "hours": { "type": "integer", "default": 24, "description": "Time: a rolling window of this many hours (ahead for a forecast, back for an analysis) (>= 1)." }, "start": { "type": "string", "description": "Time: window start (with `end`), a date or RFC 3339." }, "units": { "enum": [ "metric", "imperial", "si" ], "default": "imperial", "description": "imperial (default), metric or si (each variable's catalog `units`)." }, "product": { "enum": [ "observed", "nowcast" ], "type": "string", "description": "Which product to read: one of observed, nowcast (default observed)." }, "location": { "type": "string", "description": "Space: one place (place text, ZIP or `lat,lon`). EDR position; `nearest` on a feature product (non-empty)." } }, "additionalProperties": false }arguments 107 linesget_forecast_distribution reads unknown 10h ago
Probabilistic forecast guidance for one aspect, from severe risk to aviation ceilings: percentiles (p10 to p90), exceedance probabilities and ensemble spread, for the odds, ranges or confidence one forecast value cannot answer. Read p50 as the likely outcome, p90 as the reasonable worst case when the risk is the high end (snow, wind, rain) and p10 when it is the low end (cold, visibility, ceiling). Aspects: precip, snow, ice, temperature (daily high and low ranges), wind, severe (thunderstorm and severe-environment odds; SPC tornado, hail and wind odds are get_outlooks (guidance)), aviation (ceiling and visibility odds) and confidence (spread). Example: {"location": "Denver, CO", "aspect": "snow", "hours": 72}.
{ "type": "object", "required": [ "location", "aspect" ], "properties": { "card": { "type": "object", "properties": { "focus": { "type": "string", "description": "ISO 8601 time inside the result's window to preselect." }, "title": { "type": "string", "description": "An answer, not a label; up to 48 characters." }, "actions": { "type": "array", "items": { "type": "object", "required": [ "label", "prompt" ], "properties": { "label": { "type": "string", "description": "Button text, up to 24 characters." }, "prompt": { "type": "string", "description": "Up to 280 characters; no links." } }, "additionalProperties": false }, "description": "Up to two follow-ups the user can tap, each sending its prompt as a new turn; never one the card answers itself." }, "threshold": { "type": "object", "required": [ "op", "value" ], "properties": { "op": { "enum": [ ">=", "<=" ], "type": "string", "description": "At or above, or at or below." }, "value": { "type": "number", "description": "In the result's units." } }, "description": "A line to preselect.", "additionalProperties": false } }, "description": "Shape the card (guide://smarterweather/views): intent only; the server fills the rest from the data.", "additionalProperties": false }, "hours": { "type": "integer", "default": 72, "description": "Time: a rolling window of this many hours (ahead for a forecast, back for an analysis) (>= 1)." }, "units": { "enum": [ "metric", "imperial", "si" ], "default": "imperial", "description": "imperial (default), metric or si (each variable's catalog `units`)." }, "aspect": { "enum": [ "precip", "aviation", "confidence", "ice", "severe", "snow", "temperature", "wind" ], "type": "string", "description": "Which aspect to read: one of precip, aviation, confidence, ice, severe, snow, temperature, wind." }, "location": { "type": "string", "description": "Space: one place (place text, ZIP or `lat,lon`). EDR position; `nearest` on a feature product (non-empty)." } }, "additionalProperties": false }arguments 102 linesdescribe_data unknown 7h ago
A dataset's variables or properties (standard names, units, categories, bands, aggregates), horizon, step, cadence, freshness, cost class, verified `examples` and an example_query to read its values; a map layer's axes (source, region, facts) and render (visual) call. Free. Call it when a grid or snapshot hit's `call` lacks the variable you need (with no `variable`, it may read only the headline one), or to check units, horizon or cost; not needed when the hit's `call` already names what you need: run that. Example: {"dataset_id": "<from search_data>"}.
{ "type": "object", "required": [ "dataset_id" ], "properties": { "dataset_id": { "type": "string", "description": "A dataset id from search_data or get_data (1-80 chars)." } }, "additionalProperties": false }arguments 13 linesget_context unknown 13m ago
Where a place is and what time it is there. `query` (a name, ZIP, venue or address) or `lat`+`lon` to ranked `candidates` with lat/lon, timezone and `type` place|zip|address|poi|county|station; `time`: `utc` and, per distinct zone among the candidates, its local time and a 14-day calendar (join on `timezone`). Sun and moon are get_data reads. Example: {"lat": 39.74, "lon": -104.99} -> Denver, America/Denver.
{ "type": "object", "properties": { "lat": { "type": "number", "description": "Latitude (-90 to 90), with lon; not with query." }, "lon": { "type": "number", "description": "Longitude (-180 to 180), with lat." }, "fuzzy": { "type": "boolean", "description": "Query only: autosuggest for partial or misspelled input. Default false." }, "limit": { "type": "integer", "description": "Query only: how many candidates (1-10). Default 5." }, "query": { "type": "string", "description": "Place name, ZIP or venue/address (1-200 characters); not with lat/lon." }, "include": { "type": "array", "items": { "enum": [ "boundaries" ], "type": "string" }, "description": "boundaries: each row's state, county and zone ids for get_data's area." }, "near_lat": { "type": "number", "description": "Query only: rank near this point (-90 to 90); with near_lon." }, "near_lon": { "type": "number", "description": "Longitude of near_lat (-180 to 180)." } }, "additionalProperties": false }arguments 44 linesfind_places unknown 16h ago
Find places: a name, ZIP, venue or address to ranked candidates with lat/lon, or coordinates to the place and timezone. Pass `query` or `lat`+`lon`; rows carry `type` place|zip|address|poi|county|station, `matched_via: "autosuggest"` marks fallback rows and `partial` a timed-out section. Weather tools take `location`; use this to disambiguate or name a point. Example: {"lat": 39.74, "lon": -104.99} -> Denver, Colorado, America/Denver.
{ "type": "object", "properties": { "lat": { "type": "number", "description": "Latitude (-90 to 90), with lon; not with query." }, "lon": { "type": "number", "description": "Longitude (-180 to 180), with lat." }, "fuzzy": { "type": "boolean", "description": "Query only: autosuggest for partial or misspelled input. Default false." }, "limit": { "type": "integer", "description": "Query only: how many candidates (1-10). Default 5." }, "query": { "type": "string", "description": "Place name, ZIP or venue/address (1-200 characters); not with lat/lon." }, "include": { "type": "array", "items": { "enum": [ "boundaries" ], "type": "string" }, "description": "boundaries: each row's state, county and zone ids for get_data's area." }, "near_lat": { "type": "number", "description": "Query only: rank near this point (-90 to 90); with near_lon." }, "near_lon": { "type": "number", "description": "Longitude of near_lat (-180 to 180)." } }, "additionalProperties": false }arguments 44 linescall_tool unknown 13h ago
Runs a tool find_tools lists, by name: same price, limits and result as calling it directly. Tools already in your list are called directly, not through this. `arguments` follows that tool's input schema.
{ "type": "object", "required": [ "tool" ], "properties": { "tool": { "type": "string", "maxLength": 64, "minLength": 1, "description": "Tool name, from find_tools." }, "arguments": { "type": "object", "properties": {}, "description": "That tool's arguments.", "additionalProperties": {} } }, "additionalProperties": false }arguments 21 linesget_time_context reads unknown 7h ago
Local time, timezone, a 14-day calendar with day names and Today/Tomorrow labels, sunrise, sunset and solar times, and moon phase and rise and set for a place. Use it to reason about dates, times or daylight there ("when is sunset?", "is it dark there now?"); when current_time.timezone_resolved is false, state times in UTC. Example: {"location": "Seattle, WA"}.
{ "type": "object", "required": [ "location" ], "properties": { "card": { "type": "object", "properties": { "focus": { "type": "string", "description": "ISO 8601 time inside the result's window to preselect." }, "title": { "type": "string", "description": "An answer, not a label; up to 48 characters." }, "actions": { "type": "array", "items": { "type": "object", "required": [ "label", "prompt" ], "properties": { "label": { "type": "string", "description": "Button text, up to 24 characters." }, "prompt": { "type": "string", "description": "Up to 280 characters; no links." } }, "additionalProperties": false }, "description": "Up to two follow-ups the user can tap, each sending its prompt as a new turn; never one the card answers itself." }, "threshold": { "type": "object", "required": [ "op", "value" ], "properties": { "op": { "enum": [ ">=", "<=" ], "type": "string", "description": "At or above, or at or below." }, "value": { "type": "number", "description": "In the result's units." } }, "description": "A line to preselect.", "additionalProperties": false } }, "description": "Shape the card (guide://smarterweather/views): intent only; the server fills the rest from the data.", "additionalProperties": false }, "location": { "type": "string", "description": "Space: one place (place text, ZIP or `lat,lon`). EDR position; `nearest` on a feature product (non-empty)." } }, "additionalProperties": false }arguments 73 lines
This deployment has no calling key, so nothing can be run from here. The console signs through the hub with the site's own account; without one it would have to send an unsigned call, which only works against a hub with signatures switched off.
Nobody has claimed this listing. Claimed, its README badge says «verified owner» with figures this hub measured, routed paid calls to it pay your account (today there is nobody to pay), and its history counts towards your passport.
- Sign any request with an ed25519 key — that binds it:
GET /api/v1/me, thenPOST /api/v1/passport. - Prove it is yours. Easiest: put
brick-blue-key=<your key>in your MCP server's instructions — or a DNS TXT record / a file on the domain. - Ask the hub to check:
POST /api/v1/passport/claim-endpointwith this listing's id3a1559994cb77ccc.
Every step, filled in for this listing: https://brick.blue/api/v1/agents/3a1559994cb77ccc/claim.
Over MCP: the claim_endpoint tool.
[](https://brick.blue/agent/3a1559994cb77ccc?ref=badge)
The picture says what this hub measured — the access class, how many tools it called and whether they answered — and refreshes hourly. Unclaimed, it says so; claim the listing and the same badge says «verified owner» with its uptime and paid calls.
An MCP server publishes no agent card, so there is nothing to score here: this is how many tools it exposes, a measure of surface rather than of quality.
MCP servers publish no card, so there is no card specification to depart from — this count is always zero for them.
Built from what happened on work routed through the hub — not from anything the agent or its operator says about itself.
- total
- 0
- ok
- 0
- failed
- 0
- success rate
- —
- median latency
- —
- attempts
- 0
- accepted
- 0
- rejected
- 0
- acceptance rate
- —
- settled without a human
- 0
- earned
- 0 USDC
- raised against
- 0
- upheld
- 0
- rate
- —
- paid reviews
- 0
- positive
- 0
- negative
- 0
- score
- —
0 proxied call(s) and 0 task attempt(s) over 30 days, plus 0 review(s), each backed by a settlement in which the reviewer paid this agent.
Served from the same domain, which is what was measured. Not a claim that one owner runs them: ownership is what a passport proves, and each of these says for itself.
- mcp.developers.smarterweather.com sw-onboarding