@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.
Files changed (39) hide show
  1. package/AGENTS.md +6 -4
  2. package/CLAUDE.md +6 -4
  3. package/README.md +26 -17
  4. package/changelog/0.1.x/0.1.14.md +32 -0
  5. package/changelog/0.2.x/0.2.0.md +21 -0
  6. package/dist/mcp-server/tools/definitions/get-alerts.tool.d.ts +19 -1
  7. package/dist/mcp-server/tools/definitions/get-alerts.tool.d.ts.map +1 -1
  8. package/dist/mcp-server/tools/definitions/get-alerts.tool.js +281 -41
  9. package/dist/mcp-server/tools/definitions/get-alerts.tool.js.map +1 -1
  10. package/dist/mcp-server/tools/definitions/get-aurora-forecast.tool.d.ts +9 -1
  11. package/dist/mcp-server/tools/definitions/get-aurora-forecast.tool.d.ts.map +1 -1
  12. package/dist/mcp-server/tools/definitions/get-aurora-forecast.tool.js +91 -52
  13. package/dist/mcp-server/tools/definitions/get-aurora-forecast.tool.js.map +1 -1
  14. package/dist/mcp-server/tools/definitions/get-conditions.tool.d.ts +27 -8
  15. package/dist/mcp-server/tools/definitions/get-conditions.tool.d.ts.map +1 -1
  16. package/dist/mcp-server/tools/definitions/get-conditions.tool.js +234 -38
  17. package/dist/mcp-server/tools/definitions/get-conditions.tool.js.map +1 -1
  18. package/dist/mcp-server/tools/definitions/get-kp-index.tool.d.ts +7 -1
  19. package/dist/mcp-server/tools/definitions/get-kp-index.tool.d.ts.map +1 -1
  20. package/dist/mcp-server/tools/definitions/get-kp-index.tool.js +21 -6
  21. package/dist/mcp-server/tools/definitions/get-kp-index.tool.js.map +1 -1
  22. package/dist/mcp-server/tools/definitions/get-solar-activity.tool.d.ts +32 -2
  23. package/dist/mcp-server/tools/definitions/get-solar-activity.tool.d.ts.map +1 -1
  24. package/dist/mcp-server/tools/definitions/get-solar-activity.tool.js +243 -39
  25. package/dist/mcp-server/tools/definitions/get-solar-activity.tool.js.map +1 -1
  26. package/dist/mcp-server/tools/definitions/get-solar-wind.tool.d.ts +17 -1
  27. package/dist/mcp-server/tools/definitions/get-solar-wind.tool.d.ts.map +1 -1
  28. package/dist/mcp-server/tools/definitions/get-solar-wind.tool.js +150 -21
  29. package/dist/mcp-server/tools/definitions/get-solar-wind.tool.js.map +1 -1
  30. package/dist/mcp-server/tools/definitions/index.d.ts +111 -14
  31. package/dist/mcp-server/tools/definitions/index.d.ts.map +1 -1
  32. package/dist/services/space-weather/space-weather-service.d.ts +76 -3
  33. package/dist/services/space-weather/space-weather-service.d.ts.map +1 -1
  34. package/dist/services/space-weather/space-weather-service.js +539 -82
  35. package/dist/services/space-weather/space-weather-service.js.map +1 -1
  36. package/dist/services/space-weather/types.d.ts +177 -21
  37. package/dist/services/space-weather/types.d.ts.map +1 -1
  38. package/package.json +3 -3
  39. package/server.json +3 -3
@@ -5,21 +5,84 @@
5
5
  import { tool, z } from '@cyanheads/mcp-ts-core';
6
6
  import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
7
7
  import { getSpaceWeatherService } from '../../../services/space-weather/space-weather-service.js';
