noaa-spaceweather-mcp-server

NOAA SWPC space weather: storm scales, Kp index, aurora forecasts, solar wind, activity, alerts.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
90%
Naming quality
67%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Findings (4)

  • LOWTool 'noaa_spaceweather_get_conditions' name length outside 3-30 rangein noaa_spaceweather_get_conditions
  • LOWTool 'noaa_spaceweather_get_solar_wind' name length outside 3-30 rangein noaa_spaceweather_get_solar_wind
  • LOWTool 'noaa_spaceweather_get_solar_activity' name length outside 3-30 rangein noaa_spaceweather_get_solar_activity
  • LOWTool 'noaa_spaceweather_get_aurora_forecast' name length outside 3-30 rangein noaa_spaceweather_get_aurora_forecast

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~11,387Tokens (tool definitions)
~20.6 KBTypical response size
Significant attention impact (8.90% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "noaa-spaceweather-mcp-server": {
      "command": "bun",
      "args": [
        "@cyanheads/noaa-spaceweather-mcp-server"
      ]
    }
  }
}

Runnable packages

npm@cyanheads/noaa-spaceweather-mcp-server0.3.1streamable-http

Remote endpoints

https://noaa-spaceweather.caseyjhand.com/mcpstreamable-http

What it can do

Tool inventory

Tools (6)

🟒 Read-only🟑 WriteπŸ”΄ Deleteβšͺ Unknown
🟒noaa_spaceweather_get_conditions(include_discussion)

Current space-weather snapshot: NOAA R/S/G storm scales (the previous UTC day, today, and the 3-day forecast), latest Kp index with its G-scale equivalent and aurora-visibility latitude, and a plain-language status summary. Optionally includes the SWPC forecast discussion explaining what is driving the forecast. The quickest way to answer "is anything happening right now?" β€” use before deciding whether to drill into solar wind (noaa_spaceweather_get_solar_wind), aurora (noaa_spaceweather_get_aurora_forecast), or alert details (noaa_spaceweather_get_alerts).

Input Schema

