@dangahagan/weather-mcp
MCP server giving AI assistants 17 weather tools with zero API keys: global forecasts, current conditions, alerts, air quality, marine conditions, lightning detection, radar imagery, river levels, wildfire tracking, and historical weather back to 1940. Bu
npm · fingerprint d57a97ac8f7c6590cd46921e · repository · RSS
6tools
3recorded versions
45dtracked
unchanged 12d
What changed
Changed between 4 September 2026 and 5 October 2026 (first seen 2026-10-05 14:16 UTC)
6 descriptions rewritten.
--- pinned/check_service_status +++ observed/check_service_status { - "description": "Check the operational status of the NOAA and Open-Meteo weather APIs. Use this when experiencing errors or to proactively verify service availability before making weather data requests. Returns current status, helpful messages, and links to official status pages.", + "description": "Check whether the upstream weather APIs (NOAA, Open-Meteo) are reachable. Call this after any weather tool returns an error, or before a batch of requests. Returns per-service status and links to the official status pages.", "inputSchema": { "properties": {}, "required": [],
--- pinned/get_alerts +++ observed/get_alerts { - "description": "Get active weather alerts, watches, warnings, and advisories for a location. Coverage: the United States (NOAA), Canada (Environment and Climate Change Canada), European MeteoAlarm member countries (official national warnings, matched at country level — regional filtering within a European country is not yet available), and India (NDMA SACHET), the Philippines (PAGASA), and Indonesia (BMKG) via their official national CAP feeds — matched to your exact point by the alert polygon in the Philippines and Indonesia, and listed at country level with an explicit note in India, whose geometry is published from a separate endpoint that is not reliably reachable — and Japan (JMA), matched to your exact point by warning area. All of the above are keyless. With an optional `GOOGLE_WEATHER_API_KEY`, official alerts are also available for ~45+ more territories (Australia, Brazil, Mexico, and others) via the Google Weather API. Use this for safety-critical weather information when asked about \"any alerts?\", \"weather warnings?\", \"is it safe?\", \"dangerous weather?\", or \"weather watches?\". Returns severity, urgency, certainty, effective/expiration times, and affected areas where the source provides them. Provide the location as coordinates (latitude+longitude), a saved location_name, or a free-text city_name. For forecast data, use get_forecast instead. If this tool returns an error, check the error message for status page links and consider using check_service_status to verify API availability.", + "description": "Get active weather alerts, watches, warnings, and advisories for a location. Coverage: the United States (NOAA), Canada (Environment and Climate Change Canada), European MeteoAlarm member countries, Japan (JMA), and the official national CAP feeds of India (NDMA SACHET), the Philippines (PAGASA) and Indonesia (BMKG). All of the above are keyless. With an optional `GOOGLE_WEATHER_API_KEY`, official alerts are also available for ~45+ more territories (Australia, Brazil, Mexico, and others) via the Google Weather API. Use this for safety-critical weather information when asked about \"any alerts?\", \"weather warnings?\", \"is it safe?\", \"dangerous weather?\", or \"weather watches?\". For forecast data, use get_forecast instead.", "inputSchema": { "properties": { "active_only": { - "description": "Free-text place name to geocode (e.g., \"Paris, France\", \"Bend, Oregon\"). Use instead of coordinates when you only have a place name and it is not a saved location. Include state/country for disambiguation when possible.", + "description": "A place name to geocode, e.g. \"Paris, France\". Include state or country to disambiguate.", "type": "string" }, "detail": { - "description": "Output verbosity: \"summary\" (shortest), \"standard\" (default, balanced), or \"full\" (everything the source provides, e.g. full alert descriptions, uncapped hourly forecast, embedded imagery).", + "description": "Output verbosity: \"summary\" (shortest), \"standard\" (default, balanced), or \"full\" (everything the source provides).", "enum": [ "summary", "standard", - "description": "Latitude of the location (-90 to 90). Not required if location_name or city_name is provided.", + "description": "Latitude (-90 to 90). Not required if location_name or city_name is provided.", "maximum": 90, "minimum": -90, "type": "number" - "description": "Name of a saved location (e.g., \"home\", \"cabin\"). Use instead of coordinates to reference a saved location. List them with list_saved_locations.", + "description": "A saved location alias, e.g. \"home\". List them with list_saved_locations.", "type": "string" }, "longitude": { - "description": "Longitude of the location (-180 to 180). Not required if location_name or city_name is provided.", + "description": "Longitude (-180 to 180). Not required if location_name or city_name is provided.", "maximum": 180, "minimum": -180, "type": "number"
--- pinned/get_current_conditions +++ observed/get_current_conditions { - "description": "Get the most recent weather observation for a location (global coverage). Use this for current weather or when asking about \"today's weather\", \"right now\", or recent conditions without a specific historical date range. Returns NOAA station observations for US locations and Open-Meteo model data for international locations. Optionally includes fire weather indices: NOAA fire-weather indices (Haines Index, Grassland Fire Danger, Red Flag Threat) for US locations, or a computed Fosberg Fire Weather Index with dryness context elsewhere, when requested. Automatically includes frostbite-risk and heat-stress (WBGT) context when conditions are extreme. Provide the location as coordinates (latitude+longitude), a saved location_name, or a free-text city_name. For specific past dates or date ranges, use get_historical_weather instead. If this tool returns an error, check the error message for status page links and consider using check_service_status to verify API availability.", + "description": "Get the most recent weather observation for a location. Use this for current weather or when asking about \"today's weather\", \"right now\", or recent conditions without a specific historical date range. Returns NOAA station observations for US locations and Open-Meteo model data for international locations. Automatically includes frostbite-risk and heat-stress (WBGT) context when conditions are extreme. For specific past dates or date ranges, use get_historical_weather instead.", "inputSchema": { "properties": { "city_name": { - "description": "Free-text place name to geocode (e.g., \"Paris, France\", \"Bend, Oregon\"). Use instead of coordinates when you only have a place name and it is not a saved location. Include state/country for disambiguation when possible.", + "description": "A place name to geocode, e.g. \"Paris, France\". Include state or country to disambiguate.", "type": "string" }, "distance_unit": { - "description": "Override distance/visibility/elevation unit: \"mi\" or \"km\".", + "description": "Override the distance, visibility and elevation unit.", "enum": [ "mi", "km" - "description": "US locations get NOAA fire-weather indices (Haines, grassland, red-flag); elsewhere a computed Fosberg Fire Weather Index with dryness context. (default: false)", + "description": "US locations get NOAA fire-weather indices (Haines, grassland, red-flag); elsewhere, and on source metar, a computed Fosberg Fire Weather Index. Dryness context is model-path only. (default: false)", "type": "boolean" }, "include_normals": { - "description": "Include climate normals (30-year averages) for comparison with current conditions (default: false). Shows normal high/low temperatures and precipitation, with departure from normal. For US locations, also shows the record high/low for the date and the year it was set.", + "description": "Include climate normals (30-year averages) for comparison with current conditions, plus US daily records (default: false).", "type": "boolean" }, "latitude": { - "description": "Latitude of the location (-90 to 90). Not required if location_name or city_name is provided.", + "description": "Latitude (-90 to 90). Not required if location_name or city_name is provided.", "maximum": 90, "minimum": -90, "type": "number" - "description": "Name of a saved location (e.g., \"home\", \"cabin\"). Use instead of coordinates to reference a saved location. List them with list_saved_locations.", + "description": "A saved location alias, e.g. \"home\". List them with list_saved_locations.", "type": "string" }, "longitude": { - "description": "Longitude of the location (-180 to 180). Not required if location_name or city_name is provided.", + "description": "Longitude (-180 to 180). Not required if location_name or city_name is provided.", "maximum": 180, "minimum": -180, "type": "number" - "description": "Override precipitation unit: \"inch\" or \"mm\".", + "description": "Override the precipitation unit.", "enum": [ "inch", "mm" - "description": "Override pressure unit: \"inHg\" or \"hPa\".", + "description": "Override the pressure unit.", "enum": [ "inHg", "hPa" - "description": "Override temperature unit: \"F\" or \"C\".", + "description": "Override the temperature unit.", "enum": [ "F", "C" - "description": "Clock format for times: \"12h\" or \"24h\".", + "description": "Clock format for times.", "enum": [ "12h", "24h" - "description": "Unit system for output: \"imperial\" (°F, mph, inHg) or \"metric\" (°C, km/h, hPa). Defaults to the server setting (imperial unless configured otherwise). Individual *_unit overrides below take precedence.", + "description": "Unit system for output. Defaults to the server setting; individual *_unit overrides take precedence.", "enum": [ "imperial", "metric" - "description": "Override wind speed unit: \"mph\", \"kmh\", \"ms\", or \"kn\" (knots).", + "description": "Override the wind speed unit (\"kn\" is knots).", "enum": [ "mph", "kmh",
--- pinned/get_forecast +++ observed/get_forecast { - "description": "Get future weather forecast for a location (global coverage). Use this for upcoming weather predictions (e.g., \"tomorrow\", \"this week\", \"next 7 days\", \"hourly forecast\"). Returns forecast data including temperature, precipitation, wind, conditions, and sunrise/sunset times. Supports both daily and hourly granularity. Automatically selects best data source: NOAA for US locations (more detailed), Open-Meteo for international locations. For current weather, use get_current_conditions. For past weather, use get_historical_weather. Provide the location in ONE of three ways: coordinates (latitude+longitude), a saved location name (location_name=\"home\"), or a free-text city name (city_name=\"Paris, France\") which is geocoded automatically. Can compare multiple global weather models with compare_models=true to gauge forecast confidence, or ensemble_spread=true for one model's own spread. If this tool returns an error, check the error message for status page links and consider using check_service_status to verify API availability.", + "description": "Get future weather forecast for a location. Use this for upcoming weather predictions (e.g., \"tomorrow\", \"this week\", \"next 7 days\", \"hourly forecast\"). Automatically selects the best data source: NOAA for US locations (more detailed), Open-Meteo for international locations. For current weather, use get_current_conditions. For past weather, use get_historical_weather.", "inputSchema": { "properties": { "city_name": { - "description": "Free-text place name to geocode (e.g., \"Paris, France\", \"Bend, Oregon\"). Use instead of coordinates when you only have a place name and it is not a saved location. Include state/country for disambiguation when possible.", + "description": "A place name to geocode, e.g. \"Paris, France\". Include state or country to disambiguate.", "type": "string" }, "compare_models": { - "description": "Output verbosity: \"summary\" (shortest), \"standard\" (default, balanced), or \"full\" (everything the source provides, e.g. full alert descriptions, uncapped hourly forecast, embedded imagery).", + "description": "Output verbosity: \"summary\" (shortest), \"standard\" (default, balanced), or \"full\" (everything the source provides).", "enum": [ "summary", "standard", - "description": "Override distance/visibility/elevation unit: \"mi\" or \"km\".", + "description": "Override the distance, visibility and elevation unit.", "enum": [ "mi", "km" - "description": "Forecast granularity: \"daily\" for day/night periods or \"hourly\" for hour-by-hour detail (default: \"daily\")", + "description": "Forecast granularity: \"daily\" for day/night periods, \"hourly\" for hour-by-hour detail, or \"minutely\" for a 2-hour precipitation nowcast in 15-minute steps (contiguous US, Central Europe) (default: \"daily\")", "enum": [ "daily", - "hourly" + "hourly", + "minutely" ], "type": "string" }, - "description": "Include astronomy details for each forecast day (default: false, daily forecasts only). Use when asked about the moon phase, a full moon or new moon, moonrise/moonset, golden hour, twilight, or \"when does it get dark\". Adds moon phase, illumination, moonrise/moonset, civil/nautical/astronomical twilight times, and the next full/new moon dates.", + "description": "Include astronomy details for each forecast day (default: false, daily forecasts only). Use when asked about the moon phase, a full moon or new moon, moonrise/moonset, golden hour, twilight, or \"when does it get dark\".", "type": "boolean" }, "include_normals": { - "description": "Include climate normals (30-year averages) for comparison with forecasted temperatures (default: false, daily forecasts only). Shows normal high/low and departure from normal for the first forecast day. For US locations, also shows the record high/low for the date and the year it was set.", + "description": "Include climate normals (30-year averages) for comparison with forecasted temperatures, plus US daily records (default: false, daily forecasts only).", "type": "boolean" }, "include_precipitation_probability": { - "description": "Latitude of the location (-90 to 90). Not required if location_name or city_name is provided.", + "description": "Latitude (-90 to 90). Not required if location_name or city_name is provided.", "maximum": 90, "minimum": -90, "type": "number" - "description": "Name of a saved location (e.g., \"home\", \"cabin\"). Use instead of coordinates to reference a saved location. List them with list_saved_locations.", + "description": "A saved location alias, e.g. \"home\". List them with list_saved_locations.", "type": "string" }, "longitude": { - "description": "Longitude of the location (-180 to 180). Not required if location_name or city_name is provided.", + "description": "Longitude (-180 to 180). Not required if location_name or city_name is provided.", "maximum": 180, "minimum": -180, "type": "number" - "description": "Override precipitation unit: \"inch\" or \"mm\".", + "description": "Override the precipitation unit.", "enum": [ "inch", "mm" - "description": "Override pressure unit: \"inHg\" or \"hPa\".", + "description": "Override the pressure unit.", "enum": [ "inHg", "hPa" - "description": "Override temperature unit: \"F\" or \"C\".", + "description": "Override the temperature unit.", "enum": [ "F", "C" - "description": "Clock format for times: \"12h\" or \"24h\".", + "description": "Clock format for times.", "enum": [ "12h", "24h" - "description": "Unit system for output: \"imperial\" (°F, mph, inHg) or \"metric\" (°C, km/h, hPa). Defaults to the server setting (imperial unless configured otherwise). Individual *_unit overrides below take precedence.", + "description": "Unit system for output. Defaults to the server setting; individual *_unit overrides take precedence.", "enum": [ "imperial", "metric" - "description": "Override wind speed unit: \"mph\", \"kmh\", \"ms\", or \"kn\" (knots).", + "description": "Override the wind speed unit (\"kn\" is knots).", "enum": [ "mph", "kmh",
--- pinned/get_weather_summary +++ observed/get_weather_summary { - "description": "Get a combined weather overview for a location in a SINGLE call. Best for broad questions like \"What's the weather like in Seattle?\", \"Is it safe to hike today?\", or \"Give me a weather rundown\". Aggregates current conditions, forecast, and active alerts by default, and can also include air quality and lightning. Provide the location as coordinates (latitude+longitude), a saved location_name, or a free-text city_name. For a single specific data product (just the forecast, just alerts, etc.), call that specialized tool directly. Sections that are unavailable for a location (e.g. alerts in a country not yet covered) are noted rather than failing the whole summary.", + "description": "Get a combined weather overview for a location in a SINGLE call — current conditions, forecast and alerts, optionally air quality and lightning. Best for broad questions like \"What's the weather like in Seattle?\", \"Is it safe to hike today?\", or \"Give me a weather rundown\". For a single specific data product (just the forecast, just alerts, etc.), call that specialized tool directly. Sections that are unavailable for a location (e.g. alerts in a country not yet covered) are noted rather than failing the whole summary.", "inputSchema": { "properties": { "city_name": { - "description": "Free-text place name to geocode (e.g., \"Paris, France\", \"Bend, Oregon\"). Use instead of coordinates when you only have a place name and it is not a saved location. Include state/country for disambiguation when possible.", + "description": "A place name to geocode, e.g. \"Paris, France\". Include state or country to disambiguate.", "type": "string" }, "days": { - "description": "Output verbosity: \"summary\" (shortest), \"standard\" (default, balanced), or \"full\" (everything the source provides, e.g. full alert descriptions, uncapped hourly forecast, embedded imagery).", + "description": "Output verbosity: \"summary\" (shortest), \"standard\" (default, balanced), or \"full\" (everything the source provides).", "enum": [ "summary", "standard", - "description": "Override distance/visibility/elevation unit: \"mi\" or \"km\".", + "description": "Override the distance, visibility and elevation unit.", "enum": [ "mi", "km" - "description": "Latitude of the location (-90 to 90). Not required if location_name or city_name is provided.", + "description": "Latitude (-90 to 90). Not required if location_name or city_name is provided.", "maximum": 90, "minimum": -90, "type": "number" - "description": "Name of a saved location (e.g., \"home\", \"cabin\"). Use instead of coordinates to reference a saved location. List them with list_saved_locations.", + "description": "A saved location alias, e.g. \"home\". List them with list_saved_locations.", "type": "string" }, "longitude": { - "description": "Longitude of the location (-180 to 180). Not required if location_name or city_name is provided.", + "description": "Longitude (-180 to 180). Not required if location_name or city_name is provided.", "maximum": 180, "minimum": -180, "type": "number" - "description": "Override precipitation unit: \"inch\" or \"mm\".", + "description": "Override the precipitation unit.", "enum": [ "inch", "mm" - "description": "Override pressure unit: \"inHg\" or \"hPa\".", + "description": "Override the pressure unit.", "enum": [ "inHg", "hPa" + "source": { + "default": "auto", + "description": "Source for the current and forecast sections: \"auto\" (default: NOAA in the US, Open-Meteo elsewhere), \"noaa\" or \"openmeteo\".", + "enum": [ + "auto", + "noaa", + "openmeteo" + ], + "type": "string" + }, "temperature_unit": { - "description": "Override temperature unit: \"F\" or \"C\".", + "description": "Override the temperature unit.", "enum": [ "F", "C" - "description": "Clock format for times: \"12h\" or \"24h\".", + "description": "Clock format for times.", "enum": [ "12h", "24h" - "description": "Unit system for output: \"imperial\" (°F, mph, inHg) or \"metric\" (°C, km/h, hPa). Defaults to the server setting (imperial unless configured otherwise). Individual *_unit overrides below take precedence.", + "description": "Unit system for output. Defaults to the server setting; individual *_unit overrides take precedence.", "enum": [ "imperial", "metric" - "description": "Override wind speed unit: \"mph\", \"kmh\", \"ms\", or \"kn\" (knots).", + "description": "Override the wind speed unit (\"kn\" is knots).", "enum": [ "mph", "kmh",
--- pinned/search_location +++ observed/search_location { - "description": "Search for locations by name to get coordinates for weather queries. Uses Nominatim (OpenStreetMap) for excellent coverage of cities, towns, villages, and hamlets worldwide. Use this when the user provides a location name instead of coordinates (e.g., \"Paris\", \"New York\", \"Tokyo\", \"San Francisco, CA\", \"Small Village, County\"). Returns location matches with coordinates, timezone, elevation, and other metadata. Enables natural language location queries like \"What's the weather in Paris?\" by converting location names to coordinates.", + "description": "Search for locations by name and get their coordinates. Uses Nominatim (OpenStreetMap) for coverage of cities, towns, villages and hamlets worldwide. The weather tools geocode city_name themselves, so use this to disambiguate an ambiguous place name or to show the candidate matches (e.g., \"Springfield\", \"San Francisco, CA\", \"Small Village, County\") — not as a required first step before a weather call.", "inputSchema": { "properties": { "limit": { - "description": "Maximum number of results to return (1-100, default: 5)", - "maximum": 100, + "description": "Maximum number of results to return (1-50, default: 5)", + "maximum": 50, "minimum": 1, - "type": "number" + "type": "integer" }, "query": { "description": "Location name to search for (e.g., \"Paris\", \"New York, NY\", \"Tokyo\")",
Changed 2026-09-04 10:16 UTC
1 description rewritten.
--- pinned/get_alerts +++ observed/get_alerts { - "description": "Get active weather alerts, watches, warnings, and advisories for a location. Coverage: the United States (NOAA), Canada (Environment and Climate Change Canada), European MeteoAlarm member countries (official national warnings, matched at country level — regional filtering within a European country is not yet available), and India (NDMA SACHET), the Philippines (PAGASA), and Indonesia (BMKG) via their official national CAP feeds — matched to your exact point by the alert polygon in the Philippines and Indonesia, and listed at country level with an explicit note in India, whose geometry is published from a separate endpoint that is not reliably reachable. With an optional `GOOGLE_WEATHER_API_KEY`, official alerts are also available for ~45+ more territories (Australia, Japan, Brazil, Mexico, and others) via the Google Weather API. Use this for safety-critical weather information when asked about \"any alerts?\", \"weather warnings?\", \"is it safe?\", \"dangerous weather?\", or \"weather watches?\". Returns severity, urgency, certainty, effective/expiration times, and affected areas where the source provides them. Provide the location as coordinates (latitude+longitude), a saved location_name, or a free-text city_name. For forecast data, use get_forecast instead. If this tool returns an error, check the error message for status page links and consider using check_service_status to verify API availability.", + "description": "Get active weather alerts, watches, warnings, and advisories for a location. Coverage: the United States (NOAA), Canada (Environment and Climate Change Canada), European MeteoAlarm member countries (official national warnings, matched at country level — regional filtering within a European country is not yet available), and India (NDMA SACHET), the Philippines (PAGASA), and Indonesia (BMKG) via their official national CAP feeds — matched to your exact point by the alert polygon in the Philippines and Indonesia, and listed at country level with an explicit note in India, whose geometry is published from a separate endpoint that is not reliably reachable — and Japan (JMA), matched to your exact point by warning area. All of the above are keyless. With an optional `GOOGLE_WEATHER_API_KEY`, official alerts are also available for ~45+ more territories (Australia, Brazil, Mexico, and others) via the Google Weather API. Use this for safety-critical weather information when asked about \"any alerts?\", \"weather warnings?\", \"is it safe?\", \"dangerous weather?\", or \"weather watches?\". Returns severity, urgency, certainty, effective/expiration times, and affected areas where the source provides them. Provide the location as coordinates (latitude+longitude), a saved location_name, or a free-text city_name. For forecast data, use get_forecast instead. If this tool returns an error, check the error message for status page links and consider using check_service_status to verify API availability.", "inputSchema": { "properties": { "active_only": {
Current tools
Show all 6 tool fingerprints
check_service_status
get_alerts
get_current_conditions
get_forecast
get_weather_summary
search_location
Watch this server yourself
If you run this server, put the proxy in front of it. It pins these exact fingerprints on first connect and stops the session if they move.
npx -y mcp-pin@0.2.3 -- <your @dangahagan/weather-mcp command>
Or subscribe to this page's RSS feed to be told when it changes.
Badge
The badge states one fact about time and nothing else. It never claims a server is safe.
[](https://mcp-pin.gautamkhosla.com/servers/acf6481f741d30cb.html)