8
+ /**
9
+ * The A-class decade — the lowest SWPC names, and the fallback for a reading that
10
+ * reaches no floor at all. {@link classifyFlare} keeps calling such a reading "A",
11
+ * the weakest letter it has and the value that field has always carried;
12
+ * {@link classifyFlareWithMagnitude} reports no class for it, because the scheme
13
+ * has none below A1.0.
14
+ */
15
+ const A_DECADE = ['A', 1e-8];
16
+ /** GOES flare-class decade floors in W/m², highest first. X is unbounded above. */
17
+ const FLARE_DECADES = [
18
+ ['X', 1e-4],
19
+ ['M', 1e-5],
20
+ ['C', 1e-6],
21
+ ['B', 1e-7],
22
+ A_DECADE,
23
+ ];
24
+ /** The decade a flux reading sits in — its class letter and that class's floor. */
25
+ function flareDecade(fluxWm2) {
26
+ return FLARE_DECADES.find(([, floor]) => fluxWm2 >= floor) ?? A_DECADE;
27
+ }
8
28
  /** Classify X-ray flux to flare class letter. */
9
29
  function classifyFlare(fluxWm2) {
10
- if (fluxWm2 >= 1e-4)
11
- return 'X';
12
- if (fluxWm2 >= 1e-5)
13
- return 'M';
14
- if (fluxWm2 >= 1e-6)
15
- return 'C';
16
- if (fluxWm2 >= 1e-7)
17
- return 'B';
18
- return 'A';
30
+ return flareDecade(fluxWm2)[0];
31
+ }
32
+ /**
33
+ * Flare class with magnitude, e.g. "M5.2", matching how SWPC writes the classes it
34
+ * publishes on the flare feed — the same flare would otherwise be reported two ways
35
+ * in one response.
36
+ *
37
+ * SWPC **truncates** the decade quotient to one decimal; it does not round. Across a
38
+ * full 7-day flare capture all 29 published `max_class` values reproduce under
39
+ * truncation and only 11 under rounding, and rounding also invents classes that do
40
+ * not exist at a decade edge (9.986e-7 would become "B10.0"). The quotient is snapped
41
+ * to 12 significant digits first because binary division is inexact in an
42
+ * input-dependent way: 4.9e-5 / 1e-5 evaluates to 4.8999999999999995, which a bare
43
+ * truncation reports as M4.8 for a flux that is exactly M4.9.
44
+ *
45
+ * Null below the A1 floor of 1e-8 W/m², which includes zero and the negative
46
+ * excursions the long channel occasionally reports. SWPC's scheme starts at A1.0, so
47
+ * every string below that floor — "A0.0" for a zero, "A0.9" for 9.9e-9 — would be a
48
+ * class no SWPC product writes, stating a classification that does not exist. In a
49
+ * 7-day capture 431 of 9,982 long-channel readings were exactly 0.0 and none fell
50
+ * between 0 and 1e-8, so the floor is where the published vocabulary ends rather
51
+ * than a place real measurements sit.
52
+ */
53
+ function classifyFlareWithMagnitude(fluxWm2) {
54
+ const [letter, floor] = flareDecade(fluxWm2);
55
+ // flareDecade falls back to the A decade, so a reading that reaches no floor —
56
+ // sub-A1, zero, negative, NaN — fails this comparison and has no class.
57
+ if (!(fluxWm2 >= floor))
58
+ return null;
59
+ const quotient = Number((fluxWm2 / floor).toPrecision(12));
60
+ return `${letter}${(Math.floor(quotient * 10) / 10).toFixed(1)}`;
61
+ }
62
+ /**
63
+ * NOAA R-scale (radio blackout) levels as flux floors in W/m², highest first. The
64
+ * NOAA scales page states the levels by physical measure — R1 at M1, R2 at M5, R3 at
65
+ * X1, R4 at X10, R5 at X20 — so the level comes from the flux already in hand rather
66
+ * than from parsing a class string. Below M1 there is no blackout level.
67
+ */
68
+ const R_SCALE_FLOORS = [
69
+ [5, 2e-3],
70
+ [4, 1e-3],
71
+ [3, 1e-4],
72
+ [2, 5e-5],
73
+ [1, 1e-5],
74
+ ];
75
+ /** NOAA R-scale level (0–5) implied by a peak X-ray flux. */
76
+ function fluxToRScale(fluxWm2) {
77
+ return R_SCALE_FLOORS.find(([, floor]) => fluxWm2 >= floor)?.[0] ?? 0;
19
78
  }