{
  "type": "object",
  "properties": {
    "include_discussion": {
      "default": false,
      "description": "Also fetch SWPC's forecaster-written Forecast Discussion, which explains why the forecast looks the way it does (CME versus coronal-hole stream, expected arrival). Costs one extra upstream request.",
      "type": "boolean"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "observedAt": {
      "type": "string",
      "description": "ISO 8601 UTC time of the scales data period, e.g. \"2026-06-04T15:00:00Z\"."
    },
    "currentKp": {
      "type": "number",
      "description": "Latest observed planetary K-index (0–9)."
    },
    "currentGScale": {
      "type": "number",
      "description": "G level (0–5) for currentKp."
    },
    "auroraLatitude": {
      "type": "string",
      "description": "Aurora guidance for currentKp, e.g. \"Aurora possible to ~55Β° geomagnetic latitude\"."
    },
    "yesterday": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "date": {
              "type": "string",
              "description": "Previous UTC day, e.g. \"2026-06-03\"."
            },
            "G": {
              "type": "object",
              "properties": {
                "scale": {
                  "type": "number",
                  "description": "Level 0–5."
                },
                "text": {
                  "type": "string",
                  "description": "Descriptor, e.g. \"Moderate\"; \"none\" at level 0."
                },
                "label": {
                  "type": "string",
                  "description": "Label, e.g. \"G2\"."
                }
              },
              "required": [
                "scale",
                "text",
                "label"
              ],
              "additionalProperties": false,
              "description": "Assessed G level."
            },
            "R": {
              "type": "object",
              "properties": {
                "scale": {
                  "type": "number",
                  "description": "Level 0–5."
                },
                "text": {
                  "type": "string",
                  "description": "Descriptor, e.g. \"Moderate\"; \"none\" at level 0."
                },
                "label": {
                  "type": "string",
                  "description": "Label, e.g. \"G2\"."
                }
              },
              "required": [
                "scale",
                "text",
                "label"
              ],
              "additionalProperties": false,
              "description": "Assessed R level."
            },
            "S": {
              "type": "object",
              "properties": {
                "scale": {
                  "type": "number",
                  "description": "Level 0–5."
                },
                "text": {
                  "type": "string",
                  "description": "Descriptor, e.g. \"Moderate\"; \"none\" at level 0."
                },
                "label": {
                  "type": "string",
                  "description": "Label, e.g. \"G2\"."
                }
              },
              "required": [
                "scale",
                "text",
                "label"
              ],
              "additionalProperties": false,
              "description": "Assessed S level."
            }
          },
          "required": [
            "date",
            "G",
            "R",
            "S"
          ],
          "additionalProperties": false,
          "description": "Levels SWPC assessed for the previous UTC day."
        },
        {
          "type": "null"
        }
      ],
      "description": "R/S/G levels assessed for the previous UTC day (a date, no time). Null when the feed lacks that period or a level; null never means level 0."
    },
    "today": {
      "type": "object",
      "properties": {
        "G": {
          "type": "object",
          "properties": {
            "scale": {
              "type": "number",
              "description": "Level 0–5."
            },
            "text": {
              "type": "string",
              "description": "Descriptor, e.g. \"Moderate\"; \"none\" at level 0."
            },
            "label": {
              "type": "string",
              "description": "Label, e.g. \"G2\"."
            }
          },
          "required": [
            "scale",
            "text",
            "label"
          ],
          "additionalProperties": false,
          "description": "Today's G level."
        },
        "R": {
          "type": "object",
          "properties": {
            "scale": {
              "type": "number",
              "description": "Level 0–5."
            },
            "text": {
              "type": "string",
              "description": "Descriptor, e.g. \"Moderate\"; \"none\" at level 0."
            },
            "label": {
              "type": "string",
              "description": "Label, e.g. \"G2\"."
            }
          },
          "required": [
            "scale",
            "text",
            "label"
          ],
          "additionalProperties": false,
          "description": "Today's R level."
        },
        "S": {
          "type": "object",
          "properties": {
            "scale": {
              "type": "number",
              "description": "Level 0–5."
            },
            "text": {
              "type": "string",
              "description": "Descriptor, e.g. \"Moderate\"; \"none\" at level 0."
            },
            "label": {
              "type": "string",
              "description": "Label, e.g. \"G2\"."
            }
          },
          "required": [
            "scale",
            "text",
            "label"
          ],
          "additionalProperties": false,
          "description": "Today's S level."
        }
      },
      "required": [
        "G",
        "R",
        "S"
      ],
      "additionalProperties": false,
      "description": "Observed R/S/G levels for today."
    },
    "forecast": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "date": {
            "type": "string",
            "description": "Forecast date, e.g. \"2026-06-04\"."
          },
          "G": {
            "type": "object",
            "properties": {
              "scale": {
                "type": "number",
                "description": "Level 0–5."
              },
              "text": {
                "type": "string",
                "description": "Descriptor, e.g. \"Moderate\"; \"none\" at level 0."
              },
              "label": {
                "type": "string",
                "description": "Label, e.g. \"G2\"."
              }
            },
            "required": [
              "scale",
              "text",
              "label"
            ],
            "additionalProperties": false,
            "description": "Forecast G level."
          },
          "R": {
            "type": "object",
            "properties": {
              "scale": {
                "description": "R level 0–5; null when SWPC issued a probability, not a level.",
                "type": [
                  "number",
                  "null"
                ]
              },
              "text": {
                "description": "R descriptor; null when no level was issued.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "label": {
                "description": "Label, e.g. \"R1\"; null when no level was issued.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "minorProbPercent": {
                "description": "Chance (%) of an R1–R2 blackout this day; null when none issued.",
                "type": [
                  "number",
                  "null"
                ]
              },
              "majorProbPercent": {
                "description": "Chance (%) of an R3+ blackout this day; null when none issued.",
                "type": [
                  "number",
                  "null"
                ]
              }
            },
            "required": [
              "scale",
              "text",
              "label",
              "minorProbPercent",
              "majorProbPercent"
            ],
            "additionalProperties": false,
            "description": "R outlook: a level, probabilities, or neither."
          },
          "S": {
            "type": "object",
            "properties": {
              "scale": {
                "description": "S level 0–5; null when SWPC issued a probability, not a level.",
                "type": [
                  "number",
                  "null"
                ]
              },
              "text": {
                "description": "S descriptor; null when no level was issued.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "label": {
                "description": "Label, e.g. \"S1\"; null when no level was issued.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "probPercent": {
                "description": "Chance (%) of an S1+ radiation storm this day; null when none issued.",
                "type": [
                  "number",
                  "null"
                ]
              }
            },
            "required": [
              "scale",
              "text",
              "label",
              "probPercent"
            ],
            "additionalProperties": false,
            "description": "S outlook: a level, a probability, or neither."
          }
        },
        "required": [
          "date",
          "G",
          "R",
          "S"
        ],
        "additionalProperties": false,
        "description": "One forecast day."
      },
      "description": "3-day scale forecast, oldest first; starts with today (the date of observedAt)."
    },
    "summary": {
      "type": "string",
      "description": "Plain-language status, e.g. \"G2 moderate geomagnetic storm in progress.\""
    },
    "discussion": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "issued": {
              "description": "ISO 8601 UTC issue time from the \":Issued:\" line; null when absent.",
              "type": [
                "string",
                "null"
              ]
            },
            "sections": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "topic": {
                    "type": "string",
                    "description": "Section heading, e.g. \"Solar Activity\"."
                  },
                  "summary": {
                    "description": "Past-24 h summary text; null when the section has none.",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "forecast": {
                    "description": "Next-3-day forecast text; null when the section has none.",
                    "type": [
                      "string",
                      "null"
                    ]
                  }
                },
                "required": [
                  "topic",
                  "summary",
                  "forecast"
                ],
                "additionalProperties": false,
                "description": "One topic section."
              },
              "description": "Topic sections, in product order."
            }
          },
          "required": [
            "issued",
            "sections"
          ],
          "additionalProperties": false,
          "description": "SWPC forecaster's narrative behind the scales."
        },
        {
          "type": "null"
        }
      ],
      "description": "SWPC Forecast Discussion; null unless include_discussion is true."
    },
    "error": {
      "description": "Present when the call failed. Absent on success.",
      "type": "object",
      "properties": {
        "code": {
          "type": "integer",
          "minimum": -9007199254740991,
          "maximum": 9007199254740991,
          "description": "JSON-RPC error code for this failure."
        },
        "message": {
          "type": "string",
          "description": "Human-readable description of what went wrong."
        },
        "data": {
          "type": "object",
          "properties": {
            "reason": {
              "type": "string",
              "description": "Machine-readable failure mode. Declared by this tool: `feed_unavailable`: SWPC feed returns 5xx or 429, times out, or answers with a body that is not parseable JSON. Retried for up to 45 seconds in total before failing. `feed_moved`: SWPC feed path returns a permanent 4xx (404, 410, 401, 403), or a feed answers without the shape it is documented to have β€” the scales feed no longer carrying its \"0\" (today) period, or the forecast discussion carrying no topic section. Fails in one attempt. Other values are possible when a failure originates below the handler.",
              "examples": [
                "feed_unavailable",
                "feed_moved"
              ]
            },
            "recovery": {
              "description": "Actionable next step for the caller.",
              "type": "object",
              "properties": {
                "hint": {
                  "type": "string"
                }
              },
              "required": [
                "hint"
              ],
              "additionalProperties": {}
            },
            "retryable": {
              "description": "Whether retrying may succeed.",
              "type": "boolean"
            }
          },
          "additionalProperties": {}
        }
      },
      "required": [
        "code",
        "message"
      ],
      "additionalProperties": {}
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false,
  "anyOf": [
    {
      "not": {
        "required": [
          "error"
        ]
      },
      "required": [
        "observedAt",
        "currentKp",
        "currentGScale",
        "auroraLatitude",
        "yesterday",
        "today",
        "forecast",
        "summary",
        "discussion"
      ]
    },
    {
      "required": [
        "error"
      ]
    }
  ]
}
🟒noaa_spaceweather_get_alerts(active_only, max_age_hours)

Active SWPC alerts, watches, and warnings β€” parsed into structured records with product type, NOAA scale and level, issue time, serial number, validity window, and plain text. Covers geomagnetic storms, radio blackouts, and radiation storms. With active_only=false, also returns informational summaries, expired notices, and cancellations. max_age_hours controls how far back to look for candidates (default 48 h) β€” under active_only=true it does not cut off a product whose validity end is still in the future, and under active_only=false it is a literal age cutoff. The SWPC feed keeps all historical records and has no built-in expiry.

Input Schema

