noaa-spaceweather-mcp-server
Server Details
NOAA SWPC space weather: storm scales, Kp index, aurora forecasts, solar wind, activity, alerts.
- Status
- Healthy
- Uptime
- 99.9% over 39 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- cyanheads/noaa-spaceweather-mcp-server
- GitHub Stars
- 2
- Server Listing
- @cyanheads/noaa-spaceweather-mcp-server
TDQS
Scored across 6 tools
Each tool targets a distinct space-weather domain, and the descriptions carefully cross-reference when to drill down. The only mild overlap is noaa_spaceweather_get_conditions also summarizing Kp/aurora visibility, but its stated role as a snapshot resolves the ambiguity.
All six tools follow the same noaa_spaceweather_get_<data_domain> convention, making the set highly predictable. No style mixing or vague verbs.
Six tools is a well-scoped size for this domain, covering the major NOAA/SWPC data products without redundancy. Each tool has a clear niche and contributes a distinct capability.
The surface covers alerts/watches, current conditions, Kp, solar wind, solar activity/flares/protons, and aurora forecasts, including forecast components and plain-language guidance. This represents a complete read-only space-weather consumer surface with no dead ends.
Available Tools
6 toolsnoaa_spaceweather_get_alertsGet Space Weather AlertsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| active_only | No | 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). | |
| max_age_hours | No | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Present when the call failed. Absent on success. |
| alerts | No | Matching SWPC products. |
| notice | No | Set when no products were returned. |
| fetchedAt | No | ISO 8601 fetch time. |
| activeOnly | No | Echo of active_only: true for the in-force set, false for every product in the window. |
| exclusions | No | 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. |
| totalCount | No | Records in alerts. |
| appliedCutoff | No | ISO 8601 UTC start of the applied window. Present only under active_only=true. |
| appliedWindowHours | No | max_age_hours as applied. Present only under active_only=true. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly and idempotent annotations, the description explains important behaviors: the effect of active_only on exclusions, the literal cutoff under active_only=false, and the SWPC feed's retention of all historical records. This gives the agent a precise model of what results to expect.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact for the complexity it conveys. The primary purpose is front-loaded, followed by the two key behavioral caveats, with no filler or redundant statements.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity, the annotations, output schema, and full parameter coverage, the description covers everything an agent needs to invoke it correctly and interpret the result semantics. The special handling of superseded products and expiry is disclosed, leaving no critical gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents both parameters thoroughly, and the description goes further by explaining the cross-parameter interaction between active_only and max_age_hours. This added nuance about validity windows versus literal age cutoff is essential for correct usage and is not fully captured by the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as returning active SWPC alerts, watches, and warnings parsed into structured records, and names the specific event types covered. This distinguishes it from the sibling tools that focus on aurora, Kp index, solar activity, and solar wind.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes the tool's context clear: use it for alert, watch, and warning products rather than forecasts or raw indices. It does not explicitly name alternatives or state when not to use this tool, but the scope is well enough defined that an agent can infer the right selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
noaa_spaceweather_get_aurora_forecastGet Aurora ForecastARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| latitude | No | Geographic latitude in degrees (−90 to 90). Provide with longitude for a local aurora probability lookup. | |
| longitude | No | Geographic longitude in degrees (−180 to 180). Provide with latitude for a local aurora probability lookup. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Present when the call failed. Absent on success. |
| localLookup | No | Coordinate lookup; null when no coordinates were given. |
| forecastTime | No | ISO 8601 time the forecast is valid for. |
| gridPointCount | No | OVATION grid point count. |
| observationTime | No | ISO 8601 OVATION observation time. |
| topAuroraRegion | No | Location of the highest grid point, e.g. "67°N, 20°W"; "Unknown" when every cell is 0%. |
| topAuroraPercent | No | Highest aurora probability on the globe (0–100%). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, openWorld, and idempotent hints, so the bar is lower. The description adds genuinely useful behavioral context beyond that: data updates every ~5 minutes, the daylight visibility caveat via sun elevation, the 1000 km poleward search behavior, and the geographic-to-geomagnetic conversion. This is rich, non-redundant disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence earns its place: it front-loads the model, time window, and grid, then separates coordinate vs no-coordinate behavior, then adds update frequency and coordinate-system caveats. There is no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, zero-required-parameter tool with an output schema, the description covers everything needed for correct invocation: both call modes, coordinate format, update cadence, and key output semantics. The optionality of parameters is clear, and no critical usage detail is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description goes further by explaining that latitude/longitude are optional, must be provided together, are interpreted as WGS84 geographic coordinates, and that the tool internally converts to geomagnetic coordinates — semantics not present in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific resource (OVATION model aurora forecast), a concrete scope (next ~30–60 min, global 1° grid), and the exact output categories. It clearly distinguishes this tool from siblings like get_alerts and get_kp_index by focusing uniquely on aurora probability and visibility.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly contrasts the two invocation modes — with coordinates for a local probability and without for global metadata — and instructs that coordinates must be geographic WGS84 because aurora bands are geomagnetic. It does not name alternative sibling tools, but the usage context is clear enough for an agent to select this tool correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
noaa_spaceweather_get_conditionsGet Space Weather ConditionsARead-onlyIdempotentInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
| include_discussion | No | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Present when the call failed. Absent on success. |
| today | No | Observed R/S/G levels for today. |
| summary | No | Plain-language status, e.g. "G2 moderate geomagnetic storm in progress." |
| forecast | No | 3-day scale forecast, oldest first; starts with today (the date of observedAt). |
| currentKp | No | Latest observed planetary K-index (0–9). |
| yesterday | No | 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. |
| discussion | No | SWPC Forecast Discussion; null unless include_discussion is true. |
| observedAt | No | ISO 8601 UTC time of the scales data period, e.g. "2026-06-04T15:00:00Z". |
| currentGScale | No | G level (0–5) for currentKp. |
| auroraLatitude | No | Aurora guidance for currentKp, e.g. "Aurora possible to ~55° geomagnetic latitude". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, and the description adds useful behavioral detail: the time spans covered (previous UTC day, today, 3-day forecast) and that discussion is optional. It does not contradict the annotations, and the output-schema presence relieves it from describing return value shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured: the first sentence front-loads the snapshot contents, the second notes the optional component, and the third provides sibling routing. Every sentence earns its place, and there is no filler or repetition of schema fields.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, one-optional-parameter snapshot tool with an output schema, the description is fully sufficient. It explains what data is included, how far it looks back and forward, what the optional flag adds, and when to prefer sibling tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single boolean parameter is already well-documented, including the extra upstream request cost. The description repeats only that the discussion is optional and explains what is driving the forecast, adding no material meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb-resource combination: it returns a 'current space-weather snapshot' with concrete contents (R/S/G scales, Kp index, aurora-visibility latitude, plain-language summary). It also explicitly frames itself as the triage entry point before drilling into sibling tools, which clearly distinguishes it from them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives an explicit routing rule: 'use before deciding whether to drill into solar wind, aurora, or alert details.' It names the alternative siblings and clarifies the tool's role as the quickest way to answer whether anything is happening right now.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
noaa_spaceweather_get_kp_indexGet Kp IndexARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| window_days | No | Number of past days of observed Kp to return (1–7, default 1). Larger windows show trend context. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Present when the call failed. Absent on success. |
| forecast | No | Kp forecast series: estimated and predicted entries, no observed history. |
| observed | No | Observed Kp in the window, oldest first. |
| currentKp | No | Latest observed Kp; 0 when the window has none. |
| currentGScale | No | G level (0–5) for currentKp. |
| observedCount | No | Entries in observed. |
| auroraLatitude | No | Aurora guidance for currentKp. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as read-only/idempotent, and the description adds meaningful behavioral context beyond that: SWPC reports Kp in thirds, G-levels start at the 'minus' value, and specific examples show how Kp values map to G1/G3/G4/G5. This helps the agent interpret returned values correctly and does not contradict the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core result, then provides essential interpretative context and ends with actionable routing guidance. Every sentence earns its place and no filler is present.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has one optional parameter, rich annotations, an output schema, and explicit sibling differentiation, the description covers everything needed for correct selection and invocation. It explains data granularity, forecast horizon, scale semantics, and when to choose an alternative.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter, window_days, is already fully documented in the schema, including default, range, and purpose. Schema description coverage is 100%, so the tool description adds little parameter-level meaning beyond what the schema provides. A baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the resource (Planetary K-index) and the delivered content: recent observed 3-hour values, G-scale equivalents, aurora-latitude guidance, and the 3-day forecast series. It also names the sibling tool noaa_spaceweather_get_conditions and clarifies how this tool differs, so an agent can distinguish it from alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives an explicit routing rule: use noaa_spaceweather_get_conditions for a combined snapshot including storm scales, and use this tool when the Kp time series or forecast detail is needed. This is clear when-to-use and when-not-to-use guidance with a named alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
noaa_spaceweather_get_solar_activityGet Solar ActivityARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| flare_hours | No | 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. | |
| include_regions | No | Include active solar region details (default true). Set false to skip region data and reduce response size. |
Output Schema
| Name | Required | Description |
|---|---|---|
| f107 | No | Latest Noon report, SWPC's daily F10.7 value; null when the feed has none. |
| error | No | Present when the call failed. Absent on success. |
| notice | No | Set when no flare began in the flare_hours window: names the newest flare in the feed, or says the feed has none. |
| sScale | No | Current S level (0–5) from latestProton; 0 without a reading. |
| fetchedAt | No | ISO 8601 fetch time. |
| latestXray | No | Newest X-ray reading; null when the feed is empty. |
| recentXray | No | X-ray readings from the past hour, oldest first. |
| sScaleText | No | S level descriptor, e.g. "S2 moderate radiation storm". |
| latestProton | No | Newest ≥10 MeV proton reading; null when the feed is empty. |
| recentFlares | No | Flares with onset inside flare_hours, oldest first; empty when none began. |
| activeRegions | No | Active regions; empty when include_regions=false or none are active. |
| probabilities | No | 3-day flare probability forecast. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the tool read-only, idempotent, and open-world. The description adds meaningful behavioral context about data coverage, the attribution of flare counts to regions, and the relationship between flare events and active regions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but well organized: it front-loads the tool's purpose, lists the measurable contents, states the operator use case, and closes with an important data-attribution caveat. No sentence is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the detailed input schema, existing output schema, and safety annotations, the description covers the tool's scope, target users, and key data relationships. Nothing essential for selecting or invoking this tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so parameters are already fully documented in the input schema. The description does not add extra parameter-level detail, so the baseline score applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies what the tool returns: solar flares, GOES X-ray flux, F10.7 radio flux, flare probabilities, active regions, and proton flux. It is specific and detailed, though it does not explicitly differentiate itself from sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description names a concrete audience and use case: operators tracking HF radio blackout and radiation storm risk. It does not state when to prefer an alternative tool or when not to use this one, but the intended context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
noaa_spaceweather_get_solar_windGet Solar WindARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| resolution | No | 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. | reduced |
| window_hours | No | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| mag | No | 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". |
| error | No | Present when the call failed. Absent on success. |
| notice | No | What shaped the response: an empty window (with the newest feed record), series bounded to 200 records, or series omitted under "summary". |
| plasma | No | Plasma records in the window, oldest first. "reduced": at most 200, each its bucket's fastest speed, newest last. Empty under "summary". |
| bzStatus | No | Bz status from latestMag, e.g. "Southward Bz -14 nT — storm-driving conditions."; "Bz data unavailable." without a reading. |
| magCount | No | Records in mag (magWindowRecords has the pre-reduction total); under "summary", the records the window held. |
| latestMag | No | Newest mag record in the window; null when the window has none. |
| plasmaCount | No | Records in plasma (plasmaWindowRecords has the pre-reduction total); under "summary", the records the window held. |
| bzMinTimeTag | No | ISO 8601 time of bzMinInWindow; null when it is null. |
| latestPlasma | No | Newest plasma record in the window; null when the window has none. |
| btMaxInWindow | No | Peak Bt in nT across the whole window; null when it has no Bt. |
| bzMinInWindow | No | Most southward Bz in nT across the whole window; null when it has no Bz. |
| speedMaxTimeTag | No | ISO 8601 time of speedMaxInWindow; null when it is null. |
| magBucketRecords | No | Mag records per emitted record, 1 if untouched. Present only after a reduction. |
| magWindowRecords | No | Mag records in the window before reduction. Present after a reduction or under "summary". |
| speedMaxInWindow | No | Peak speed in km/s across the whole window; null when it has no speed. |
| latestFeedMagTime | No | ISO 8601 time of the newest mag record in the feed, window aside; null when none. |
| densityMaxInWindow | No | Peak proton density in particles/cm³ across the whole window; null when none. |
| feedStalenessHours | No | Hours from the newest record in either feed to now; null when both are empty. |
| plasmaBucketRecords | No | Plasma records per emitted record, 1 if untouched. Present only after a reduction. |
| plasmaWindowRecords | No | Plasma records in the window before reduction. Present after a reduction or under "summary". |
| latestFeedPlasmaTime | No | ISO 8601 time of the newest plasma record in the feed, window aside; null when none. |
| bzSouthMinutesInWindow | No | Minutes of Bz < 0: 1-minute mag records across the whole window. Feed gaps are not counted. 0 when none. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the read-only/idempotent annotations, it discloses ordering (oldest first), per-record spacecraft tagging, the 200-record cap, the three resolution modes, feed staleness behavior, and the storm-trigger threshold. This is far more behavioral context than annotations alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core definition and packed with necessary operational detail. It is long and occasionally dense, but the complexity of the resolution modes justifies the length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Combined with rich parameter schemas, an output schema, and safety annotations, the description leaves no invocation-critical gap: modes, window limits, staleness reporting, and related tools are all covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents both parameters thoroughly (100% coverage), so the baseline is 3. The description adds useful cross-parameter context—the 24-hour feed limit, record update cadence, and Bz risk semantics—but much of the mode behavior is also in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource (real-time solar wind measurements from L1) and a concrete return (plasma and magnetic field time series with Bz). It distinguishes the tool from the sibling list by its unique focus on solar wind parameters, and even references the complementary kp-index tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It says to use the summary mode for 'what is Bz doing now' questions and tells the agent to use it alongside noaa_spaceweather_get_kp_index to judge storm translation. It does not explicitly state when NOT to use this tool or compare it to other siblings, so it stops short of a full when/when-not guide.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
6 tool updates
- Changed
noaa_spaceweather_get_alerts27 fields changed- changed
Output schema / properties / activeOnly / descriptionPrevious value: -"Echo of the active_only input: true when the records are the in-force set, false when they are every product in the window. Distinguishes an empty in-force result from an empty feed window."New value: +"Echo of active_only: true for the in-force set, false for every product in the window." - changed
Output schema / properties / alerts / descriptionPrevious value: -"Matching SWPC alert/watch/warning records."New value: +"Matching SWPC products." - changed
Output schema / properties / alerts / items / descriptionPrevious value: -"One SWPC alert, watch, warning, or summary."New value: +"One SWPC product." - changed
Output schema / properties / alerts / items / properties / cancelled / descriptionPrevious value: -"True when this record cancels a previously issued product (\"CANCEL WARNING:\"/\"CANCEL WATCH:\"/\"CANCEL ALERT:\" headline) rather than being in force. Always false when active_only=true, which excludes both the cancellation record and the product it names — a cancelled product carries cancelled: false itself, so this flag does not identify one. Set active_only=false to see cancellations and what they cancelled."New value: +"True when this record cancels an earlier product; the cancelled product itself stays false. Always false under active_only=true, which drops both." - changed
Output schema / properties / alerts / items / properties / issueDatetime / descriptionPrevious value: -"ISO 8601 issue datetime."New value: +"ISO 8601 issue time." - changed
Output schema / properties / alerts / items / properties / level / descriptionPrevious value: -"NOAA scale level 0–5, read from the scale stated in the message body. 0 means the product states no NOAA scale (e.g. a K4 warning, below the G-scale; or a radio-burst alert, outside the scales) — not a severity of zero. See noaaScale for the scale letter."New value: +"NOAA scale level 0–5 stated in the body; 0 means no scale is stated, not zero severity." - changed
Output schema / properties / alerts / items / properties / message / descriptionPrevious value: -"Full plain-text message body."New value: +"Full plain-text message." - changed
Output schema / properties / alerts / items / properties / messageCode / descriptionPrevious value: -"Full SWPC \"Space Weather Message Code\" parsed from the message body, e.g. \"WARK04\", \"ALTEF3\" — the code that drives product type, phenomenon, and level."New value: +"Full message code from the body, e.g. \"WARK04\"." - changed
Output schema / properties / alerts / items / properties / noaaScale / descriptionPrevious value: -"NOAA scale stated in the message body, e.g. \"G1\", \"R2\", \"S1\"; null when the product states none."New value: +"NOAA scale stated in the body, e.g. \"G1\"; null when none." - changed
Output schema / properties / alerts / items / properties / phenomenon / descriptionPrevious value: -"Short phenomenon name derived from the body's NOAA scale letter, e.g. \"Geomagnetic\", \"Radio Blackout\", \"Solar Radiation\"."New value: +"Phenomenon from the scale letter, e.g. \"Geomagnetic\"." - changed
Output schema / properties / alerts / items / properties / productId / descriptionPrevious value: -"Short SWPC feed product ID, e.g. \"K04W\", \"EF3A\". See messageCode for the full code."New value: +"Short SWPC product ID, e.g. \"K04W\"." - changed
Output schema / properties / alerts / items / properties / productType / descriptionPrevious value: -"Product classification derived from the code prefix."New value: +"Product type, from the code prefix." - changed
Output schema / properties / alerts / items / properties / serialNumber / descriptionPrevious value: -"The record's SWPC \"Serial Number:\" value, e.g. \"1125\"; null when the body carries no such line. A per-message-code counter, not a globally unique ID — it repeats across codes and within one code on a corrected reissue, so quote it together with messageCode. It is the key the \"Cancel Serial Number:\", \"Extension to Serial Number:\", and \"Continuation of Serial Number:\" lines in message point at, which is what makes those chains navigable."New value: +"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." - changed
Output schema / properties / alerts / items / properties / validFrom / descriptionPrevious value: -"Validity-window start as ISO 8601 UTC, parsed from the message body (\"Valid From\" or \"Begin Time\"); null when the product carries no start line."New value: +"ISO 8601 UTC validity start stated in the body; null when none." - changed
Output schema / properties / alerts / items / properties / validTo / descriptionPrevious value: -"Validity-window end as ISO 8601 UTC. Read from the message body's \"Valid To\", \"Now Valid Until\", or \"End Time\" label when the product states one. A Watch states none, so its end is derived from the \"Highest Storm Level Predicted by Day:\" list instead: the instant the last listed UTC day forecasting a storm ends (a trailing \"None\" day is a forecast of quiet, not coverage), so a Watch listing Sep 17 as its last storm day ends at 2026-09-18T00:00:00Z. Null when nothing in the body states or implies an end — a point-in-time Alert, or a Watch forecasting no storm on any listed day."New value: +"ISO 8601 UTC validity end; for a Watch, the end of its last listed storm day. Null when nothing states or implies an end." - changed
Output schema / properties / appliedCutoff / descriptionPrevious value: -"ISO 8601 UTC instant the applied window starts at: a product issued before this is outside it. Present only under active_only=true."New value: +"ISO 8601 UTC start of the applied window. Present only under active_only=true." - changed
Output schema / properties / appliedWindowHours / descriptionPrevious value: -"The max_age_hours window as applied, echoed so a caller can see what bounded the candidate set. Present only under active_only=true, where a future validity end can keep an older product in scope."New value: +"max_age_hours as applied. Present only under active_only=true." - changed
Output schema / properties / exclusions / descriptionPrevious value: -"How many products active_only=true left out, by reason. Reasons overlap, so each excluded record is counted under the first that applies, in this field order — these counts plus totalCount equal the number of records the feed carried. Emitted only when something was excluded, and never under active_only=false. Use it to tell \"space weather is quiet\" from \"everything was filtered\" without a second active_only=false call."New value: +"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." - changed
Output schema / properties / exclusions / properties / agedOut / descriptionPrevious value: -"Issued outside the applied window with no validity end still ahead."New value: +"Issued before the window, no validity end ahead." - changed
Output schema / properties / exclusions / properties / cancellationRecord / descriptionPrevious value: -"Cancellation notices themselves."New value: +"Cancellation notices." - changed
Output schema / properties / exclusions / properties / cancelledBySerial / descriptionPrevious value: -"Named by a later cancellation's \"Cancel Serial Number:\" under the same code."New value: +"Named by a later cancellation." - changed
Output schema / properties / exclusions / properties / productType / descriptionPrevious value: -"Summaries and unrecognized products, which are never in force."New value: +"Summaries and unrecognized products." - changed
Output schema / properties / exclusions / properties / superseded / descriptionPrevious value: -"Carries the supersede line but is not the newest record that does."New value: +"Replaced by a newer superseding Watch." - changed
Output schema / properties / exclusions / properties / validityElapsed / descriptionPrevious value: -"Validity end already passed, with nothing newer cancelling or superseding it."New value: +"Validity end already passed." - changed
Output schema / properties / fetchedAt / descriptionPrevious value: -"ISO 8601 timestamp of when this data was fetched."New value: +"ISO 8601 fetch time." - changed
Output schema / properties / notice / descriptionPrevious value: -"Status notice when no products were returned."New value: +"Set when no products were returned." - changed
Output schema / properties / totalCount / descriptionPrevious value: -"Count of records in the alerts array."New value: +"Records in alerts."
- Changed
noaa_spaceweather_get_aurora_forecast7 fields changed- changed
Output schema / properties / forecastTime / descriptionPrevious value: -"Time the aurora forecast is valid for, ISO 8601."New value: +"ISO 8601 time the forecast is valid for." - changed
Output schema / properties / gridPointCount / descriptionPrevious value: -"Total number of grid points in the OVATION model."New value: +"OVATION grid point count." - changed
Output schema / properties / localLookup / anyOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "auroraPercent": { - "description": "Aurora probability at the nearest grid point (0–100%).", - "type": "number" - }, - "darkness": { - "description": "Sky darkness at the requested coordinates at forecastTime, from sunElevationDeg: day at 0° and above, civil_twilight from −6° up to 0°, nautical_twilight from −12° up to −6°, dark below −12°.", - "enum": [ - "day", - "civil_twilight", - "nautical_twilight", - "dark" - ], - "type": "string" - }, - "geomagneticLatitude": { - "description": "Centered-dipole geomagnetic latitude the requested coordinates convert to (degrees, −90 to 90). Aurora bands are geomagnetic, so this — not the geographic latitude — is what minKpRequired and the verdict are derived from. It can differ from the geographic latitude by up to ±9.2° in either direction.", - "type": "number" - }, - "gridLatitude": { - "description": "Nearest OVATION grid latitude.", - "type": "number" - }, - "gridLongitude": { - "description": "Nearest OVATION grid longitude.", - "type": "number" - }, - "horizonDistanceKm": { - "description": "Great-circle distance from the requested point to the cell carrying horizonMaxPercent, in km. Null when horizonMaxPercent is null.", - "type": [ - "number", - "null" - ] - }, - "horizonMaxLatitude": { - "description": "Grid latitude of the cell carrying horizonMaxPercent (degrees); the nearest such cell when several tie. Null when horizonMaxPercent is null.", - "type": [ - "number", - "null" - ] - }, - "horizonMaxPercent": { - "description": "Highest aurora probability (0–100%) among grid cells poleward of gridLatitude, within ±2° longitude and 1000 km of the requested point. Null when no grid cell lies in that window, which on the full grid happens only when gridLatitude is ±90.", - "type": [ - "number", - "null" - ] - }, - "minGScale": { - "description": "NOAA G level matching minKpRequired (1–5), 0 inside the quiet-time auroral oval where no storm is needed, and null below 40° geomagnetic where no storm level reaches.", - "type": [ - "number", - "null" - ] - }, - "minKpRequired": { - "description": "Minimum Kp for aurora at this geomagnetic latitude — the floor of the band, in SWPC thirds (4.67, 5.67, 6.67, 7.67, 9.00), or 0 inside the quiet-time auroral oval above 65°. Reported as 9 where no storm level reaches, which minGScale=null distinguishes from a genuine G5 threshold. The 60° G1 band is this server’s interpolation between the oval edge and NOAA’s G2 figure; the rest are the NOAA scales page figures.", - "type": "number" - }, - "requestedLatitude": { - "description": "Geographic latitude supplied in the request (degrees, −90 to 90).", - "type": "number" - }, - "requestedLongitude": { - "description": "Geographic longitude supplied in the request (degrees, −180 to 180).", - "type": "number" - }, - "sunElevationDeg": { - "description": "Geometric solar elevation at the requested coordinates at forecastTime, in degrees (−90 to 90, rounded to 0.1°, no refraction correction). Negative when the sun is below the horizon.", - "type": "number" - }, - "verdict": { - "description": "Plain-language visibility verdict for the requested coordinates at forecastTime, e.g. \"Good aurora chance (42%) — Kp≥6.67 (G3) needed at 51.2° geomagnetic.\" Opens \"Not visible — daylight\" when darkness is day.", - "type": "string" - } - }, - "required": [ - "requestedLatitude", - "requestedLongitude", - "geomagneticLatitude", - "gridLatitude", - "gridLongitude", - "auroraPercent", - "minKpRequired", - "minGScale", - "sunElevationDeg", - "darkness", - "horizonMaxPercent", - "horizonMaxLatitude", - "horizonDistanceKm", - "verdict" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "auroraPercent": { + "description": "Aurora probability at the nearest grid point (0–100%).", + "type": "number" + }, + "darkness": { + "description": "Sky state from sunElevationDeg: day ≥ 0°, civil_twilight ≥ −6°, nautical_twilight ≥ −12°, dark below.", + "enum": [ + "day", + "civil_twilight", + "nautical_twilight", + "dark" + ], + "type": "string" + }, + "geomagneticLatitude": { + "description": "Geomagnetic latitude of the request, in degrees (up to ±9.2° from geographic); minKpRequired and the verdict use it.", + "type": "number" + }, + "gridLatitude": { + "description": "Nearest grid latitude, in degrees.", + "type": "number" + }, + "gridLongitude": { + "description": "Nearest grid longitude, in degrees.", + "type": "number" + }, + "horizonDistanceKm": { + "description": "Distance in km to the horizonMaxPercent cell; null when it is null.", + "type": [ + "number", + "null" + ] + }, + "horizonMaxLatitude": { + "description": "Grid latitude of horizonMaxPercent, in degrees (nearest on a tie); null when it is null.", + "type": [ + "number", + "null" + ] + }, + "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" + ] + }, + "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" + ] + }, + "minKpRequired": { + "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).", + "type": "number" + }, + "requestedLatitude": { + "description": "Requested geographic latitude, in degrees.", + "type": "number" + }, + "requestedLongitude": { + "description": "Requested geographic longitude, in degrees.", + "type": "number" + }, + "sunElevationDeg": { + "description": "Solar elevation here at forecastTime, in degrees to 0.1° (no refraction); negative below the horizon.", + "type": "number" + }, + "verdict": { + "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.", + "type": "string" + } + }, + "required": [ + "requestedLatitude", + "requestedLongitude", + "geomagneticLatitude", + "gridLatitude", + "gridLongitude", + "auroraPercent", + "minKpRequired", + "minGScale", + "sunElevationDeg", + "darkness", + "horizonMaxPercent", + "horizonMaxLatitude", + "horizonDistanceKm", + "verdict" + ], + "type": "object" + }, + { + "type": "null" + } +] - changed
Output schema / properties / localLookup / descriptionPrevious value: -"Local aurora lookup result. Null when no coordinates were provided."New value: +"Coordinate lookup; null when no coordinates were given." - changed
Output schema / properties / observationTime / descriptionPrevious value: -"Time of the OVATION model observation, ISO 8601."New value: +"ISO 8601 OVATION observation time." - changed
Output schema / properties / topAuroraPercent / descriptionPrevious value: -"Highest aurora probability anywhere on the globe (0–100)."New value: +"Highest aurora probability on the globe (0–100%)." - changed
Output schema / properties / topAuroraRegion / descriptionPrevious value: -"Approximate region of the highest aurora probability grid point."New value: +"Location of the highest grid point, e.g. \"67°N, 20°W\"; \"Unknown\" when every cell is 0%."
- Changed
noaa_spaceweather_get_conditions39 fields changed- changed
Output schema / properties / auroraLatitude / descriptionPrevious value: -"Aurora visibility guidance for current conditions, e.g. \"Aurora possible to ~55° geomagnetic latitude\"."New value: +"Aurora guidance for currentKp, e.g. \"Aurora possible to ~55° geomagnetic latitude\"." - changed
Output schema / properties / currentGScale / descriptionPrevious value: -"NOAA G-scale equivalent for current Kp (0–5)."New value: +"G level (0–5) for currentKp." - changed
Output schema / properties / discussion / anyOfPrevious value: -[ - { - "additionalProperties": false, - "description": "SWPC Forecast Discussion — the forecaster's narrative behind the storm scales. Null when include_discussion is false.", - "properties": { - "issued": { - "description": "ISO 8601 UTC time the discussion was issued, from the product's \":Issued:\" line, e.g. \"2026-06-04T12:30:00Z\". Null when the product carries no such line.", - "type": [ - "string", - "null" - ] - }, - "sections": { - "description": "One entry per topic section, in product order.", - "items": { - "additionalProperties": false, - "description": "One topic section of the discussion — its heading and the forecaster's text.", - "properties": { - "forecast": { - "description": "Forecast text for the next 3 days, or null when the section carries no \".Forecast...\" block.", - "type": [ - "string", - "null" - ] - }, - "summary": { - "description": "Past-24 h summary text, or null when the section carries no \".24 hr Summary...\" text.", - "type": [ - "string", - "null" - ] - }, - "topic": { - "description": "Section heading, e.g. \"Solar Activity\", \"Energetic Particle\", \"Solar Wind\", \"Geospace\".", - "type": "string" - } - }, - "required": [ - "topic", - "summary", - "forecast" - ], - "type": "object" - }, - "type": "array" - } - }, - "required": [ - "issued", - "sections" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": false, + "description": "SWPC forecaster's narrative behind the scales.", + "properties": { + "issued": { + "description": "ISO 8601 UTC issue time from the \":Issued:\" line; null when absent.", + "type": [ + "string", + "null" + ] + }, + "sections": { + "description": "Topic sections, in product order.", + "items": { + "additionalProperties": false, + "description": "One topic section.", + "properties": { + "forecast": { + "description": "Next-3-day forecast text; null when the section has none.", + "type": [ + "string", + "null" + ] + }, + "summary": { + "description": "Past-24 h summary text; null when the section has none.", + "type": [ + "string", + "null" + ] + }, + "topic": { + "description": "Section heading, e.g. \"Solar Activity\".", + "type": "string" + } + }, + "required": [ + "topic", + "summary", + "forecast" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "issued", + "sections" + ], + "type": "object" + }, + { + "type": "null" + } +] - changed
Output schema / properties / discussion / descriptionPrevious value: -"SWPC Forecast Discussion when include_discussion is true, otherwise null."New value: +"SWPC Forecast Discussion; null unless include_discussion is true." - changed
Output schema / properties / forecast / descriptionPrevious value: -"SWPC's 3-day NOAA scale forecast, oldest first. The series starts with today — the same calendar day as observedAt — and covers the next two days."New value: +"3-day scale forecast, oldest first; starts with today (the date of observedAt)." - changed
Output schema / properties / forecast / items / descriptionPrevious value: -"One day of the NOAA scale forecast series."New value: +"One forecast day." - changed
Output schema / properties / forecast / items / properties / G / descriptionPrevious value: -"Geomagnetic storm scale forecast for this day."New value: +"Forecast G level." - changed
Output schema / properties / forecast / items / properties / G / properties / label / descriptionPrevious value: -"NOAA scale string, e.g. \"G2\", \"R1\", \"S0\"."New value: +"Label, e.g. \"G2\"." - changed
Output schema / properties / forecast / items / properties / G / properties / scale / descriptionPrevious value: -"Storm scale level 0–5."New value: +"Level 0–5." - changed
Output schema / properties / forecast / items / properties / G / properties / text / descriptionPrevious value: -"Human-readable scale descriptor, e.g. \"Moderate\". Empty when scale is 0."New value: +"Descriptor, e.g. \"Moderate\"; \"none\" at level 0." - changed
Output schema / properties / forecast / items / properties / R / descriptionPrevious value: -"Radio blackout outlook for this day."New value: +"R outlook: a level, probabilities, or neither." - changed
Output schema / properties / forecast / items / properties / R / properties / label / descriptionPrevious value: -"NOAA scale string, e.g. \"R1\", or null when no level was issued."New value: +"Label, e.g. \"R1\"; null when no level was issued." - changed
Output schema / properties / forecast / items / properties / R / properties / majorProbPercent / descriptionPrevious value: -"Probability (%) of an R3 or greater strong radio blackout on this day, or null when SWPC issued none."New value: +"Chance (%) of an R3+ blackout this day; null when none issued." - changed
Output schema / properties / forecast / items / properties / R / properties / minorProbPercent / descriptionPrevious value: -"Probability (%) of an R1–R2 minor-to-moderate radio blackout on this day, or null when SWPC issued none."New value: +"Chance (%) of an R1–R2 blackout this day; null when none issued." - changed
Output schema / properties / forecast / items / properties / R / properties / scale / descriptionPrevious value: -"R-scale level 0–5, or null — SWPC forecasts a radio-blackout probability for a future day rather than a level."New value: +"R level 0–5; null when SWPC issued a probability, not a level." - changed
Output schema / properties / forecast / items / properties / R / properties / text / descriptionPrevious value: -"Human-readable R-scale descriptor, or null when no level was issued."New value: +"R descriptor; null when no level was issued." - changed
Output schema / properties / forecast / items / properties / S / descriptionPrevious value: -"Solar radiation storm outlook for this day."New value: +"S outlook: a level, a probability, or neither." - changed
Output schema / properties / forecast / items / properties / S / properties / label / descriptionPrevious value: -"NOAA scale string, e.g. \"S1\", or null when no level was issued."New value: +"Label, e.g. \"S1\"; null when no level was issued." - changed
Output schema / properties / forecast / items / properties / S / properties / probPercent / descriptionPrevious value: -"Probability (%) of an S1 or greater solar radiation storm on this day, or null when SWPC issued none."New value: +"Chance (%) of an S1+ radiation storm this day; null when none issued." - changed
Output schema / properties / forecast / items / properties / S / properties / scale / descriptionPrevious value: -"S-scale level 0–5, or null — SWPC forecasts a radiation-storm probability for a future day rather than a level."New value: +"S level 0–5; null when SWPC issued a probability, not a level." - changed
Output schema / properties / forecast / items / properties / S / properties / text / descriptionPrevious value: -"Human-readable S-scale descriptor, or null when no level was issued."New value: +"S descriptor; null when no level was issued." - changed
Output schema / properties / forecast / items / properties / date / descriptionPrevious value: -"Forecast date string, e.g. \"2026-06-04\"."New value: +"Forecast date, e.g. \"2026-06-04\"." - changed
Output schema / properties / observedAt / descriptionPrevious value: -"ISO 8601 UTC date and time of the NOAA scales data period this snapshot reflects, e.g. \"2026-06-04T15:00:00Z\"."New value: +"ISO 8601 UTC time of the scales data period, e.g. \"2026-06-04T15:00:00Z\"." - changed
Output schema / properties / summary / descriptionPrevious value: -"Plain-language status summary suitable for display, e.g. \"Quiet conditions\" or \"G2 moderate geomagnetic storm in progress.\""New value: +"Plain-language status, e.g. \"G2 moderate geomagnetic storm in progress.\"" - changed
Output schema / properties / today / descriptionPrevious value: -"Current observed NOAA storm scales for today."New value: +"Observed R/S/G levels for today." - changed
Output schema / properties / today / properties / G / descriptionPrevious value: -"Today's geomagnetic storm scale."New value: +"Today's G level." - changed
Output schema / properties / today / properties / G / properties / label / descriptionPrevious value: -"NOAA scale string, e.g. \"G2\", \"R1\", \"S0\"."New value: +"Label, e.g. \"G2\"." - changed
Output schema / properties / today / properties / G / properties / scale / descriptionPrevious value: -"Storm scale level 0–5."New value: +"Level 0–5." - changed
Output schema / properties / today / properties / G / properties / text / descriptionPrevious value: -"Human-readable scale descriptor, e.g. \"Moderate\". Empty when scale is 0."New value: +"Descriptor, e.g. \"Moderate\"; \"none\" at level 0." - changed
Output schema / properties / today / properties / R / descriptionPrevious value: -"Today's radio blackout scale."New value: +"Today's R level." - changed
Output schema / properties / today / properties / R / properties / label / descriptionPrevious value: -"NOAA scale string, e.g. \"G2\", \"R1\", \"S0\"."New value: +"Label, e.g. \"G2\"." - changed
Output schema / properties / today / properties / R / properties / scale / descriptionPrevious value: -"Storm scale level 0–5."New value: +"Level 0–5." - changed
Output schema / properties / today / properties / R / properties / text / descriptionPrevious value: -"Human-readable scale descriptor, e.g. \"Moderate\". Empty when scale is 0."New value: +"Descriptor, e.g. \"Moderate\"; \"none\" at level 0." - changed
Output schema / properties / today / properties / S / descriptionPrevious value: -"Today's solar radiation storm scale."New value: +"Today's S level." - changed
Output schema / properties / today / properties / S / properties / label / descriptionPrevious value: -"NOAA scale string, e.g. \"G2\", \"R1\", \"S0\"."New value: +"Label, e.g. \"G2\"." - changed
Output schema / properties / today / properties / S / properties / scale / descriptionPrevious value: -"Storm scale level 0–5."New value: +"Level 0–5." - changed
Output schema / properties / today / properties / S / properties / text / descriptionPrevious value: -"Human-readable scale descriptor, e.g. \"Moderate\". Empty when scale is 0."New value: +"Descriptor, e.g. \"Moderate\"; \"none\" at level 0." - changed
Output schema / properties / yesterday / anyOfPrevious value: -[ - { - "additionalProperties": false, - "description": "NOAA R/S/G levels SWPC assessed for the previous UTC day. Carries a date and no time: the feed states when it was generated, not when that day was observed.", - "properties": { - "G": { - "additionalProperties": false, - "description": "Geomagnetic storm level SWPC assessed for the previous UTC day.", - "properties": { - "label": { - "description": "NOAA scale string, e.g. \"G2\", \"R1\", \"S0\".", - "type": "string" - }, - "scale": { - "description": "Storm scale level 0–5.", - "type": "number" - }, - "text": { - "description": "Human-readable scale descriptor, e.g. \"Moderate\". Empty when scale is 0.", - "type": "string" - } - }, - "required": [ - "scale", - "text", - "label" - ], - "type": "object" - }, - "R": { - "additionalProperties": false, - "description": "Radio blackout level SWPC assessed for the previous UTC day.", - "properties": { - "label": { - "description": "NOAA scale string, e.g. \"G2\", \"R1\", \"S0\".", - "type": "string" - }, - "scale": { - "description": "Storm scale level 0–5.", - "type": "number" - }, - "text": { - "description": "Human-readable scale descriptor, e.g. \"Moderate\". Empty when scale is 0.", - "type": "string" - } - }, - "required": [ - "scale", - "text", - "label" - ], - "type": "object" - }, - "S": { - "additionalProperties": false, - "description": "Solar radiation storm level SWPC assessed for the previous UTC day.", - "properties": { - "label": { - "description": "NOAA scale string, e.g. \"G2\", \"R1\", \"S0\".", - "type": "string" - }, - "scale": { - "description": "Storm scale level 0–5.", - "type": "number" - }, - "text": { - "description": "Human-readable scale descriptor, e.g. \"Moderate\". Empty when scale is 0.", - "type": "string" - } - }, - "required": [ - "scale", - "text", - "label" - ], - "type": "object" - }, - "date": { - "description": "The previous UTC calendar day these levels were assessed for, e.g. \"2026-06-03\".", - "type": "string" - } - }, - "required": [ - "date", - "G", - "R", - "S" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": false, + "description": "Levels SWPC assessed for the previous UTC day.", + "properties": { + "G": { + "additionalProperties": false, + "description": "Assessed G level.", + "properties": { + "label": { + "description": "Label, e.g. \"G2\".", + "type": "string" + }, + "scale": { + "description": "Level 0–5.", + "type": "number" + }, + "text": { + "description": "Descriptor, e.g. \"Moderate\"; \"none\" at level 0.", + "type": "string" + } + }, + "required": [ + "scale", + "text", + "label" + ], + "type": "object" + }, + "R": { + "additionalProperties": false, + "description": "Assessed R level.", + "properties": { + "label": { + "description": "Label, e.g. \"G2\".", + "type": "string" + }, + "scale": { + "description": "Level 0–5.", + "type": "number" + }, + "text": { + "description": "Descriptor, e.g. \"Moderate\"; \"none\" at level 0.", + "type": "string" + } + }, + "required": [ + "scale", + "text", + "label" + ], + "type": "object" + }, + "S": { + "additionalProperties": false, + "description": "Assessed S level.", + "properties": { + "label": { + "description": "Label, e.g. \"G2\".", + "type": "string" + }, + "scale": { + "description": "Level 0–5.", + "type": "number" + }, + "text": { + "description": "Descriptor, e.g. \"Moderate\"; \"none\" at level 0.", + "type": "string" + } + }, + "required": [ + "scale", + "text", + "label" + ], + "type": "object" + }, + "date": { + "description": "Previous UTC day, e.g. \"2026-06-03\".", + "type": "string" + } + }, + "required": [ + "date", + "G", + "R", + "S" + ], + "type": "object" + }, + { + "type": "null" + } +] - changed
Output schema / properties / yesterday / descriptionPrevious value: -"NOAA R/S/G levels SWPC assessed for the previous UTC day — answers what happened yesterday without a history call. Null when the scales feed carries no previous-day period, or carries one missing a level; null never means level 0."New value: +"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."
- Changed
noaa_spaceweather_get_kp_index18 fields changed- changed
Output schema / properties / auroraLatitude / descriptionPrevious value: -"Aurora visibility guidance for current conditions."New value: +"Aurora guidance for currentKp." - changed
Output schema / properties / currentGScale / descriptionPrevious value: -"NOAA G-scale for current Kp."New value: +"G level (0–5) for currentKp." - changed
Output schema / properties / currentKp / descriptionPrevious value: -"Latest observed Kp value."New value: +"Latest observed Kp; 0 when the window has none." - changed
Output schema / properties / forecast / descriptionPrevious value: -"Forward-looking Kp forecast series (estimated and predicted entries only; observed history excluded)."New value: +"Kp forecast series: estimated and predicted entries, no observed history." - changed
Output schema / properties / forecast / items / descriptionPrevious value: -"One forward-looking Kp forecast interval (estimated or predicted)."New value: +"One Kp forecast interval." - changed
Output schema / properties / forecast / items / properties / gLabel / descriptionPrevious value: -"NOAA G-scale label, e.g. \"G0\", \"G3\"."New value: +"G label, e.g. \"G3\"." - changed
Output schema / properties / forecast / items / properties / gScale / descriptionPrevious value: -"NOAA G-scale equivalent (0–5) derived from Kp, on the same minus-third band floors SWPC uses — it agrees with noaaScale when the feed states one."New value: +"G level (0–5) derived from kp; matches noaaScale when stated." - changed
Output schema / properties / forecast / items / properties / kp / descriptionPrevious value: -"Forecasted Kp value."New value: +"Forecast Kp value (0–9)." - changed
Output schema / properties / forecast / items / properties / noaaScale / descriptionPrevious value: -"NOAA scale string, e.g. \"G1\", null when not available."New value: +"NOAA scale the feed states, e.g. \"G1\"; null when none." - changed
Output schema / properties / forecast / items / properties / observed / descriptionPrevious value: -"\"estimated\" for near-real-time model points, \"predicted\" for forecast points."New value: +"\"estimated\" (near-real-time model) or \"predicted\"." - changed
Output schema / properties / forecast / items / properties / timeTag / descriptionPrevious value: -"ISO 8601 time tag for the forecast interval."New value: +"ISO 8601 forecast interval time tag." - changed
Output schema / properties / observed / descriptionPrevious value: -"Observed Kp readings within the requested window, oldest first."New value: +"Observed Kp in the window, oldest first." - changed
Output schema / properties / observed / items / descriptionPrevious value: -"One observed Kp 3-hour interval reading."New value: +"One observed 3-hour Kp interval." - changed
Output schema / properties / observed / items / properties / auroraLatitude / descriptionPrevious value: -"Aurora visibility guidance for this Kp level, in geomagnetic latitude."New value: +"Aurora guidance for this Kp, in geomagnetic latitude." - changed
Output schema / properties / observed / items / properties / gLabel / descriptionPrevious value: -"NOAA G-scale label, e.g. \"G0\", \"G3\"."New value: +"G label, e.g. \"G3\"." - changed
Output schema / properties / observed / items / properties / gScale / descriptionPrevious value: -"NOAA G-scale equivalent (0–5). Each level starts at its \"minus\" third — G1 at Kp 4.67, G2 at 5.67, G3 at 6.67, G4 at 7.67 (through 8.67), G5 at 9."New value: +"G level (0–5) for this Kp; G1 starts at 4.67, G5 at 9." - changed
Output schema / properties / observed / items / properties / kp / descriptionPrevious value: -"Kp index value 0–9."New value: +"Kp value (0–9)." - changed
Output schema / properties / observedCount / descriptionPrevious value: -"Number of Kp observations in the observed array, matching the requested window."New value: +"Entries in observed."
- Changed
noaa_spaceweather_get_solar_activity53 fields changed- changed
Output schema / properties / activeRegions / descriptionPrevious value: -"Currently active solar regions with same-day flare counts and next-day flare probabilities. Empty when include_regions=false or no regions are active."New value: +"Active regions; empty when include_regions=false or none are active." - changed
Output schema / properties / activeRegions / items / descriptionPrevious value: -"One active solar region: morphology, the flares SWPC attributed to it that day, and the next day's flare probabilities."New value: +"One active solar region." - changed
Output schema / properties / activeRegions / items / properties / areaMillionths / descriptionPrevious value: -"Sunspot area in millionths of the solar hemisphere. Null for a spotless region (plage)."New value: +"Sunspot area in millionths of the hemisphere; null for a spotless region." - changed
Output schema / properties / activeRegions / items / properties / cFlareCount / descriptionPrevious value: -"C-class flares SWPC attributed to this region on observedDate itself — a same-day tally updated during that day, unlike the probability fields, which cover the following day."New value: +"C-class flares SWPC credited to this region on observedDate." - changed
Output schema / properties / activeRegions / items / properties / cFlareProbability / descriptionPrevious value: -"Probability of a C-class flare from this region (%), for the UTC day AFTER observedDate — SWPC issues each day’s region probabilities against the previous day’s observation."New value: +"C-class flare chance (%) for the UTC day after observedDate." - changed
Output schema / properties / activeRegions / items / properties / firstObserved / descriptionPrevious value: -"ISO 8601 UTC time SWPC first recorded this region, e.g. \"2026-09-21T07:29:27Z\"."New value: +"ISO 8601 UTC time SWPC first recorded this region." - changed
Output schema / properties / activeRegions / items / properties / mFlareCount / descriptionPrevious value: -"M-class flares SWPC attributed to this region on observedDate itself — a same-day tally updated during that day, unlike the probability fields, which cover the following day."New value: +"M-class flares SWPC credited to this region on observedDate." - changed
Output schema / properties / activeRegions / items / properties / mFlareProbability / descriptionPrevious value: -"Probability of an M-class flare from this region (%), for the UTC day AFTER observedDate — SWPC issues each day’s region probabilities against the previous day’s observation."New value: +"M-class flare chance (%) for the UTC day after observedDate." - changed
Output schema / properties / activeRegions / items / properties / magClass / descriptionPrevious value: -"Magnetic field class, e.g. \"B\"; empty for a spotless region."New value: +"Magnetic class, e.g. \"B\"; empty for a spotless region." - changed
Output schema / properties / activeRegions / items / properties / numberSpots / descriptionPrevious value: -"Number of sunspots in this region; 0 for a spotless region."New value: +"Sunspot count; 0 for a spotless region." - changed
Output schema / properties / activeRegions / items / properties / observedDate / descriptionPrevious value: -"UTC date this region was observed. The three flare counts cover this day; the four probability fields cover the following day, not this one."New value: +"UTC observation date: the flare counts cover it, the probabilities the next day." - changed
Output schema / properties / activeRegions / items / properties / protonProbability / descriptionPrevious value: -"Probability of a proton event from this region (%), for the UTC day AFTER observedDate — SWPC issues each day’s region probabilities against the previous day’s observation."New value: +"Proton event chance (%) for the UTC day after observedDate." - changed
Output schema / properties / activeRegions / items / properties / spotClass / descriptionPrevious value: -"Sunspot morphology class, e.g. \"Dsi\". Empty for a spotless region (plage), where magClass is empty and numberSpots is 0 too."New value: +"Sunspot class, e.g. \"Dsi\"; empty for a spotless region (plage)." - changed
Output schema / properties / activeRegions / items / properties / xFlareCount / descriptionPrevious value: -"X-class flares SWPC attributed to this region on observedDate itself — a same-day tally updated during that day, unlike the probability fields, which cover the following day."New value: +"X-class flares SWPC credited to this region on observedDate." - changed
Output schema / properties / activeRegions / items / properties / xFlareProbability / descriptionPrevious value: -"Probability of an X-class flare from this region (%), for the UTC day AFTER observedDate — SWPC issues each day’s region probabilities against the previous day’s observation."New value: +"X-class flare chance (%) for the UTC day after observedDate." - changed
Output schema / properties / f107 / anyOfPrevious value: -[ - { - "additionalProperties": false, - "description": "Latest daily F10.7 index.", - "properties": { - "fluxSfu": { - "description": "10.7 cm solar radio flux in solar flux units (sfu), measured at 2800 MHz.", - "type": "number" - }, - "ninetyDayMeanSfu": { - "description": "90-day mean flux in sfu; null when the selected record does not carry one.", - "type": [ - "number", - "null" - ] - }, - "observedTime": { - "description": "ISO 8601 UTC time of the observation (normalized from the feed's Z-less tag). Up to ~24 h old — read it rather than treating the value as now.", - "type": "string" - }, - "reportingSchedule": { - "description": "Which of the three daily Penticton reports this is: \"Morning\", \"Noon\", or \"Afternoon\".", - "type": "string" - } - }, - "required": [ - "observedTime", - "fluxSfu", - "ninetyDayMeanSfu", - "reportingSchedule" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": false, + "description": "Daily F10.7 reading.", + "properties": { + "fluxSfu": { + "description": "10.7 cm (2800 MHz) solar radio flux, in sfu.", + "type": "number" + }, + "ninetyDayMeanSfu": { + "description": "90-day mean flux in sfu; null when the record carries none.", + "type": [ + "number", + "null" + ] + }, + "observedTime": { + "description": "ISO 8601 UTC observation time; can be ~24 h old.", + "type": "string" + }, + "reportingSchedule": { + "description": "Penticton report: \"Morning\", \"Noon\", or \"Afternoon\".", + "type": "string" + } + }, + "required": [ + "observedTime", + "fluxSfu", + "ninetyDayMeanSfu", + "reportingSchedule" + ], + "type": "object" + }, + { + "type": "null" + } +] - changed
Output schema / properties / f107 / descriptionPrevious value: -"Latest daily F10.7 solar radio flux — the Noon Penticton report, which is the value SWPC reports for the day. Null when the feed carries no such record."New value: +"Latest Noon report, SWPC's daily F10.7 value; null when the feed has none." - changed
Output schema / properties / fetchedAt / descriptionPrevious value: -"ISO 8601 timestamp of when this data was fetched."New value: +"ISO 8601 fetch time." - changed
Output schema / properties / latestProton / anyOfPrevious value: -[ - { - "additionalProperties": false, - "description": "One GOES integral proton flux reading with S-scale.", - "properties": { - "energy": { - "description": "Energy channel, e.g. \">=10 MeV\".", - "type": "string" - }, - "fluxPfu": { - "description": "Integral proton flux in particle flux units (pfu) at ≥10 MeV, rounded to 3 significant figures.", - "type": "number" - }, - "sScale": { - "description": "NOAA S-scale level (0–5) for this flux reading.", - "type": "number" - }, - "timeTag": { - "description": "ISO 8601 measurement time tag.", - "type": "string" - } - }, - "required": [ - "timeTag", - "fluxPfu", - "sScale", - "energy" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": false, + "description": "One GOES proton flux reading.", + "properties": { + "energy": { + "description": "Energy channel, e.g. \">=10 MeV\".", + "type": "string" + }, + "fluxPfu": { + "description": "≥10 MeV integral proton flux in pfu, to 3 significant figures.", + "type": "number" + }, + "sScale": { + "description": "S level (0–5) for this flux.", + "type": "number" + }, + "timeTag": { + "description": "ISO 8601 measurement time.", + "type": "string" + } + }, + "required": [ + "timeTag", + "fluxPfu", + "sScale", + "energy" + ], + "type": "object" + }, + { + "type": "null" + } +] - changed
Output schema / properties / latestProton / descriptionPrevious value: -"Most recent ≥10 MeV proton flux reading, null if unavailable."New value: +"Newest ≥10 MeV proton reading; null when the feed is empty." - changed
Output schema / properties / latestXray / anyOfPrevious value: -[ - { - "additionalProperties": false, - "description": "One GOES X-ray flux reading with flare class.", - "properties": { - "flareClass": { - "description": "Flare classification letter: A, B, C, M, or X.", - "type": "string" - }, - "flareClassFull": { - "description": "Flare class with magnitude, e.g. \"B2.5\" — null below the A1 floor of 1e-8 W/m² (zero and negative readings included), where SWPC's class scheme defines none.", - "type": [ - "string", - "null" - ] - }, - "fluxWm2": { - "description": "X-ray flux in W/m² (0.1-0.8nm long channel from GOES), formatted as scientific notation with 2 significant digits, e.g. \"1.4e-6 W/m²\".", - "type": "string" - }, - "fluxWm2Value": { - "description": "Same quantity as fluxWm2, unformatted, so it can be compared without parsing the display string.", - "type": "number" - }, - "satellite": { - "description": "GOES satellite number.", - "type": "number" - }, - "timeTag": { - "description": "ISO 8601 measurement time tag.", - "type": "string" - } - }, - "required": [ - "timeTag", - "fluxWm2", - "fluxWm2Value", - "flareClass", - "flareClassFull", - "satellite" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": false, + "description": "One GOES X-ray reading.", + "properties": { + "flareClass": { + "description": "Flare class letter: A, B, C, M, or X.", + "type": "string" + }, + "flareClassFull": { + "description": "Class with magnitude, e.g. \"B2.5\"; null below A1 (1e-8 W/m²), zero and negative readings included.", + "type": [ + "string", + "null" + ] + }, + "fluxWm2": { + "description": "Long-channel (0.1–0.8 nm) X-ray flux for display, e.g. \"1.4e-6 W/m²\".", + "type": "string" + }, + "fluxWm2Value": { + "description": "fluxWm2 as an unformatted number, in W/m².", + "type": "number" + }, + "satellite": { + "description": "GOES satellite number.", + "type": "number" + }, + "timeTag": { + "description": "ISO 8601 measurement time.", + "type": "string" + } + }, + "required": [ + "timeTag", + "fluxWm2", + "fluxWm2Value", + "flareClass", + "flareClassFull", + "satellite" + ], + "type": "object" + }, + { + "type": "null" + } +] - changed
Output schema / properties / latestXray / descriptionPrevious value: -"Most recent GOES X-ray flux reading, null if unavailable."New value: +"Newest X-ray reading; null when the feed is empty." - changed
Output schema / properties / notice / descriptionPrevious value: -"Guidance when the requested flare_hours window returned no flare events — names the newest flare the feed carries, or reports that the feed itself returned none."New value: +"Set when no flare began in the flare_hours window: names the newest flare in the feed, or says the feed has none." - changed
Output schema / properties / probabilities / descriptionPrevious value: -"3-day flare probability forecasts."New value: +"3-day flare probability forecast." - changed
Output schema / properties / probabilities / items / descriptionPrevious value: -"Solar flare probability forecast for one day."New value: +"Flare probabilities for one day." - changed
Output schema / properties / probabilities / items / properties / cClass1Day / descriptionPrevious value: -"Total probability of a C-class flare for this date (%)."New value: +"Deprecated: use cClassProbability (same value)." - changed
Output schema / properties / probabilities / items / properties / cClassProbability / descriptionPrevious value: -"Total probability of a C-class flare for this date (%). Date-neutral alias of cClass1Day."New value: +"C-class flare chance (%) for this date." - changed
Output schema / properties / probabilities / items / properties / mClass1Day / descriptionPrevious value: -"Total probability of an M-class flare for this date (%)."New value: +"Deprecated: use mClassProbability (same value)." - changed
Output schema / properties / probabilities / items / properties / mClassProbability / descriptionPrevious value: -"Total probability of an M-class flare for this date (%). Date-neutral alias of mClass1Day."New value: +"M-class flare chance (%) for this date." - changed
Output schema / properties / probabilities / items / properties / protonEventProbability / descriptionPrevious value: -"Probability of a ≥10 MeV proton event for this date (%). Date-neutral alias of protons1Day."New value: +"≥10 MeV proton event chance (%) for this date." - changed
Output schema / properties / probabilities / items / properties / protons1Day / descriptionPrevious value: -"Probability of a ≥10 MeV proton event for this date (%)."New value: +"Deprecated: use protonEventProbability (same value)." - changed
Output schema / properties / probabilities / items / properties / xClass1Day / descriptionPrevious value: -"Total probability of an X-class flare for this date (%)."New value: +"Deprecated: use xClassProbability (same value)." - changed
Output schema / properties / probabilities / items / properties / xClassProbability / descriptionPrevious value: -"Total probability of an X-class flare for this date (%). Date-neutral alias of xClass1Day."New value: +"X-class flare chance (%) for this date." - changed
Output schema / properties / recentFlares / descriptionPrevious value: -"Discrete flare events whose onset falls within the flare_hours window, oldest first. Empty when no flare began in the window."New value: +"Flares with onset inside flare_hours, oldest first; empty when none began." - changed
Output schema / properties / recentFlares / items / descriptionPrevious value: -"One discrete GOES X-ray flare event."New value: +"One GOES X-ray flare event." - changed
Output schema / properties / recentFlares / items / properties / beginClass / descriptionPrevious value: -"GOES class with magnitude at onset, e.g. \"B4.2\"."New value: +"Class at onset, e.g. \"B4.2\"." - changed
Output schema / properties / recentFlares / items / properties / beginTime / descriptionPrevious value: -"ISO 8601 UTC onset time (SWPC begin_time)."New value: +"ISO 8601 UTC onset time." - changed
Output schema / properties / recentFlares / items / properties / endClass / descriptionPrevious value: -"GOES class with magnitude at decay; null while the flare is still in progress."New value: +"Class at decay; null while in progress." - changed
Output schema / properties / recentFlares / items / properties / endTime / descriptionPrevious value: -"ISO 8601 UTC decay time; null while the flare is still in progress."New value: +"ISO 8601 UTC decay time; null while in progress." - changed
Output schema / properties / recentFlares / items / properties / maxClass / descriptionPrevious value: -"Peak GOES class with magnitude, e.g. \"M5.2\" — SWPC max_class, read as published."New value: +"Peak class as SWPC publishes it, e.g. \"M5.2\"." - changed
Output schema / properties / recentFlares / items / properties / maxTime / descriptionPrevious value: -"ISO 8601 UTC time of peak flux (SWPC max_time)."New value: +"ISO 8601 UTC peak time." - changed
Output schema / properties / recentFlares / items / properties / peakFluxWm2 / descriptionPrevious value: -"Peak long-channel (0.1–0.8 nm) flux in W/m² — SWPC max_xrlong."New value: +"Peak long-channel (0.1–0.8 nm) flux, in W/m²." - changed
Output schema / properties / recentFlares / items / properties / rScale / descriptionPrevious value: -"NOAA R-scale level implied by the peak flux (0–5); 0 means below the R1 threshold."New value: +"R level (0–5) the peak flux implies; 0 is below R1." - changed
Output schema / properties / recentFlares / items / properties / satellite / descriptionPrevious value: -"GOES satellite number the record came from."New value: +"GOES satellite number." - changed
Output schema / properties / recentXray / descriptionPrevious value: -"GOES X-ray flux readings from the past hour, oldest first."New value: +"X-ray readings from the past hour, oldest first." - changed
Output schema / properties / recentXray / items / descriptionPrevious value: -"One GOES X-ray flux reading with flare class."New value: +"One GOES X-ray reading." - changed
Output schema / properties / recentXray / items / properties / flareClass / descriptionPrevious value: -"Flare classification letter: A, B, C, M, or X."New value: +"Flare class letter: A, B, C, M, or X." - changed
Output schema / properties / recentXray / items / properties / flareClassFull / descriptionPrevious value: -"Flare class with magnitude, e.g. \"B2.5\" — null below the A1 floor of 1e-8 W/m² (zero and negative readings included), where SWPC's class scheme defines none."New value: +"Class with magnitude, e.g. \"B2.5\"; null below A1 (1e-8 W/m²), zero and negative readings included." - changed
Output schema / properties / recentXray / items / properties / fluxWm2 / descriptionPrevious value: -"X-ray flux in W/m² (0.1-0.8nm long channel from GOES), formatted as scientific notation with 2 significant digits, e.g. \"1.4e-6 W/m²\"."New value: +"Long-channel (0.1–0.8 nm) X-ray flux for display, e.g. \"1.4e-6 W/m²\"." - changed
Output schema / properties / recentXray / items / properties / fluxWm2Value / descriptionPrevious value: -"Same quantity as fluxWm2, unformatted, so it can be compared without parsing the display string."New value: +"fluxWm2 as an unformatted number, in W/m²." - changed
Output schema / properties / recentXray / items / properties / timeTag / descriptionPrevious value: -"ISO 8601 measurement time tag."New value: +"ISO 8601 measurement time." - changed
Output schema / properties / sScale / descriptionPrevious value: -"Current NOAA S-scale for solar radiation storms (0–5), derived from latest proton flux."New value: +"Current S level (0–5) from latestProton; 0 without a reading." - changed
Output schema / properties / sScaleText / descriptionPrevious value: -"Plain-language S-scale description, e.g. \"S2 moderate radiation storm\"."New value: +"S level descriptor, e.g. \"S2 moderate radiation storm\"."
- Changed
noaa_spaceweather_get_solar_wind37 fields changed- changed
Output schema / properties / btMaxInWindow / descriptionPrevious value: -"Highest total field magnitude Bt in nT across the whole window, computed before any reduction. Null when the window is empty or every bt in it is null."New value: +"Peak Bt in nT across the whole window; null when it has no Bt." - changed
Output schema / properties / bzMinInWindow / descriptionPrevious value: -"Lowest (most southward) Bz reading in nT across the whole window, computed before any reduction — the number storm work reads next to the latest value. Null when the window is empty or every bzGsm in it is null."New value: +"Most southward Bz in nT across the whole window; null when it has no Bz." - changed
Output schema / properties / bzMinTimeTag / descriptionPrevious value: -"ISO 8601 time tag of the record that carried bzMinInWindow. Null whenever bzMinInWindow is null."New value: +"ISO 8601 time of bzMinInWindow; null when it is null." - changed
Output schema / properties / bzSouthMinutesInWindow / descriptionPrevious value: -"Minutes of southward Bz in the window: the count of 1-minute mag records with bzGsm below 0, across the whole window before any reduction. Gaps in the feed are not counted, so it can fall short of the wall-clock time Bz spent southward. 0 on an empty window, an all-null window, or one with no southward Bz."New value: +"Minutes of Bz < 0: 1-minute mag records across the whole window. Feed gaps are not counted. 0 when none." - changed
Output schema / properties / bzStatus / descriptionPrevious value: -"Plain-language Bz status, e.g. \"Southward Bz −14 nT — storm-driving conditions\" or \"Northward Bz +5 nT — quiescent\"."New value: +"Bz status from latestMag, e.g. \"Southward Bz -14 nT — storm-driving conditions.\"; \"Bz data unavailable.\" without a reading." - changed
Output schema / properties / densityMaxInWindow / descriptionPrevious value: -"Highest proton density in particles/cm³ across the whole window, computed before any reduction. Null when the window is empty or every densityPerCm3 in it is null."New value: +"Peak proton density in particles/cm³ across the whole window; null when none." - changed
Output schema / properties / feedStalenessHours / descriptionPrevious value: -"Hours between now and the newest record across both feeds — how far behind real time the upstream data is. Null when both feeds returned no active-spacecraft records."New value: +"Hours from the newest record in either feed to now; null when both are empty." - changed
Output schema / properties / latestFeedMagTime / descriptionPrevious value: -"ISO 8601 time of the newest magnetic field record the feed carries, ignoring the window. Null when the feed returned no active-spacecraft mag records."New value: +"ISO 8601 time of the newest mag record in the feed, window aside; null when none." - changed
Output schema / properties / latestFeedPlasmaTime / descriptionPrevious value: -"ISO 8601 time of the newest plasma record the feed carries, ignoring the window. Null when the feed returned no active-spacecraft plasma records. Compare against the window to tell a quiet feed from a stale one."New value: +"ISO 8601 time of the newest plasma record in the feed, window aside; null when none." - changed
Output schema / properties / latestMag / anyOfPrevious value: -[ - { - "additionalProperties": false, - "description": "One magnetic field measurement from the active L1 spacecraft.", - "properties": { - "bt": { - "description": "Total field magnitude Bt (nT). Null when the feed omits the value.", - "type": [ - "number", - "null" - ] - }, - "bxGsm": { - "description": "Bx component in GSM coordinates (nT). Null when the feed omits the value.", - "type": [ - "number", - "null" - ] - }, - "byGsm": { - "description": "By component in GSM coordinates (nT). Null when the feed omits the value.", - "type": [ - "number", - "null" - ] - }, - "bzGsm": { - "description": "Bz component in GSM coordinates (nT). Southward (negative) drives geomagnetic storms. Null when the feed omits the value.", - "type": [ - "number", - "null" - ] - }, - "source": { - "description": "Spacecraft that reported this measurement, as named by the feed, e.g. \"SOLAR1\".", - "type": "string" - }, - "timeTag": { - "description": "ISO 8601 measurement time tag.", - "type": "string" - } - }, - "required": [ - "timeTag", - "source", - "bxGsm", - "byGsm", - "bzGsm", - "bt" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": false, + "description": "One L1 magnetic field record.", + "properties": { + "bt": { + "description": "Total field Bt in nT; null when missing.", + "type": [ + "number", + "null" + ] + }, + "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" + ] + }, + "source": { + "description": "Reporting spacecraft, e.g. \"SOLAR1\".", + "type": "string" + }, + "timeTag": { + "description": "ISO 8601 measurement time.", + "type": "string" + } + }, + "required": [ + "timeTag", + "source", + "bxGsm", + "byGsm", + "bzGsm", + "bt" + ], + "type": "object" + }, + { + "type": "null" + } +] - changed
Output schema / properties / latestMag / descriptionPrevious value: -"Most recent magnetic field reading, null if no data in window."New value: +"Newest mag record in the window; null when the window has none." - changed
Output schema / properties / latestPlasma / anyOfPrevious value: -[ - { - "additionalProperties": false, - "description": "One plasma measurement from the active L1 spacecraft.", - "properties": { - "densityPerCm3": { - "description": "Proton density in particles/cm³. Null when the feed omits the value.", - "type": [ - "number", - "null" - ] - }, - "source": { - "description": "Spacecraft that reported this measurement, as named by the feed, e.g. \"SOLAR1\".", - "type": "string" - }, - "speedKmS": { - "description": "Solar wind speed in km/s. Null when the feed omits the value.", - "type": [ - "number", - "null" - ] - }, - "temperatureK": { - "description": "Proton temperature in Kelvin. Null when the feed omits the value.", - "type": [ - "number", - "null" - ] - }, - "timeTag": { - "description": "ISO 8601 measurement time tag.", - "type": "string" - } - }, - "required": [ - "timeTag", - "source", - "densityPerCm3", - "speedKmS", - "temperatureK" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": false, + "description": "One L1 plasma record.", + "properties": { + "densityPerCm3": { + "description": "Proton density in particles/cm³; null when missing.", + "type": [ + "number", + "null" + ] + }, + "source": { + "description": "Reporting spacecraft, e.g. \"SOLAR1\".", + "type": "string" + }, + "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" + ] + }, + "timeTag": { + "description": "ISO 8601 measurement time.", + "type": "string" + } + }, + "required": [ + "timeTag", + "source", + "densityPerCm3", + "speedKmS", + "temperatureK" + ], + "type": "object" + }, + { + "type": "null" + } +] - changed
Output schema / properties / latestPlasma / descriptionPrevious value: -"Most recent plasma reading, null if no data in window."New value: +"Newest plasma record in the window; null when the window has none." - changed
Output schema / properties / mag / descriptionPrevious value: -"Magnetic field measurements (Bx, By, Bz, Bt) within the window, oldest first. Under resolution=\"reduced\" this is at most 200 real records — one per equal-size bucket of the window, each the bucket's most southward Bz — with the newest windowed record last, so the final element always equals latestMag. Empty under resolution=\"summary\"."New value: +"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\"." - changed
Output schema / properties / mag / items / descriptionPrevious value: -"One magnetic field measurement from the active L1 spacecraft."New value: +"One L1 magnetic field record." - changed
Output schema / properties / mag / items / properties / bt / descriptionPrevious value: -"Total field magnitude Bt (nT). Null when the feed omits the value."New value: +"Total field Bt in nT; null when missing." - changed
Output schema / properties / mag / items / properties / bxGsm / descriptionPrevious value: -"Bx component in GSM coordinates (nT). Null when the feed omits the value."New value: +"Bx, GSM, in nT; null when missing." - changed
Output schema / properties / mag / items / properties / byGsm / descriptionPrevious value: -"By component in GSM coordinates (nT). Null when the feed omits the value."New value: +"By, GSM, in nT; null when missing." - changed
Output schema / properties / mag / items / properties / bzGsm / descriptionPrevious value: -"Bz component in GSM coordinates (nT). Southward (negative) drives geomagnetic storms. Null when the feed omits the value."New value: +"Bz, GSM, in nT; negative (southward) drives storms; null when missing." - changed
Output schema / properties / mag / items / properties / source / descriptionPrevious value: -"Spacecraft that reported this measurement, as named by the feed, e.g. \"SOLAR1\"."New value: +"Reporting spacecraft, e.g. \"SOLAR1\"." - changed
Output schema / properties / mag / items / properties / timeTag / descriptionPrevious value: -"ISO 8601 measurement time tag."New value: +"ISO 8601 measurement time." - changed
Output schema / properties / magBucketRecords / descriptionPrevious value: -"Magnetic field records per emitted record — the bucket size the window was reduced by, or 1 when this series was returned untouched. The two series differ in length, so each carries its own factor. Present only when a reduction was applied to either series."New value: +"Mag records per emitted record, 1 if untouched. Present only after a reduction." - changed
Output schema / properties / magCount / descriptionPrevious value: -"Number of magnetic field records in the mag array. Equal to the records in the window at full resolution; under a reduction it is the emitted count, and magWindowRecords carries the pre-reduction total. Under resolution=\"summary\" the array is empty and this is the records the window held."New value: +"Records in mag (magWindowRecords has the pre-reduction total); under \"summary\", the records the window held." - changed
Output schema / properties / magWindowRecords / descriptionPrevious value: -"Magnetic field records the window held before reduction. Present only when a reduction was applied to either series, or under resolution=\"summary\"."New value: +"Mag records in the window before reduction. Present after a reduction or under \"summary\"." - changed
Output schema / properties / notice / descriptionPrevious value: -"Guidance on what shaped this response: that the requested window returned no plasma or magnetic field records — naming the newest record the feed carries, or reporting that the feed itself returned nothing from an active spacecraft — that a series was bounded to 200 records, with the per-series factors, or that resolution=\"summary\" omitted both series."New value: +"What shaped the response: an empty window (with the newest feed record), series bounded to 200 records, or series omitted under \"summary\"." - changed
Output schema / properties / plasma / descriptionPrevious value: -"Plasma measurements (speed, density, temperature) within the window, oldest first. Under resolution=\"reduced\" this is at most 200 real records — one per equal-size bucket of the window, each the bucket's fastest speed — with the newest windowed record last. Empty under resolution=\"summary\"."New value: +"Plasma records in the window, oldest first. \"reduced\": at most 200, each its bucket's fastest speed, newest last. Empty under \"summary\"." - changed
Output schema / properties / plasma / items / descriptionPrevious value: -"One plasma measurement from the active L1 spacecraft."New value: +"One L1 plasma record." - changed
Output schema / properties / plasma / items / properties / densityPerCm3 / descriptionPrevious value: -"Proton density in particles/cm³. Null when the feed omits the value."New value: +"Proton density in particles/cm³; null when missing." - changed
Output schema / properties / plasma / items / properties / source / descriptionPrevious value: -"Spacecraft that reported this measurement, as named by the feed, e.g. \"SOLAR1\"."New value: +"Reporting spacecraft, e.g. \"SOLAR1\"." - changed
Output schema / properties / plasma / items / properties / speedKmS / descriptionPrevious value: -"Solar wind speed in km/s. Null when the feed omits the value."New value: +"Solar wind speed in km/s; null when missing." - changed
Output schema / properties / plasma / items / properties / temperatureK / descriptionPrevious value: -"Proton temperature in Kelvin. Null when the feed omits the value."New value: +"Proton temperature in K; null when missing." - changed
Output schema / properties / plasma / items / properties / timeTag / descriptionPrevious value: -"ISO 8601 measurement time tag."New value: +"ISO 8601 measurement time." - changed
Output schema / properties / plasmaBucketRecords / descriptionPrevious value: -"Plasma records per emitted record — the bucket size the window was reduced by, or 1 when this series was returned untouched. Records rather than a minute cadence: the feed skips minutes, so a bucket spans a variable stretch of wall-clock time. Present only when a reduction was applied to either series."New value: +"Plasma records per emitted record, 1 if untouched. Present only after a reduction." - changed
Output schema / properties / plasmaCount / descriptionPrevious value: -"Number of plasma records in the plasma array. Equal to the records in the window at full resolution; under a reduction it is the emitted count, and plasmaWindowRecords carries the pre-reduction total. Under resolution=\"summary\" the array is empty and this is the records the window held."New value: +"Records in plasma (plasmaWindowRecords has the pre-reduction total); under \"summary\", the records the window held." - changed
Output schema / properties / plasmaWindowRecords / descriptionPrevious value: -"Plasma records the window held before reduction. Present only when a reduction was applied to either series, or under resolution=\"summary\"."New value: +"Plasma records in the window before reduction. Present after a reduction or under \"summary\"." - changed
Output schema / properties / speedMaxInWindow / descriptionPrevious value: -"Highest solar wind speed in km/s across the whole window, computed before any reduction. Null when the window is empty or every speedKmS in it is null."New value: +"Peak speed in km/s across the whole window; null when it has no speed." - changed
Output schema / properties / speedMaxTimeTag / descriptionPrevious value: -"ISO 8601 time tag of the record that carried speedMaxInWindow. Null whenever speedMaxInWindow is null."New value: +"ISO 8601 time of speedMaxInWindow; null when it is null."
6 tool updates
- Changed
noaa_spaceweather_get_alerts1 field changed- changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious value: -"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 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."New value: +"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."
- Changed
noaa_spaceweather_get_aurora_forecast1 field changed- changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious value: -"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 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."New value: +"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."
- Changed
noaa_spaceweather_get_conditions3 fields changed- changed
Output schema / anyOfPrevious value: -[ - { - "not": { - "required": [ - "error" - ] - }, - "required": [ - "observedAt", - "currentKp", - "currentGScale", - "auroraLatitude", - "today", - "forecast", - "summary", - "discussion" - ] - }, - { - "required": [ - "error" - ] - } -]New value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "observedAt", + "currentKp", + "currentGScale", + "auroraLatitude", + "yesterday", + "today", + "forecast", + "summary", + "discussion" + ] + }, + { + "required": [ + "error" + ] + } +] - changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious value: -"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 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."New value: +"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." - added
Output schema / properties / yesterdayAdded value: +{ + "anyOf": [ + { + "additionalProperties": false, + "description": "NOAA R/S/G levels SWPC assessed for the previous UTC day. Carries a date and no time: the feed states when it was generated, not when that day was observed.", + "properties": { + "G": { + "additionalProperties": false, + "description": "Geomagnetic storm level SWPC assessed for the previous UTC day.", + "properties": { + "label": { + "description": "NOAA scale string, e.g. \"G2\", \"R1\", \"S0\".", + "type": "string" + }, + "scale": { + "description": "Storm scale level 0–5.", + "type": "number" + }, + "text": { + "description": "Human-readable scale descriptor, e.g. \"Moderate\". Empty when scale is 0.", + "type": "string" + } + }, + "required": [ + "scale", + "text", + "label" + ], + "type": "object" + }, + "R": { + "additionalProperties": false, + "description": "Radio blackout level SWPC assessed for the previous UTC day.", + "properties": { + "label": { + "description": "NOAA scale string, e.g. \"G2\", \"R1\", \"S0\".", + "type": "string" + }, + "scale": { + "description": "Storm scale level 0–5.", + "type": "number" + }, + "text": { + "description": "Human-readable scale descriptor, e.g. \"Moderate\". Empty when scale is 0.", + "type": "string" + } + }, + "required": [ + "scale", + "text", + "label" + ], + "type": "object" + }, + "S": { + "additionalProperties": false, + "description": "Solar radiation storm level SWPC assessed for the previous UTC day.", + "properties": { + "label": { + "description": "NOAA scale string, e.g. \"G2\", \"R1\", \"S0\".", + "type": "string" + }, + "scale": { + "description": "Storm scale level 0–5.", + "type": "number" + }, + "text": { + "description": "Human-readable scale descriptor, e.g. \"Moderate\". Empty when scale is 0.", + "type": "string" + } + }, + "required": [ + "scale", + "text", + "label" + ], + "type": "object" + }, + "date": { + "description": "The previous UTC calendar day these levels were assessed for, e.g. \"2026-06-03\".", + "type": "string" + } + }, + "required": [ + "date", + "G", + "R", + "S" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "NOAA R/S/G levels SWPC assessed for the previous UTC day — answers what happened yesterday without a history call. Null when the scales feed carries no previous-day period, or carries one missing a level; null never means level 0." +}
- Changed
noaa_spaceweather_get_kp_index1 field changed- changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious value: -"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 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."New value: +"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."
- Changed
noaa_spaceweather_get_solar_activity13 fields changed- changed
Output schema / properties / activeRegions / descriptionPrevious value: -"Currently active solar regions with per-region flare probabilities. Empty when include_regions=false or no regions are active."New value: +"Currently active solar regions with same-day flare counts and next-day flare probabilities. Empty when include_regions=false or no regions are active." - changed
Output schema / properties / activeRegions / items / descriptionPrevious value: -"One active solar region with flare probabilities."New value: +"One active solar region: morphology, the flares SWPC attributed to it that day, and the next day's flare probabilities." - added
Output schema / properties / activeRegions / items / properties / areaMillionthsAdded value: +{ + "description": "Sunspot area in millionths of the solar hemisphere. Null for a spotless region (plage).", + "type": [ + "number", + "null" + ] +} - added
Output schema / properties / activeRegions / items / properties / cFlareCountAdded value: +{ + "description": "C-class flares SWPC attributed to this region on observedDate itself — a same-day tally updated during that day, unlike the probability fields, which cover the following day.", + "type": "number" +} - added
Output schema / properties / activeRegions / items / properties / firstObservedAdded value: +{ + "description": "ISO 8601 UTC time SWPC first recorded this region, e.g. \"2026-09-21T07:29:27Z\".", + "type": "string" +} - added
Output schema / properties / activeRegions / items / properties / mFlareCountAdded value: +{ + "description": "M-class flares SWPC attributed to this region on observedDate itself — a same-day tally updated during that day, unlike the probability fields, which cover the following day.", + "type": "number" +} - changed
Output schema / properties / activeRegions / items / properties / magClass / descriptionPrevious value: -"Magnetic field class."New value: +"Magnetic field class, e.g. \"B\"; empty for a spotless region." - changed
Output schema / properties / activeRegions / items / properties / numberSpots / descriptionPrevious value: -"Number of sunspots in this region."New value: +"Number of sunspots in this region; 0 for a spotless region." - changed
Output schema / properties / activeRegions / items / properties / observedDate / descriptionPrevious value: -"UTC date this region was observed. The four probability fields on this record cover the following day, not this one."New value: +"UTC date this region was observed. The three flare counts cover this day; the four probability fields cover the following day, not this one." - changed
Output schema / properties / activeRegions / items / properties / spotClass / descriptionPrevious value: -"Sunspot morphology class."New value: +"Sunspot morphology class, e.g. \"Dsi\". Empty for a spotless region (plage), where magClass is empty and numberSpots is 0 too." - added
Output schema / properties / activeRegions / items / properties / xFlareCountAdded value: +{ + "description": "X-class flares SWPC attributed to this region on observedDate itself — a same-day tally updated during that day, unlike the probability fields, which cover the following day.", + "type": "number" +} - changed
Output schema / properties / activeRegions / items / requiredPrevious value: -[ - "region", - "location", - "latitude", - "spotClass", - "numberSpots", - "magClass", - "cFlareProbability", - "mFlareProbability", - "xFlareProbability", - "protonProbability", - "observedDate" -]New value: +[ + "region", + "location", + "latitude", + "spotClass", + "numberSpots", + "magClass", + "areaMillionths", + "firstObserved", + "cFlareCount", + "mFlareCount", + "xFlareCount", + "cFlareProbability", + "mFlareProbability", + "xFlareProbability", + "protonProbability", + "observedDate" +] - changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious value: -"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 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."New value: +"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."
- Changed
noaa_spaceweather_get_solar_wind16 fields changed- changed
Input schema / properties / resolution / descriptionPrevious value: -"Detail level of the returned plasma and mag series. \"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). bzStatus, bzMinInWindow, latestPlasma, and latestMag are computed from the full window either way."New value: +"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." - changed
Input schema / properties / resolution / enumPrevious value: -[ - "reduced", - "full" -]New value: +[ + "summary", + "reduced", + "full" +] - changed
Output schema / anyOfPrevious value: -[ - { - "not": { - "required": [ - "error" - ] - }, - "required": [ - "plasma", - "mag", - "latestPlasma", - "latestMag", - "bzStatus", - "plasmaCount", - "magCount", - "bzMinInWindow", - "bzMinTimeTag", - "latestFeedPlasmaTime", - "latestFeedMagTime", - "feedStalenessHours" - ] - }, - { - "required": [ - "error" - ] - } -]New value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "plasma", + "mag", + "latestPlasma", + "latestMag", + "bzStatus", + "plasmaCount", + "magCount", + "bzMinInWindow", + "bzMinTimeTag", + "bzSouthMinutesInWindow", + "speedMaxInWindow", + "speedMaxTimeTag", + "densityMaxInWindow", + "btMaxInWindow", + "latestFeedPlasmaTime", + "latestFeedMagTime", + "feedStalenessHours" + ] + }, + { + "required": [ + "error" + ] + } +] - added
Output schema / properties / btMaxInWindowAdded value: +{ + "description": "Highest total field magnitude Bt in nT across the whole window, computed before any reduction. Null when the window is empty or every bt in it is null.", + "type": [ + "number", + "null" + ] +} - added
Output schema / properties / bzSouthMinutesInWindowAdded value: +{ + "description": "Minutes of southward Bz in the window: the count of 1-minute mag records with bzGsm below 0, across the whole window before any reduction. Gaps in the feed are not counted, so it can fall short of the wall-clock time Bz spent southward. 0 on an empty window, an all-null window, or one with no southward Bz.", + "type": "number" +} - added
Output schema / properties / densityMaxInWindowAdded value: +{ + "description": "Highest proton density in particles/cm³ across the whole window, computed before any reduction. Null when the window is empty or every densityPerCm3 in it is null.", + "type": [ + "number", + "null" + ] +} - changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious value: -"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 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."New value: +"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." - changed
Output schema / properties / mag / descriptionPrevious value: -"Magnetic field measurements (Bx, By, Bz, Bt) within the window, oldest first. Under resolution=\"reduced\" this is at most 200 real records — one per equal-size bucket of the window, each the bucket's most southward Bz — with the newest windowed record last, so the final element always equals latestMag."New value: +"Magnetic field measurements (Bx, By, Bz, Bt) within the window, oldest first. Under resolution=\"reduced\" this is at most 200 real records — one per equal-size bucket of the window, each the bucket's most southward Bz — with the newest windowed record last, so the final element always equals latestMag. Empty under resolution=\"summary\"." - changed
Output schema / properties / magCount / descriptionPrevious value: -"Number of magnetic field records in the mag array. Equal to the records in the window at full resolution; under a reduction it is the emitted count, and magWindowRecords carries the pre-reduction total."New value: +"Number of magnetic field records in the mag array. Equal to the records in the window at full resolution; under a reduction it is the emitted count, and magWindowRecords carries the pre-reduction total. Under resolution=\"summary\" the array is empty and this is the records the window held." - changed
Output schema / properties / magWindowRecords / descriptionPrevious value: -"Magnetic field records the window held before reduction. Present only when a reduction was applied to either series."New value: +"Magnetic field records the window held before reduction. Present only when a reduction was applied to either series, or under resolution=\"summary\"." - changed
Output schema / properties / notice / descriptionPrevious value: -"Guidance on what shaped this response: that the requested window returned no plasma or magnetic field records — naming the newest record the feed carries, or reporting that the feed itself returned nothing from an active spacecraft — and that a series was bounded to 200 records, with the per-series factors."New value: +"Guidance on what shaped this response: that the requested window returned no plasma or magnetic field records — naming the newest record the feed carries, or reporting that the feed itself returned nothing from an active spacecraft — that a series was bounded to 200 records, with the per-series factors, or that resolution=\"summary\" omitted both series." - changed
Output schema / properties / plasma / descriptionPrevious value: -"Plasma measurements (speed, density, temperature) within the window, oldest first. Under resolution=\"reduced\" this is at most 200 real records — one per equal-size bucket of the window, each the bucket's fastest speed — with the newest windowed record last."New value: +"Plasma measurements (speed, density, temperature) within the window, oldest first. Under resolution=\"reduced\" this is at most 200 real records — one per equal-size bucket of the window, each the bucket's fastest speed — with the newest windowed record last. Empty under resolution=\"summary\"." - changed
Output schema / properties / plasmaCount / descriptionPrevious value: -"Number of plasma records in the plasma array. Equal to the records in the window at full resolution; under a reduction it is the emitted count, and plasmaWindowRecords carries the pre-reduction total."New value: +"Number of plasma records in the plasma array. Equal to the records in the window at full resolution; under a reduction it is the emitted count, and plasmaWindowRecords carries the pre-reduction total. Under resolution=\"summary\" the array is empty and this is the records the window held." - changed
Output schema / properties / plasmaWindowRecords / descriptionPrevious value: -"Plasma records the window held before reduction. Present only when a reduction was applied to either series."New value: +"Plasma records the window held before reduction. Present only when a reduction was applied to either series, or under resolution=\"summary\"." - added
Output schema / properties / speedMaxInWindowAdded value: +{ + "description": "Highest solar wind speed in km/s across the whole window, computed before any reduction. Null when the window is empty or every speedKmS in it is null.", + "type": [ + "number", + "null" + ] +} - added
Output schema / properties / speedMaxTimeTagAdded value: +{ + "description": "ISO 8601 time tag of the record that carried speedMaxInWindow. Null whenever speedMaxInWindow is null.", + "type": [ + "string", + "null" + ] +}
1 tool update
- Changed
noaa_spaceweather_get_aurora_forecast2 fields changed- changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious value: -"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 before failing. `feed_moved`: SWPC feed path returns a permanent 4xx (404, 410, 401, 403). Fails in one attempt. `invalid_coordinates`: One coordinate provided without the other. Other values are possible when a failure originates below the handler."New value: +"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 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." - changed
Output schema / properties / localLookup / anyOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "auroraPercent": { - "description": "Aurora probability at the nearest grid point (0–100%).", - "type": "number" - }, - "geomagneticLatitude": { - "description": "Centered-dipole geomagnetic latitude the requested coordinates convert to (degrees, −90 to 90). Aurora bands are geomagnetic, so this — not the geographic latitude — is what minKpRequired and the verdict are derived from. It can differ from the geographic latitude by up to ±9.2° in either direction.", - "type": "number" - }, - "gridLatitude": { - "description": "Nearest OVATION grid latitude.", - "type": "number" - }, - "gridLongitude": { - "description": "Nearest OVATION grid longitude.", - "type": "number" - }, - "minGScale": { - "description": "NOAA G level matching minKpRequired (1–5), 0 inside the quiet-time auroral oval where no storm is needed, and null below 40° geomagnetic where no storm level reaches.", - "type": [ - "number", - "null" - ] - }, - "minKpRequired": { - "description": "Minimum Kp for aurora at this geomagnetic latitude — the floor of the band, in SWPC thirds (4.67, 5.67, 6.67, 7.67, 9.00), or 0 inside the quiet-time auroral oval above 65°. Reported as 9 where no storm level reaches, which minGScale=null distinguishes from a genuine G5 threshold. The 60° G1 band is this server’s interpolation between the oval edge and NOAA’s G2 figure; the rest are the NOAA scales page figures.", - "type": "number" - }, - "requestedLatitude": { - "description": "Geographic latitude supplied in the request (degrees, −90 to 90).", - "type": "number" - }, - "requestedLongitude": { - "description": "Geographic longitude supplied in the request (degrees, −180 to 180).", - "type": "number" - }, - "verdict": { - "description": "Plain-language visibility verdict at this geomagnetic latitude, e.g. \"Good aurora chance (42%) — Kp≥6.67 (G3) needed at 51.2° geomagnetic latitude.\"", - "type": "string" - } - }, - "required": [ - "requestedLatitude", - "requestedLongitude", - "geomagneticLatitude", - "gridLatitude", - "gridLongitude", - "auroraPercent", - "minKpRequired", - "minGScale", - "verdict" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "auroraPercent": { + "description": "Aurora probability at the nearest grid point (0–100%).", + "type": "number" + }, + "darkness": { + "description": "Sky darkness at the requested coordinates at forecastTime, from sunElevationDeg: day at 0° and above, civil_twilight from −6° up to 0°, nautical_twilight from −12° up to −6°, dark below −12°.", + "enum": [ + "day", + "civil_twilight", + "nautical_twilight", + "dark" + ], + "type": "string" + }, + "geomagneticLatitude": { + "description": "Centered-dipole geomagnetic latitude the requested coordinates convert to (degrees, −90 to 90). Aurora bands are geomagnetic, so this — not the geographic latitude — is what minKpRequired and the verdict are derived from. It can differ from the geographic latitude by up to ±9.2° in either direction.", + "type": "number" + }, + "gridLatitude": { + "description": "Nearest OVATION grid latitude.", + "type": "number" + }, + "gridLongitude": { + "description": "Nearest OVATION grid longitude.", + "type": "number" + }, + "horizonDistanceKm": { + "description": "Great-circle distance from the requested point to the cell carrying horizonMaxPercent, in km. Null when horizonMaxPercent is null.", + "type": [ + "number", + "null" + ] + }, + "horizonMaxLatitude": { + "description": "Grid latitude of the cell carrying horizonMaxPercent (degrees); the nearest such cell when several tie. Null when horizonMaxPercent is null.", + "type": [ + "number", + "null" + ] + }, + "horizonMaxPercent": { + "description": "Highest aurora probability (0–100%) among grid cells poleward of gridLatitude, within ±2° longitude and 1000 km of the requested point. Null when no grid cell lies in that window, which on the full grid happens only when gridLatitude is ±90.", + "type": [ + "number", + "null" + ] + }, + "minGScale": { + "description": "NOAA G level matching minKpRequired (1–5), 0 inside the quiet-time auroral oval where no storm is needed, and null below 40° geomagnetic where no storm level reaches.", + "type": [ + "number", + "null" + ] + }, + "minKpRequired": { + "description": "Minimum Kp for aurora at this geomagnetic latitude — the floor of the band, in SWPC thirds (4.67, 5.67, 6.67, 7.67, 9.00), or 0 inside the quiet-time auroral oval above 65°. Reported as 9 where no storm level reaches, which minGScale=null distinguishes from a genuine G5 threshold. The 60° G1 band is this server’s interpolation between the oval edge and NOAA’s G2 figure; the rest are the NOAA scales page figures.", + "type": "number" + }, + "requestedLatitude": { + "description": "Geographic latitude supplied in the request (degrees, −90 to 90).", + "type": "number" + }, + "requestedLongitude": { + "description": "Geographic longitude supplied in the request (degrees, −180 to 180).", + "type": "number" + }, + "sunElevationDeg": { + "description": "Geometric solar elevation at the requested coordinates at forecastTime, in degrees (−90 to 90, rounded to 0.1°, no refraction correction). Negative when the sun is below the horizon.", + "type": "number" + }, + "verdict": { + "description": "Plain-language visibility verdict for the requested coordinates at forecastTime, e.g. \"Good aurora chance (42%) — Kp≥6.67 (G3) needed at 51.2° geomagnetic.\" Opens \"Not visible — daylight\" when darkness is day.", + "type": "string" + } + }, + "required": [ + "requestedLatitude", + "requestedLongitude", + "geomagneticLatitude", + "gridLatitude", + "gridLongitude", + "auroraPercent", + "minKpRequired", + "minGScale", + "sunElevationDeg", + "darkness", + "horizonMaxPercent", + "horizonMaxLatitude", + "horizonDistanceKm", + "verdict" + ], + "type": "object" + }, + { + "type": "null" + } +]
3 tool updates
- Changed
noaa_spaceweather_get_conditions28 fields changed- added
Input schema / properties / include_discussionAdded value: +{ + "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" +} - changed
Output schema / anyOfPrevious value: -[ - { - "not": { - "required": [ - "error" - ] - }, - "required": [ - "observedAt", - "currentKp", - "currentGScale", - "auroraLatitude", - "today", - "forecast", - "summary" - ] - }, - { - "required": [ - "error" - ] - } -]New value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "observedAt", + "currentKp", + "currentGScale", + "auroraLatitude", + "today", + "forecast", + "summary", + "discussion" + ] + }, + { + "required": [ + "error" + ] + } +] - added
Output schema / properties / discussionAdded value: +{ + "anyOf": [ + { + "additionalProperties": false, + "description": "SWPC Forecast Discussion — the forecaster's narrative behind the storm scales. Null when include_discussion is false.", + "properties": { + "issued": { + "description": "ISO 8601 UTC time the discussion was issued, from the product's \":Issued:\" line, e.g. \"2026-06-04T12:30:00Z\". Null when the product carries no such line.", + "type": [ + "string", + "null" + ] + }, + "sections": { + "description": "One entry per topic section, in product order.", + "items": { + "additionalProperties": false, + "description": "One topic section of the discussion — its heading and the forecaster's text.", + "properties": { + "forecast": { + "description": "Forecast text for the next 3 days, or null when the section carries no \".Forecast...\" block.", + "type": [ + "string", + "null" + ] + }, + "summary": { + "description": "Past-24 h summary text, or null when the section carries no \".24 hr Summary...\" text.", + "type": [ + "string", + "null" + ] + }, + "topic": { + "description": "Section heading, e.g. \"Solar Activity\", \"Energetic Particle\", \"Solar Wind\", \"Geospace\".", + "type": "string" + } + }, + "required": [ + "topic", + "summary", + "forecast" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "issued", + "sections" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "SWPC Forecast Discussion when include_discussion is true, otherwise null." +} - changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious value: -"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 before failing. `feed_moved`: SWPC feed path returns a permanent 4xx (404, 410, 401, 403), or the scales feed no longer carries its \"0\" (today) period. Fails in one attempt. Other values are possible when a failure originates below the handler."New value: +"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 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." - changed
Output schema / properties / forecast / descriptionPrevious value: -"3-day NOAA scale forecast (next 1–3 days)."New value: +"SWPC's 3-day NOAA scale forecast, oldest first. The series starts with today — the same calendar day as observedAt — and covers the next two days." - changed
Output schema / properties / forecast / items / descriptionPrevious value: -"3-day NOAA scale forecast for one calendar day."New value: +"One day of the NOAA scale forecast series." - changed
Output schema / properties / forecast / items / properties / G / descriptionPrevious value: -"Geomagnetic storm scale for this day."New value: +"Geomagnetic storm scale forecast for this day." - changed
Output schema / properties / forecast / items / properties / R / descriptionPrevious value: -"Radio blackout scale for this day."New value: +"Radio blackout outlook for this day." - changed
Output schema / properties / forecast / items / properties / R / properties / label / descriptionPrevious value: -"NOAA scale string, e.g. \"G2\", \"R1\", \"S0\"."New value: +"NOAA scale string, e.g. \"R1\", or null when no level was issued." - changed
Output schema / properties / forecast / items / properties / R / properties / label / typePrevious value: -"string"New value: +[ + "string", + "null" +] - added
Output schema / properties / forecast / items / properties / R / properties / majorProbPercentAdded value: +{ + "description": "Probability (%) of an R3 or greater strong radio blackout on this day, or null when SWPC issued none.", + "type": [ + "number", + "null" + ] +} - added
Output schema / properties / forecast / items / properties / R / properties / minorProbPercentAdded value: +{ + "description": "Probability (%) of an R1–R2 minor-to-moderate radio blackout on this day, or null when SWPC issued none.", + "type": [ + "number", + "null" + ] +} - changed
Output schema / properties / forecast / items / properties / R / properties / scale / descriptionPrevious value: -"Storm scale level 0–5."New value: +"R-scale level 0–5, or null — SWPC forecasts a radio-blackout probability for a future day rather than a level." - changed
Output schema / properties / forecast / items / properties / R / properties / scale / typePrevious value: -"number"New value: +[ + "number", + "null" +] - changed
Output schema / properties / forecast / items / properties / R / properties / text / descriptionPrevious value: -"Human-readable scale descriptor, e.g. \"Moderate\". Empty when scale is 0."New value: +"Human-readable R-scale descriptor, or null when no level was issued." - changed
Output schema / properties / forecast / items / properties / R / properties / text / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / forecast / items / properties / R / requiredPrevious value: -[ - "scale", - "text", - "label" -]New value: +[ + "scale", + "text", + "label", + "minorProbPercent", + "majorProbPercent" +] - changed
Output schema / properties / forecast / items / properties / S / descriptionPrevious value: -"Solar radiation storm scale for this day."New value: +"Solar radiation storm outlook for this day." - changed
Output schema / properties / forecast / items / properties / S / properties / label / descriptionPrevious value: -"NOAA scale string, e.g. \"G2\", \"R1\", \"S0\"."New value: +"NOAA scale string, e.g. \"S1\", or null when no level was issued." - changed
Output schema / properties / forecast / items / properties / S / properties / label / typePrevious value: -"string"New value: +[ + "string", + "null" +] - added
Output schema / properties / forecast / items / properties / S / properties / probPercentAdded value: +{ + "description": "Probability (%) of an S1 or greater solar radiation storm on this day, or null when SWPC issued none.", + "type": [ + "number", + "null" + ] +} - changed
Output schema / properties / forecast / items / properties / S / properties / scale / descriptionPrevious value: -"Storm scale level 0–5."New value: +"S-scale level 0–5, or null — SWPC forecasts a radiation-storm probability for a future day rather than a level." - changed
Output schema / properties / forecast / items / properties / S / properties / scale / typePrevious value: -"number"New value: +[ + "number", + "null" +] - changed
Output schema / properties / forecast / items / properties / S / properties / text / descriptionPrevious value: -"Human-readable scale descriptor, e.g. \"Moderate\". Empty when scale is 0."New value: +"Human-readable S-scale descriptor, or null when no level was issued." - changed
Output schema / properties / forecast / items / properties / S / properties / text / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / forecast / items / properties / S / requiredPrevious value: -[ - "scale", - "text", - "label" -]New value: +[ + "scale", + "text", + "label", + "probPercent" +] - changed
Output schema / properties / forecast / items / properties / date / descriptionPrevious value: -"Forecast date string."New value: +"Forecast date string, e.g. \"2026-06-04\"." - changed
Output schema / properties / observedAt / descriptionPrevious value: -"UTC date and time of the NOAA scales data period this snapshot reflects, e.g. \"2026-06-04 15:00:00\"."New value: +"ISO 8601 UTC date and time of the NOAA scales data period this snapshot reflects, e.g. \"2026-06-04T15:00:00Z\"."
- Changed
noaa_spaceweather_get_solar_activity9 fields changed- added
Input schema / properties / flare_hoursAdded value: +{ + "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.", + "maximum": 168, + "minimum": 1, + "type": "integer" +} - changed
Output schema / anyOfPrevious value: -[ - { - "not": { - "required": [ - "error" - ] - }, - "required": [ - "latestXray", - "recentXray", - "probabilities", - "latestProton", - "sScale", - "sScaleText", - "activeRegions", - "fetchedAt" - ] - }, - { - "required": [ - "error" - ] - } -]New value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "latestXray", + "recentXray", + "recentFlares", + "f107", + "probabilities", + "latestProton", + "sScale", + "sScaleText", + "activeRegions", + "fetchedAt" + ] + }, + { + "required": [ + "error" + ] + } +] - added
Output schema / properties / f107Added value: +{ + "anyOf": [ + { + "additionalProperties": false, + "description": "Latest daily F10.7 index.", + "properties": { + "fluxSfu": { + "description": "10.7 cm solar radio flux in solar flux units (sfu), measured at 2800 MHz.", + "type": "number" + }, + "ninetyDayMeanSfu": { + "description": "90-day mean flux in sfu; null when the selected record does not carry one.", + "type": [ + "number", + "null" + ] + }, + "observedTime": { + "description": "ISO 8601 UTC time of the observation (normalized from the feed's Z-less tag). Up to ~24 h old — read it rather than treating the value as now.", + "type": "string" + }, + "reportingSchedule": { + "description": "Which of the three daily Penticton reports this is: \"Morning\", \"Noon\", or \"Afternoon\".", + "type": "string" + } + }, + "required": [ + "observedTime", + "fluxSfu", + "ninetyDayMeanSfu", + "reportingSchedule" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Latest daily F10.7 solar radio flux — the Noon Penticton report, which is the value SWPC reports for the day. Null when the feed carries no such record." +} - changed
Output schema / properties / latestXray / anyOfPrevious value: -[ - { - "additionalProperties": false, - "description": "One GOES X-ray flux reading with flare class.", - "properties": { - "flareClass": { - "description": "Flare classification letter: A, B, C, M, or X.", - "type": "string" - }, - "fluxWm2": { - "description": "X-ray flux in W/m² (0.1-0.8nm long channel from GOES), formatted as scientific notation with 2 significant digits, e.g. \"1.4e-6 W/m²\".", - "type": "string" - }, - "satellite": { - "description": "GOES satellite number.", - "type": "number" - }, - "timeTag": { - "description": "ISO 8601 measurement time tag.", - "type": "string" - } - }, - "required": [ - "timeTag", - "fluxWm2", - "flareClass", - "satellite" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": false, + "description": "One GOES X-ray flux reading with flare class.", + "properties": { + "flareClass": { + "description": "Flare classification letter: A, B, C, M, or X.", + "type": "string" + }, + "flareClassFull": { + "description": "Flare class with magnitude, e.g. \"B2.5\" — null below the A1 floor of 1e-8 W/m² (zero and negative readings included), where SWPC's class scheme defines none.", + "type": [ + "string", + "null" + ] + }, + "fluxWm2": { + "description": "X-ray flux in W/m² (0.1-0.8nm long channel from GOES), formatted as scientific notation with 2 significant digits, e.g. \"1.4e-6 W/m²\".", + "type": "string" + }, + "fluxWm2Value": { + "description": "Same quantity as fluxWm2, unformatted, so it can be compared without parsing the display string.", + "type": "number" + }, + "satellite": { + "description": "GOES satellite number.", + "type": "number" + }, + "timeTag": { + "description": "ISO 8601 measurement time tag.", + "type": "string" + } + }, + "required": [ + "timeTag", + "fluxWm2", + "fluxWm2Value", + "flareClass", + "flareClassFull", + "satellite" + ], + "type": "object" + }, + { + "type": "null" + } +] - added
Output schema / properties / noticeAdded value: +{ + "description": "Guidance when the requested flare_hours window returned no flare events — names the newest flare the feed carries, or reports that the feed itself returned none.", + "type": "string" +} - added
Output schema / properties / recentFlaresAdded value: +{ + "description": "Discrete flare events whose onset falls within the flare_hours window, oldest first. Empty when no flare began in the window.", + "items": { + "additionalProperties": false, + "description": "One discrete GOES X-ray flare event.", + "properties": { + "beginClass": { + "description": "GOES class with magnitude at onset, e.g. \"B4.2\".", + "type": "string" + }, + "beginTime": { + "description": "ISO 8601 UTC onset time (SWPC begin_time).", + "type": "string" + }, + "endClass": { + "description": "GOES class with magnitude at decay; null while the flare is still in progress.", + "type": [ + "string", + "null" + ] + }, + "endTime": { + "description": "ISO 8601 UTC decay time; null while the flare is still in progress.", + "type": [ + "string", + "null" + ] + }, + "maxClass": { + "description": "Peak GOES class with magnitude, e.g. \"M5.2\" — SWPC max_class, read as published.", + "type": "string" + }, + "maxTime": { + "description": "ISO 8601 UTC time of peak flux (SWPC max_time).", + "type": "string" + }, + "peakFluxWm2": { + "description": "Peak long-channel (0.1–0.8 nm) flux in W/m² — SWPC max_xrlong.", + "type": "number" + }, + "rScale": { + "description": "NOAA R-scale level implied by the peak flux (0–5); 0 means below the R1 threshold.", + "type": "number" + }, + "satellite": { + "description": "GOES satellite number the record came from.", + "type": "number" + } + }, + "required": [ + "beginTime", + "maxTime", + "endTime", + "beginClass", + "maxClass", + "endClass", + "peakFluxWm2", + "rScale", + "satellite" + ], + "type": "object" + }, + "type": "array" +} - added
Output schema / properties / recentXray / items / properties / flareClassFullAdded value: +{ + "description": "Flare class with magnitude, e.g. \"B2.5\" — null below the A1 floor of 1e-8 W/m² (zero and negative readings included), where SWPC's class scheme defines none.", + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / recentXray / items / properties / fluxWm2ValueAdded value: +{ + "description": "Same quantity as fluxWm2, unformatted, so it can be compared without parsing the display string.", + "type": "number" +} - changed
Output schema / properties / recentXray / items / requiredPrevious value: -[ - "timeTag", - "fluxWm2", - "flareClass", - "satellite" -]New value: +[ + "timeTag", + "fluxWm2", + "fluxWm2Value", + "flareClass", + "flareClassFull", + "satellite" +]
- Changed
noaa_spaceweather_get_solar_wind14 fields changed- added
Input schema / properties / resolutionAdded value: +{ + "default": "reduced", + "description": "Detail level of the returned plasma and mag series. \"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). bzStatus, bzMinInWindow, latestPlasma, and latestMag are computed from the full window either way.", + "enum": [ + "reduced", + "full" + ], + "type": "string" +} - changed
Input schema / properties / window_hours / descriptionPrevious value: -"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. When a window comes back empty, feedStalenessHours and latestFeedPlasmaTime/latestFeedMagTime report how current the feed actually is."New value: +"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." - changed
Output schema / anyOfPrevious value: -[ - { - "not": { - "required": [ - "error" - ] - }, - "required": [ - "plasma", - "mag", - "latestPlasma", - "latestMag", - "bzStatus", - "plasmaCount", - "magCount", - "latestFeedPlasmaTime", - "latestFeedMagTime", - "feedStalenessHours" - ] - }, - { - "required": [ - "error" - ] - } -]New value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "plasma", + "mag", + "latestPlasma", + "latestMag", + "bzStatus", + "plasmaCount", + "magCount", + "bzMinInWindow", + "bzMinTimeTag", + "latestFeedPlasmaTime", + "latestFeedMagTime", + "feedStalenessHours" + ] + }, + { + "required": [ + "error" + ] + } +] - added
Output schema / properties / bzMinInWindowAdded value: +{ + "description": "Lowest (most southward) Bz reading in nT across the whole window, computed before any reduction — the number storm work reads next to the latest value. Null when the window is empty or every bzGsm in it is null.", + "type": [ + "number", + "null" + ] +} - added
Output schema / properties / bzMinTimeTagAdded value: +{ + "description": "ISO 8601 time tag of the record that carried bzMinInWindow. Null whenever bzMinInWindow is null.", + "type": [ + "string", + "null" + ] +} - changed
Output schema / properties / mag / descriptionPrevious value: -"Magnetic field measurements (Bx, By, Bz, Bt) within the window, oldest first."New value: +"Magnetic field measurements (Bx, By, Bz, Bt) within the window, oldest first. Under resolution=\"reduced\" this is at most 200 real records — one per equal-size bucket of the window, each the bucket's most southward Bz — with the newest windowed record last, so the final element always equals latestMag." - added
Output schema / properties / magBucketRecordsAdded value: +{ + "description": "Magnetic field records per emitted record — the bucket size the window was reduced by, or 1 when this series was returned untouched. The two series differ in length, so each carries its own factor. Present only when a reduction was applied to either series.", + "type": "number" +} - changed
Output schema / properties / magCount / descriptionPrevious value: -"Number of magnetic field records in the mag array, spanning the requested window."New value: +"Number of magnetic field records in the mag array. Equal to the records in the window at full resolution; under a reduction it is the emitted count, and magWindowRecords carries the pre-reduction total." - added
Output schema / properties / magWindowRecordsAdded value: +{ + "description": "Magnetic field records the window held before reduction. Present only when a reduction was applied to either series.", + "type": "number" +} - changed
Output schema / properties / notice / descriptionPrevious value: -"Guidance when the requested window returned no plasma or magnetic field records — names the newest record the feed carries, or reports that the feed itself returned nothing from an active spacecraft."New value: +"Guidance on what shaped this response: that the requested window returned no plasma or magnetic field records — naming the newest record the feed carries, or reporting that the feed itself returned nothing from an active spacecraft — and that a series was bounded to 200 records, with the per-series factors." - changed
Output schema / properties / plasma / descriptionPrevious value: -"Plasma measurements (speed, density, temperature) within the window, oldest first."New value: +"Plasma measurements (speed, density, temperature) within the window, oldest first. Under resolution=\"reduced\" this is at most 200 real records — one per equal-size bucket of the window, each the bucket's fastest speed — with the newest windowed record last." - added
Output schema / properties / plasmaBucketRecordsAdded value: +{ + "description": "Plasma records per emitted record — the bucket size the window was reduced by, or 1 when this series was returned untouched. Records rather than a minute cadence: the feed skips minutes, so a bucket spans a variable stretch of wall-clock time. Present only when a reduction was applied to either series.", + "type": "number" +} - changed
Output schema / properties / plasmaCount / descriptionPrevious value: -"Number of plasma records in the plasma array, spanning the requested window."New value: +"Number of plasma records in the plasma array. Equal to the records in the window at full resolution; under a reduction it is the emitted count, and plasmaWindowRecords carries the pre-reduction total." - added
Output schema / properties / plasmaWindowRecordsAdded value: +{ + "description": "Plasma records the window held before reduction. Present only when a reduction was applied to either series.", + "type": "number" +}
6 tool updates
- Changed
noaa_spaceweather_get_alerts14 fields changed- changed
Input schema / properties / active_only / descriptionPrevious value: -"When true (default), return only in-force Warnings, Watches, and Alerts; exclude Summaries, Other, expired products, and cancellation notices. Set false to return all products, including cancellations (flagged by the cancelled field)."New value: +"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)." - changed
Input schema / properties / max_age_hours / descriptionPrevious value: -"Maximum age of alerts to return, in hours (default 48). The SWPC feed retains all historical records — this window prevents returning weeks of historical notices as \"active.\""New value: +"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." - changed
Output schema / anyOfPrevious value: -[ - { - "not": { - "required": [ - "error" - ] - }, - "required": [ - "alerts", - "totalCount", - "fetchedAt" - ] - }, - { - "required": [ - "error" - ] - } -]New value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "alerts", + "totalCount", + "activeOnly", + "fetchedAt" + ] + }, + { + "required": [ + "error" + ] + } +] - added
Output schema / properties / activeOnlyAdded value: +{ + "description": "Echo of the active_only input: true when the records are the in-force set, false when they are every product in the window. Distinguishes an empty in-force result from an empty feed window.", + "type": "boolean" +} - changed
Output schema / properties / alerts / items / properties / cancelled / descriptionPrevious value: -"True when this record cancels a previously issued product (\"CANCEL WARNING:\"/\"CANCEL ALERT:\" headline) rather than being in force. Always false when active_only=true, which excludes cancellations; set active_only=false to see them."New value: +"True when this record cancels a previously issued product (\"CANCEL WARNING:\"/\"CANCEL WATCH:\"/\"CANCEL ALERT:\" headline) rather than being in force. Always false when active_only=true, which excludes both the cancellation record and the product it names — a cancelled product carries cancelled: false itself, so this flag does not identify one. Set active_only=false to see cancellations and what they cancelled." - added
Output schema / properties / alerts / items / properties / serialNumberAdded value: +{ + "description": "The record's SWPC \"Serial Number:\" value, e.g. \"1125\"; null when the body carries no such line. A per-message-code counter, not a globally unique ID — it repeats across codes and within one code on a corrected reissue, so quote it together with messageCode. It is the key the \"Cancel Serial Number:\", \"Extension to Serial Number:\", and \"Continuation of Serial Number:\" lines in message point at, which is what makes those chains navigable.", + "type": [ + "string", + "null" + ] +} - changed
Output schema / properties / alerts / items / properties / validTo / descriptionPrevious value: -"Validity-window end as ISO 8601 UTC, parsed from the message body (\"Valid To\", \"Now Valid Until\", or \"End Time\"); null when the product carries no end line."New value: +"Validity-window end as ISO 8601 UTC. Read from the message body's \"Valid To\", \"Now Valid Until\", or \"End Time\" label when the product states one. A Watch states none, so its end is derived from the \"Highest Storm Level Predicted by Day:\" list instead: the instant the last listed UTC day forecasting a storm ends (a trailing \"None\" day is a forecast of quiet, not coverage), so a Watch listing Sep 17 as its last storm day ends at 2026-09-18T00:00:00Z. Null when nothing in the body states or implies an end — a point-in-time Alert, or a Watch forecasting no storm on any listed day." - changed
Output schema / properties / alerts / items / requiredPrevious value: -[ - "productId", - "messageCode", - "productType", - "level", - "noaaScale", - "cancelled", - "phenomenon", - "issueDatetime", - "validFrom", - "validTo", - "message" -]New value: +[ + "productId", + "messageCode", + "productType", + "level", + "noaaScale", + "cancelled", + "serialNumber", + "phenomenon", + "issueDatetime", + "validFrom", + "validTo", + "message" +] - added
Output schema / properties / appliedCutoffAdded value: +{ + "description": "ISO 8601 UTC instant the applied window starts at: a product issued before this is outside it. Present only under active_only=true.", + "type": "string" +} - added
Output schema / properties / appliedWindowHoursAdded value: +{ + "description": "The max_age_hours window as applied, echoed so a caller can see what bounded the candidate set. Present only under active_only=true, where a future validity end can keep an older product in scope.", + "type": "number" +} - changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious value: -"Machine-readable failure mode. Declared by this tool: `feed_unavailable`: SWPC endpoint returns non-OK status or times out after retries. Other values are possible when a failure originates below the handler."New value: +"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 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." - changed
Output schema / properties / error / properties / data / properties / reason / examplesPrevious value: -[ - "feed_unavailable" -]New value: +[ + "feed_unavailable", + "feed_moved" +] - added
Output schema / properties / exclusionsAdded value: +{ + "additionalProperties": false, + "description": "How many products active_only=true left out, by reason. Reasons overlap, so each excluded record is counted under the first that applies, in this field order — these counts plus totalCount equal the number of records the feed carried. Emitted only when something was excluded, and never under active_only=false. Use it to tell \"space weather is quiet\" from \"everything was filtered\" without a second active_only=false call.", + "properties": { + "agedOut": { + "description": "Issued outside the applied window with no validity end still ahead.", + "type": "number" + }, + "cancellationRecord": { + "description": "Cancellation notices themselves.", + "type": "number" + }, + "cancelledBySerial": { + "description": "Named by a later cancellation's \"Cancel Serial Number:\" under the same code.", + "type": "number" + }, + "productType": { + "description": "Summaries and unrecognized products, which are never in force.", + "type": "number" + }, + "superseded": { + "description": "Carries the supersede line but is not the newest record that does.", + "type": "number" + }, + "validityElapsed": { + "description": "Validity end already passed, with nothing newer cancelling or superseding it.", + "type": "number" + } + }, + "required": [ + "agedOut", + "productType", + "cancellationRecord", + "cancelledBySerial", + "superseded", + "validityElapsed" + ], + "type": "object" +} - changed
Output schema / properties / notice / descriptionPrevious value: -"Status notice when no alerts are active."New value: +"Status notice when no products were returned."
- Changed
noaa_spaceweather_get_aurora_forecast3 fields changed- changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious value: -"Machine-readable failure mode. Declared by this tool: `feed_unavailable`: SWPC endpoint returns non-OK status or times out after retries. `invalid_coordinates`: One coordinate provided without the other. Other values are possible when a failure originates below the handler."New value: +"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 before failing. `feed_moved`: SWPC feed path returns a permanent 4xx (404, 410, 401, 403). Fails in one attempt. `invalid_coordinates`: One coordinate provided without the other. Other values are possible when a failure originates below the handler." - changed
Output schema / properties / error / properties / data / properties / reason / examplesPrevious value: -[ - "feed_unavailable", - "invalid_coordinates" -]New value: +[ + "feed_unavailable", + "feed_moved", + "invalid_coordinates" +] - changed
Output schema / properties / localLookup / anyOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "auroraPercent": { - "description": "Aurora probability at the nearest grid point (0–100%).", - "type": "number" - }, - "gridLatitude": { - "description": "Nearest OVATION grid latitude.", - "type": "number" - }, - "gridLongitude": { - "description": "Nearest OVATION grid longitude.", - "type": "number" - }, - "minKpRequired": { - "description": "Minimum Kp threshold for aurora visibility at this latitude.", - "type": "number" - }, - "requestedLatitude": { - "description": "Geographic latitude supplied in the request (degrees, −90 to 90).", - "type": "number" - }, - "requestedLongitude": { - "description": "Geographic longitude supplied in the request (degrees, −180 to 180).", - "type": "number" - }, - "verdict": { - "description": "Plain-language visibility verdict, e.g. \"Good aurora chance (42%) — Kp≥6 needed at this latitude.\"", - "type": "string" - } - }, - "required": [ - "requestedLatitude", - "requestedLongitude", - "gridLatitude", - "gridLongitude", - "auroraPercent", - "minKpRequired", - "verdict" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "auroraPercent": { + "description": "Aurora probability at the nearest grid point (0–100%).", + "type": "number" + }, + "geomagneticLatitude": { + "description": "Centered-dipole geomagnetic latitude the requested coordinates convert to (degrees, −90 to 90). Aurora bands are geomagnetic, so this — not the geographic latitude — is what minKpRequired and the verdict are derived from. It can differ from the geographic latitude by up to ±9.2° in either direction.", + "type": "number" + }, + "gridLatitude": { + "description": "Nearest OVATION grid latitude.", + "type": "number" + }, + "gridLongitude": { + "description": "Nearest OVATION grid longitude.", + "type": "number" + }, + "minGScale": { + "description": "NOAA G level matching minKpRequired (1–5), 0 inside the quiet-time auroral oval where no storm is needed, and null below 40° geomagnetic where no storm level reaches.", + "type": [ + "number", + "null" + ] + }, + "minKpRequired": { + "description": "Minimum Kp for aurora at this geomagnetic latitude — the floor of the band, in SWPC thirds (4.67, 5.67, 6.67, 7.67, 9.00), or 0 inside the quiet-time auroral oval above 65°. Reported as 9 where no storm level reaches, which minGScale=null distinguishes from a genuine G5 threshold. The 60° G1 band is this server’s interpolation between the oval edge and NOAA’s G2 figure; the rest are the NOAA scales page figures.", + "type": "number" + }, + "requestedLatitude": { + "description": "Geographic latitude supplied in the request (degrees, −90 to 90).", + "type": "number" + }, + "requestedLongitude": { + "description": "Geographic longitude supplied in the request (degrees, −180 to 180).", + "type": "number" + }, + "verdict": { + "description": "Plain-language visibility verdict at this geomagnetic latitude, e.g. \"Good aurora chance (42%) — Kp≥6.67 (G3) needed at 51.2° geomagnetic latitude.\"", + "type": "string" + } + }, + "required": [ + "requestedLatitude", + "requestedLongitude", + "geomagneticLatitude", + "gridLatitude", + "gridLongitude", + "auroraPercent", + "minKpRequired", + "minGScale", + "verdict" + ], + "type": "object" + }, + { + "type": "null" + } +]
- Changed
noaa_spaceweather_get_conditions2 fields changed- changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious value: -"Machine-readable failure mode. Declared by this tool: `feed_unavailable`: SWPC endpoint returns non-OK status or times out after retries. Other values are possible when a failure originates below the handler."New value: +"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 before failing. `feed_moved`: SWPC feed path returns a permanent 4xx (404, 410, 401, 403), or the scales feed no longer carries its \"0\" (today) period. Fails in one attempt. Other values are possible when a failure originates below the handler." - changed
Output schema / properties / error / properties / data / properties / reason / examplesPrevious value: -[ - "feed_unavailable" -]New value: +[ + "feed_unavailable", + "feed_moved" +]
- Changed
noaa_spaceweather_get_kp_index5 fields changed- changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious value: -"Machine-readable failure mode. Declared by this tool: `feed_unavailable`: SWPC endpoint returns non-OK status or times out after retries. Other values are possible when a failure originates below the handler."New value: +"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 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." - changed
Output schema / properties / error / properties / data / properties / reason / examplesPrevious value: -[ - "feed_unavailable" -]New value: +[ + "feed_unavailable", + "feed_moved" +] - changed
Output schema / properties / forecast / items / properties / gScale / descriptionPrevious value: -"NOAA G-scale equivalent (0–5) derived from Kp."New value: +"NOAA G-scale equivalent (0–5) derived from Kp, on the same minus-third band floors SWPC uses — it agrees with noaaScale when the feed states one." - changed
Output schema / properties / observed / items / properties / auroraLatitude / descriptionPrevious value: -"Aurora visibility guidance for this Kp level."New value: +"Aurora visibility guidance for this Kp level, in geomagnetic latitude." - changed
Output schema / properties / observed / items / properties / gScale / descriptionPrevious value: -"NOAA G-scale equivalent (0–5)."New value: +"NOAA G-scale equivalent (0–5). Each level starts at its \"minus\" third — G1 at Kp 4.67, G2 at 5.67, G3 at 6.67, G4 at 7.67 (through 8.67), G5 at 9."
- Changed
noaa_spaceweather_get_solar_activity7 fields changed- changed
Output schema / properties / activeRegions / items / properties / cFlareProbability / descriptionPrevious value: -"Probability of a C-class flare (%)."New value: +"Probability of a C-class flare from this region (%), for the UTC day AFTER observedDate — SWPC issues each day’s region probabilities against the previous day’s observation." - changed
Output schema / properties / activeRegions / items / properties / mFlareProbability / descriptionPrevious value: -"Probability of an M-class flare (%)."New value: +"Probability of an M-class flare from this region (%), for the UTC day AFTER observedDate — SWPC issues each day’s region probabilities against the previous day’s observation." - changed
Output schema / properties / activeRegions / items / properties / observedDate / descriptionPrevious value: -"Date this region data was observed."New value: +"UTC date this region was observed. The four probability fields on this record cover the following day, not this one." - changed
Output schema / properties / activeRegions / items / properties / protonProbability / descriptionPrevious value: -"Probability of a proton event (%)."New value: +"Probability of a proton event from this region (%), for the UTC day AFTER observedDate — SWPC issues each day’s region probabilities against the previous day’s observation." - changed
Output schema / properties / activeRegions / items / properties / xFlareProbability / descriptionPrevious value: -"Probability of an X-class flare (%)."New value: +"Probability of an X-class flare from this region (%), for the UTC day AFTER observedDate — SWPC issues each day’s region probabilities against the previous day’s observation." - changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious value: -"Machine-readable failure mode. Declared by this tool: `feed_unavailable`: SWPC endpoint returns non-OK status or times out after retries. Other values are possible when a failure originates below the handler."New value: +"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 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." - changed
Output schema / properties / error / properties / data / properties / reason / examplesPrevious value: -[ - "feed_unavailable" -]New value: +[ + "feed_unavailable", + "feed_moved" +]
- Changed
noaa_spaceweather_get_solar_wind2 fields changed- changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious value: -"Machine-readable failure mode. Declared by this tool: `feed_unavailable`: SWPC endpoint returns non-OK status or times out after retries. Other values are possible when a failure originates below the handler."New value: +"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 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." - changed
Output schema / properties / error / properties / data / properties / reason / examplesPrevious value: -[ - "feed_unavailable" -]New value: +[ + "feed_unavailable", + "feed_moved" +]
3 tool updates
- Changed
noaa_spaceweather_get_alerts6 fields changed- removed
Output schema / properties / alerts / items / properties / noaaScale / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / alerts / items / properties / noaaScale / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / alerts / items / properties / validFrom / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / alerts / items / properties / validFrom / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / alerts / items / properties / validTo / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / alerts / items / properties / validTo / typeAdded value: +[ + "string", + "null" +]
- Changed
noaa_spaceweather_get_kp_index2 fields changed- removed
Output schema / properties / forecast / items / properties / noaaScale / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / forecast / items / properties / noaaScale / typeAdded value: +[ + "string", + "null" +]
- Changed
noaa_spaceweather_get_solar_wind22 fields changed- removed
Output schema / properties / feedStalenessHours / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / feedStalenessHours / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / latestFeedMagTime / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / latestFeedMagTime / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / latestFeedPlasmaTime / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / latestFeedPlasmaTime / typeAdded value: +[ + "string", + "null" +] - changed
Output schema / properties / latestMag / anyOfPrevious value: -[ - { - "additionalProperties": false, - "description": "One magnetic field measurement from the active L1 spacecraft.", - "properties": { - "bt": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "description": "Total field magnitude Bt (nT). Null when the feed omits the value." - }, - "bxGsm": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "description": "Bx component in GSM coordinates (nT). Null when the feed omits the value." - }, - "byGsm": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "description": "By component in GSM coordinates (nT). Null when the feed omits the value." - }, - "bzGsm": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "description": "Bz component in GSM coordinates (nT). Southward (negative) drives geomagnetic storms. Null when the feed omits the value." - }, - "source": { - "description": "Spacecraft that reported this measurement, as named by the feed, e.g. \"SOLAR1\".", - "type": "string" - }, - "timeTag": { - "description": "ISO 8601 measurement time tag.", - "type": "string" - } - }, - "required": [ - "timeTag", - "source", - "bxGsm", - "byGsm", - "bzGsm", - "bt" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": false, + "description": "One magnetic field measurement from the active L1 spacecraft.", + "properties": { + "bt": { + "description": "Total field magnitude Bt (nT). Null when the feed omits the value.", + "type": [ + "number", + "null" + ] + }, + "bxGsm": { + "description": "Bx component in GSM coordinates (nT). Null when the feed omits the value.", + "type": [ + "number", + "null" + ] + }, + "byGsm": { + "description": "By component in GSM coordinates (nT). Null when the feed omits the value.", + "type": [ + "number", + "null" + ] + }, + "bzGsm": { + "description": "Bz component in GSM coordinates (nT). Southward (negative) drives geomagnetic storms. Null when the feed omits the value.", + "type": [ + "number", + "null" + ] + }, + "source": { + "description": "Spacecraft that reported this measurement, as named by the feed, e.g. \"SOLAR1\".", + "type": "string" + }, + "timeTag": { + "description": "ISO 8601 measurement time tag.", + "type": "string" + } + }, + "required": [ + "timeTag", + "source", + "bxGsm", + "byGsm", + "bzGsm", + "bt" + ], + "type": "object" + }, + { + "type": "null" + } +] - changed
Output schema / properties / latestPlasma / anyOfPrevious value: -[ - { - "additionalProperties": false, - "description": "One plasma measurement from the active L1 spacecraft.", - "properties": { - "densityPerCm3": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "description": "Proton density in particles/cm³. Null when the feed omits the value." - }, - "source": { - "description": "Spacecraft that reported this measurement, as named by the feed, e.g. \"SOLAR1\".", - "type": "string" - }, - "speedKmS": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "description": "Solar wind speed in km/s. Null when the feed omits the value." - }, - "temperatureK": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "description": "Proton temperature in Kelvin. Null when the feed omits the value." - }, - "timeTag": { - "description": "ISO 8601 measurement time tag.", - "type": "string" - } - }, - "required": [ - "timeTag", - "source", - "densityPerCm3", - "speedKmS", - "temperatureK" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": false, + "description": "One plasma measurement from the active L1 spacecraft.", + "properties": { + "densityPerCm3": { + "description": "Proton density in particles/cm³. Null when the feed omits the value.", + "type": [ + "number", + "null" + ] + }, + "source": { + "description": "Spacecraft that reported this measurement, as named by the feed, e.g. \"SOLAR1\".", + "type": "string" + }, + "speedKmS": { + "description": "Solar wind speed in km/s. Null when the feed omits the value.", + "type": [ + "number", + "null" + ] + }, + "temperatureK": { + "description": "Proton temperature in Kelvin. Null when the feed omits the value.", + "type": [ + "number", + "null" + ] + }, + "timeTag": { + "description": "ISO 8601 measurement time tag.", + "type": "string" + } + }, + "required": [ + "timeTag", + "source", + "densityPerCm3", + "speedKmS", + "temperatureK" + ], + "type": "object" + }, + { + "type": "null" + } +] - removed
Output schema / properties / mag / items / properties / bt / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / mag / items / properties / bt / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / mag / items / properties / bxGsm / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / mag / items / properties / bxGsm / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / mag / items / properties / byGsm / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / mag / items / properties / byGsm / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / mag / items / properties / bzGsm / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / mag / items / properties / bzGsm / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / plasma / items / properties / densityPerCm3 / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / plasma / items / properties / densityPerCm3 / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / plasma / items / properties / speedKmS / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / plasma / items / properties / speedKmS / typeAdded value: +[ + "number", + "null" +] - removed
Output schema / properties / plasma / items / properties / temperatureK / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / plasma / items / properties / temperatureK / typeAdded value: +[ + "number", + "null" +]
6 tool updates
- Changed
noaa_spaceweather_get_alerts6 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / anyOfAdded value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "alerts", + "totalCount", + "fetchedAt" + ] + }, + { + "required": [ + "error" + ] + } +] - added
Output schema / properties / errorAdded value: +{ + "additionalProperties": {}, + "description": "Present when the call failed. Absent on success.", + "properties": { + "code": { + "description": "JSON-RPC error code for this failure.", + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "data": { + "additionalProperties": {}, + "properties": { + "reason": { + "description": "Machine-readable failure mode. Declared by this tool: `feed_unavailable`: SWPC endpoint returns non-OK status or times out after retries. Other values are possible when a failure originates below the handler.", + "examples": [ + "feed_unavailable" + ], + "type": "string" + }, + "recovery": { + "additionalProperties": {}, + "description": "Actionable next step for the caller.", + "properties": { + "hint": { + "type": "string" + } + }, + "required": [ + "hint" + ], + "type": "object" + }, + "retryable": { + "description": "Whether retrying may succeed.", + "type": "boolean" + } + }, + "type": "object" + }, + "message": { + "description": "Human-readable description of what went wrong.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" +} - removed
Output schema / requiredRemoved value: -[ - "alerts", - "totalCount", - "fetchedAt" -]
- Changed
noaa_spaceweather_get_aurora_forecast6 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / anyOfAdded value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "observationTime", + "forecastTime", + "localLookup", + "gridPointCount", + "topAuroraPercent", + "topAuroraRegion" + ] + }, + { + "required": [ + "error" + ] + } +] - added
Output schema / properties / errorAdded value: +{ + "additionalProperties": {}, + "description": "Present when the call failed. Absent on success.", + "properties": { + "code": { + "description": "JSON-RPC error code for this failure.", + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "data": { + "additionalProperties": {}, + "properties": { + "reason": { + "description": "Machine-readable failure mode. Declared by this tool: `feed_unavailable`: SWPC endpoint returns non-OK status or times out after retries. `invalid_coordinates`: One coordinate provided without the other. Other values are possible when a failure originates below the handler.", + "examples": [ + "feed_unavailable", + "invalid_coordinates" + ], + "type": "string" + }, + "recovery": { + "additionalProperties": {}, + "description": "Actionable next step for the caller.", + "properties": { + "hint": { + "type": "string" + } + }, + "required": [ + "hint" + ], + "type": "object" + }, + "retryable": { + "description": "Whether retrying may succeed.", + "type": "boolean" + } + }, + "type": "object" + }, + "message": { + "description": "Human-readable description of what went wrong.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" +} - removed
Output schema / requiredRemoved value: -[ - "observationTime", - "forecastTime", - "localLookup", - "gridPointCount", - "topAuroraPercent", - "topAuroraRegion" -]
- Changed
noaa_spaceweather_get_conditions6 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / anyOfAdded value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "observedAt", + "currentKp", + "currentGScale", + "auroraLatitude", + "today", + "forecast", + "summary" + ] + }, + { + "required": [ + "error" + ] + } +] - added
Output schema / properties / errorAdded value: +{ + "additionalProperties": {}, + "description": "Present when the call failed. Absent on success.", + "properties": { + "code": { + "description": "JSON-RPC error code for this failure.", + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "data": { + "additionalProperties": {}, + "properties": { + "reason": { + "description": "Machine-readable failure mode. Declared by this tool: `feed_unavailable`: SWPC endpoint returns non-OK status or times out after retries. Other values are possible when a failure originates below the handler.", + "examples": [ + "feed_unavailable" + ], + "type": "string" + }, + "recovery": { + "additionalProperties": {}, + "description": "Actionable next step for the caller.", + "properties": { + "hint": { + "type": "string" + } + }, + "required": [ + "hint" + ], + "type": "object" + }, + "retryable": { + "description": "Whether retrying may succeed.", + "type": "boolean" + } + }, + "type": "object" + }, + "message": { + "description": "Human-readable description of what went wrong.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" +} - removed
Output schema / requiredRemoved value: -[ - "observedAt", - "currentKp", - "currentGScale", - "auroraLatitude", - "today", - "forecast", - "summary" -]
- Changed
noaa_spaceweather_get_kp_index6 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / anyOfAdded value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "observed", + "forecast", + "currentKp", + "currentGScale", + "auroraLatitude", + "observedCount" + ] + }, + { + "required": [ + "error" + ] + } +] - added
Output schema / properties / errorAdded value: +{ + "additionalProperties": {}, + "description": "Present when the call failed. Absent on success.", + "properties": { + "code": { + "description": "JSON-RPC error code for this failure.", + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "data": { + "additionalProperties": {}, + "properties": { + "reason": { + "description": "Machine-readable failure mode. Declared by this tool: `feed_unavailable`: SWPC endpoint returns non-OK status or times out after retries. Other values are possible when a failure originates below the handler.", + "examples": [ + "feed_unavailable" + ], + "type": "string" + }, + "recovery": { + "additionalProperties": {}, + "description": "Actionable next step for the caller.", + "properties": { + "hint": { + "type": "string" + } + }, + "required": [ + "hint" + ], + "type": "object" + }, + "retryable": { + "description": "Whether retrying may succeed.", + "type": "boolean" + } + }, + "type": "object" + }, + "message": { + "description": "Human-readable description of what went wrong.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" +} - removed
Output schema / requiredRemoved value: -[ - "observed", - "forecast", - "currentKp", - "currentGScale", - "auroraLatitude", - "observedCount" -]
- Changed
noaa_spaceweather_get_solar_activity6 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / anyOfAdded value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "latestXray", + "recentXray", + "probabilities", + "latestProton", + "sScale", + "sScaleText", + "activeRegions", + "fetchedAt" + ] + }, + { + "required": [ + "error" + ] + } +] - added
Output schema / properties / errorAdded value: +{ + "additionalProperties": {}, + "description": "Present when the call failed. Absent on success.", + "properties": { + "code": { + "description": "JSON-RPC error code for this failure.", + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "data": { + "additionalProperties": {}, + "properties": { + "reason": { + "description": "Machine-readable failure mode. Declared by this tool: `feed_unavailable`: SWPC endpoint returns non-OK status or times out after retries. Other values are possible when a failure originates below the handler.", + "examples": [ + "feed_unavailable" + ], + "type": "string" + }, + "recovery": { + "additionalProperties": {}, + "description": "Actionable next step for the caller.", + "properties": { + "hint": { + "type": "string" + } + }, + "required": [ + "hint" + ], + "type": "object" + }, + "retryable": { + "description": "Whether retrying may succeed.", + "type": "boolean" + } + }, + "type": "object" + }, + "message": { + "description": "Human-readable description of what went wrong.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" +} - removed
Output schema / requiredRemoved value: -[ - "latestXray", - "recentXray", - "probabilities", - "latestProton", - "sScale", - "sScaleText", - "activeRegions", - "fetchedAt" -]
- Changed
noaa_spaceweather_get_solar_wind6 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / anyOfAdded value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "plasma", + "mag", + "latestPlasma", + "latestMag", + "bzStatus", + "plasmaCount", + "magCount", + "latestFeedPlasmaTime", + "latestFeedMagTime", + "feedStalenessHours" + ] + }, + { + "required": [ + "error" + ] + } +] - added
Output schema / properties / errorAdded value: +{ + "additionalProperties": {}, + "description": "Present when the call failed. Absent on success.", + "properties": { + "code": { + "description": "JSON-RPC error code for this failure.", + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "data": { + "additionalProperties": {}, + "properties": { + "reason": { + "description": "Machine-readable failure mode. Declared by this tool: `feed_unavailable`: SWPC endpoint returns non-OK status or times out after retries. Other values are possible when a failure originates below the handler.", + "examples": [ + "feed_unavailable" + ], + "type": "string" + }, + "recovery": { + "additionalProperties": {}, + "description": "Actionable next step for the caller.", + "properties": { + "hint": { + "type": "string" + } + }, + "required": [ + "hint" + ], + "type": "object" + }, + "retryable": { + "description": "Whether retrying may succeed.", + "type": "boolean" + } + }, + "type": "object" + }, + "message": { + "description": "Human-readable description of what went wrong.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" +} - removed
Output schema / requiredRemoved value: -[ - "plasma", - "mag", - "latestPlasma", - "latestMag", - "bzStatus", - "plasmaCount", - "magCount", - "latestFeedPlasmaTime", - "latestFeedMagTime", - "feedStalenessHours" -]
1 tool update
- Changed
noaa_spaceweather_get_alerts6 fields changed- changed
Input schema / properties / active_only / descriptionPrevious value: -"When true (default), return only Warnings, Watches, and Alerts; exclude Summaries and Other. Set false to return all products."New value: +"When true (default), return only in-force Warnings, Watches, and Alerts; exclude Summaries, Other, expired products, and cancellation notices. Set false to return all products, including cancellations (flagged by the cancelled field)." - added
Output schema / properties / alerts / items / properties / cancelledAdded value: +{ + "description": "True when this record cancels a previously issued product (\"CANCEL WARNING:\"/\"CANCEL ALERT:\" headline) rather than being in force. Always false when active_only=true, which excludes cancellations; set active_only=false to see them.", + "type": "boolean" +} - changed
Output schema / properties / alerts / items / properties / level / descriptionPrevious value: -"Numeric severity level from the product code (0 when not applicable)."New value: +"NOAA scale level 0–5, read from the scale stated in the message body. 0 means the product states no NOAA scale (e.g. a K4 warning, below the G-scale; or a radio-burst alert, outside the scales) — not a severity of zero. See noaaScale for the scale letter." - added
Output schema / properties / alerts / items / properties / noaaScaleAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "NOAA scale stated in the message body, e.g. \"G1\", \"R2\", \"S1\"; null when the product states none." +} - changed
Output schema / properties / alerts / items / properties / phenomenon / descriptionPrevious value: -"Short phenomenon name, e.g. \"Geomagnetic\", \"Radio Blackout\", \"Solar Radiation\"."New value: +"Short phenomenon name derived from the body's NOAA scale letter, e.g. \"Geomagnetic\", \"Radio Blackout\", \"Solar Radiation\"." - changed
Output schema / properties / alerts / items / requiredPrevious value: -[ - "productId", - "messageCode", - "productType", - "level", - "phenomenon", - "issueDatetime", - "validFrom", - "validTo", - "message" -]New value: +[ + "productId", + "messageCode", + "productType", + "level", + "noaaScale", + "cancelled", + "phenomenon", + "issueDatetime", + "validFrom", + "validTo", + "message" +]
1 tool update
- Changed
noaa_spaceweather_get_solar_wind23 fields changed- changed
Input schema / properties / window_hours / descriptionPrevious value: -"Hours of recent solar wind history to return (1–168, default 3). Feeds update ~every 1 min."New value: +"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. When a window comes back empty, feedStalenessHours and latestFeedPlasmaTime/latestFeedMagTime report how current the feed actually is." - added
Output schema / properties / feedStalenessHoursAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "Hours between now and the newest record across both feeds — how far behind real time the upstream data is. Null when both feeds returned no active-spacecraft records." +} - added
Output schema / properties / latestFeedMagTimeAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "ISO 8601 time of the newest magnetic field record the feed carries, ignoring the window. Null when the feed returned no active-spacecraft mag records." +} - added
Output schema / properties / latestFeedPlasmaTimeAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "ISO 8601 time of the newest plasma record the feed carries, ignoring the window. Null when the feed returned no active-spacecraft plasma records. Compare against the window to tell a quiet feed from a stale one." +} - changed
Output schema / properties / latestMag / anyOfPrevious value: -[ - { - "additionalProperties": false, - "description": "One DSCOVR magnetic field measurement.", - "properties": { - "bt": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "description": "Total field magnitude Bt (nT). Null when sensor fill value." - }, - "bxGsm": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "description": "Bx component in GSM coordinates (nT). Null when sensor fill value." - }, - "byGsm": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "description": "By component in GSM coordinates (nT). Null when sensor fill value." - }, - "bzGsm": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "description": "Bz component in GSM coordinates (nT). Southward (negative) drives geomagnetic storms. Null when sensor fill value." - }, - "timeTag": { - "description": "ISO 8601 measurement time tag.", - "type": "string" - } - }, - "required": [ - "timeTag", - "bxGsm", - "byGsm", - "bzGsm", - "bt" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": false, + "description": "One magnetic field measurement from the active L1 spacecraft.", + "properties": { + "bt": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "Total field magnitude Bt (nT). Null when the feed omits the value." + }, + "bxGsm": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "Bx component in GSM coordinates (nT). Null when the feed omits the value." + }, + "byGsm": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "By component in GSM coordinates (nT). Null when the feed omits the value." + }, + "bzGsm": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "Bz component in GSM coordinates (nT). Southward (negative) drives geomagnetic storms. Null when the feed omits the value." + }, + "source": { + "description": "Spacecraft that reported this measurement, as named by the feed, e.g. \"SOLAR1\".", + "type": "string" + }, + "timeTag": { + "description": "ISO 8601 measurement time tag.", + "type": "string" + } + }, + "required": [ + "timeTag", + "source", + "bxGsm", + "byGsm", + "bzGsm", + "bt" + ], + "type": "object" + }, + { + "type": "null" + } +] - changed
Output schema / properties / latestPlasma / anyOfPrevious value: -[ - { - "additionalProperties": false, - "description": "One DSCOVR plasma measurement.", - "properties": { - "densityPerCm3": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "description": "Proton density in particles/cm³. Null when sensor fill value." - }, - "speedKmS": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "description": "Solar wind speed in km/s. Null when sensor fill value." - }, - "temperatureK": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "description": "Proton temperature in Kelvin. Null when sensor fill value." - }, - "timeTag": { - "description": "ISO 8601 measurement time tag.", - "type": "string" - } - }, - "required": [ - "timeTag", - "densityPerCm3", - "speedKmS", - "temperatureK" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": false, + "description": "One plasma measurement from the active L1 spacecraft.", + "properties": { + "densityPerCm3": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "Proton density in particles/cm³. Null when the feed omits the value." + }, + "source": { + "description": "Spacecraft that reported this measurement, as named by the feed, e.g. \"SOLAR1\".", + "type": "string" + }, + "speedKmS": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "Solar wind speed in km/s. Null when the feed omits the value." + }, + "temperatureK": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "Proton temperature in Kelvin. Null when the feed omits the value." + }, + "timeTag": { + "description": "ISO 8601 measurement time tag.", + "type": "string" + } + }, + "required": [ + "timeTag", + "source", + "densityPerCm3", + "speedKmS", + "temperatureK" + ], + "type": "object" + }, + { + "type": "null" + } +] - changed
Output schema / properties / mag / descriptionPrevious value: -"Magnetic field measurements (Bx, By, Bz, Bt) within the window."New value: +"Magnetic field measurements (Bx, By, Bz, Bt) within the window, oldest first." - changed
Output schema / properties / mag / items / descriptionPrevious value: -"One DSCOVR magnetic field measurement."New value: +"One magnetic field measurement from the active L1 spacecraft." - changed
Output schema / properties / mag / items / properties / bt / descriptionPrevious value: -"Total field magnitude Bt (nT). Null when sensor fill value."New value: +"Total field magnitude Bt (nT). Null when the feed omits the value." - changed
Output schema / properties / mag / items / properties / bxGsm / descriptionPrevious value: -"Bx component in GSM coordinates (nT). Null when sensor fill value."New value: +"Bx component in GSM coordinates (nT). Null when the feed omits the value." - changed
Output schema / properties / mag / items / properties / byGsm / descriptionPrevious value: -"By component in GSM coordinates (nT). Null when sensor fill value."New value: +"By component in GSM coordinates (nT). Null when the feed omits the value." - changed
Output schema / properties / mag / items / properties / bzGsm / descriptionPrevious value: -"Bz component in GSM coordinates (nT). Southward (negative) drives geomagnetic storms. Null when sensor fill value."New value: +"Bz component in GSM coordinates (nT). Southward (negative) drives geomagnetic storms. Null when the feed omits the value." - added
Output schema / properties / mag / items / properties / sourceAdded value: +{ + "description": "Spacecraft that reported this measurement, as named by the feed, e.g. \"SOLAR1\".", + "type": "string" +} - changed
Output schema / properties / mag / items / requiredPrevious value: -[ - "timeTag", - "bxGsm", - "byGsm", - "bzGsm", - "bt" -]New value: +[ + "timeTag", + "source", + "bxGsm", + "byGsm", + "bzGsm", + "bt" +] - added
Output schema / properties / noticeAdded value: +{ + "description": "Guidance when the requested window returned no plasma or magnetic field records — names the newest record the feed carries, or reports that the feed itself returned nothing from an active spacecraft.", + "type": "string" +} - changed
Output schema / properties / plasma / descriptionPrevious value: -"Plasma measurements (speed, density, temperature) within the window."New value: +"Plasma measurements (speed, density, temperature) within the window, oldest first." - changed
Output schema / properties / plasma / items / descriptionPrevious value: -"One DSCOVR plasma measurement."New value: +"One plasma measurement from the active L1 spacecraft." - changed
Output schema / properties / plasma / items / properties / densityPerCm3 / descriptionPrevious value: -"Proton density in particles/cm³. Null when sensor fill value."New value: +"Proton density in particles/cm³. Null when the feed omits the value." - added
Output schema / properties / plasma / items / properties / sourceAdded value: +{ + "description": "Spacecraft that reported this measurement, as named by the feed, e.g. \"SOLAR1\".", + "type": "string" +} - changed
Output schema / properties / plasma / items / properties / speedKmS / descriptionPrevious value: -"Solar wind speed in km/s. Null when sensor fill value."New value: +"Solar wind speed in km/s. Null when the feed omits the value." - changed
Output schema / properties / plasma / items / properties / temperatureK / descriptionPrevious value: -"Proton temperature in Kelvin. Null when sensor fill value."New value: +"Proton temperature in Kelvin. Null when the feed omits the value." - changed
Output schema / properties / plasma / items / requiredPrevious value: -[ - "timeTag", - "densityPerCm3", - "speedKmS", - "temperatureK" -]New value: +[ + "timeTag", + "source", + "densityPerCm3", + "speedKmS", + "temperatureK" +] - changed
Output schema / requiredPrevious value: -[ - "plasma", - "mag", - "latestPlasma", - "latestMag", - "bzStatus", - "plasmaCount", - "magCount" -]New value: +[ + "plasma", + "mag", + "latestPlasma", + "latestMag", + "bzStatus", + "plasmaCount", + "magCount", + "latestFeedPlasmaTime", + "latestFeedMagTime", + "feedStalenessHours" +]
1 tool update
- Changed
noaa_spaceweather_get_solar_activity9 fields changed- changed
Output schema / properties / probabilities / items / properties / cClass1Day / descriptionPrevious value: -"Total probability of a C-class flare for this day (%)."New value: +"Total probability of a C-class flare for this date (%)." - added
Output schema / properties / probabilities / items / properties / cClassProbabilityAdded value: +{ + "description": "Total probability of a C-class flare for this date (%). Date-neutral alias of cClass1Day.", + "type": "number" +} - changed
Output schema / properties / probabilities / items / properties / mClass1Day / descriptionPrevious value: -"Total probability of an M-class flare for this day (%)."New value: +"Total probability of an M-class flare for this date (%)." - added
Output schema / properties / probabilities / items / properties / mClassProbabilityAdded value: +{ + "description": "Total probability of an M-class flare for this date (%). Date-neutral alias of mClass1Day.", + "type": "number" +} - added
Output schema / properties / probabilities / items / properties / protonEventProbabilityAdded value: +{ + "description": "Probability of a ≥10 MeV proton event for this date (%). Date-neutral alias of protons1Day.", + "type": "number" +} - changed
Output schema / properties / probabilities / items / properties / protons1Day / descriptionPrevious value: -"Probability of ≥10 MeV proton event for this day (%)."New value: +"Probability of a ≥10 MeV proton event for this date (%)." - changed
Output schema / properties / probabilities / items / properties / xClass1Day / descriptionPrevious value: -"Total probability of an X-class flare for this day (%)."New value: +"Total probability of an X-class flare for this date (%)." - added
Output schema / properties / probabilities / items / properties / xClassProbabilityAdded value: +{ + "description": "Total probability of an X-class flare for this date (%). Date-neutral alias of xClass1Day.", + "type": "number" +} - changed
Output schema / properties / probabilities / items / requiredPrevious value: -[ - "date", - "cClass1Day", - "mClass1Day", - "xClass1Day", - "protons1Day" -]New value: +[ + "date", + "cClass1Day", + "cClassProbability", + "mClass1Day", + "mClassProbability", + "xClass1Day", + "xClassProbability", + "protons1Day", + "protonEventProbability" +]
1 tool update
- Changed
noaa_spaceweather_get_alerts3 fields changed- added
Output schema / properties / alerts / items / properties / messageCodeAdded value: +{ + "description": "Full SWPC \"Space Weather Message Code\" parsed from the message body, e.g. \"WARK04\", \"ALTEF3\" — the code that drives product type, phenomenon, and level.", + "type": "string" +} - changed
Output schema / properties / alerts / items / properties / productId / descriptionPrevious value: -"SWPC product code, e.g. \"WARK04\", \"ALTK07\"."New value: +"Short SWPC feed product ID, e.g. \"K04W\", \"EF3A\". See messageCode for the full code." - changed
Output schema / properties / alerts / items / requiredPrevious value: -[ - "productId", - "productType", - "level", - "phenomenon", - "issueDatetime", - "validFrom", - "validTo", - "message" -]New value: +[ + "productId", + "messageCode", + "productType", + "level", + "phenomenon", + "issueDatetime", + "validFrom", + "validTo", + "message" +]
2 tool updates
- Changed
noaa_spaceweather_get_alerts2 fields changed- changed
Output schema / properties / alerts / items / properties / validFrom / descriptionPrevious value: -"Validity start parsed from the message body, null if not found."New value: +"Validity-window start as ISO 8601 UTC, parsed from the message body (\"Valid From\" or \"Begin Time\"); null when the product carries no start line." - changed
Output schema / properties / alerts / items / properties / validTo / descriptionPrevious value: -"Validity end parsed from the message body, null if not found."New value: +"Validity-window end as ISO 8601 UTC, parsed from the message body (\"Valid To\", \"Now Valid Until\", or \"End Time\"); null when the product carries no end line."
- Changed
noaa_spaceweather_get_solar_activity1 field changed- changed
Output schema / properties / latestProton / anyOfPrevious value: -[ - { - "additionalProperties": false, - "description": "One GOES integral proton flux reading with S-scale.", - "properties": { - "energy": { - "description": "Energy channel, e.g. \">=10 MeV\".", - "type": "string" - }, - "fluxPfu": { - "description": "Integral proton flux in particle flux units (pfu) at ≥10 MeV.", - "type": "number" - }, - "sScale": { - "description": "NOAA S-scale level (0–5) for this flux reading.", - "type": "number" - }, - "timeTag": { - "description": "ISO 8601 measurement time tag.", - "type": "string" - } - }, - "required": [ - "timeTag", - "fluxPfu", - "sScale", - "energy" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": false, + "description": "One GOES integral proton flux reading with S-scale.", + "properties": { + "energy": { + "description": "Energy channel, e.g. \">=10 MeV\".", + "type": "string" + }, + "fluxPfu": { + "description": "Integral proton flux in particle flux units (pfu) at ≥10 MeV, rounded to 3 significant figures.", + "type": "number" + }, + "sScale": { + "description": "NOAA S-scale level (0–5) for this flux reading.", + "type": "number" + }, + "timeTag": { + "description": "ISO 8601 measurement time tag.", + "type": "string" + } + }, + "required": [ + "timeTag", + "fluxPfu", + "sScale", + "energy" + ], + "type": "object" + }, + { + "type": "null" + } +]
1 tool update
- Changed
noaa_spaceweather_get_kp_index6 fields changed- changed
Output schema / properties / forecast / descriptionPrevious value: -"3-day Kp forecast series."New value: +"Forward-looking Kp forecast series (estimated and predicted entries only; observed history excluded)." - changed
Output schema / properties / forecast / items / descriptionPrevious value: -"One Kp forecast interval."New value: +"One forward-looking Kp forecast interval (estimated or predicted)." - added
Output schema / properties / forecast / items / properties / gLabelAdded value: +{ + "description": "NOAA G-scale label, e.g. \"G0\", \"G3\".", + "type": "string" +} - added
Output schema / properties / forecast / items / properties / gScaleAdded value: +{ + "description": "NOAA G-scale equivalent (0–5) derived from Kp.", + "type": "number" +} - changed
Output schema / properties / forecast / items / properties / observed / descriptionPrevious value: -"\"observed\" for confirmed readings, \"predicted\" for forecast points."New value: +"\"estimated\" for near-real-time model points, \"predicted\" for forecast points." - changed
Output schema / properties / forecast / items / requiredPrevious value: -[ - "timeTag", - "kp", - "observed", - "noaaScale" -]New value: +[ + "timeTag", + "kp", + "observed", + "noaaScale", + "gScale", + "gLabel" +]
6 tool updates
- First observed
noaa_spaceweather_get_alerts - First observed
noaa_spaceweather_get_aurora_forecast - First observed
noaa_spaceweather_get_conditions - First observed
noaa_spaceweather_get_kp_index - First observed
noaa_spaceweather_get_solar_activity - First observed
noaa_spaceweather_get_solar_wind
Related MCP Connectors
Space weather: Kp index, NOAA 3-day geomagnetic forecast, solar flares, aurora visibility.
NOAA SWPC MCP — space weather.
Space weather: Kp index, solar flare flux, alerts. $0.01/query, free testnet funds.
Swedish space & astronomy: ISS passes, aurora forecasts, space weather, rocket launches, moon.
Related MCP Servers
- AlicenseAqualityDmaintenanceProvides AI assistants with access to real-time space weather data and forecasts from NOAA's Space Weather Prediction Center, enabling queries and interpretations of geomagnetic storms, solar flares, and related indices.71MIT
- AlicenseNot gradedqualityDmaintenanceProvides real-time NOAA space weather data (solar flares, Kp index, solar wind) and analyzes HF radio propagation conditions for amateur radio operators to determine optimal frequency bands.MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to access real-time NOAA space weather data, including alerts, solar wind, K-index, aurora forecast, and GOES X-ray flux, through natural language queries.1 npmMIT
- AlicenseAqualityDmaintenanceA Model Context Protocol server for space weather and geomagnetic conditions, enabling AI agents to answer queries about solar flares, solar wind, geomagnetic storms, aurora forecasts, and more from authoritative data.1544 PyPIMIT
Glama MCP Gateway
Add one secure layer between your agents and this server.