20
- /** Format X-ray flux to 2 significant digits in scientific notation, e.g. 1.4e-6. */
79
+ /**
80
+ * Format X-ray flux for display: 2 significant digits in scientific notation, e.g.
81
+ * "1.4e-6 W/m²". Raw GOES values carry ~16 digits of IEEE-754 noise, which is what
82
+ * `fluxWm2Value` is for — a caller comparing numbers reads that field rather than
83
+ * parsing this string (#4).
84
+ */
21
85
  function formatFlux(fluxWm2) {
22
- // toPrecision gives "1.40e-6" style; strip trailing zeros after decimal for readability.
23
86
  return `${fluxWm2.toExponential(1)} W/m²`;
24
87
  }
25
88
  /**
@@ -51,10 +114,59 @@ const XraySchema = z
51
114
  fluxWm2: z
52
115
  .string()
53
116
  .describe('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²".'),
117
+ fluxWm2Value: z
118
+ .number()
119
+ .describe('Same quantity as fluxWm2, unformatted, so it can be compared without parsing the display string.'),
54
120
  flareClass: z.string().describe('Flare classification letter: A, B, C, M, or X.'),
121
+ flareClassFull: z
122
+ .string()
123
+ .nullable()
124
+ .describe('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.'),
55
125
  satellite: z.number().describe('GOES satellite number.'),
56
126
  })
57
127
  .describe('One GOES X-ray flux reading with flare class.');
128
+ const FlareSchema = z
129
+ .object({
130
+ beginTime: z.string().describe('ISO 8601 UTC onset time (SWPC begin_time).'),
131
+ maxTime: z.string().describe('ISO 8601 UTC time of peak flux (SWPC max_time).'),
132
+ endTime: z
133
+ .string()
134
+ .nullable()
135
+ .describe('ISO 8601 UTC decay time; null while the flare is still in progress.'),
136
+ beginClass: z.string().describe('GOES class with magnitude at onset, e.g. "B4.2".'),
137
+ maxClass: z
138
+ .string()
139
+ .describe('Peak GOES class with magnitude, e.g. "M5.2" — SWPC max_class, read as published.'),
140
+ endClass: z
141
+ .string()
142
+ .nullable()
143
+ .describe('GOES class with magnitude at decay; null while the flare is still in progress.'),
144
+ peakFluxWm2: z
145
+ .number()
146
+ .describe('Peak long-channel (0.1–0.8 nm) flux in W/m² — SWPC max_xrlong.'),
147
+ rScale: z
148
+ .number()
149
+ .describe('NOAA R-scale level implied by the peak flux (0–5); 0 means below the R1 threshold.'),
150
+ satellite: z.number().describe('GOES satellite number the record came from.'),
151
+ })
152
+ .describe('One discrete GOES X-ray flare event.');
153
+ const F107Schema = z
154
+ .object({
155
+ observedTime: z
156
+ .string()
157
+ .describe("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."),
158
+ fluxSfu: z
159
+ .number()
160
+ .describe('10.7 cm solar radio flux in solar flux units (sfu), measured at 2800 MHz.'),
161
+ ninetyDayMeanSfu: z
162
+ .number()
163
+ .nullable()
164
+ .describe('90-day mean flux in sfu; null when the selected record does not carry one.'),
165
+ reportingSchedule: z
166
+ .string()
167
+ .describe('Which of the three daily Penticton reports this is: "Morning", "Noon", or "Afternoon".'),
168
+ })
169
+ .describe('Latest daily F10.7 index.');
58
170
  const SolarRegionSchema = z
59
171
  .object({
60
172
  region: z.number().describe('NOAA active region number.'),
@@ -63,11 +175,21 @@ const SolarRegionSchema = z
63
175
  spotClass: z.string().describe('Sunspot morphology class.'),
64
176
  numberSpots: z.number().describe('Number of sunspots in this region.'),
65
177
  magClass: z.string().describe('Magnetic field class.'),
66
- cFlareProbability: z.number().describe('Probability of a C-class flare (%).'),
67
- mFlareProbability: z.number().describe('Probability of an M-class flare (%).'),
68
- xFlareProbability: z.number().describe('Probability of an X-class flare (%).'),
69
- protonProbability: z.number().describe('Probability of a proton event (%).'),
70
- observedDate: z.string().describe('Date this region data was observed.'),
178
+ cFlareProbability: z
179
+ .number()
180
+ .describe('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.'),
181
+ mFlareProbability: z
182
+ .number()
183
+ .describe('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.'),
184
+ xFlareProbability: z
185
+ .number()
186
+ .describe('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.'),
187
+ protonProbability: z
188
+ .number()
189
+ .describe('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.'),
190
+ observedDate: z
191
+ .string()
192
+ .describe('UTC date this region was observed. The four probability fields on this record cover the following day, not this one.'),
71
193
  })
72
194
  .describe('One active solar region with flare probabilities.');
73
195
  const ProbsSchema = z
@@ -103,23 +225,38 @@ const ProtonSchema = z
103
225
  .describe('One GOES integral proton flux reading with S-scale.');
104
226
  export const getSolarActivity = tool('noaa_spaceweather_get_solar_activity', {
105
227
  title: 'Get Solar Activity',
106
- description: 'Solar flare and radiation storm picture: recent GOES X-ray flux with flare-class labels (A/B/C/M/X), ' +
107
- '3-day flare-class probabilities (C/M/X), active solar regions with per-region flare probabilities, ' +
108
- 'and GOES integral proton flux at ≥10 MeV with NOAA S-scale. For operators tracking HF radio ' +
109
- 'blackout (R-scale, driven by X-ray) and radiation storm risk (S-scale, driven by protons). ' +
110
- 'Active region data helps identify which region is driving current activity.',
228
+ description: 'Solar flare and radiation storm picture: discrete flare events from the past week with peak class ' +
229
+ 'and R-scale level, recent GOES X-ray flux with flare-class labels (A/B/C/M/X) and class magnitude, ' +
230
+ 'the daily F10.7 cm solar radio flux, 3-day flare-class probabilities (C/M/X), active solar regions ' +
231
+ 'with per-region flare probabilities, and GOES integral proton flux at ≥10 MeV with NOAA S-scale. ' +
232
+ 'For operators tracking HF radio blackout (R-scale, driven by X-ray) and radiation storm risk ' +
233
+ '(S-scale, driven by protons). Active region data helps identify which region is driving current activity.',
111
234
  annotations: { readOnlyHint: true, openWorldHint: true, idempotentHint: true },
112
235
  input: z.object({
113
236
  include_regions: z
114
237
  .boolean()
115
238
  .default(true)
116
239
  .describe('Include active solar region details (default true). Set false to skip region data and reduce response size.'),
240
+ flare_hours: z
241
+ .number()
242
+ .int()
243
+ .min(1)
244
+ .max(168)
245
+ .default(24)
246
+ .describe('How far back to report discrete flare events, in hours before now, filtered on each ' +
247
+ 'flare’s onset time (1–168, default 24). The feed keeps a rolling 7 days, so 168 returns ' +
248
+ 'everything it carries. When the window comes back empty, the response names the newest ' +
249
+ 'flare the feed holds.'),
117
250
  }),
118
251
  output: z.object({
119
252
  latestXray: XraySchema.nullable().describe('Most recent GOES X-ray flux reading, null if unavailable.'),
120
253
  recentXray: z
121
254
  .array(XraySchema)
122
255
  .describe('GOES X-ray flux readings from the past hour, oldest first.'),
256
+ recentFlares: z
257
+ .array(FlareSchema)
258
+ .describe('Discrete flare events whose onset falls within the flare_hours window, oldest first. Empty when no flare began in the window.'),
259
+ f107: F107Schema.nullable().describe('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.'),
123
260
  probabilities: z.array(ProbsSchema).describe('3-day flare probability forecasts.'),
124
261
  latestProton: ProtonSchema.nullable().describe('Most recent ≥10 MeV proton flux reading, null if unavailable.'),
125
262
  sScale: z
@@ -133,34 +270,57 @@ export const getSolarActivity = tool('noaa_spaceweather_get_solar_activity', {
133
270
  .describe('Currently active solar regions with per-region flare probabilities. Empty when include_regions=false or no regions are active.'),
134
271
  fetchedAt: z.string().describe('ISO 8601 timestamp of when this data was fetched.'),
135
272
  }),
273
+ enrichment: {
274
+ notice: z
275
+ .string()
276
+ .optional()
277
+ .describe('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.'),
278
+ },
136
279
  errors: [
137
280
  {
138
281
  reason: 'feed_unavailable',
139
282
  code: JsonRpcErrorCode.ServiceUnavailable,
140
- when: 'SWPC endpoint returns non-OK status or times out after retries.',
283
+ when: 'SWPC feed returns 5xx or 429, times out, or answers with a body that is not parseable JSON. Retried before failing.',
141
284
  retryable: true,
142
285
  recovery: 'Retry in 30–60 seconds; SWPC feeds occasionally lag during high-activity events.',
143
286
  },
287
+ {
288
+ reason: 'feed_moved',
289
+ code: JsonRpcErrorCode.ServiceUnavailable,
290
+ when: 'SWPC feed path returns a permanent 4xx (404, 410, 401, 403). Fails in one attempt.',
291
+ retryable: false,
292
+ 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.',
293
+ },
144
294
  ],
145
295
  async handler(input, ctx) {
146
- ctx.log.info('Fetching solar activity', { include_regions: input.include_regions });
296
+ ctx.log.info('Fetching solar activity', {
297
+ include_regions: input.include_regions,
298
+ flare_hours: input.flare_hours,
299
+ });
147
300
  const svc = getSpaceWeatherService();
148
- const [xray, probs, protons, regions] = await Promise.all([
301
+ // Every composed feed is required: a Promise.allSettled with per-feed nulls would
302
+ // make a null f107 ambiguous between "feed down" and "no data", so any feed
303
+ // failure fails the call with its declared reason instead.
304
+ const [xray, flares, f107, probs, protons, regions] = await Promise.all([
149
305
  svc.getXrayFlux(ctx),
306
+ svc.getXrayFlares(ctx),
307
+ svc.getF107(ctx),
150
308
  svc.getSolarProbabilities(ctx),
151
309
  svc.getProtonFlux(ctx),
152
310
  input.include_regions ? svc.getSolarRegions(ctx) : Promise.resolve(null),
153
311
  ]);
312
+ /** One X-ray reading, with the class letter and the class-with-magnitude. */
313
+ const toXrayReading = (r) => ({
314
+ timeTag: r.timeTag,
315
+ fluxWm2: formatFlux(r.fluxWm2),
316
+ fluxWm2Value: r.fluxWm2,
317
+ flareClass: classifyFlare(r.fluxWm2),
318
+ flareClassFull: classifyFlareWithMagnitude(r.fluxWm2),
319
+ satellite: r.satellite,
320
+ });
154
321
  // Latest X-ray