{
  "type": "object",
  "properties": {
    "active_only": {
      "default": true,
      "description": "When true (default), return only in-force Warnings, Watches, and Alerts. Excluded: Summaries and unrecognized products; products whose validity end has passed; cancellation notices; any product a later cancellation names by serial; and all but the newest record carrying the \"THIS SUPERSEDES ANY/ALL PRIOR WATCHES IN EFFECT\" line. Counts per reason ride in the exclusions enrichment field. Set false to return every product in the window, cancellations included (flagged by the cancelled field).",
      "type": "boolean"
    },
    "max_age_hours": {
      "default": 48,
      "description": "How far back to look for products, in hours (default 48). The SWPC feed retains all historical records, so this bounds the candidate set rather than declaring what is current. Under active_only=true a product whose validity end is still in the future is returned even when its issue time falls outside this window β€” a multi-day Watch would otherwise disappear while a day it forecasts a storm for is still running. Under active_only=false it is literal and cuts at exactly the requested age.",
      "type": "number",
      "minimum": 1,
      "maximum": 720
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "alerts": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "productId": {
            "type": "string",
            "description": "Short SWPC product ID, e.g. \"K04W\"."
          },
          "messageCode": {
            "type": "string",
            "description": "Full message code from the body, e.g. \"WARK04\"."
          },
          "productType": {
            "type": "string",
            "enum": [
              "Warning",
              "Watch",
              "Alert",
              "Summary",
              "Other"
            ],
            "description": "Product type, from the code prefix."
          },
          "level": {
            "type": "number",
            "description": "NOAA scale level 0–5 stated in the body; 0 means no scale is stated, not zero severity."
          },
          "noaaScale": {
            "description": "NOAA scale stated in the body, e.g. \"G1\"; null when none.",
            "type": [
              "string",
              "null"
            ]
          },
          "cancelled": {
            "type": "boolean",
            "description": "True when this record cancels an earlier product; the cancelled product itself stays false. Always false under active_only=true, which drops both."
          },
          "serialNumber": {
            "description": "SWPC serial number, e.g. \"1125\"; null when absent. Unique only within messageCode; the Cancel, Extension to, and Continuation of Serial Number lines in message point at it.",
            "type": [
              "string",
              "null"
            ]
          },
          "phenomenon": {
            "type": "string",
            "description": "Phenomenon from the scale letter, e.g. \"Geomagnetic\"."
          },
          "issueDatetime": {
            "type": "string",
            "description": "ISO 8601 issue time."
          },
          "validFrom": {
            "description": "ISO 8601 UTC validity start stated in the body; null when none.",
            "type": [
              "string",
              "null"
            ]
          },
          "validTo": {
            "description": "ISO 8601 UTC validity end; for a Watch, the end of its last listed storm day. Null when nothing states or implies an end.",
            "type": [
              "string",
              "null"
            ]
          },
          "message": {
            "type": "string",
            "description": "Full plain-text message."
          }
        },
        "required": [
          "productId",
          "messageCode",
          "productType",
          "level",
          "noaaScale",
          "cancelled",
          "serialNumber",
          "phenomenon",
          "issueDatetime",
          "validFrom",
          "validTo",
          "message"
        ],
        "additionalProperties": false,
        "description": "One SWPC product."
      },
      "description": "Matching SWPC products."
    },
    "totalCount": {
      "type": "number",
      "description": "Records in alerts."
    },
    "activeOnly": {
      "type": "boolean",
      "description": "Echo of active_only: true for the in-force set, false for every product in the window."
    },
    "fetchedAt": {
      "type": "string",
      "description": "ISO 8601 fetch time."
    },
    "notice": {
      "description": "Set when no products were returned.",
      "type": "string"
    },
    "appliedWindowHours": {
      "description": "max_age_hours as applied. Present only under active_only=true.",
      "type": "number"
    },
    "appliedCutoff": {
      "description": "ISO 8601 UTC start of the applied window. Present only under active_only=true.",
      "type": "string"
    },
    "exclusions": {
      "description": "Records active_only=true left out, each counted under its first reason in field order; with totalCount they sum to the feed total. Present only under active_only=true, when something was excluded.",
      "type": "object",
      "properties": {
        "agedOut": {
          "type": "number",
          "description": "Issued before the window, no validity end ahead."
        },
        "productType": {
          "type": "number",
          "description": "Summaries and unrecognized products."
        },
        "cancellationRecord": {
          "type": "number",
          "description": "Cancellation notices."
        },
        "cancelledBySerial": {
          "type": "number",
          "description": "Named by a later cancellation."
        },
        "superseded": {
          "type": "number",
          "description": "Replaced by a newer superseding Watch."
        },
        "validityElapsed": {
          "type": "number",
          "description": "Validity end already passed."
        }
      },
      "required": [
        "agedOut",
        "productType",
        "cancellationRecord",
        "cancelledBySerial",
        "superseded",
        "validityElapsed"
      ],
      "additionalProperties": false
    },
    "error": {
      "description": "Present when the call failed. Absent on success.",
      "type": "object",
      "properties": {
        "code": {
          "type": "integer",
          "minimum": -9007199254740991,
          "maximum": 9007199254740991,
          "description": "JSON-RPC error code for this failure."
        },
        "message": {
          "type": "string",
          "description": "Human-readable description of what went wrong."
        },
        "data": {
          "type": "object",
          "properties": {
            "reason": {
              "type": "string",
              "description": "Machine-readable failure mode. Declared by this tool: `feed_unavailable`: SWPC feed returns 5xx or 429, times out, or answers with a body that is not parseable JSON. Retried for up to 45 seconds in total before failing. `feed_moved`: SWPC feed path returns a permanent 4xx (404, 410, 401, 403). Fails in one attempt. Other values are possible when a failure originates below the handler.",
              "examples": [
                "feed_unavailable",
                "feed_moved"
              ]
            },
            "recovery": {
              "description": "Actionable next step for the caller.",
              "type": "object",
              "properties": {
                "hint": {
                  "type": "string"
                }
              },
              "required": [
                "hint"
              ],
              "additionalProperties": {}
            },
            "retryable": {
              "description": "Whether retrying may succeed.",
              "type": "boolean"
            }
          },
          "additionalProperties": {}
        }
      },
      "required": [
        "code",
        "message"
      ],
      "additionalProperties": {}
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false,
  "anyOf": [
    {
      "not": {
        "required": [
          "error"
        ]
      },
      "required": [
        "alerts",
        "totalCount",
        "activeOnly",
        "fetchedAt"
      ]
    },
    {
      "required": [
        "error"
      ]
    }
  ]
}
🟒noaa_spaceweather_get_kp_index(window_days)

Planetary K-index (0–9 geomagnetic activity scale) β€” recent observed 3-hour values with their NOAA G-scale equivalents and aurora-latitude guidance, plus the 3-day Kp forecast series. Kp is the primary driver of aurora visibility and geomagnetic storm severity. SWPC reports Kp in thirds and starts each G level at that level’s "minus" value: Kp 4.67 (5βˆ’) is G1, Kp 6.67 (7βˆ’) is G3 (aurora to ~50Β° geomagnetic), Kp 8.67 (9βˆ’) is still G4, and only Kp 9 is G5 extreme. Use noaa_spaceweather_get_conditions for a combined snapshot including storm scales; use this tool when you need the Kp time series or forecast detail.

Input Schema

