@cyanheads/noaa-spaceweather-mcp-server 0.1.13 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +6 -4
- package/CLAUDE.md +6 -4
- package/README.md +26 -17
- package/changelog/0.1.x/0.1.14.md +32 -0
- package/changelog/0.2.x/0.2.0.md +21 -0
- package/dist/mcp-server/tools/definitions/get-alerts.tool.d.ts +19 -1
- package/dist/mcp-server/tools/definitions/get-alerts.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/get-alerts.tool.js +281 -41
- package/dist/mcp-server/tools/definitions/get-alerts.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/get-aurora-forecast.tool.d.ts +9 -1
- package/dist/mcp-server/tools/definitions/get-aurora-forecast.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/get-aurora-forecast.tool.js +91 -52
- package/dist/mcp-server/tools/definitions/get-aurora-forecast.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/get-conditions.tool.d.ts +27 -8
- package/dist/mcp-server/tools/definitions/get-conditions.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/get-conditions.tool.js +234 -38
- package/dist/mcp-server/tools/definitions/get-conditions.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/get-kp-index.tool.d.ts +7 -1
- package/dist/mcp-server/tools/definitions/get-kp-index.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/get-kp-index.tool.js +21 -6
- package/dist/mcp-server/tools/definitions/get-kp-index.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/get-solar-activity.tool.d.ts +32 -2
- package/dist/mcp-server/tools/definitions/get-solar-activity.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/get-solar-activity.tool.js +243 -39
- package/dist/mcp-server/tools/definitions/get-solar-activity.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/get-solar-wind.tool.d.ts +17 -1
- package/dist/mcp-server/tools/definitions/get-solar-wind.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/get-solar-wind.tool.js +150 -21
- package/dist/mcp-server/tools/definitions/get-solar-wind.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/index.d.ts +111 -14
- package/dist/mcp-server/tools/definitions/index.d.ts.map +1 -1
- package/dist/services/space-weather/space-weather-service.d.ts +76 -3
- package/dist/services/space-weather/space-weather-service.d.ts.map +1 -1
- package/dist/services/space-weather/space-weather-service.js +539 -82
- package/dist/services/space-weather/space-weather-service.js.map +1 -1
- package/dist/services/space-weather/types.d.ts +177 -21
- package/dist/services/space-weather/types.d.ts.map +1 -1
- package/package.json +3 -3
- package/server.json +3 -3
package/AGENTS.md
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
# Developer Protocol
|
|
2
2
|
|
|
3
3
|
**Server:** noaa-spaceweather-mcp-server
|
|
4
|
-
**Version:** 0.
|
|
5
|
-
**Framework:** [@cyanheads/mcp-ts-core](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) `^0.13.
|
|
4
|
+
**Version:** 0.2.0
|
|
5
|
+
**Framework:** [@cyanheads/mcp-ts-core](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) `^0.13.3`
|
|
6
6
|
**Engines:** Bun ≥1.4.0, Node ≥24.0.0
|
|
7
7
|
**MCP SDK:** `@modelcontextprotocol/server` ^2.0.0 (protocol revisions 2026-07-28 and 2025-*)
|
|
8
|
-
**Zod:** ^4.6.
|
|
8
|
+
**Zod:** ^4.6.5
|
|
9
9
|
|
|
10
10
|
> **Read the framework docs first:** `node_modules/@cyanheads/mcp-ts-core/CLAUDE.md` contains the full API reference — builders, Context, error codes, exports, patterns. This file covers server-specific conventions only.
|
|
11
11
|
|
|
@@ -217,7 +217,7 @@ Available skills:
|
|
|
217
217
|
| `code-simplifier` | Post-session cleanup against `git diff` — modernize syntax, consolidate duplication, align with the codebase |
|
|
218
218
|
| `polish-docs-meta` | Finalize docs, README, metadata, and agent protocol for shipping |
|
|
219
219
|
| `git-wrapup` | Land working-tree changes as a commit stack — version bump, changelog, verify, commit by concern, release commit on top. No tag, no push to main; opens the release PR when the project declares release PR mode |
|
|
220
|
-
| `release-pr-review` | Review pass on an open release PR — simplifier + correctness review,
|
|
220
|
+
| `release-pr-review` | Review pass on an open release PR — simplifier + correctness review, fixes as ordinary commits on top of the stack, PR body kept in sync. Release PR mode only |
|
|
221
221
|
| `release-and-publish` | Fast-forward merge (release PR mode) + tag + push + npm + MCP Registry + GH Release + Docker. Picks up from `git-wrapup` |
|
|
222
222
|
| `maintenance` | Investigate changelogs, adopt upstream changes, sync skills to agent dirs |
|
|
223
223
|
| `orchestrations` | Chain task skills into a gated multi-phase pipeline — build-out, QA-fix, update-ship — when you can spawn sub-agents |
|
|
@@ -268,6 +268,8 @@ When you complete a skill's checklist, check the boxes and add a completion time
|
|
|
268
268
|
| `bun run changelog:check` | Verify `CHANGELOG.md` is in sync (used by devcheck) |
|
|
269
269
|
| `bun run bundle` | Build, pack, and clean a `.mcpb` for one-click Claude Desktop install |
|
|
270
270
|
|
|
271
|
+
**CI is one file.** `.github/workflows/codeql.yml` (scaffolded) is the only GitHub Actions workflow: CodeQL is GitHub-owned end to end, and the file runs only while the repo's CodeQL *default setup* is turned off. Verification — `devcheck`, tests, the release gates — runs locally; don't add a workflow that re-runs it.
|
|
272
|
+
|
|
271
273
|
---
|
|
272
274
|
|
|
273
275
|
## Bundling
|
package/CLAUDE.md
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
# Developer Protocol
|
|
2
2
|
|
|
3
3
|
**Server:** noaa-spaceweather-mcp-server
|
|
4
|
-
**Version:** 0.
|
|
5
|
-
**Framework:** [@cyanheads/mcp-ts-core](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) `^0.13.
|
|
4
|
+
**Version:** 0.2.0
|
|
5
|
+
**Framework:** [@cyanheads/mcp-ts-core](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) `^0.13.3`
|
|
6
6
|
**Engines:** Bun ≥1.4.0, Node ≥24.0.0
|
|
7
7
|
**MCP SDK:** `@modelcontextprotocol/server` ^2.0.0 (protocol revisions 2026-07-28 and 2025-*)
|
|
8
|
-
**Zod:** ^4.6.
|
|
8
|
+
**Zod:** ^4.6.5
|
|
9
9
|
|
|
10
10
|
> **Read the framework docs first:** `node_modules/@cyanheads/mcp-ts-core/CLAUDE.md` contains the full API reference — builders, Context, error codes, exports, patterns. This file covers server-specific conventions only.
|
|
11
11
|
|
|
@@ -217,7 +217,7 @@ Available skills:
|
|
|
217
217
|
| `code-simplifier` | Post-session cleanup against `git diff` — modernize syntax, consolidate duplication, align with the codebase |
|
|
218
218
|
| `polish-docs-meta` | Finalize docs, README, metadata, and agent protocol for shipping |
|
|
219
219
|
| `git-wrapup` | Land working-tree changes as a commit stack — version bump, changelog, verify, commit by concern, release commit on top. No tag, no push to main; opens the release PR when the project declares release PR mode |
|
|
220
|
-
| `release-pr-review` | Review pass on an open release PR — simplifier + correctness review,
|
|
220
|
+
| `release-pr-review` | Review pass on an open release PR — simplifier + correctness review, fixes as ordinary commits on top of the stack, PR body kept in sync. Release PR mode only |
|
|
221
221
|
| `release-and-publish` | Fast-forward merge (release PR mode) + tag + push + npm + MCP Registry + GH Release + Docker. Picks up from `git-wrapup` |
|
|
222
222
|
| `maintenance` | Investigate changelogs, adopt upstream changes, sync skills to agent dirs |
|
|
223
223
|
| `orchestrations` | Chain task skills into a gated multi-phase pipeline — build-out, QA-fix, update-ship — when you can spawn sub-agents |
|
|
@@ -268,6 +268,8 @@ When you complete a skill's checklist, check the boxes and add a completion time
|
|
|
268
268
|
| `bun run changelog:check` | Verify `CHANGELOG.md` is in sync (used by devcheck) |
|
|
269
269
|
| `bun run bundle` | Build, pack, and clean a `.mcpb` for one-click Claude Desktop install |
|
|
270
270
|
|
|
271
|
+
**CI is one file.** `.github/workflows/codeql.yml` (scaffolded) is the only GitHub Actions workflow: CodeQL is GitHub-owned end to end, and the file runs only while the repo's CodeQL *default setup* is turned off. Verification — `devcheck`, tests, the release gates — runs locally; don't add a workflow that re-runs it.
|
|
272
|
+
|
|
271
273
|
---
|
|
272
274
|
|
|
273
275
|
## Bundling
|
package/README.md
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
<div align="center">
|
|
9
9
|
|
|
10
|
-
[](./CHANGELOG.md) [](./LICENSE) [](https://github.com/users/cyanheads/packages/container/package/noaa-spaceweather-mcp-server) [](https://modelcontextprotocol.io/) [](https://www.npmjs.com/package/@cyanheads/noaa-spaceweather-mcp-server) [](https://www.typescriptlang.org/) [](https://bun.sh/)
|
|
11
11
|
|
|
12
12
|
</div>
|
|
13
13
|
|
|
@@ -35,21 +35,23 @@ Space weather from NOAA's Space Weather Prediction Center (SWPC) — geomagnetic
|
|
|
35
35
|
|
|
36
36
|
| Tool | Description |
|
|
37
37
|
|:-----|:------------|
|
|
38
|
-
| `noaa_spaceweather_get_conditions` | Current space-weather snapshot: NOAA R/S/G storm scales, latest Kp,
|
|
38
|
+
| `noaa_spaceweather_get_conditions` | Current space-weather snapshot: NOAA R/S/G storm scales, latest Kp, a plain-language status summary, and optionally SWPC's forecast discussion explaining the forecast |
|
|
39
39
|
| `noaa_spaceweather_get_kp_index` | Planetary K-index (0–9) — recent observed 3-hour values with G-scale equivalents and aurora-latitude guidance, plus 3-day forecast |
|
|
40
40
|
| `noaa_spaceweather_get_aurora_forecast` | OVATION model aurora forecast: global probability grid, optional local lookup by coordinates with go/no-go verdict |
|
|
41
|
-
| `noaa_spaceweather_get_solar_wind` | Real-time solar wind from the active L1 spacecraft: speed, proton density, temperature, and the critical Bz component — explains why current geomagnetic conditions exist |
|
|
42
|
-
| `noaa_spaceweather_get_solar_activity` | Solar flare picture: GOES X-ray flux, 3-day flare-class probabilities, active solar regions with per-region probabilities, and solar radiation storm level |
|
|
41
|
+
| `noaa_spaceweather_get_solar_wind` | Real-time solar wind from the active L1 spacecraft: speed, proton density, temperature, and the critical Bz component with the window's most southward reading — explains why current geomagnetic conditions exist |
|
|
42
|
+
| `noaa_spaceweather_get_solar_activity` | Solar flare picture: discrete flare events with peak class and R-scale level, GOES X-ray flux, the daily F10.7 cm radio flux, 3-day flare-class probabilities, active solar regions with per-region probabilities, and solar radiation storm level |
|
|
43
43
|
| `noaa_spaceweather_get_alerts` | Active SWPC alerts, watches, and warnings — structured records with product type, severity, issue time, validity window, and full message text |
|
|
44
44
|
|
|
45
45
|
## Capability reference
|
|
46
46
|
|
|
47
47
|
### `noaa_spaceweather_get_conditions` <sub>tool</sub>
|
|
48
48
|
|
|
49
|
-
-
|
|
50
|
-
- Returns today's R/S/G storm
|
|
49
|
+
- `include_discussion` (bool, default false) is the only input — otherwise a single call composing storm scales and current Kp into one snapshot
|
|
50
|
+
- Returns today's observed R/S/G storm levels plus SWPC's 3-day forecast series, which starts with today
|
|
51
|
+
- Forecast days carry what SWPC issues: a G level, and for R and S a probability — R1–R2, R3 or greater, S1 or greater — with no level. A null level means SWPC forecasts none for that day, which is not the same as level 0
|
|
51
52
|
- Current Kp with G-scale equivalent and aurora-visibility latitude guidance
|
|
52
|
-
-
|
|
53
|
+
- With `include_discussion`, the forecaster-written Forecast Discussion split into its topic sections (Solar Activity, Energetic Particle, Solar Wind, Geospace), each with its 24-hour summary and 3-day forecast text
|
|
54
|
+
- Data sourced from the `noaa-scales.json` + `noaa-planetary-k-index.json` feeds, plus the `discussion.txt` product when the discussion is requested
|
|
53
55
|
|
|
54
56
|
---
|
|
55
57
|
|
|
@@ -57,6 +59,7 @@ Space weather from NOAA's Space Weather Prediction Center (SWPC) — geomagnetic
|
|
|
57
59
|
|
|
58
60
|
- `window_days` (1–7, default 1) bounds the observed series; the forecast series is always SWPC's full 3-day forecast
|
|
59
61
|
- Each observed/forecast record carries Kp, G-scale equivalent, G-scale label, and aurora-latitude guidance
|
|
62
|
+
- G levels follow SWPC's minus-third band floors — G1 starts at Kp 4.67 (5−), G4 runs through 8.67 (9−), and only Kp 9 is G5
|
|
60
63
|
- Forecast excludes the feed's embedded historical "observed" entries — only forward-looking `estimated`/`predicted` rows
|
|
61
64
|
- `observedCount` reports how many observed readings matched the window
|
|
62
65
|
|
|
@@ -65,7 +68,7 @@ Space weather from NOAA's Space Weather Prediction Center (SWPC) — geomagnetic
|
|
|
65
68
|
### `noaa_spaceweather_get_aurora_forecast` <sub>tool</sub>
|
|
66
69
|
|
|
67
70
|
- Without coordinates: global metadata only — grid point count, global peak probability, peak region
|
|
68
|
-
- With `latitude`/`longitude` (WGS84, required together): nearest 1°-grid lookup, minimum Kp needed at that latitude, and a plain-language go/no-go verdict
|
|
71
|
+
- With `latitude`/`longitude` (WGS84, required together): nearest 1°-grid lookup, the centered-dipole geomagnetic latitude those coordinates convert to, the minimum Kp and G level needed at that geomagnetic latitude, and a plain-language go/no-go verdict
|
|
69
72
|
- `invalid_coordinates` error when only one of the pair is supplied
|
|
70
73
|
- OVATION model updates every ~5 minutes; forecast horizon is ~30–60 minutes ahead
|
|
71
74
|
|
|
@@ -74,8 +77,9 @@ Space weather from NOAA's Space Weather Prediction Center (SWPC) — geomagnetic
|
|
|
74
77
|
### `noaa_spaceweather_get_solar_wind` <sub>tool</sub>
|
|
75
78
|
|
|
76
79
|
- `window_hours` (1–168, default 3) slices client-side from a feed that carries roughly the last 24 hours at ~1-minute cadence
|
|
80
|
+
- `resolution` (`reduced` default, or `full`) bounds each returned series to 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 comes back untouched, so a default 3-hour call is unaffected; `full` returns every record (~1,400 per series over 24 hours)
|
|
77
81
|
- Plasma (speed, density, temperature) and magnetic field (Bx/By/Bz/Bt GSM) returned as separate oldest-first series
|
|
78
|
-
- `bzStatus` surfaces southward Bz (the storm driver) as a plain-language field
|
|
82
|
+
- `bzStatus` surfaces southward Bz (the storm driver) as a plain-language field, and `bzMinInWindow` with its time tag reports the window's most southward reading — both computed from the full window, before any reduction
|
|
79
83
|
- `latestFeedPlasmaTime`/`latestFeedMagTime`/`feedStalenessHours` distinguish an empty window from a stale feed
|
|
80
84
|
- Every record names its reporting spacecraft — no satellite is assumed as "the" active one
|
|
81
85
|
|
|
@@ -84,18 +88,23 @@ Space weather from NOAA's Space Weather Prediction Center (SWPC) — geomagnetic
|
|
|
84
88
|
### `noaa_spaceweather_get_solar_activity` <sub>tool</sub>
|
|
85
89
|
|
|
86
90
|
- `include_regions` (default true) toggles per-region active-solar-region detail to control response size
|
|
87
|
-
-
|
|
91
|
+
- `flare_hours` (1–168, default 24) bounds the discrete flare events returned, filtered on each flare's onset; the feed keeps a rolling 7 days, so 168 returns everything it carries
|
|
92
|
+
- Flare events come with the classes SWPC publishes — onset, peak, and decay, each with magnitude — the peak flux, and the NOAA R-scale level (0–5) that flux implies. Decay time and class are null while a flare is still in progress, and an empty window names the newest flare the feed holds
|
|
93
|
+
- GOES X-ray flux (0.1–0.8 nm) with flare-class letter (A/B/C/M/X), the class with magnitude (`flareClassFull`, derived by SWPC's truncation rule so it agrees with the published flare classes), and the unformatted flux alongside the display string; recent readings cover the past hour
|
|
94
|
+
- Daily F10.7 cm solar radio flux in sfu with its 90-day mean, from the Noon Penticton report — the value SWPC reports for the day. It can be up to ~24 h old, so its observation time rides with it
|
|
88
95
|
- 3-day C/M/X flare-class and proton-event probabilities, each duplicated under a legacy `*1Day` name and a date-neutral name
|
|
89
96
|
- Integral proton flux (≥10 MeV) drives the reported NOAA S-scale (0–5)
|
|
97
|
+
- Data sourced from the `goes/primary/xrays-6-hour.json`, `goes/primary/xray-flares-7-day.json`, `f107_cm_flux.json`, `solar_probabilities.json`, `goes/primary/integral-protons-plot-3-day.json`, and `solar_regions.json` feeds
|
|
90
98
|
|
|
91
99
|
---
|
|
92
100
|
|
|
93
101
|
### `noaa_spaceweather_get_alerts` <sub>tool</sub>
|
|
94
102
|
|
|
95
|
-
- `active_only` (default true) — in-force Warnings/Watches/Alerts only
|
|
96
|
-
- `max_age_hours` (1–720, default 48) bounds how far back to look; the SWPC feed itself has no expiry
|
|
97
|
-
- Each record carries product type, NOAA scale + level (0 means "no scale stated," not zero severity), parsed validity window, and full message text
|
|
98
|
-
- `cancelled` flags a record that cancels a prior product rather than being active
|
|
103
|
+
- `active_only` (default true) — in-force Warnings/Watches/Alerts only. A product stays in force until the feed says otherwise, so this also drops any product a later cancellation names by serial, and all but the newest Watch carrying `THIS SUPERSEDES ANY/ALL PRIOR WATCHES IN EFFECT` — alongside cancellations, Summaries, and products whose validity end has passed
|
|
104
|
+
- `max_age_hours` (1–720, default 48) bounds how far back to look for candidates; the SWPC feed itself has no expiry. Under `active_only=true` it does not cut off a product whose validity end is still ahead, so a multi-day Watch survives until the last day it forecasts a storm for ends; under `active_only=false` it is a literal age cutoff
|
|
105
|
+
- Each record carries product type, NOAA scale + level (0 means "no scale stated," not zero severity), serial number, parsed validity window, and full message text
|
|
106
|
+
- `cancelled` flags a record that cancels a prior product rather than being active; the product it cancels is a separate record, excluded by the serial link rather than by this flag
|
|
107
|
+
- Under `active_only=true` the response echoes the applied window and counts what it excluded, by reason — so an empty result reads as "quiet" or "everything was filtered" without a second call
|
|
99
108
|
|
|
100
109
|
---
|
|
101
110
|
|
|
@@ -106,8 +115,8 @@ Built on [`@cyanheads/mcp-ts-core`](https://github.com/cyanheads/mcp-ts-core): s
|
|
|
106
115
|
SWPC-specific:
|
|
107
116
|
|
|
108
117
|
- All SWPC feeds are public and keyless — no API keys required
|
|
109
|
-
- Single `SpaceWeatherService` wraps
|
|
110
|
-
- Heterogeneous feed normalization: interleaved multi-spacecraft records (solar wind), keyed objects (storm scales), coordinate triples (OVATION)
|
|
118
|
+
- Single `SpaceWeatherService` wraps every NOAA SWPC feed — the JSON products and the plain-text forecast discussion — behind one `fetchWithTimeout` + `withRetry` funnel, so both paths classify an upstream failure the same way
|
|
119
|
+
- Heterogeneous feed normalization: interleaved multi-spacecraft records (solar wind), keyed objects (storm scales), coordinate triples (OVATION), section-delimited text (forecast discussion)
|
|
111
120
|
- NOAA scale interpretation: raw Kp 6 → "G2 moderate storm — aurora possible to ~55° geomagnetic latitude"
|
|
112
121
|
- Feed freshness surfaced per-response: solar wind updates ~1 min, aurora ~5 min, Kp 3-hour intervals
|
|
113
122
|
|
|
@@ -116,7 +125,7 @@ Agent-friendly output:
|
|
|
116
125
|
- Observed timestamps on every response so agents can reason about data freshness
|
|
117
126
|
- Plain-language summaries and verdicts alongside raw values — agents can display or reason without re-interpreting indices
|
|
118
127
|
- Bz component surfaced as a first-class field in solar wind output (southward Bz = primary storm driver)
|
|
119
|
-
- Typed error contracts with recovery hints: `feed_unavailable` → "Retry in 30–60 s"
|
|
128
|
+
- Typed error contracts with recovery hints, split on whether retrying can help: a transient feed failure is `feed_unavailable` → "Retry in 30–60 s"; a feed path SWPC no longer serves is `feed_moved` → "Retrying will not help", raised on the first attempt
|
|
120
129
|
|
|
121
130
|
---
|
|
122
131
|
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "Kp→G-scale thresholds follow SWPC thirds, aurora forecast converts to geomagnetic latitude, get_alerts correctly excludes cancelled/superseded Watches, feed failures carry a typed reason, DST-safe forecast dates, NaN token repair"
|
|
3
|
+
breaking: false
|
|
4
|
+
security: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# 0.1.14 — 2026-09-17
|
|
8
|
+
|
|
9
|
+
## Added
|
|
10
|
+
|
|
11
|
+
- **`get_alerts` `serialNumber` field** on every record, plus an `activeOnly` echo of the request scope — resolves the `Cancel Serial Number:` / `Continuation of Serial Number:` chains in the message body. ([#29](https://github.com/cyanheads/noaa-spaceweather-mcp-server/issues/29))
|
|
12
|
+
- **`get_alerts` exclusion disclosure** — under `active_only=true`, enrichment fields `appliedWindowHours`, `appliedCutoff`, and per-reason `exclusions` counts report what was filtered, so an empty result reads as "quiet" or "everything was filtered" without a second call. ([#29](https://github.com/cyanheads/noaa-spaceweather-mcp-server/issues/29))
|
|
13
|
+
- **`get_aurora_forecast` `localLookup.geomagneticLatitude` and `minGScale`** — the centered-dipole geomagnetic latitude the requested coordinates convert to, and the NOAA G level backing `minKpRequired`. ([#28](https://github.com/cyanheads/noaa-spaceweather-mcp-server/issues/28))
|
|
14
|
+
- **`feed_moved` error reason**, declared on all six tools — a permanent 4xx (or the scales feed missing its `"0"` period) now fails in one attempt with a "retrying will not help" recovery hint, instead of retrying or surfacing an unclassified error. ([#30](https://github.com/cyanheads/noaa-spaceweather-mcp-server/issues/30))
|
|
15
|
+
|
|
16
|
+
## Changed
|
|
17
|
+
|
|
18
|
+
- **`get_solar_activity` per-region flare-probability fields** (`cFlareProbability`, `mFlareProbability`, `xFlareProbability`, `protonProbability`) now state they cover the UTC day after `observedDate`, matching what SWPC's feed reports. ([#22](https://github.com/cyanheads/noaa-spaceweather-mcp-server/issues/22))
|
|
19
|
+
|
|
20
|
+
## Fixed
|
|
21
|
+
|
|
22
|
+
- **`kpToGScale()` follows SWPC's minus-third band floors** (G1 at Kp 4.67, G2 5.67, G3 6.67, G4 7.67, G5 9.00) instead of whole-number cutoffs — `get_kp_index` and `get_conditions` no longer disagree with SWPC's own `noaa_scale`. ([#27](https://github.com/cyanheads/noaa-spaceweather-mcp-server/issues/27))
|
|
23
|
+
- **`get_aurora_forecast` converts geographic coordinates to geomagnetic latitude** before the Kp lookup and wraps longitude at the antimeridian in the nearest-grid-point search — Denver and San Francisco no longer read "aurora not visible" during a storm. Shares one latitude-band table with `gScaleToAuroraLatitude()`. ([#28](https://github.com/cyanheads/noaa-spaceweather-mcp-server/issues/28))
|
|
24
|
+
- **`get_alerts` `active_only=true`** now drops a product named by a later cancellation's `Cancel Serial Number:` and all but the newest Watch carrying the supersede line, and keeps a Watch active past `max_age_hours` while a day it forecasts a storm for is still running. The empty-state text no longer claims "no active alerts" for an unfiltered request. ([#29](https://github.com/cyanheads/noaa-spaceweather-mcp-server/issues/29))
|
|
25
|
+
- **Feed failures carry a declared reason and recovery hint on the wire** — every SWPC feed error now reaches the client as `feed_unavailable` or `feed_moved` with `data.reason`, `data.recovery.hint`, and a `Recovery:` line in `content[]`. ([#30](https://github.com/cyanheads/noaa-spaceweather-mcp-server/issues/30))
|
|
26
|
+
- **`get_solar_activity` forecast dates use UTC epoch arithmetic** instead of local-calendar `setDate`/`getDate` — a 3-day window crossing a DST transition in the process timezone no longer duplicates a forecast day or drifts off midnight UTC. ([#22](https://github.com/cyanheads/noaa-spaceweather-mcp-server/issues/22))
|
|
27
|
+
- **A bare `NaN`/`Infinity` token in any SWPC feed body is repaired to `null`** before the retry loop, instead of failing the parse and burning all four retry attempts on bytes that will never parse differently. ([#25](https://github.com/cyanheads/noaa-spaceweather-mcp-server/issues/25))
|
|
28
|
+
|
|
29
|
+
## Dependencies
|
|
30
|
+
|
|
31
|
+
- `@cyanheads/mcp-ts-core` `^0.13.2` → `^0.13.3`
|
|
32
|
+
- `zod` `^4.6.4` → `^4.6.5`
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "Forecast R/S probabilities replace a phantom scale 0, discrete flare history and F10.7 flux, solar wind series bounded to 200 records, and an optional SWPC forecast discussion."
|
|
3
|
+
breaking: true
|
|
4
|
+
security: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# 0.2.0 — 2026-09-17
|
|
8
|
+
|
|
9
|
+
## Added
|
|
10
|
+
|
|
11
|
+
- **`get_solar_wind`:** `resolution` input (`reduced`/`full`, default `reduced`) bounds `plasma`/`mag` to 200 records each — one real measurement per bucket (fastest speed for plasma, most southward Bz for mag), newest record always last. A default 3-hour call is unaffected; a 24-hour call drops from ~541 KB to roughly the size of today's default call (~68 KB). Adds `bzMinInWindow` + `bzMinTimeTag`, computed from the full window before reduction. [#24](https://github.com/cyanheads/noaa-spaceweather-mcp-server/issues/24)
|
|
12
|
+
- **`get_solar_activity`:** `recentFlares[]` — discrete GOES flare events from `xray-flares-7-day.json`, filtered by the new `flare_hours` input (1–168, default 24), with peak class, R-scale level, and begin/max/end times and classes. [#31](https://github.com/cyanheads/noaa-spaceweather-mcp-server/issues/31)
|
|
13
|
+
- **`get_solar_activity`:** `f107` — the latest daily F10.7 cm solar radio flux (the Noon Penticton report, matching SWPC's own daily summary), with its 90-day mean when available. [#31](https://github.com/cyanheads/noaa-spaceweather-mcp-server/issues/31)
|
|
14
|
+
- **`get_solar_activity`:** `XraySchema` gains `flareClassFull` (class with magnitude, e.g. `"M5.2"`, truncated to match SWPC's own rounding) and `fluxWm2Value` (unformatted flux, for comparison without parsing `fluxWm2`). [#31](https://github.com/cyanheads/noaa-spaceweather-mcp-server/issues/31)
|
|
15
|
+
- **`get_conditions`:** `include_discussion` input + `discussion` output — SWPC's forecaster-written Forecast Discussion, parsed into per-topic sections (summary/forecast text). [#32](https://github.com/cyanheads/noaa-spaceweather-mcp-server/issues/32)
|
|
16
|
+
|
|
17
|
+
## Changed
|
|
18
|
+
|
|
19
|
+
- **Breaking:** `get_conditions.forecast[].R`/`.S` no longer coerce SWPC's null forecast scale to `0`. Forecast days now carry a nullable `scale`/`text`/`label` plus probability fields — `minorProbPercent`/`majorProbPercent` for R, `probPercent` for S — since SWPC issues a probability, not a level, for future days. `today` and `forecast[].G` are unaffected. [#23](https://github.com/cyanheads/noaa-spaceweather-mcp-server/issues/23)
|
|
20
|
+
- **Breaking:** `get_conditions.observedAt` is now ISO 8601 UTC (`"2026-09-17T17:15:00Z"`) instead of the space-separated `"2026-09-17 17:15:00"`. [#23](https://github.com/cyanheads/noaa-spaceweather-mcp-server/issues/23)
|
|
21
|
+
- `get_solar_activity`'s X-ray flux feed swapped from `xrays-7-day.json` to `xrays-6-hour.json` — byte-identical records for the tool's past-hour slice, ~4.52 MB → ~162 KB per call. [#31](https://github.com/cyanheads/noaa-spaceweather-mcp-server/issues/31)
|
|
@@ -21,6 +21,7 @@ export declare const getAlerts: import("@cyanheads/mcp-ts-core").ToolDefinition<
|
|
|
21
21
|
level: z.ZodNumber;
|
|
22
22
|
noaaScale: z.ZodNullable<z.ZodString>;
|
|
23
23
|
cancelled: z.ZodBoolean;
|
|
24
|
+
serialNumber: z.ZodNullable<z.ZodString>;
|
|
24
25
|
phenomenon: z.ZodString;
|
|
25
26
|
issueDatetime: z.ZodString;
|
|
26
27
|
validFrom: z.ZodNullable<z.ZodString>;
|
|
@@ -28,14 +29,31 @@ export declare const getAlerts: import("@cyanheads/mcp-ts-core").ToolDefinition<
|
|
|
28
29
|
message: z.ZodString;
|
|
29
30
|
}, z.core.$strip>>;
|
|
30
31
|
totalCount: z.ZodNumber;
|
|
32
|
+
activeOnly: z.ZodBoolean;
|
|
31
33
|
fetchedAt: z.ZodString;
|
|
32
34
|
}, z.core.$strip>, readonly [{
|
|
33
35
|
readonly reason: "feed_unavailable";
|
|
34
36
|
readonly code: JsonRpcErrorCode.ServiceUnavailable;
|
|
35
|
-
readonly when: "SWPC
|
|
37
|
+
readonly when: "SWPC feed returns 5xx or 429, times out, or answers with a body that is not parseable JSON. Retried before failing.";
|
|
36
38
|
readonly retryable: true;
|
|
37
39
|
readonly recovery: "Retry in 30–60 seconds; SWPC feeds occasionally lag during high-activity events.";
|
|
40
|
+
}, {
|
|
41
|
+
readonly reason: "feed_moved";
|
|
42
|
+
readonly code: JsonRpcErrorCode.ServiceUnavailable;
|
|
43
|
+
readonly when: "SWPC feed path returns a permanent 4xx (404, 410, 401, 403). Fails in one attempt.";
|
|
44
|
+
readonly retryable: false;
|
|
45
|
+
readonly recovery: "Retrying will not help — the SWPC feed path no longer resolves or no longer has the expected shape; the feed URL needs updating against SWPC current inventory.";
|
|
38
46
|
}], {
|
|
39
47
|
readonly notice: z.ZodOptional<z.ZodString>;
|
|
48
|
+
readonly appliedWindowHours: z.ZodOptional<z.ZodNumber>;
|
|
49
|
+
readonly appliedCutoff: z.ZodOptional<z.ZodString>;
|
|
50
|
+
readonly exclusions: z.ZodOptional<z.ZodObject<{
|
|
51
|
+
agedOut: z.ZodNumber;
|
|
52
|
+
productType: z.ZodNumber;
|
|
53
|
+
cancellationRecord: z.ZodNumber;
|
|
54
|
+
cancelledBySerial: z.ZodNumber;
|
|
55
|
+
superseded: z.ZodNumber;
|
|
56
|
+
validityElapsed: z.ZodNumber;
|
|
57
|
+
}, z.core.$strip>>;
|
|
40
58
|
}>;
|
|
41
59
|
//# sourceMappingURL=get-alerts.tool.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-alerts.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/get-alerts.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"get-alerts.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/get-alerts.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AA+NjE,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAqPpB,CAAC"}
|