{"apiVersion":"v1","directorySlug":"smarterweather-mcp-e53f49ce31","title":"Smarter Weather","description":"Understand the impact of weather on every person and organization. Proactive, personalized, trusted guidance.","pageUrl":"https://www.mcpbundles.com/skills/smarterweather-mcp-e53f49ce31","connectPath":"importable","connectAction":"import_server","catalogListing":false,"bundleSlug":null,"listingKind":"remote_mcp","kind":"provider","transportUrl":"https://mcp.smarterweather.com/","hostedMcpUrl":null,"toolCount":33,"toolInventoryStatus":"observed","refreshedAt":"2026-11-03T13:26:00.516172+00:00","registryName":"com.smarterweather/smarterweather-mcp-e53f49ce31","registryVersion":"2026.11.3","registryEligible":true,"tools":[{"name":"get_forecast","description":"Complete weather overview for a location: current conditions, daily forecast (day/night periods, SPC threats, severity, CAPE, UV), active alerts, and convective outlooks in one call. Data is pre-aggregated across NBM, HRRR, GFS, RTMA, and SPC and unit-converted server-side. This is the primary weather tool; reach for lower-level tools only when you need raw observations or a specific dataset. Accepts a place name directly. Examples: {\"location\": \"Denver\"} or {\"location\": \"Portland, OR\", \"days\":","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"lat":{"type":"number","maximum":90,"minimum":-90},"lon":{"type":"number","maximum":180,"minimum":-180},"days":{"type":"integer","default":10,"maximum":14,"minimum":1},"units":{"enum":["imperial","metric","si"],"type":"string","default":"imperial"},"include":{"type":"string","default":"current,daily,alerts,outlooks"},"location":{"type":"string","maxLength":200,"minLength":1},"detail_level":{"enum":["standard","detailed"],"type":"string","default":"standard"}},"additionalProperties":false},"title":"Get forecast","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_forecast","displayName":"Get forecast"},{"name":"get_hourly_forecast","description":"Blended hourly forecast: temperature, feels-like, humidity, wind, precipitation probability/amount, conditions, and icon per hour. Snapped to the current hour so hourly[0] is \"now\". Timestamps are UTC ISO 8601; convert to the local timezone before presenting. Ask for the days you need up front -- one call with days: 4 beats four calls. ALWAYS check hourly_coverage before answering about a specific hour: it reports first_time and last_time (the window the rows actually span), sample_interval_hour","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"lat":{"type":"number","maximum":90,"minimum":-90},"lon":{"type":"number","maximum":180,"minimum":-180},"days":{"type":"integer","default":2,"maximum":7,"minimum":1},"units":{"enum":["imperial","metric","si"],"type":"string","default":"imperial"},"hours_to":{"type":"integer","maximum":168,"minimum":1},"location":{"type":"string","maxLength":200,"minLength":1},"hours_from":{"type":"integer","maximum":168,"minimum":0},"detail_level":{"enum":["standard","detailed"],"type":"string","default":"standard"}},"additionalProperties":false},"title":"Get hourly forecast","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_hourly_forecast","displayName":"Get hourly forecast"},{"name":"search_locations","description":"Resolve a place query to candidate locations with coordinates. Accepts city names (\"Denver\"), city+state (\"Portland, OR\" via query), ZIP codes (\"50219\"), or partial input with fuzzy=true for autosuggest-style matching (\"bost\" -> Boston). Returns ranked candidates with lat/lon. Most weather tools accept a `location` string directly and geocode internally -- use this tool only to disambiguate (\"which Springfield?\") or to present location choices to the user. Example: {\"query\": \"Springfield\"} retur","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["query"],"properties":{"fuzzy":{"type":"boolean","default":false},"limit":{"type":"integer","default":5,"maximum":10,"minimum":1},"query":{"type":"string","maxLength":200,"minLength":1}},"additionalProperties":false},"title":"Search locations","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"search_locations","displayName":"Search locations"},{"name":"reverse_geocode","description":"Resolve coordinates to a human-readable place (city, state, county, timezone). Use when you have lat/lon but need a display name or the local timezone. Example: {\"lat\": 39.74, \"lon\": -104.99} -> Denver, Colorado, America/Denver.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["lat","lon"],"properties":{"lat":{"type":"number","maximum":90,"minimum":-90},"lon":{"type":"number","maximum":180,"minimum":-180}},"additionalProperties":false},"title":"Reverse geocode","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"reverse_geocode","displayName":"Reverse geocode"},{"name":"get_alerts","description":"NWS watches, warnings, advisories. Point (city/ZIP/lat+lon): containing polygons. BBox or US state/DC/CONUS (codes, full names, US/national): intersecting polygons. A city miss is not a statewide all-clear — query the state or a bbox; never say regional inventory is impossible. NY/WA and \"New York State\"/\"Washington State\" are states; \"New York\"/\"Washington\" stay cities. Omit at for now; at (ISO-8601 UTC) is the snapshot then. Empty = all-clear or purged (~24h). alert_id = detail+geometry, ignor","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"at":{"type":"string"},"lat":{"type":"number","maximum":90,"minimum":-90},"lon":{"type":"number","maximum":180,"minimum":-180},"bbox":{"type":"object","required":["west","south","east","north"],"properties":{"east":{"$ref":"#/properties/lon"},"west":{"$ref":"#/properties/lon"},"north":{"$ref":"#/properties/lat"},"south":{"$ref":"#/properties/lat"}},"additionalProperties":false},"events":{"type":"array","items":{"type":"string"}},"alert_id":{"type":"string"},"location":{"type":"string","maxLength":200,"minLength":1}},"additionalProperties":false},"title":"Get NWS alerts","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_alerts","displayName":"Get NWS alerts"},{"name":"get_time_context","description":"Complete temporal context for a location: local time, timezone, 14-day calendar with day names and Today/Tomorrow offsets, sunrise/sunset/solar times (from the weather pipeline's astro product), and moon phase. Use whenever you need to reason about dates, times, or daylight for a location -- including \"what time is sunset?\", \"is it dark there now?\", or \"what day of the week is the 4th-day forecast?\". Accepts a place name directly. Example: {\"location\": \"Seattle\"}.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"lat":{"type":"number","maximum":90,"minimum":-90},"lon":{"type":"number","maximum":180,"minimum":-180},"location":{"type":"string","maxLength":200,"minLength":1}},"additionalProperties":false},"title":"Get time context","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_time_context","displayName":"Get time context"},{"name":"get_period_totals","description":"Aggregate a weather variable over one or more time periods. Returns server-computed totals, maxima, minima, or averages per period. Period start/end times should use the user's local timezone boundaries (not UTC midnight). Response includes the converted value and unit per period. Ideal for questions like \"total rainfall today and tomorrow\" or \"peak wind speed this weekend\". Accepts a place name directly. Example: {\"location\": \"Portland, OR\", \"variable\": \"precipitation\", \"aggregation\": \"sum\", \"p","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["variable","periods"],"properties":{"lat":{"type":"number","maximum":90,"minimum":-90},"lon":{"type":"number","maximum":180,"minimum":-180},"units":{"enum":["imperial","metric","si"],"type":"string","default":"imperial"},"periods":{"type":"array","items":{"type":"object","required":["start","end"],"properties":{"end":{"type":"string"},"label":{"type":"string"},"start":{"type":"string"}},"additionalProperties":false},"maxItems":14,"minItems":1},"location":{"type":"string","maxLength":200,"minLength":1},"variable":{"type":"string"},"dataset_id":{"type":"string","maxLength":80,"minLength":1},"aggregation":{"enum":["sum","max","min","avg"],"type":"string","default":"sum"}},"additionalProperties":false},"title":"Get period totals","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_period_totals","displayName":"Get period totals"},{"name":"compare_locations","description":"Compare forecast variables across multiple locations side-by-side in one batched call. Returns a distilled per-location series matrix for direct comparison -- prefer this over N sequential forecast calls. Locations accept place names directly. Example: {\"locations\": [{\"location\": \"Denver\"}, {\"location\": \"Boulder, CO\"}], \"variables\": [\"temperature_2m\", \"precipitation_probability\"], \"hours\": 48}.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["locations","variables"],"properties":{"hours":{"type":"integer","default":24,"maximum":168,"minimum":1},"locations":{"type":"array","items":{"type":"object","properties":{"lat":{"type":"number","maximum":90,"minimum":-90},"lon":{"type":"number","maximum":180,"minimum":-180},"label":{"type":"string"},"location":{"type":"string"}},"additionalProperties":false},"maxItems":10,"minItems":2},"variables":{"type":"array","items":{"type":"string"},"maxItems":10,"minItems":1},"dataset_id":{"type":"string","maxLength":80,"minLength":1}},"additionalProperties":false},"title":"Compare locations","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"compare_locations","displayName":"Compare locations"},{"name":"find_best_window","description":"Find the optimal time window for an activity based on weather criteria. Scans the forecast and returns daylight-aware periods matching all conditions. Criteria are expressed in the selected `units` system (default imperial: °F, mph, miles, feet). Example: {\"location\": \"Boulder, CO\", \"criteria\": {\"min_temperature\": 55, \"max_wind_speed\": 15, \"max_precipitation_probability\": 20}, \"hours\": 72, \"activity_duration_hours\": 3}.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["criteria"],"properties":{"lat":{"type":"number","maximum":90,"minimum":-90},"lon":{"type":"number","maximum":180,"minimum":-180},"hours":{"type":"integer","default":72,"maximum":168,"minimum":1},"units":{"enum":["imperial","metric","si"],"type":"string","default":"imperial"},"activity":{"type":"string","maxLength":200},"criteria":{"type":"object","properties":{"min_ceiling":{"type":"number"},"max_wind_gust":{"type":"number"},"max_wind_speed":{"type":"number"},"min_visibility":{"type":"number"},"max_temperature":{"type":"number"},"min_temperature":{"type":"number"},"max_precipitation_probability":{"type":"number","maximum":100,"minimum":0}},"additionalProperties":false},"location":{"type":"string","maxLength":200,"minLength":1},"daylight_only":{"type":"boolean","default":true},"activity_duration_hours":{"type":"integer","default":2,"maximum":24,"minimum":1}},"additionalProperties":false},"title":"Find best weather window","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"find_best_window","displayName":"Find best weather window"},{"name":"get_outlooks","description":"Hazard outlooks affecting a location. hazard=severe returns SPC convective outlooks (Day 1-8 categorical risk + tornado/wind/hail probabilities); hazard=fire returns SPC fire weather outlooks; hazard=rain returns WPC Excessive Rainfall Outlook polygons (days 1-3); hazard=heat returns the NWS HeatRisk index at the point (0 none .. 4 extreme, days 1-3). include_narrative=true adds the forecaster discussion for severe (SWO), fire (FWD), or rain (QPF/QPFERD; one PIL for all days). An empty result me","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"day":{"type":"integer","default":1,"maximum":8,"minimum":1},"lat":{"type":"number","maximum":90,"minimum":-90},"lon":{"type":"number","maximum":180,"minimum":-180},"hazard":{"enum":["severe","fire","rain","heat"],"type":"string","default":"severe"},"location":{"type":"string","maxLength":200,"minLength":1},"include_narrative":{"type":"boolean","default":false}},"additionalProperties":false},"title":"Get hazard outlooks","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_outlooks","displayName":"Get hazard outlooks"},{"name":"get_forecast_discussion","description":"Expert forecaster text products. type=afd: Area Forecast Discussion. type=hwo: Hazardous Weather Outlook. type=now: WFO short-term NOW. type=fwf/hls/esf: local fire weather / hurricane local statement / hydrologic discussion. type=mcd: SPC Mesoscale Discussion. type=mpd: WPC Mesoscale Precipitation Discussion (flash flood). type=swo/fwd/ero: national outlook discussions. type=tcd/tcp/tcm/twd/two: NHC tropical text (type=two is the text TWO, not GIS nhc_two). type=pmd: WPC/CPC desk discussion (pa","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["type"],"properties":{"day":{"type":"integer","default":1,"maximum":8,"minimum":1},"lat":{"type":"number","maximum":90,"minimum":-90},"lon":{"type":"number","maximum":180,"minimum":-180},"wfo":{"type":"string","maxLength":4,"minLength":3},"type":{"enum":["afd","hwo","now","fwf","hls","esf","mcd","mpd","swo","fwd","ero","tcd","tcp","tcm","twd","two","pmd","pwo"],"type":"string"},"limit":{"type":"integer","default":1,"maximum":10,"minimum":1},"awips_id":{"type":"string","maxLength":12,"minLength":3},"location":{"type":"string","maxLength":200,"minLength":1},"summary_only":{"type":"boolean","default":false}},"additionalProperties":false},"title":"Get forecast discussion","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_forecast_discussion","displayName":"Get forecast discussion"},{"name":"get_storm_reports","description":"Recent NWS Local Storm Reports (LSRs) -- verified reports of tornadoes, hail, damaging winds, flooding near a location. Use to confirm severe weather occurrence or assess reported damage. valid_time is event occurrence (UTC); cite in local time. Example: {\"location\": \"Wichita\", \"hours\": 12, \"type\": \"H\"}.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"lat":{"type":"number","maximum":90,"minimum":-90},"lon":{"type":"number","maximum":180,"minimum":-180},"type":{"type":"string"},"hours":{"type":"integer","default":6,"maximum":24,"minimum":1},"location":{"type":"string","maxLength":200,"minLength":1}},"additionalProperties":false},"title":"Get storm reports","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_storm_reports","displayName":"Get storm reports"},{"name":"get_lightning_activity","description":"Real-time lightning near a location: GLM satellite flash count (30km/10min) and MRMS ground-truth lightning density + 30-minute probability. The summary field is ready-to-use. A zero flash count means no lightning inside that window -- report it as a quiet observation scoped to the window in `scope`, never as a data gap. Only call when storms may be active or the user asks about lightning. Example: {\"location\": \"Tampa\"}.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"lat":{"type":"number","maximum":90,"minimum":-90},"lon":{"type":"number","maximum":180,"minimum":-180},"location":{"type":"string","maxLength":200,"minLength":1}},"additionalProperties":false},"title":"Get lightning activity","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_lightning_activity","displayName":"Get lightning activity"},{"name":"get_sounding","description":"Nearest RAOB (radiosonde) vertical soundings to a point. Each sounding carries: profile (pressure-indexed thermodynamics: pressure_hpa, height_m, temperature_c, dewpoint_c, wind arrays), wind_profile (height-indexed winds for hodographs/shear), and derived indices (sbcape/mucape/mlcape + cin, lifted_index, k_index, total_totals, pwat_mm, freezing_level_m, lcl/lfc/el, bulk_shear_0_6km_kt). Soundings launch at 00Z/12Z so data can be hours old. Example: {\"location\": \"Norman, OK\"}.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"n":{"type":"integer","default":1,"maximum":5,"minimum":1},"lat":{"type":"number","maximum":90,"minimum":-90},"lon":{"type":"number","maximum":180,"minimum":-180},"location":{"type":"string","maxLength":200,"minLength":1}},"additionalProperties":false},"title":"Get radiosonde sounding","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_sounding","displayName":"Get radiosonde sounding"},{"name":"get_forecast_distribution","description":"Probabilistic forecast guidance from NBM for one aspect of the weather: percentile ranges (p10-p90), exceedance probabilities, and ensemble spread. Use this for any question about odds, ranges, potential or confidence (\"how much could we get\", \"worst case for the wind\", \"how sure is this\") -- a deterministic forecast value cannot answer one. Reading the percentiles: p50 is the most likely outcome, p90 is the reasonable worst case when the risk is the high end (snow totals, wind, rainfall), and p","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["aspect"],"properties":{"lat":{"type":"number","maximum":90,"minimum":-90},"lon":{"type":"number","maximum":180,"minimum":-180},"hours":{"type":"integer","maximum":264,"minimum":1},"aspect":{"enum":["precip","snow","ice","temperature","wind","severe","aviation","confidence"],"type":"string"},"location":{"type":"string","maxLength":200,"minLength":1}},"additionalProperties":false},"title":"Get forecast distribution","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_forecast_distribution","displayName":"Get forecast distribution"},{"name":"get_current_conditions","description":"Current weather right now at a location from two independent sources in one call: the RTMA gridded analysis (exact-point values, updated sub-hourly) and the nearest METAR station observation (ground truth with raw METAR, flight category). Use the analysis for point-accurate values and the station for verification. For a forecast, use get_forecast. Example: {\"location\": \"Pella, IA\"}.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"lat":{"type":"number","maximum":90,"minimum":-90},"lon":{"type":"number","maximum":180,"minimum":-180},"location":{"type":"string","maxLength":200,"minLength":1}},"additionalProperties":false},"title":"Get current conditions","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_current_conditions","displayName":"Get current conditions"},{"name":"get_observations","description":"METAR surface observations from weather stations: temperature, wind, visibility, ceiling, flight category, raw METAR. Nearest mode (default) returns the closest N stations to a location; station mode returns history for a specific ICAO identifier. Examples: {\"location\": \"Denver\", \"n\": 3} or {\"station\": \"KJFK\", \"hours\": 6}.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"n":{"type":"integer","default":1,"maximum":10,"minimum":1},"lat":{"type":"number","maximum":90,"minimum":-90},"lon":{"type":"number","maximum":180,"minimum":-180},"hours":{"type":"integer","maximum":24,"minimum":1},"station":{"type":"string","maxLength":4,"minLength":3},"location":{"type":"string","maxLength":200,"minLength":1}},"additionalProperties":false},"title":"Get station observations","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_observations","displayName":"Get station observations"},{"name":"list_datasets","description":"Discover the datasets (model grids, analyses, observations) available at a location, with per-dataset freshness (data age, latest model run). Datasets vary by domain (CONUS/Alaska/Hawaii). Use this to find dataset_id values for query_dataset and describe_dataset, or to assess whether data is current before making decisions. Example: {\"location\": \"Anchorage\"}.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"lat":{"type":"number","maximum":90,"minimum":-90},"lon":{"type":"number","maximum":180,"minimum":-180},"location":{"type":"string","maxLength":200,"minLength":1},"include_freshness":{"type":"boolean","default":true}},"additionalProperties":false},"title":"List datasets","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"list_datasets","displayName":"List datasets"},{"name":"describe_dataset","description":"Variables available in a dataset, with standard names, units, descriptions, and the time range of available data. Use before query_dataset to discover valid variable names. Example: {\"dataset_id\": \"nbm_conus\"}.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["dataset_id"],"properties":{"dataset_id":{"type":"string","maxLength":80,"minLength":1}},"additionalProperties":false},"title":"Describe dataset","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"describe_dataset","displayName":"Describe dataset"},{"name":"query_dataset","description":"Raw time series from a specific dataset for specific variables at a point. Power-user access to any gridded product (NBM, HRRR, RRFS, GFS, RTMA, MRMS, air quality, ...). Time modes: hours (next N hours, default 24), time_start+time_end (explicit ISO-8601 window), or latest=true (single most-recent value). reference_time pins a specific model run, and each returned series reports the run that served it (reference_time, or reference_times when a series mixes runs) — check it before comparing two r","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["variables"],"properties":{"lat":{"type":"number","maximum":90,"minimum":-90},"lon":{"type":"number","maximum":180,"minimum":-180},"hours":{"type":"integer","maximum":264,"minimum":1},"latest":{"type":"boolean","default":false},"location":{"type":"string","maxLength":200,"minLength":1},"time_end":{"type":"string"},"variables":{"type":"array","items":{"type":"string"},"maxItems":20,"minItems":1},"dataset_id":{"type":"string","maxLength":80,"minLength":1},"time_start":{"type":"string"},"reference_time":{"type":"string"}},"additionalProperties":false},"title":"Query dataset","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"query_dataset","displayName":"Query dataset"},{"name":"get_growing_degree_days","description":"Growing Degree Units (GDU / GDD) for a US location (CONUS, Alaska, Hawaii), computed from daily max/min temperatures. Pass a crop id (e.g. \"corn\", \"soybean\", \"wheat\") to use calibrated base/upper thresholds, or crop=\"custom\" with base_temp_c (and optional upper_temp_c / method). Without season_start you get per-day GDU across the forecast horizon; WITH season_start (YYYY-MM-DD) you get the cumulative season-to-date total (observed history + today + forecast) plus a per-day cumulative series -- t","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["lat","lon","crop"],"properties":{"lat":{"type":"number","maximum":90,"minimum":-90},"lon":{"type":"number","maximum":180,"minimum":-180},"crop":{"type":"string"},"days":{"type":"integer","maximum":30,"minimum":1},"unit":{"enum":["imperial","metric"],"type":"string"},"method":{"enum":["simple","modified"],"type":"string"},"base_temp_c":{"type":"number"},"season_start":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"upper_temp_c":{"type":"number"},"day_definition":{"enum":["nws","local_calendar"],"type":"string"},"include_milestones":{"type":"boolean"}},"additionalProperties":false},"title":"Get growing degree days","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_growing_degree_days","displayName":"Get growing degree days"},{"name":"get_climate_normals","description":"Day-of-year climate normals (NCEI 1991-2020 30-year averages) for a US location, from the nearest station with a record. Returns normal high, normal low, and normal mean for each date in the window, plus the station and how far away it is. Use this whenever a question needs a baseline rather than a forecast: \"is this warm for October?\", \"what is a typical high here in January?\", \"how does this week compare to normal?\". Pair it with get_forecast to say how far above or below normal the coming day","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["lat","lon"],"properties":{"end":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"lat":{"type":"number","maximum":90,"minimum":-90},"lon":{"type":"number","maximum":180,"minimum":-180},"days":{"type":"integer","maximum":366,"minimum":1},"unit":{"enum":["imperial","metric"],"type":"string"},"start":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"}},"additionalProperties":false},"title":"Get climate normals","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_climate_normals","displayName":"Get climate normals"},{"name":"get_forecast_skill","description":"How accurate our forecasts have actually been near a location, measured against observed analysis truth. Returns bias (positive = the model runs high), mean absolute error, RMSE, and a skill score against local climatology, per model, weather variable, and forecast lead time; continuous and vector entries also carry persistenceSkillScore, skill against the analysis at forecast issue time (null means not enough persist pairs, not zero skill -- do not compare it to skillScore as if they shared a d","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"lat":{"type":"number","maximum":90,"minimum":-90},"lon":{"type":"number","maximum":180,"minimum":-180},"unit":{"enum":["imperial","metric","si"],"type":"string"},"model":{"type":"string"},"truth":{"type":"string"},"regime":{"type":"string"},"location":{"type":"string","maxLength":200,"minLength":1},"variable":{"type":"string"},"lead_hours":{"type":"integer","minimum":1}},"additionalProperties":false},"title":"Get forecast skill","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_forecast_skill","displayName":"Get forecast skill"},{"name":"get_forecast_skill_map","description":"Measured forecast skill as a map of res-4 hexes inside a bounding box, sliced from the public skill map. Use this when the question is spatial (\"where is NBM temperature skill weak across Colorado\"), not \"how good is the forecast at this point\" — that is get_forecast_skill. Requires model, variable, lead_hours, and bbox {west,south,east,north}. lead_hours selects the containing published bucket (20 → NBM 24); a lead we have not published returns no slices rather than a nearby one. A hex is inclu","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["bbox","model","variable","lead_hours"],"properties":{"bbox":{"type":"object","required":["west","south","east","north"],"properties":{"east":{"$ref":"#/properties/bbox/properties/west"},"west":{"type":"number","maximum":180,"minimum":-180},"north":{"$ref":"#/properties/bbox/properties/south"},"south":{"type":"number","maximum":90,"minimum":-90}},"additionalProperties":false},"model":{"type":"string"},"domain":{"type":"string"},"variable":{"type":"string"},"lead_hours":{"type":"integer","minimum":1}},"additionalProperties":false},"title":"Get forecast skill map","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_forecast_skill_map","displayName":"Get forecast skill map"},{"name":"get_tropical","description":"Active NHC (National Hurricane Center) tropical systems: forecast cones, track lines, forecast points, coastal watches/warnings, and 7-day Tropical Weather Outlook formation areas -- Atlantic + East Pacific. Each feature carries a kind (cone | track | points | watch_warning | outlook_area) plus storm name, intensity, and timing properties. include_geometry=true adds full GeoJSON geometries (large). An empty result means no active tropical activity. Example: {} or {\"include_geometry\": true}.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"include_geometry":{"type":"boolean","default":false}},"additionalProperties":false},"title":"Get tropical activity","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_tropical","displayName":"Get tropical activity"},{"name":"get_population_exposure","description":"National population-exposure headline for a risk-zone outlook product: how many people are inside risk bands at or above min_level. Powers headlines like \"~57M people under major heat risk tomorrow\". hazard=heat covers NWS HeatRisk days 1-3 (levels: 1 minor, 2 moderate, 3 major, 4 extreme). Pass product_id directly for other risk-zone products. Example: {\"hazard\": \"heat\", \"min_level\": 3}.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"hazard":{"enum":["heat"],"type":"string"},"min_level":{"type":"integer","default":1,"maximum":5,"minimum":1},"product_id":{"type":"string"}},"additionalProperties":false},"title":"Get population exposure","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_population_exposure","displayName":"Get population exposure"},{"name":"get_path_exposure","description":"Civic POIs (schools, hospitals, airports, …) inside a caller-supplied GeoJSON Polygon or MultiPolygon. Clip first — do not pass a CONUS HeatRisk dissolve. For an NWS alert use get_alerts({alert_id}) (already includes pois). Optional classes filters the civic allowlist. Example: {\"geometry\":{\"type\":\"Polygon\",\"coordinates\":[[[-88.15,41.77],[-88.14,41.77],[-88.14,41.78],[-88.15,41.78],[-88.15,41.77]]]},\"classes\":[\"school\"]}.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["geometry"],"properties":{"classes":{"type":"array","items":{"type":"string"}},"geometry":{"type":"object","required":["type","coordinates"],"properties":{"type":{"enum":["Polygon","MultiPolygon"],"type":"string"},"coordinates":{"type":"array"}},"additionalProperties":false}},"additionalProperties":false},"title":"Get path exposure","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_path_exposure","displayName":"Get path exposure"},{"name":"get_climate_records","description":"NWS daily climate data: type=reports returns CLI daily climate reports (observed high/low/precip vs normals per station); type=records returns RER record event reports (record highs/lows/rainfall actually set). Filter by wfo (3-letter office, e.g. DMX), station, date (YYYY-MM-DD), start/end range, or hours lookback. Examples: {\"type\": \"records\", \"hours\": 48} or {\"type\": \"reports\", \"wfo\": \"DMX\", \"date\": \"2026-07-04\"}.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["type"],"properties":{"end":{"type":"string"},"wfo":{"type":"string","maxLength":4,"minLength":3},"date":{"type":"string"},"type":{"enum":["reports","records"],"type":"string"},"hours":{"type":"integer","maximum":168,"minimum":1},"start":{"type":"string"},"station":{"type":"string"},"record_type":{"type":"string"}},"additionalProperties":false},"title":"Get climate reports and records","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_climate_records","displayName":"Get climate reports and records"},{"name":"get_storm_cells","description":"Radar-identified storm cells near a location, merging NEXRAD Level III algorithm output from the nearest radar site: storm tracks (cell position, movement, forecast positions), hail index (probability of hail/severe hail + max expected size), mesocyclone detections (rotation), and TVS (tornado vortex signatures). Use during active convection to see what the radar algorithms flag. An empty result means no detected cells -- common outside active storms. Example: {\"location\": \"Norman, OK\"}.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"lat":{"type":"number","maximum":90,"minimum":-90},"lon":{"type":"number","maximum":180,"minimum":-180},"include":{"type":"array","items":{"enum":["tracks","hail_index","mesocyclone","tvs"],"type":"string"},"default":["tracks","hail_index","mesocyclone","tvs"]},"location":{"type":"string","maxLength":200,"minLength":1}},"additionalProperties":false},"title":"Get storm cells","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_storm_cells","displayName":"Get storm cells"},{"name":"get_air_quality","description":"AirNow air quality at a location (CONUS): current overall AQI plus per-pollutant detail (PM2.5, ozone, PM10 concentrations) and the AirNow AQI forecast. AQI scale: 0-50 good, 51-100 moderate, 101-150 unhealthy for sensitive groups, 151-200 unhealthy, 201-300 very unhealthy, 301+ hazardous. pollutants=[\"aqi\"] (default) is the cheap headline call; add pollutant keys or include_forecast=true when the user digs in. Example: {\"location\": \"Boise\", \"pollutants\": [\"aqi\", \"pm25\"], \"include_forecast\": tru","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"lat":{"type":"number","maximum":90,"minimum":-90},"lon":{"type":"number","maximum":180,"minimum":-180},"location":{"type":"string","maxLength":200,"minLength":1},"pollutants":{"type":"array","items":{"enum":["aqi","pm25","ozone","pm10"],"type":"string"},"default":["aqi"]},"include_forecast":{"type":"boolean","default":false}},"additionalProperties":false},"title":"Get air quality","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_air_quality","displayName":"Get air quality"},{"name":"get_map_snapshot","description":"Render a weather map image for visual analysis. Simple form: pass `product` (a viz-catalog product_id like \"mrms_qpe_01h_pass2_conus\", \"goes_truecolor_conus\", \"spc_day1_categorical\", \"hrrr_precip_hybrid_derived_conus\" (future radar), \"hrrr_subhourly_conus\" (15-min Future Radar), \"mrms_radar_nowcast_conus\", \"rtma_conus\", \"nbm_daily_temps\", or \"nexrad_l3:{SITE}:{PRODUCT}\" for single-site radar, e.g. \"nexrad_l3:TLX:N0B\") plus a location and zoom (5=regional, 8=metro, 10=city). Composed form: pass `","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"lat":{"type":"number","maximum":90,"minimum":-90},"lon":{"type":"number","maximum":180,"minimum":-180},"time":{"type":"integer"},"zoom":{"type":"number","default":7,"maximum":14,"minimum":2},"scene":{"type":"object","additionalProperties":{}},"width":{"type":"integer","default":720,"maximum":2000,"minimum":300},"height":{"type":"integer","default":440,"maximum":2000,"minimum":200},"opacity":{"type":"number","maximum":1,"minimum":0},"product":{"type":"string"},"location":{"type":"string","maxLength":200,"minLength":1}},"additionalProperties":false},"title":"Get map snapshot","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_map_snapshot","displayName":"Get map snapshot"},{"name":"get_sounding_chart","description":"Render the nearest RAOB (radiosonde) sounding as a Skew-T log-P + hodograph chart image for visual analysis: temperature/dewpoint traces, wind barbs, height-banded hodograph, and a derived-indices table (CAPE/CIN, lifted index, PWAT, shear, LCL). Soundings launch at 00Z/12Z so data can be hours old. Use get_sounding for the raw profile numbers. Example: {\"location\": \"Norman, OK\"}.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"lat":{"type":"number","maximum":90,"minimum":-90},"lon":{"type":"number","maximum":180,"minimum":-180},"unit":{"enum":["fahrenheit","celsius"],"type":"string","default":"fahrenheit"},"scale":{"type":"number","default":2,"maximum":3,"minimum":1},"location":{"type":"string","maxLength":200,"minLength":1}},"additionalProperties":false},"title":"Get sounding chart","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_sounding_chart","displayName":"Get sounding chart"},{"name":"get_platform_status","description":"Current data-freshness status of the weather platform: overall state, per-source states (ok / degraded / outage / no_signal), open incidents with cause attribution (provider outage vs internal processing delay), and active provider advisories. Use this when a user asks whether data is current, when other tools return surprisingly stale data, or before presenting time-critical weather. If a source is degraded or in outage, tell the user their data may be stale rather than presenting it as live. N","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"include_ok":{"type":"boolean","default":false}},"additionalProperties":false},"title":"Get platform status","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_platform_status","displayName":"Get platform status"}],"toolSource":"directory_preview","agentAction":"both","installLinks":[{"id":"cursor","label":"Cursor","href":"cursor://anysphere.cursor-deeplink/mcp/install?name=Smarter-Weather&config=eyJ1cmwiOiAiaHR0cHM6Ly9tY3Auc21hcnRlcndlYXRoZXIuY29tLyJ9"},{"id":"vscode","label":"VS Code","href":"vscode:mcp/install?%7B%22name%22%3A%22Smarter-Weather%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fmcp.smarterweather.com%2F%22%7D"},{"id":"vscode-insiders","label":"VS Code Insiders","href":"vscode-insiders:mcp/install?%7B%22name%22%3A%22Smarter-Weather%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fmcp.smarterweather.com%2F%22%7D"},{"id":"claude-web","label":"Claude.ai","href":"https://claude.ai/customize/connectors?modal=add-custom-connector&connectorName=Smarter+Weather&connectorUrl=https%3A%2F%2Fmcp.smarterweather.com%2F"},{"id":"codex","label":"Codex","copyText":"codex mcp add \"Smarter-Weather\" --url \"https://mcp.smarterweather.com/\""},{"id":"chatgpt","label":"ChatGPT","href":"https://www.mcpbundles.com/docs/integrations/chatgpt"}],"catalogUrl":"https://www.mcpbundles.com/api/directory/v1/servers/smarterweather-mcp-e53f49ce31","callUrl":"https://www.mcpbundles.com/api/directory/v1/servers/smarterweather-mcp-e53f49ce31/tools/{tool}","mcpServerUrl":"https://mcp.smarterweather.com/","liveCatalogUrl":"https://www.mcpbundles.com/api/directory/v1/servers/smarterweather-mcp-e53f49ce31?live=1"}