{
  "type": "object",
  "properties": {
    "window_days": {
      "default": 1,
      "description": "Number of past days of observed Kp to return (1–7, default 1). Larger windows show trend context.",
      "type": "integer",
      "minimum": 1,
      "maximum": 7
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "observed": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "timeTag": {
            "type": "string",
            "description": "ISO 8601 3-hour interval time tag."
          },
          "kp": {
            "type": "number",
            "description": "Kp value (0–9)."
          },
          "gScale": {
            "type": "number",
            "description": "G level (0–5) for this Kp; G1 starts at 4.67, G5 at 9."
          },
          "gLabel": {
            "type": "string",
            "description": "G label, e.g. \"G3\"."
          },
          "auroraLatitude": {
            "type": "string",
            "description": "Aurora guidance for this Kp, in geomagnetic latitude."
          }
        },
        "required": [
          "timeTag",
          "kp",
          "gScale",
          "gLabel",
          "auroraLatitude"
        ],
        "additionalProperties": false,
        "description": "One observed 3-hour Kp interval."
      },
      "description": "Observed Kp in the window, oldest first."
    },
    "forecast": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "timeTag": {
            "type": "string",
            "description": "ISO 8601 forecast interval time tag."
          },
          "kp": {
            "type": "number",
            "description": "Forecast Kp value (0–9)."
          },
          "observed": {
            "type": "string",
            "description": "\"estimated\" (near-real-time model) or \"predicted\"."
          },
          "noaaScale": {
            "description": "NOAA scale the feed states, e.g. \"G1\"; null when none.",
            "type": [
              "string",
              "null"
            ]
          },
          "gScale": {
            "type": "number",
            "description": "G level (0–5) derived from kp; matches noaaScale when stated."
          },
          "gLabel": {
            "type": "string",
            "description": "G label, e.g. \"G3\"."
          }
        },
        "required": [
          "timeTag",
          "kp",
          "observed",
          "noaaScale",
          "gScale",
          "gLabel"
        ],
        "additionalProperties": false,
        "description": "One Kp forecast interval."
      },
      "description": "Kp forecast series: estimated and predicted entries, no observed history."
    },
    "currentKp": {
      "type": "number",
      "description": "Latest observed Kp; 0 when the window has none."
    },
    "currentGScale": {
      "type": "number",
      "description": "G level (0–5) for currentKp."
    },
    "auroraLatitude": {
      "type": "string",
      "description": "Aurora guidance for currentKp."
    },
    "observedCount": {
      "type": "number",
      "description": "Entries in observed."
    },
    "error": {
      "description": "Present when the call failed. Absent on success.",
      "type": "object",
      "properties": {
        "code": {
          "type": "integer",
          "minimum": -9007199254740991,
          "maximum": 9007199254740991,
          "description": "JSON-RPC error code for this failure."
        },
        "message": {
          "type": "string",
          "description": "Human-readable description of what went wrong."
        },
        "data": {
          "type": "object",
          "properties": {
            "reason": {
              "type": "string",
              "description": "Machine-readable failure mode. Declared by this tool: `feed_unavailable`: SWPC feed returns 5xx or 429, times out, or answers with a body that is not parseable JSON. Retried for up to 45 seconds in total before failing. `feed_moved`: SWPC feed path returns a permanent 4xx (404, 410, 401, 403). Fails in one attempt. Other values are possible when a failure originates below the handler.",
              "examples": [
                "feed_unavailable",
                "feed_moved"
              ]
            },
            "recovery": {
              "description": "Actionable next step for the caller.",
              "type": "object",
              "properties": {
                "hint": {
                  "type": "string"
                }
              },
              "required": [
                "hint"
              ],
              "additionalProperties": {}
            },
            "retryable": {
              "description": "Whether retrying may succeed.",
              "type": "boolean"
            }
          },
          "additionalProperties": {}
        }
      },
      "required": [
        "code",
        "message"
      ],
      "additionalProperties": {}
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false,
  "anyOf": [
    {
      "not": {
        "required": [
          "error"
        ]
      },
      "required": [
        "observed",
        "forecast",
        "currentKp",
        "currentGScale",
        "auroraLatitude",
        "observedCount"
      ]
    },
    {
      "required": [
        "error"
      ]
    }
  ]
}
🟒noaa_spaceweather_get_solar_wind(window_hours, resolution)

Real-time solar wind measurements from the active spacecraft at L1: proton speed (km/s), density (n/cmΒ³), temperature (K), and the critical Bz component (southward Bz = negative = storm driver). Returns the recent plasma and magnetic field time series within the requested window, oldest first, each record tagged with the reporting spacecraft and bounded to 200 records per series unless resolution is set to "full" β€” or omitted entirely under "summary", which keeps the latest readings, Bz status, and window extremes (peak speed, density, and Bt; most southward Bz; minutes of southward Bz) for "what is Bz doing now" questions. Bz < βˆ’10 nT for sustained periods is a primary geomagnetic storm trigger β€” use alongside noaa_spaceweather_get_kp_index to see whether elevated solar wind has translated into a geomagnetic storm.

Input Schema