155
322
  const latestXrayRaw = xray.length > 0 ? xray[xray.length - 1] : null;
156
- const latestXray = latestXrayRaw
157
- ? {
158
- timeTag: latestXrayRaw.timeTag,
159
- fluxWm2: formatFlux(latestXrayRaw.fluxWm2),
160
- flareClass: classifyFlare(latestXrayRaw.fluxWm2),
161
- satellite: latestXrayRaw.satellite,
162
- }
163
- : null;
323
+ const latestXray = latestXrayRaw ? toXrayReading(latestXrayRaw) : null;
164
324
  // Recent X-ray — last hour. Compare epochs, not raw ISO strings: X-ray
165
325
  // timeTags carry no fractional seconds while toISOString() always emits
166
326
  // .mmm, so lexicographic >= disagrees with true chronology at the window
@@ -170,12 +330,33 @@ export const getSolarActivity = tool('noaa_spaceweather_get_solar_activity', {
170
330
  const hourCutoffMs = hourCutoff.getTime();
171
331
  const recentXray = xray
172
332
  .filter((r) => new Date(r.timeTag).getTime() >= hourCutoffMs)
173
- .map((r) => ({
174
- timeTag: r.timeTag,
175
- fluxWm2: formatFlux(r.fluxWm2),
176
- flareClass: classifyFlare(r.fluxWm2),
177
- satellite: r.satellite,
333
+ .map(toXrayReading);
334
+ // Flare events whose onset falls in the requested window. Epoch compare for the
335
+ // same reason as the X-ray slice above: the cutoff carries milliseconds and the
336
+ // feed's onset times do not, so a lexicographic compare disagrees with
337
+ // chronology at the boundary.
338
+ const flareCutoffMs = Date.now() - input.flare_hours * 3_600_000;
339
+ const recentFlares = flares
340
+ .filter((f) => new Date(f.beginTime).getTime() >= flareCutoffMs)
341
+ .map((f) => ({
342
+ beginTime: f.beginTime,
343
+ maxTime: f.maxTime,
344
+ endTime: f.endTime,
345
+ beginClass: f.beginClass,
346
+ maxClass: f.maxClass,
347
+ endClass: f.endClass,
348
+ peakFluxWm2: f.peakFluxWm2,
349
+ rScale: fluxToRScale(f.peakFluxWm2),
350
+ satellite: f.satellite,
178
351
  }));
352
+ // One call — the notice field is last-wins, so a second would clobber the first.
353
+ if (recentFlares.length === 0) {
354
+ // The service orders the series oldest-first, so the last element is the newest.
355
+ const newest = flares.at(-1);
356
+ ctx.enrich.notice(newest
357
+ ? `No flare events began in the requested ${input.flare_hours}-hour window; the newest flare the feed carries is ${newest.maxClass}, which began at ${newest.beginTime}.`
358
+ : 'The feed returned no flare events.');
359
+ }
179
360
  // Latest proton / S-scale
180
361
  const latestProtonRaw = protons.length > 0 ? protons[protons.length - 1] : null;
181
362
  const sScale = latestProtonRaw ? classifySScale(latestProtonRaw.fluxPfu) : 0;
@@ -200,6 +381,15 @@ export const getSolarActivity = tool('noaa_spaceweather_get_solar_activity', {
200
381
  return {
201
382
  latestXray,
202
383
  recentXray,
384
+ recentFlares,
385
+ f107: f107
386
+ ? {
387
+ observedTime: f107.observedTime,
388
+ fluxSfu: f107.fluxSfu,
389
+ ninetyDayMeanSfu: f107.ninetyDayMeanSfu,
390
+ reportingSchedule: f107.reportingSchedule,
391
+ }
392
+ : null,
203
393
  probabilities: probs.map((p) => ({
204
394
  date: p.date,
205
395
  cClass1Day: p.cClass1Day,
@@ -238,15 +428,29 @@ export const getSolarActivity = tool('noaa_spaceweather_get_solar_activity', {
238
428
  const x = result.latestXray;
239
429
  lines.push('');
240
430
  lines.push('### Latest X-ray Flux');
241
- lines.push(`**Time:** ${x.timeTag} | **Class:** ${x.flareClass} | **Flux:** ${x.fluxWm2} | **Satellite:** GOES-${x.satellite}`);
431
+ lines.push(`**Time:** ${x.timeTag} | **Class:** ${x.flareClass} (${x.flareClassFull ?? 'no magnitude — flux below the A1 floor'}) | **Flux:** ${x.fluxWm2} (raw ${x.fluxWm2Value}) | **Satellite:** GOES-${x.satellite}`);
242
432
  }
243
433
  if (result.recentXray.length > 0) {
244
434
  lines.push('');
245
435
  lines.push('### X-ray (Past Hour)');
246
436
  for (const r of result.recentXray) {
247
- lines.push(`- ${r.timeTag}: ${r.flareClass} class — ${r.fluxWm2} | GOES-${r.satellite}`);
437
+ lines.push(`- ${r.timeTag}: ${r.flareClass} class ${r.flareClassFull ?? '(no magnitude)'} — ${r.fluxWm2} (raw ${r.fluxWm2Value}) | GOES-${r.satellite}`);
438
+ }
439
+ }
440
+ if (result.recentFlares.length > 0) {
441
+ lines.push('');
442
+ lines.push('### Flare Events');
443
+ for (const f of result.recentFlares) {
444
+ lines.push(`- **${f.maxClass}** peaked ${f.maxTime} at ${f.peakFluxWm2} W/m² — **R${f.rScale}** | began ${f.beginTime} as ${f.beginClass} | decayed ${f.endTime ?? 'in progress'} to ${f.endClass ?? 'in progress'} | GOES-${f.satellite}`);
248
445
  }
249
446
  }
447
+ if (result.f107) {
448
+ const f = result.f107;
449
+ lines.push('');
450
+ lines.push('### F10.7 cm Solar Radio Flux');
451
+ lines.push(`**Observed:** ${f.observedTime} (${f.reportingSchedule} report) | **Flux:** ${f.fluxSfu} sfu` +
452
+ (f.ninetyDayMeanSfu != null ? ` | **90-day mean:** ${f.ninetyDayMeanSfu} sfu` : ''));
453
+ }
250
454
  if (result.latestProton) {
251
455
  const p = result.latestProton;
252
456
  lines.push('');
@@ -1 +1 @@
1
- {"version":3,"file":"get-solar-activity.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/get-solar-activity.tool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"get-solar-activity.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/get-solar-activity.tool.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,10 @@ import { z } from '@cyanheads/mcp-ts-core';
7
7
  import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
8
8
  export declare const getSolarWind: import("@cyanheads/mcp-ts-core").ToolDefinition<z.ZodObject<{
9
9
  window_hours: z.ZodDefault<z.ZodNumber>;
10
+ resolution: z.ZodDefault<z.ZodEnum<{
11
+ full: "full";
12
+ reduced: "reduced";
13
+ }>>;
10
14
  }, z.core.$strip>, z.ZodObject<{
11
15
  plasma: z.ZodArray<z.ZodObject<{
12
16
  timeTag: z.ZodString;
@@ -41,16 +45,28 @@ export declare const getSolarWind: import("@cyanheads/mcp-ts-core").ToolDefiniti
41
45
  bzStatus: z.ZodString;
42
46
  plasmaCount: z.ZodNumber;
43
47
  magCount: z.ZodNumber;
48
+ bzMinInWindow: z.ZodNullable<z.ZodNumber>;
49
+ bzMinTimeTag: z.ZodNullable<z.ZodString>;
44
50
  latestFeedPlasmaTime: z.ZodNullable<z.ZodString>;
45
51
  latestFeedMagTime: z.ZodNullable<z.ZodString>;
46
52
  feedStalenessHours: z.ZodNullable<z.ZodNumber>;
47
53
  }, z.core.$strip>, readonly [{
48
54
  readonly reason: "feed_unavailable";
49
55
  readonly code: JsonRpcErrorCode.ServiceUnavailable;
50
- readonly when: "SWPC endpoint returns non-OK status or times out after retries.";
56
+ readonly when: "SWPC feed returns 5xx or 429, times out, or answers with a body that is not parseable JSON. Retried before failing.";
51
57
  readonly retryable: true;
52
58
  readonly recovery: "Retry in 30–60 seconds; SWPC feeds occasionally lag during high-activity events.";
59
+ }, {
60
+ readonly reason: "feed_moved";
61
+ readonly code: JsonRpcErrorCode.ServiceUnavailable;
62
+ readonly when: "SWPC feed path returns a permanent 4xx (404, 410, 401, 403). Fails in one attempt.";
63
+ readonly retryable: false;
64
+ 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.";
53
65
  }], {
54
66
  readonly notice: z.ZodOptional<z.ZodString>;
67
+ readonly plasmaBucketRecords: z.ZodOptional<z.ZodNumber>;
68
+ readonly plasmaWindowRecords: z.ZodOptional<z.ZodNumber>;
69
+ readonly magBucketRecords: z.ZodOptional<z.ZodNumber>;
70
+ readonly magWindowRecords: z.ZodOptional<z.ZodNumber>;
55
71
  }>;
56
72
  //# sourceMappingURL=get-solar-wind.tool.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"get-solar-wind.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/get-solar-wind.tool.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAmDjE,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8PvB,CAAC"}
1
+ {"version":3,"file":"get-solar-wind.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/get-solar-wind.tool.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAwGjE,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAmXvB,CAAC"}