{
  "type": "object",
  "properties": {
    "window_hours": {
      "default": 3,
      "description": "Hours of recent solar wind history to return (1–168, default 3). Records update ~every 1 min, but the feed only carries roughly the last 24 hours β€” a larger window returns the whole feed, not more history, and at the default resolution the returned series stay bounded to 200 records each rather than growing with the window. When a window comes back empty, feedStalenessHours and latestFeedPlasmaTime/latestFeedMagTime report how current the feed actually is.",
      "type": "integer",
      "minimum": 1,
      "maximum": 168
    },
    "resolution": {
      "default": "reduced",
      "description": "Detail level of the returned plasma and mag series. \"summary\" returns both series empty and keeps every headline field β€” about 2 KB whatever the window. \"reduced\" (default) bounds each series to at most 200 records: the window is bucketed by record count and one real measurement is emitted per bucket β€” the bucket's fastest speed for plasma, its most southward Bz for mag β€” with the newest record in the window always last. A series already inside the bound is returned untouched, so a default 3-hour call is unaffected. \"full\" returns every record in the window (~1,400 per series over 24 hours, a ~540 KB response). The headline fields β€” latestPlasma, latestMag, bzStatus, bzMinInWindow, and the window maxima and southward-Bz minutes β€” are computed from the full window at every resolution.",
      "type": "string",
      "enum": [
        "summary",
        "reduced",
        "full"
      ]
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "plasma": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "timeTag": {
            "type": "string",
            "description": "ISO 8601 measurement time."
          },
          "source": {
            "type": "string",
            "description": "Reporting spacecraft, e.g. \"SOLAR1\"."
          },
          "densityPerCm3": {
            "description": "Proton density in particles/cmΒ³; null when missing.",
            "type": [
              "number",
              "null"
            ]
          },
          "speedKmS": {
            "description": "Solar wind speed in km/s; null when missing.",
            "type": [
              "number",
              "null"
            ]
          },
          "temperatureK": {
            "description": "Proton temperature in K; null when missing.",
            "type": [
              "number",
              "null"
            ]
          }
        },
        "required": [
          "timeTag",
          "source",
          "densityPerCm3",
          "speedKmS",
          "temperatureK"
        ],
        "additionalProperties": false,
        "description": "One L1 plasma record."
      },
      "description": "Plasma records in the window, oldest first. \"reduced\": at most 200, each its bucket's fastest speed, newest last. Empty under \"summary\"."
    },
    "mag": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "timeTag": {
            "type": "string",
            "description": "ISO 8601 measurement time."
          },
          "source": {
            "type": "string",
            "description": "Reporting spacecraft, e.g. \"SOLAR1\"."
          },
          "bxGsm": {
            "description": "Bx, GSM, in nT; null when missing.",
            "type": [
              "number",
              "null"
            ]
          },
          "byGsm": {
            "description": "By, GSM, in nT; null when missing.",
            "type": [
              "number",
              "null"
            ]
          },
          "bzGsm": {
            "description": "Bz, GSM, in nT; negative (southward) drives storms; null when missing.",
            "type": [
              "number",
              "null"
            ]
          },
          "bt": {
            "description": "Total field Bt in nT; null when missing.",
            "type": [
              "number",
              "null"
            ]
          }
        },
        "required": [
          "timeTag",
          "source",
          "bxGsm",
          "byGsm",
          "bzGsm",
          "bt"
        ],
        "additionalProperties": false,
        "description": "One L1 magnetic field record."
      },
      "description": "Mag records in the window, oldest first. \"reduced\": at most 200, each its bucket's most southward Bz; the last equals latestMag. Empty under \"summary\"."
    },
    "latestPlasma": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "timeTag": {
              "type": "string",
              "description": "ISO 8601 measurement time."
            },
            "source": {
              "type": "string",
              "description": "Reporting spacecraft, e.g. \"SOLAR1\"."
            },
            "densityPerCm3": {
              "description": "Proton density in particles/cmΒ³; null when missing.",
              "type": [
                "number",
                "null"
              ]
            },
            "speedKmS": {
              "description": "Solar wind speed in km/s; null when missing.",
              "type": [
                "number",
                "null"
              ]
            },
            "temperatureK": {
              "description": "Proton temperature in K; null when missing.",
              "type": [
                "number",
                "null"
              ]
            }
          },
          "required": [
            "timeTag",
            "source",
            "densityPerCm3",
            "speedKmS",
            "temperatureK"
          ],
          "additionalProperties": false,
          "description": "One L1 plasma record."
        },
        {
          "type": "null"
        }
      ],
      "description": "Newest plasma record in the window; null when the window has none."
    },
    "latestMag": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "timeTag": {
              "type": "string",
              "description": "ISO 8601 measurement time."
            },
            "source": {
              "type": "string",
              "description": "Reporting spacecraft, e.g. \"SOLAR1\"."
            },
            "bxGsm": {
              "description": "Bx, GSM, in nT; null when missing.",
              "type": [
                "number",
                "null"
              ]
            },
            "byGsm": {
              "description": "By, GSM, in nT; null when missing.",
              "type": [
                "number",
                "null"
              ]
            },
            "bzGsm": {
              "description": "Bz, GSM, in nT; negative (southward) drives storms; null when missing.",
              "type": [
                "number",
                "null"
              ]
            },
            "bt": {
              "description": "Total field Bt in nT; null when missing.",
              "type": [
                "number",
                "null"
              ]
            }
          },
          "required": [
            "timeTag",
            "source",
            "bxGsm",
            "byGsm",
            "bzGsm",
            "bt"
          ],
          "additionalProperties": false,
          "description": "One L1 magnetic field record."
        },
        {
          "type": "null"
        }
      ],
      "description": "Newest mag record in the window; null when the window has none."
    },
    "bzStatus": {
      "type": "string",
      "description": "Bz status from latestMag, e.g. \"Southward Bz -14 nT β€” storm-driving conditions.\"; \"Bz data unavailable.\" without a reading."
    },
    "plasmaCount": {
      "type": "number",
      "description": "Records in plasma (plasmaWindowRecords has the pre-reduction total); under \"summary\", the records the window held."
    },
    "magCount": {
      "type": "number",
      "description": "Records in mag (magWindowRecords has the pre-reduction total); under \"summary\", the records the window held."
    },
    "bzMinInWindow": {
      "description": "Most southward Bz in nT across the whole window; null when it has no Bz.",
      "type": [
        "number",
        "null"
      ]
    },
    "bzMinTimeTag": {
      "description": "ISO 8601 time of bzMinInWindow; null when it is null.",
      "type": [
        "string",
        "null"
      ]
    },
    "bzSouthMinutesInWindow": {
      "type": "number",
      "description": "Minutes of Bz < 0: 1-minute mag records across the whole window. Feed gaps are not counted. 0 when none."
    },
    "speedMaxInWindow": {
      "description": "Peak speed in km/s across the whole window; null when it has no speed.",
      "type": [
        "number",
        "null"
      ]
    },
    "speedMaxTimeTag": {
      "description": "ISO 8601 time of speedMaxInWindow; null when it is null.",
      "type": [
        "string",
        "null"
      ]
    },
    "densityMaxInWindow": {
      "description": "Peak proton density in particles/cmΒ³ across the whole window; null when none.",
      "type": [
        "number",
        "null"
      ]
    },
    "btMaxInWindow": {
      "description": "Peak Bt in nT across the whole window; null when it has no Bt.",
      "type": [
        "number",
        "null"
      ]
    },
    "latestFeedPlasmaTime": {
      "description": "ISO 8601 time of the newest plasma record in the feed, window aside; null when none.",
      "type": [
        "string",
        "null"
      ]
    },
    "latestFeedMagTime": {
      "description": "ISO 8601 time of the newest mag record in the feed, window aside; null when none.",
      "type": [
        "string",
        "null"
      ]
    },
    "feedStalenessHours": {
      "description": "Hours from the newest record in either feed to now; null when both are empty.",
      "type": [
        "number",
        "null"
      ]
    },
    "notice": {
      "description": "What shaped the response: an empty window (with the newest feed record), series bounded to 200 records, or series omitted under \"summary\".",
      "type": "string"
    },
    "plasmaBucketRecords": {
      "description": "Plasma records per emitted record, 1 if untouched. Present only after a reduction.",
      "type": "number"
    },
    "plasmaWindowRecords": {
      "description": "Plasma records in the window before reduction. Present after a reduction or under \"summary\".",
      "type": "number"
    },
    "magBucketRecords": {
      "description": "Mag records per emitted record, 1 if untouched. Present only after a reduction.",
      "type": "number"
    },
    "magWindowRecords": {
      "description": "Mag records in the window before reduction. Present after a reduction or under \"summary\".",
      "type": "number"
    },
    "error": {
      "description": "Present when the call failed. Absent on success.",
      "type": "object",
      "properties": {
        "code": {
          "type": "integer",
          "minimum": -9007199254740991,
          "maximum": 9007199254740991,
          "description": "JSON-RPC error code for this failure."
        },
        "message": {
          "type": "string",
          "description": "Human-readable description of what went wrong."
        },
        "data": {
          "type": "object",
          "properties": {
            "reason": {
              "type": "string",
              "description": "Machine-readable failure mode. Declared by this tool: `feed_unavailable`: SWPC feed returns 5xx or 429, times out, or answers with a body that is not parseable JSON. Retried for up to 45 seconds in total before failing. `feed_moved`: SWPC feed path returns a permanent 4xx (404, 410, 401, 403). Fails in one attempt. Other values are possible when a failure originates below the handler.",
              "examples": [
                "feed_unavailable",
                "feed_moved"
              ]
            },
            "recovery": {
              "description": "Actionable next step for the caller.",
              "type": "object",
              "properties": {
                "hint": {
                  "type": "string"
                }
              },
              "required": [
                "hint"
              ],
              "additionalProperties": {}
            },
            "retryable": {
              "description": "Whether retrying may succeed.",
              "type": "boolean"
            }
          },
          "additionalProperties": {}
        }
      },
      "required": [
        "code",
        "message"
      ],
      "additionalProperties": {}
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false,
  "anyOf": [
    {
      "not": {
        "required": [
          "error"
        ]
      },
      "required": [
        "plasma",
        "mag",
        "latestPlasma",
        "latestMag",
        "bzStatus",
        "plasmaCount",
        "magCount",
        "bzMinInWindow",
        "bzMinTimeTag",
        "bzSouthMinutesInWindow",
        "speedMaxInWindow",
        "speedMaxTimeTag",
        "densityMaxInWindow",
        "btMaxInWindow",
        "latestFeedPlasmaTime",
        "latestFeedMagTime",
        "feedStalenessHours"
      ]
    },
    {
      "required": [
        "error"
      ]
    }
  ]
}
🟒noaa_spaceweather_get_solar_activity(include_regions, flare_hours)

Solar flare and radiation storm picture: discrete flare events from the past week with peak class and R-scale level, recent GOES X-ray flux with flare-class labels (A/B/C/M/X) and class magnitude, the daily F10.7 cm solar radio flux, 3-day flare-class probabilities (C/M/X), active solar regions with per-region flare probabilities, and GOES integral proton flux at β‰₯10 MeV with NOAA S-scale. For operators tracking HF radio blackout (R-scale, driven by X-ray) and radiation storm risk (S-scale, driven by protons). Each active region carries the C/M/X flare counts SWPC attributed to it that UTC day, which identify the region driving current activity β€” the flare events themselves carry no region.

Input Schema

{
  "type": "object",
  "properties": {
    "include_regions": {
      "default": true,
      "description": "Include active solar region details (default true). Set false to skip region data and reduce response size.",
      "type": "boolean"
    },
    "flare_hours": {
      "default": 24,
      "description": "How far back to report discrete flare events, in hours before now, filtered on each flare’s onset time (1–168, default 24). The feed keeps a rolling 7 days, so 168 returns everything it carries. When the window comes back empty, the response names the newest flare the feed holds.",
      "type": "integer",
      "minimum": 1,
      "maximum": 168
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "latestXray": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "timeTag": {
              "type": "string",
              "description": "ISO 8601 measurement time."
            },
            "fluxWm2": {
              "type": "string",
              "description": "Long-channel (0.1–0.8 nm) X-ray flux for display, e.g. \"1.4e-6 W/mΒ²\"."
            },
            "fluxWm2Value": {
              "type": "number",
              "description": "fluxWm2 as an unformatted number, in W/mΒ²."
            },
            "flareClass": {
              "type": "string",
              "description": "Flare class letter: A, B, C, M, or X."
            },
            "flareClassFull": {
              "description": "Class with magnitude, e.g. \"B2.5\"; null below A1 (1e-8 W/mΒ²), zero and negative readings included.",
              "type": [
                "string",
                "null"
              ]
            },
            "satellite": {
              "type": "number",
              "description": "GOES satellite number."
            }
          },
          "required": [
            "timeTag",
            "fluxWm2",
            "fluxWm2Value",
            "flareClass",
            "flareClassFull",
            "satellite"
          ],
          "additionalProperties": false,
          "description": "One GOES X-ray reading."
        },
        {
          "type": "null"
        }
      ],
      "description": "Newest X-ray reading; null when the feed is empty."
    },
    "recentXray": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "timeTag": {
            "type": "string",
            "description": "ISO 8601 measurement time."
          },
          "fluxWm2": {
            "type": "string",
            "description": "Long-channel (0.1–0.8 nm) X-ray flux for display, e.g. \"1.4e-6 W/mΒ²\"."
          },
          "fluxWm2Value": {
            "type": "number",
            "description": "fluxWm2 as an unformatted number, in W/mΒ²."
          },
          "flareClass": {
            "type": "string",
            "description": "Flare class letter: A, B, C, M, or X."
          },
          "flareClassFull": {
            "description": "Class with magnitude, e.g. \"B2.5\"; null below A1 (1e-8 W/mΒ²), zero and negative readings included.",
            "type": [
              "string",
              "null"
            ]
          },
          "satellite": {
            "type": "number",
            "description": "GOES satellite number."
          }
        },
        "required": [
          "timeTag",
          "fluxWm2",
          "fluxWm2Value",
          "flareClass",
          "flareClassFull",
          "satellite"
        ],
        "additionalProperties": false,
        "description": "One GOES X-ray reading."
      },
      "description": "X-ray readings from the past hour, oldest first."
    },
    "recentFlares": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "beginTime": {
            "type": "string",
            "description": "ISO 8601 UTC onset time."
          },
          "maxTime": {
            "type": "string",
            "description": "ISO 8601 UTC peak time."
          },
          "endTime": {
            "description": "ISO 8601 UTC decay time; null while in progress.",
            "type": [
              "string",
              "null"
            ]
          },
          "beginClass": {
            "type": "string",
            "description": "Class at onset, e.g. \"B4.2\"."
          },
          "maxClass": {
            "type": "string",
            "description": "Peak class as SWPC publishes it, e.g. \"M5.2\"."
          },
          "endClass": {
            "description": "Class at decay; null while in progress.",
            "type": [
              "string",
              "null"
            ]
          },
          "peakFluxWm2": {
            "type": "number",
            "description": "Peak long-channel (0.1–0.8 nm) flux, in W/mΒ²."
          },
          "rScale": {
            "type": "number",
            "description": "R level (0–5) the peak flux implies; 0 is below R1."
          },
          "satellite": {
            "type": "number",
            "description": "GOES satellite number."
          }
        },
        "required": [
          "beginTime",
          "maxTime",
          "endTime",
          "beginClass",
          "maxClass",
          "endClass",
          "peakFluxWm2",
          "rScale",
          "satellite"
        ],
        "additionalProperties": false,
        "description": "One GOES X-ray flare event."
      },
      "description": "Flares with onset inside flare_hours, oldest first; empty when none began."
    },
    "f107": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "observedTime": {
              "type": "string",
              "description": "ISO 8601 UTC observation time; can be ~24 h old."
            },
            "fluxSfu": {
              "type": "number",
              "description": "10.7 cm (2800 MHz) solar radio flux, in sfu."
            },
            "ninetyDayMeanSfu": {
              "description": "90-day mean flux in sfu; null when the record carries none.",
              "type": [
                "number",
                "null"
              ]
            },
            "reportingSchedule": {
              "type": "string",
              "description": "Penticton report: \"Morning\", \"Noon\", or \"Afternoon\"."
            }
          },
          "required": [
            "observedTime",
            "fluxSfu",
            "ninetyDayMeanSfu",
            "reportingSchedule"
          ],
          "additionalProperties": false,
          "description": "Daily F10.7 reading."
        },
        {
          "type": "null"
        }
      ],
      "description": "Latest Noon report, SWPC's daily F10.7 value; null when the feed has none."
    },
    "probabilities": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "date": {
            "type": "string",
            "description": "Forecast date."
          },
          "cClass1Day": {
            "type": "number",
            "description": "Deprecated: use cClassProbability (same value)."
          },
          "cClassProbability": {
            "type": "number",
            "description": "C-class flare chance (%) for this date."
          },
          "mClass1Day": {
            "type": "number",
            "description": "Deprecated: use mClassProbability (same value)."
          },
          "mClassProbability": {
            "type": "number",
            "description": "M-class flare chance (%) for this date."
          },
          "xClass1Day": {
            "type": "number",
            "description": "Deprecated: use xClassProbability (same value)."
          },
          "xClassProbability": {
            "type": "number",
            "description": "X-class flare chance (%) for this date."
          },
          "protons1Day": {
            "type": "number",
            "description": "Deprecated: use protonEventProbability (same value)."
          },
          "protonEventProbability": {
            "type": "number",
            "description": "β‰₯10 MeV proton event chance (%) for this date."
          }
        },
        "required": [
          "date",
          "cClass1Day",
          "cClassProbability",
          "mClass1Day",
          "mClassProbability",
          "xClass1Day",
          "xClassProbability",
          "protons1Day",
          "protonEventProbability"
        ],
        "additionalProperties": false,
        "description": "Flare probabilities for one day."
      },
      "description": "3-day flare probability forecast."
    },
    "latestProton": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "timeTag": {
              "type": "string",
              "description": "ISO 8601 measurement time."
            },
            "fluxPfu": {
              "type": "number",
              "description": "β‰₯10 MeV integral proton flux in pfu, to 3 significant figures."
            },
            "sScale": {
              "type": "number",
              "description": "S level (0–5) for this flux."
            },
            "energy": {
              "type": "string",
              "description": "Energy channel, e.g. \">=10 MeV\"."
            }
          },
          "required": [
            "timeTag",
            "fluxPfu",
            "sScale",
            "energy"
          ],
          "additionalProperties": false,
          "description": "One GOES proton flux reading."
        },
        {
          "type": "null"
        }
      ],
      "description": "Newest β‰₯10 MeV proton reading; null when the feed is empty."
    },
    "sScale": {
      "type": "number",
      "description": "Current S level (0–5) from latestProton; 0 without a reading."
    },
    "sScaleText": {
      "type": "string",
      "description": "S level descriptor, e.g. \"S2 moderate radiation storm\"."
    },
    "activeRegions": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "region": {
            "type": "number",
            "description": "NOAA active region number."
          },
          "location": {
            "type": "string",
            "description": "Heliographic location, e.g. \"N17E47\"."
          },
          "latitude": {
            "type": "string",
            "description": "Heliographic latitude, e.g. \"N17\"."
          },
          "spotClass": {
            "type": "string",
            "description": "Sunspot class, e.g. \"Dsi\"; empty for a spotless region (plage)."
          },
          "numberSpots": {
            "type": "number",
            "description": "Sunspot count; 0 for a spotless region."
          },
          "magClass": {
            "type": "string",
            "description": "Magnetic class, e.g. \"B\"; empty for a spotless region."
          },
          "areaMillionths": {
            "description": "Sunspot area in millionths of the hemisphere; null for a spotless region.",
            "type": [
              "number",
              "null"
            ]
          },
          "firstObserved": {
            "type": "string",
            "description": "ISO 8601 UTC time SWPC first recorded this region."
          },
          "cFlareCount": {
            "type": "number",
            "description": "C-class flares SWPC credited to this region on observedDate."
          },
          "mFlareCount": {
            "type": "number",
            "description": "M-class flares SWPC credited to this region on observedDate."
          },
          "xFlareCount": {
            "type": "number",
            "description": "X-class flares SWPC credited to this region on observedDate."
          },
          "cFlareProbability": {
            "type": "number",
            "description": "C-class flare chance (%) for the UTC day after observedDate."
          },
          "mFlareProbability": {
            "type": "number",
            "description": "M-class flare chance (%) for the UTC day after observedDate."
          },
          "xFlareProbability": {
            "type": "number",
            "description": "X-class flare chance (%) for the UTC day after observedDate."
          },
          "protonProbability": {
            "type": "number",
            "description": "Proton event chance (%) for the UTC day after observedDate."
          },
          "observedDate": {
            "type": "string",
            "description": "UTC observation date: the flare counts cover it, the probabilities the next day."
          }
        },
        "required": [
          "region",
          "location",
          "latitude",
          "spotClass",
          "numberSpots",
          "magClass",
          "areaMillionths",
          "firstObserved",
          "cFlareCount",
          "mFlareCount",
          "xFlareCount",
          "cFlareProbability",
          "mFlareProbability",
          "xFlareProbability",
          "protonProbability",
          "observedDate"
        ],
        "additionalProperties": false,
        "description": "One active solar region."
      },
      "description": "Active regions; empty when include_regions=false or none are active."
    },
    "fetchedAt": {
      "type": "string",
      "description": "ISO 8601 fetch time."
    },
    "notice": {
      "description": "Set when no flare began in the flare_hours window: names the newest flare in the feed, or says the feed has none.",
      "type": "string"
    },
    "error": {
      "description": "Present when the call failed. Absent on success.",
      "type": "object",
      "properties": {
        "code": {
          "type": "integer",
          "minimum": -9007199254740991,
          "maximum": 9007199254740991,
          "description": "JSON-RPC error code for this failure."
        },
        "message": {
          "type": "string",
          "description": "Human-readable description of what went wrong."
        },
        "data": {
          "type": "object",
          "properties": {
            "reason": {
              "type": "string",
              "description": "Machine-readable failure mode. Declared by this tool: `feed_unavailable`: SWPC feed returns 5xx or 429, times out, or answers with a body that is not parseable JSON. Retried for up to 45 seconds in total before failing. `feed_moved`: SWPC feed path returns a permanent 4xx (404, 410, 401, 403). Fails in one attempt. Other values are possible when a failure originates below the handler.",
              "examples": [
                "feed_unavailable",
                "feed_moved"
              ]
            },
            "recovery": {
              "description": "Actionable next step for the caller.",
              "type": "object",
              "properties": {
                "hint": {
                  "type": "string"
                }
              },
              "required": [
                "hint"
              ],
              "additionalProperties": {}
            },
            "retryable": {
              "description": "Whether retrying may succeed.",
              "type": "boolean"
            }
          },
          "additionalProperties": {}
        }
      },
      "required": [
        "code",
        "message"
      ],
      "additionalProperties": {}
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false,
  "anyOf": [
    {
      "not": {
        "required": [
          "error"
        ]
      },
      "required": [
        "latestXray",
        "recentXray",
        "recentFlares",
        "f107",
        "probabilities",
        "latestProton",
        "sScale",
        "sScaleText",
        "activeRegions",
        "fetchedAt"
      ]
    },
    {
      "required": [
        "error"
      ]
    }
  ]
}
🟒noaa_spaceweather_get_aurora_forecast(latitude, longitude)

OVATION model aurora forecast for the next ~30–60 min: global grid of aurora probability percentages by latitude/longitude (1Β° resolution). With optional coordinates, returns the local aurora probability at the nearest grid point, the geomagnetic latitude those coordinates convert to, the minimum Kp and G level needed for aurora at that geomagnetic latitude, the sun’s elevation there at the forecast time (aurora is not visible in daylight), the strongest aurora within 1000 km poleward (visible low on the horizon when bright), and a plain-language go/no-go verdict. Without coordinates, returns only global metadata. Data updates every ~5 minutes. Supply coordinates as geographic (WGS84); aurora bands are geomagnetic, and the tool converts between them.

Input Schema

{
  "type": "object",
  "properties": {
    "latitude": {
      "description": "Geographic latitude in degrees (βˆ’90 to 90). Provide with longitude for a local aurora probability lookup.",
      "type": "number",
      "minimum": -90,
      "maximum": 90
    },
    "longitude": {
      "description": "Geographic longitude in degrees (βˆ’180 to 180). Provide with latitude for a local aurora probability lookup.",
      "type": "number",
      "minimum": -180,
      "maximum": 180
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "observationTime": {
      "type": "string",
      "description": "ISO 8601 OVATION observation time."
    },
    "forecastTime": {
      "type": "string",
      "description": "ISO 8601 time the forecast is valid for."
    },
    "localLookup": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "requestedLatitude": {
              "type": "number",
              "description": "Requested geographic latitude, in degrees."
            },
            "requestedLongitude": {
              "type": "number",
              "description": "Requested geographic longitude, in degrees."
            },
            "geomagneticLatitude": {
              "type": "number",
              "description": "Geomagnetic latitude of the request, in degrees (up to Β±9.2Β° from geographic); minKpRequired and the verdict use it."
            },
            "gridLatitude": {
              "type": "number",
              "description": "Nearest grid latitude, in degrees."
            },
            "gridLongitude": {
              "type": "number",
              "description": "Nearest grid longitude, in degrees."
            },
            "auroraPercent": {
              "type": "number",
              "description": "Aurora probability at the nearest grid point (0–100%)."
            },
            "minKpRequired": {
              "type": "number",
              "description": "Minimum Kp for aurora here: 4.67, 5.67, 6.67, 7.67, or 9; 0 inside the quiet-time oval (above 65Β°). Also 9 where no storm reaches (minGScale null)."
            },
            "minGScale": {
              "description": "G level for minKpRequired (1–5); 0 inside the quiet-time oval; null below 40Β° geomagnetic, where no storm reaches.",
              "type": [
                "number",
                "null"
              ]
            },
            "sunElevationDeg": {
              "type": "number",
              "description": "Solar elevation here at forecastTime, in degrees to 0.1Β° (no refraction); negative below the horizon."
            },
            "darkness": {
              "type": "string",
              "enum": [
                "day",
                "civil_twilight",
                "nautical_twilight",
                "dark"
              ],
              "description": "Sky state from sunElevationDeg: day β‰₯ 0Β°, civil_twilight β‰₯ βˆ’6Β°, nautical_twilight β‰₯ βˆ’12Β°, dark below."
            },
            "horizonMaxPercent": {
              "description": "Highest aurora probability (0–100%) poleward of gridLatitude within Β±2Β° longitude and 1000 km; null when no cell qualifies (gridLatitude Β±90).",
              "type": [
                "number",
                "null"
              ]
            },
            "horizonMaxLatitude": {
              "description": "Grid latitude of horizonMaxPercent, in degrees (nearest on a tie); null when it is null.",
              "type": [
                "number",
                "null"
              ]
            },
            "horizonDistanceKm": {
              "description": "Distance in km to the horizonMaxPercent cell; null when it is null.",
              "type": [
                "number",
                "null"
              ]
            },
            "verdict": {
              "type": "string",
              "description": "Visibility verdict, e.g. \"Good aurora chance (42%) β€” Kpβ‰₯6.67 (G3) needed at 51.2Β° geomagnetic.\"; opens \"Not visible β€” daylight\" when darkness is day."
            }
          },
          "required": [
            "requestedLatitude",
            "requestedLongitude",
            "geomagneticLatitude",
            "gridLatitude",
            "gridLongitude",
            "auroraPercent",
            "minKpRequired",
            "minGScale",
            "sunElevationDeg",
            "darkness",
            "horizonMaxPercent",
            "horizonMaxLatitude",
            "horizonDistanceKm",
            "verdict"
          ],
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ],
      "description": "Coordinate lookup; null when no coordinates were given."
    },
    "gridPointCount": {
      "type": "number",
      "description": "OVATION grid point count."
    },
    "topAuroraPercent": {
      "type": "number",
      "description": "Highest aurora probability on the globe (0–100%)."
    },
    "topAuroraRegion": {
      "type": "string",
      "description": "Location of the highest grid point, e.g. \"67Β°N, 20Β°W\"; \"Unknown\" when every cell is 0%."
    },
    "error": {
      "description": "Present when the call failed. Absent on success.",
      "type": "object",
      "properties": {
        "code": {
          "type": "integer",
          "minimum": -9007199254740991,
          "maximum": 9007199254740991,
          "description": "JSON-RPC error code for this failure."
        },
        "message": {
          "type": "string",
          "description": "Human-readable description of what went wrong."
        },
        "data": {
          "type": "object",
          "properties": {
            "reason": {
              "type": "string",
              "description": "Machine-readable failure mode. Declared by this tool: `feed_unavailable`: SWPC feed returns 5xx or 429, times out, or answers with a body that is not parseable JSON. Retried for up to 45 seconds in total before failing. `feed_moved`: SWPC feed path returns a permanent 4xx (404, 410, 401, 403), or a coordinate lookup finds no parseable Forecast Time in the feed. Fails in one attempt. `invalid_coordinates`: One coordinate provided without the other. Other values are possible when a failure originates below the handler.",
              "examples": [
                "feed_unavailable",
                "feed_moved",
                "invalid_coordinates"
              ]
            },
            "recovery": {
              "description": "Actionable next step for the caller.",
              "type": "object",
              "properties": {
                "hint": {
                  "type": "string"
                }
              },
              "required": [
                "hint"
              ],
              "additionalProperties": {}
            },
            "retryable": {
              "description": "Whether retrying may succeed.",
              "type": "boolean"
            }
          },
          "additionalProperties": {}
        }
      },
      "required": [
        "code",
        "message"
      ],
      "additionalProperties": {}
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false,
  "anyOf": [
    {
      "not": {
        "required": [
          "error"
        ]
      },
      "required": [
        "observationTime",
        "forecastTime",
        "localLookup",
        "gridPointCount",
        "topAuroraPercent",
        "topAuroraRegion"
      ]
    },
    {
      "required": [
        "error"
      ]
    }
  ]
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded6 tools
verifiedversion not recorded6 tools
verifiedversion not recorded6 tools