@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
|
@@ -4,34 +4,44 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { tool, z } from '@cyanheads/mcp-ts-core';
|
|
6
6
|
import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
|
|
7
|
-
import { getSpaceWeatherService } from '../../../services/space-weather/space-weather-service.js';
|
|
8
|
-
/**
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
7
|
+
import { auroraBandForGeomagneticLatitude, getSpaceWeatherService, } from '../../../services/space-weather/space-weather-service.js';
|
|
8
|
+
/**
|
|
9
|
+
* North geomagnetic pole for IGRF-14 epoch 2025.0, derived from the model's
|
|
10
|
+
* degree-1 Gauss coefficients (g₁⁰ = −29350.0, g₁¹ = −1410.3, h₁¹ = 4545.5). The
|
|
11
|
+
* pole drifts slowly enough that one epoch is ample for 5°-wide bands.
|
|
12
|
+
*/
|
|
13
|
+
const GEOMAGNETIC_POLE_LATITUDE = 80.789;
|
|
14
|
+
const GEOMAGNETIC_POLE_LONGITUDE = -72.763;
|
|
15
|
+
const DEG_TO_RAD = Math.PI / 180;
|
|
16
|
+
/**
|
|
17
|
+
* Convert geographic (WGS84) coordinates to centered-dipole geomagnetic latitude.
|
|
18
|
+
*
|
|
19
|
+
* The dipole is tilted 9.21° from the rotation axis, so geographic and geomagnetic
|
|
20
|
+
* latitude differ by up to ±9.2° and the sign of the difference changes with
|
|
21
|
+
* longitude. Aurora bands are geomagnetic, so feeding them a geographic latitude
|
|
22
|
+
* mis-bands a location by as much as two bands in either direction.
|
|
23
|
+
*/
|
|
24
|
+
function toGeomagneticLatitude(latitude, longitude) {
|
|
25
|
+
const lat = latitude * DEG_TO_RAD;
|
|
26
|
+
const poleLat = GEOMAGNETIC_POLE_LATITUDE * DEG_TO_RAD;
|
|
27
|
+
const deltaLon = (longitude - GEOMAGNETIC_POLE_LONGITUDE) * DEG_TO_RAD;
|
|
28
|
+
const sinGeomagnetic = Math.sin(lat) * Math.sin(poleLat) + Math.cos(lat) * Math.cos(poleLat) * Math.cos(deltaLon);
|
|
29
|
+
// Clamp against float drift past ±1 at the poles, where asin is undefined.
|
|
30
|
+
return Math.asin(Math.min(1, Math.max(-1, sinGeomagnetic))) / DEG_TO_RAD;
|
|
31
|
+
}
|
|
32
|
+
/** Signed angular separation between two longitudes, in degrees: [−180, 180). */
|
|
33
|
+
function longitudeDelta(a, b) {
|
|
34
|
+
return ((((a - b + 180) % 360) + 360) % 360) - 180;
|
|
23
35
|
}
|
|
24
36
|
/** Find the nearest grid point (1° resolution) and return its aurora probability. */
|
|
25
37
|
function lookupGridPoint(grid, lat, lon) {
|
|
26
|
-
if (grid.length === 0)
|
|
27
|
-
return null;
|
|
28
|
-
// Normalize longitude to -180..179
|
|
29
|
-
const normLon = ((((lon + 180) % 360) + 360) % 360) - 180;
|
|
30
38
|
let best = null;
|
|
31
39
|
let bestDist = Infinity;
|
|
32
40
|
for (const pt of grid) {
|
|
33
41
|
const dLat = pt.latitude - lat;
|
|
34
|
-
|
|
42
|
+
// The normalized grid runs −179..180 — a +180 column and no −180 one — so a
|
|
43
|
+
// request within ~1° of the antimeridian lands a cell off on a raw difference.
|
|
44
|
+
const dLon = longitudeDelta(pt.longitude, lon);
|
|
35
45
|
const dist = dLat * dLat + dLon * dLon;
|
|
36
46
|
if (dist < bestDist) {
|
|
37
47
|
bestDist = dist;
|
|
@@ -42,13 +52,24 @@ function lookupGridPoint(grid, lat, lon) {
|
|
|
42
52
|
? { auroraPercent: best.auroraPercent, gridLat: best.latitude, gridLon: best.longitude }
|
|
43
53
|
: null;
|
|
44
54
|
}
|
|
55
|
+
/**
|
|
56
|
+
* Aurora probability at which a grid point below the 40° geomagnetic edge is read
|
|
57
|
+
* as real signal rather than model noise. #9 pinned an 8% artifact at (0, 0), and
|
|
58
|
+
* the live oval reads 10–17% where it is genuinely present, so the floor sits above
|
|
59
|
+
* the artifact and at the bottom of the real range.
|
|
60
|
+
*/
|
|
61
|
+
const OVAL_OVERRIDE_PERCENT = 10;
|
|
62
|
+
/** Kp reported where no NOAA storm level reaches — the top of the scale. */
|
|
63
|
+
const UNREACHABLE_MIN_KP = 9;
|
|
45
64
|
export const getAuroraForecast = tool('noaa_spaceweather_get_aurora_forecast', {
|
|
46
65
|
title: 'Get Aurora Forecast',
|
|
47
66
|
description: 'OVATION model aurora forecast for the next ~30–60 min: global grid of aurora probability ' +
|
|
48
67
|
'percentages by latitude/longitude (1° resolution). With optional coordinates, returns the local ' +
|
|
49
|
-
'aurora probability at the nearest grid point, the
|
|
50
|
-
'and
|
|
51
|
-
'
|
|
68
|
+
'aurora probability at the nearest grid point, the geomagnetic latitude those coordinates convert ' +
|
|
69
|
+
'to, the minimum Kp and G level needed for aurora at that geomagnetic latitude, and a ' +
|
|
70
|
+
'plain-language go/no-go verdict. Without coordinates, returns only global metadata. ' +
|
|
71
|
+
'Data updates every ~5 minutes. Supply coordinates as geographic (WGS84); aurora bands are ' +
|
|
72
|
+
'geomagnetic, and the tool converts between them.',
|
|
52
73
|
annotations: { readOnlyHint: true, openWorldHint: true, idempotentHint: true },
|
|
53
74
|
input: z.object({
|
|
54
75
|
latitude: z
|
|
@@ -75,6 +96,9 @@ export const getAuroraForecast = tool('noaa_spaceweather_get_aurora_forecast', {
|
|
|
75
96
|
requestedLongitude: z
|
|
76
97
|
.number()
|
|
77
98
|
.describe('Geographic longitude supplied in the request (degrees, −180 to 180).'),
|
|
99
|
+
geomagneticLatitude: z
|
|
100
|
+
.number()
|
|
101
|
+
.describe('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.'),
|
|
78
102
|
gridLatitude: z.number().describe('Nearest OVATION grid latitude.'),
|
|
79
103
|
gridLongitude: z.number().describe('Nearest OVATION grid longitude.'),
|
|
80
104
|
auroraPercent: z
|
|
@@ -82,10 +106,14 @@ export const getAuroraForecast = tool('noaa_spaceweather_get_aurora_forecast', {
|
|
|
82
106
|
.describe('Aurora probability at the nearest grid point (0–100%).'),
|
|
83
107
|
minKpRequired: z
|
|
84
108
|
.number()
|
|
85
|
-
.describe('Minimum Kp
|
|
109
|
+
.describe('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.'),
|
|
110
|
+
minGScale: z
|
|
111
|
+
.number()
|
|
112
|
+
.nullable()
|
|
113
|
+
.describe('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.'),
|
|
86
114
|
verdict: z
|
|
87
115
|
.string()
|
|
88
|
-
.describe('Plain-language visibility verdict, e.g. "Good aurora chance (42%) — Kp≥6 needed at
|
|
116
|
+
.describe('Plain-language visibility verdict at this geomagnetic latitude, e.g. "Good aurora chance (42%) — Kp≥6.67 (G3) needed at 51.2° geomagnetic latitude."'),
|
|
89
117
|
})
|
|
90
118
|
.nullable()
|
|
91
119
|
.describe('Local aurora lookup result. Null when no coordinates were provided.'),
|
|
@@ -101,10 +129,17 @@ export const getAuroraForecast = tool('noaa_spaceweather_get_aurora_forecast', {
|
|
|
101
129
|
{
|
|
102
130
|
reason: 'feed_unavailable',
|
|
103
131
|
code: JsonRpcErrorCode.ServiceUnavailable,
|
|
104
|
-
when: 'SWPC
|
|
132
|
+
when: 'SWPC feed returns 5xx or 429, times out, or answers with a body that is not parseable JSON. Retried before failing.',
|
|
105
133
|
retryable: true,
|
|
106
134
|
recovery: 'Retry in 30–60 seconds; SWPC feeds occasionally lag during high-activity events.',
|
|
107
135
|
},
|
|
136
|
+
{
|
|
137
|
+
reason: 'feed_moved',
|
|
138
|
+
code: JsonRpcErrorCode.ServiceUnavailable,
|
|
139
|
+
when: 'SWPC feed path returns a permanent 4xx (404, 410, 401, 403). Fails in one attempt.',
|
|
140
|
+
retryable: false,
|
|
141
|
+
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.',
|
|
142
|
+
},
|
|
108
143
|
{
|
|
109
144
|
reason: 'invalid_coordinates',
|
|
110
145
|
code: JsonRpcErrorCode.ValidationError,
|
|
@@ -113,18 +148,14 @@ export const getAuroraForecast = tool('noaa_spaceweather_get_aurora_forecast', {
|
|
|
113
148
|
},
|
|
114
149
|
],
|
|
115
150
|
async handler(input, ctx) {
|
|
116
|
-
//
|
|
117
|
-
const
|
|
118
|
-
|
|
119
|
-
if ((hasLat && !hasLon) || (!hasLat && hasLon)) {
|
|
151
|
+
// A local lookup needs the pair; one coordinate alone has nothing to look up.
|
|
152
|
+
const { latitude: lat, longitude: lon } = input;
|
|
153
|
+
if ((lat == null) !== (lon == null)) {
|
|
120
154
|
throw ctx.fail('invalid_coordinates', 'Provide both latitude and longitude, or neither.', {
|
|
121
155
|
...ctx.recoveryFor('invalid_coordinates'),
|
|
122
156
|
});
|
|
123
157
|
}
|
|
124
|
-
ctx.log.info('Fetching aurora forecast', {
|
|
125
|
-
latitude: input.latitude,
|
|
126
|
-
longitude: input.longitude,
|
|
127
|
-
});
|
|
158
|
+
ctx.log.info('Fetching aurora forecast', { latitude: lat, longitude: lon });
|
|
128
159
|
const svc = getSpaceWeatherService();
|
|
129
160
|
const aurora = await svc.getAuroraForecast(ctx);
|
|
130
161
|
const grid = aurora.grid;
|
|
@@ -142,48 +173,55 @@ export const getAuroraForecast = tool('noaa_spaceweather_get_aurora_forecast', {
|
|
|
142
173
|
: 'Unknown';
|
|
143
174
|
// Local lookup
|
|
144
175
|
let localLookup = null;
|
|
145
|
-
if (
|
|
146
|
-
// biome-ignore lint/style/noNonNullAssertion: guarded by hasLat && hasLon checks above
|
|
147
|
-
const lat = input.latitude;
|
|
148
|
-
// biome-ignore lint/style/noNonNullAssertion: guarded by hasLat && hasLon checks above
|
|
149
|
-
const lon = input.longitude;
|
|
176
|
+
if (lat != null && lon != null) {
|
|
150
177
|
const nearest = lookupGridPoint(grid, lat, lon);
|
|
151
178
|
if (nearest) {
|
|
152
|
-
|
|
179
|
+
// Aurora bands are geomagnetic; the caller supplies geographic coordinates.
|
|
180
|
+
const geomLat = toGeomagneticLatitude(lat, lon);
|
|
181
|
+
const geomText = geomLat.toFixed(1);
|
|
182
|
+
const band = auroraBandForGeomagneticLatitude(geomLat);
|
|
183
|
+
const minKp = band?.minKp ?? UNREACHABLE_MIN_KP;
|
|
153
184
|
const pct = nearest.auroraPercent;
|
|
154
|
-
const kpClause = minKp > 0
|
|
185
|
+
const kpClause = band && band.minKp > 0
|
|
186
|
+
? ` Kp≥${band.minKp} (G${band.gScale}) needed at ${geomText}° geomagnetic.`
|
|
187
|
+
: '';
|
|
155
188
|
let verdict;
|
|
156
|
-
//
|
|
157
|
-
//
|
|
158
|
-
//
|
|
159
|
-
if (
|
|
160
|
-
verdict =
|
|
189
|
+
// Below the G5 band's 40° edge no storm level reaches, so the ladder's
|
|
190
|
+
// "possible with Kp≥9" framing would mislead (#9) — unless the grid point
|
|
191
|
+
// itself reads high enough to be signal rather than model noise.
|
|
192
|
+
if (!band) {
|
|
193
|
+
verdict =
|
|
194
|
+
pct >= OVAL_OVERRIDE_PERCENT
|
|
195
|
+
? `Aurora is normally not seen at ${geomText}° geomagnetic latitude, but the nearest grid point reads ${pct}% — an exceptional reading; only G5-class (Kp 9) storms push the oval this far equatorward.`
|
|
196
|
+
: `Aurora not visible at ${geomText}° geomagnetic latitude (${lat}° geographic) — even G5 extreme storms (Kp 9) do not reach below 40° geomagnetic latitude. Travel toward higher geomagnetic latitudes to see aurora.`;
|
|
161
197
|
}
|
|
162
198
|
else if (pct >= 30) {
|
|
163
199
|
verdict =
|
|
164
200
|
minKp === 0
|
|
165
|
-
? `Good aurora chance (${pct}%) at
|
|
201
|
+
? `Good aurora chance (${pct}%) at ${geomText}° geomagnetic latitude — inside the auroral oval, no Kp minimum required, aurora possible now.`
|
|
166
202
|
: `Good aurora chance (${pct}%) —${kpClause}`;
|
|
167
203
|
}
|
|
168
204
|
else if (pct >= 5) {
|
|
169
205
|
verdict =
|
|
170
206
|
minKp === 0
|
|
171
|
-
? `Low aurora chance (${pct}%) at this location — aurora activity is low despite the favorable latitude
|
|
207
|
+
? `Low aurora chance (${pct}%) at this location — aurora activity is low despite the favorable geomagnetic latitude of ${geomText}°.`
|
|
172
208
|
: `Low aurora chance (${pct}%) — conditions marginal.${kpClause}`;
|
|
173
209
|
}
|
|
174
210
|
else if (minKp === 0) {
|
|
175
|
-
verdict = `Very low aurora probability (${pct}%) despite favorable latitude — wait for elevated solar activity and higher Kp.`;
|
|
211
|
+
verdict = `Very low aurora probability (${pct}%) despite a favorable geomagnetic latitude of ${geomText}° — wait for elevated solar activity and higher Kp.`;
|
|
176
212
|
}
|
|
177
213
|
else {
|
|
178
|
-
verdict = `Very low aurora probability (${pct}%) at this location
|
|
214
|
+
verdict = `Very low aurora probability (${pct}%) at this location.${kpClause} Travel toward higher geomagnetic latitudes or wait for elevated Kp.`;
|
|
179
215
|
}
|
|
180
216
|
localLookup = {
|
|
181
217
|
requestedLatitude: lat,
|
|
182
218
|
requestedLongitude: lon,
|
|
219
|
+
geomagneticLatitude: Number(geomLat.toFixed(2)),
|
|
183
220
|
gridLatitude: nearest.gridLat,
|
|
184
221
|
gridLongitude: nearest.gridLon,
|
|
185
222
|
auroraPercent: pct,
|
|
186
223
|
minKpRequired: minKp,
|
|
224
|
+
minGScale: band?.gScale ?? null,
|
|
187
225
|
verdict,
|
|
188
226
|
};
|
|
189
227
|
}
|
|
@@ -209,8 +247,9 @@ export const getAuroraForecast = tool('noaa_spaceweather_get_aurora_forecast', {
|
|
|
209
247
|
lines.push('');
|
|
210
248
|
lines.push('### Local Forecast');
|
|
211
249
|
lines.push(`**Location:** ${l.requestedLatitude}°, ${l.requestedLongitude}° → nearest grid (${l.gridLatitude}°, ${l.gridLongitude}°)`);
|
|
250
|
+
lines.push(`**Geomagnetic Latitude:** ${l.geomagneticLatitude}°`);
|
|
212
251
|
lines.push(`**Aurora Probability:** ${l.auroraPercent}%`);
|
|
213
|
-
lines.push(`**Min Kp Required:** ${l.minKpRequired}`);
|
|
252
|
+
lines.push(`**Min Kp Required:** ${l.minKpRequired} (${l.minGScale === null ? 'not reachable by any storm level' : `G${l.minGScale}`})`);
|
|
214
253
|
lines.push(`**Verdict:** ${l.verdict}`);
|
|
215
254
|
}
|
|
216
255
|
return [{ type: 'text', text: lines.join('\n') }];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-aurora-forecast.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/get-aurora-forecast.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,
|
|
1
|
+
{"version":3,"file":"get-aurora-forecast.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/get-aurora-forecast.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EACL,gCAAgC,EAChC,sBAAsB,GACvB,MAAM,mDAAmD,CAAC;AAE3D;;;;GAIG;AACH,MAAM,yBAAyB,GAAG,MAAM,CAAC;AACzC,MAAM,0BAA0B,GAAG,CAAC,MAAM,CAAC;AAE3C,MAAM,UAAU,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC;AAEjC;;;;;;;GAOG;AACH,SAAS,qBAAqB,CAAC,QAAgB,EAAE,SAAiB;IAChE,MAAM,GAAG,GAAG,QAAQ,GAAG,UAAU,CAAC;IAClC,MAAM,OAAO,GAAG,yBAAyB,GAAG,UAAU,CAAC;IACvD,MAAM,QAAQ,GAAG,CAAC,SAAS,GAAG,0BAA0B,CAAC,GAAG,UAAU,CAAC;IACvE,MAAM,cAAc,GAClB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC7F,2EAA2E;IAC3E,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC;AAC3E,CAAC;AAED,iFAAiF;AACjF,SAAS,cAAc,CAAC,CAAS,EAAE,CAAS;IAC1C,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;AACrD,CAAC;AAED,qFAAqF;AACrF,SAAS,eAAe,CACtB,IAAsE,EACtE,GAAW,EACX,GAAW;IAEX,IAAI,IAAI,GAA0E,IAAI,CAAC;IACvF,IAAI,QAAQ,GAAG,QAAQ,CAAC;IACxB,KAAK,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC;QACtB,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,GAAG,GAAG,CAAC;QAC/B,4EAA4E;QAC5E,+EAA+E;QAC/E,MAAM,IAAI,GAAG,cAAc,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;QAC/C,MAAM,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;QACvC,IAAI,IAAI,GAAG,QAAQ,EAAE,CAAC;YACpB,QAAQ,GAAG,IAAI,CAAC;YAChB,IAAI,GAAG,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IACD,OAAO,IAAI;QACT,CAAC,CAAC,EAAE,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,SAAS,EAAE;QACxF,CAAC,CAAC,IAAI,CAAC;AACX,CAAC;AAED;;;;;GAKG;AACH,MAAM,qBAAqB,GAAG,EAAE,CAAC;AAEjC,4EAA4E;AAC5E,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAE7B,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAC,uCAAuC,EAAE;IAC7E,KAAK,EAAE,qBAAqB;IAC5B,WAAW,EACT,2FAA2F;QAC3F,kGAAkG;QAClG,mGAAmG;QACnG,uFAAuF;QACvF,sFAAsF;QACtF,4FAA4F;QAC5F,kDAAkD;IACpD,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;IAC9E,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,QAAQ,EAAE,CAAC;aACR,MAAM,EAAE;aACR,GAAG,CAAC,CAAC,EAAE,CAAC;aACR,GAAG,CAAC,EAAE,CAAC;aACP,QAAQ,EAAE;aACV,QAAQ,CACP,2GAA2G,CAC5G;QACH,SAAS,EAAE,CAAC;aACT,MAAM,EAAE;aACR,GAAG,CAAC,CAAC,GAAG,CAAC;aACT,GAAG,CAAC,GAAG,CAAC;aACR,QAAQ,EAAE;aACV,QAAQ,CACP,6GAA6G,CAC9G;KACJ,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kDAAkD,CAAC;QACxF,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kDAAkD,CAAC;QACrF,WAAW,EAAE,CAAC;aACX,MAAM,CAAC;YACN,iBAAiB,EAAE,CAAC;iBACjB,MAAM,EAAE;iBACR,QAAQ,CAAC,mEAAmE,CAAC;YAChF,kBAAkB,EAAE,CAAC;iBAClB,MAAM,EAAE;iBACR,QAAQ,CAAC,sEAAsE,CAAC;YACnF,mBAAmB,EAAE,CAAC;iBACnB,MAAM,EAAE;iBACR,QAAQ,CACP,8SAA8S,CAC/S;YACH,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;YACnE,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;YACrE,aAAa,EAAE,CAAC;iBACb,MAAM,EAAE;iBACR,QAAQ,CAAC,wDAAwD,CAAC;YACrE,aAAa,EAAE,CAAC;iBACb,MAAM,EAAE;iBACR,QAAQ,CACP,iaAAia,CACla;YACH,SAAS,EAAE,CAAC;iBACT,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CACP,wKAAwK,CACzK;YACH,OAAO,EAAE,CAAC;iBACP,MAAM,EAAE;iBACR,QAAQ,CACP,sJAAsJ,CACvJ;SACJ,CAAC;aACD,QAAQ,EAAE;aACV,QAAQ,CAAC,qEAAqE,CAAC;QAClF,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mDAAmD,CAAC;QACxF,gBAAgB,EAAE,CAAC;aAChB,MAAM,EAAE;aACR,QAAQ,CAAC,2DAA2D,CAAC;QACxE,eAAe,EAAE,CAAC;aACf,MAAM,EAAE;aACR,QAAQ,CAAC,kEAAkE,CAAC;KAChF,CAAC;IAEF,MAAM,EAAE;QACN;YACE,MAAM,EAAE,kBAAkB;YAC1B,IAAI,EAAE,gBAAgB,CAAC,kBAAkB;YACzC,IAAI,EAAE,qHAAqH;YAC3H,SAAS,EAAE,IAAI;YACf,QAAQ,EAAE,kFAAkF;SAC7F;QACD;YACE,MAAM,EAAE,YAAY;YACpB,IAAI,EAAE,gBAAgB,CAAC,kBAAkB;YACzC,IAAI,EAAE,oFAAoF;YAC1F,SAAS,EAAE,KAAK;YAChB,QAAQ,EACN,iKAAiK;SACpK;QACD;YACE,MAAM,EAAE,qBAAqB;YAC7B,IAAI,EAAE,gBAAgB,CAAC,eAAe;YACtC,IAAI,EAAE,4CAA4C;YAClD,QAAQ,EACN,sFAAsF;SACzF;KACF;IAED,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG;QACtB,8EAA8E;QAC9E,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC;QAChD,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,EAAE,CAAC;YACpC,MAAM,GAAG,CAAC,IAAI,CAAC,qBAAqB,EAAE,kDAAkD,EAAE;gBACxF,GAAG,GAAG,CAAC,WAAW,CAAC,qBAAqB,CAAC;aAC1C,CAAC,CAAC;QACL,CAAC;QAED,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,0BAA0B,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;QAC5E,MAAM,GAAG,GAAG,sBAAsB,EAAE,CAAC;QACrC,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;QAEhD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QAEzB,sBAAsB;QACtB,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,IAAI,QAAQ,GAAmD,IAAI,CAAC;QACpE,KAAK,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC;YACtB,IAAI,EAAE,CAAC,aAAa,GAAG,UAAU,EAAE,CAAC;gBAClC,UAAU,GAAG,EAAE,CAAC,aAAa,CAAC;gBAC9B,QAAQ,GAAG,EAAE,CAAC;YAChB,CAAC;QACH,CAAC;QACD,MAAM,SAAS,GAAG,QAAQ;YACxB,CAAC,CAAC,GAAG,QAAQ,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE;YAC3L,CAAC,CAAC,SAAS,CAAC;QAEd,eAAe;QACf,IAAI,WAAW,GAAG,IAAI,CAAC;QACvB,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;YAC/B,MAAM,OAAO,GAAG,eAAe,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;YAChD,IAAI,OAAO,EAAE,CAAC;gBACZ,4EAA4E;gBAC5E,MAAM,OAAO,GAAG,qBAAqB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;gBAChD,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBACpC,MAAM,IAAI,GAAG,gCAAgC,CAAC,OAAO,CAAC,CAAC;gBACvD,MAAM,KAAK,GAAG,IAAI,EAAE,KAAK,IAAI,kBAAkB,CAAC;gBAChD,MAAM,GAAG,GAAG,OAAO,CAAC,aAAa,CAAC;gBAClC,MAAM,QAAQ,GACZ,IAAI,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC;oBACpB,CAAC,CAAC,OAAO,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,MAAM,eAAe,QAAQ,gBAAgB;oBAC3E,CAAC,CAAC,EAAE,CAAC;gBACT,IAAI,OAAe,CAAC;gBACpB,uEAAuE;gBACvE,0EAA0E;gBAC1E,iEAAiE;gBACjE,IAAI,CAAC,IAAI,EAAE,CAAC;oBACV,OAAO;wBACL,GAAG,IAAI,qBAAqB;4BAC1B,CAAC,CAAC,kCAAkC,QAAQ,4DAA4D,GAAG,6FAA6F;4BACxM,CAAC,CAAC,yBAAyB,QAAQ,2BAA2B,GAAG,sJAAsJ,CAAC;gBAC9N,CAAC;qBAAM,IAAI,GAAG,IAAI,EAAE,EAAE,CAAC;oBACrB,OAAO;wBACL,KAAK,KAAK,CAAC;4BACT,CAAC,CAAC,uBAAuB,GAAG,SAAS,QAAQ,gGAAgG;4BAC7I,CAAC,CAAC,uBAAuB,GAAG,OAAO,QAAQ,EAAE,CAAC;gBACpD,CAAC;qBAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;oBACpB,OAAO;wBACL,KAAK,KAAK,CAAC;4BACT,CAAC,CAAC,sBAAsB,GAAG,8FAA8F,QAAQ,IAAI;4BACrI,CAAC,CAAC,sBAAsB,GAAG,4BAA4B,QAAQ,EAAE,CAAC;gBACxE,CAAC;qBAAM,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;oBACvB,OAAO,GAAG,gCAAgC,GAAG,kDAAkD,QAAQ,qDAAqD,CAAC;gBAC/J,CAAC;qBAAM,CAAC;oBACN,OAAO,GAAG,gCAAgC,GAAG,uBAAuB,QAAQ,sEAAsE,CAAC;gBACrJ,CAAC;gBAED,WAAW,GAAG;oBACZ,iBAAiB,EAAE,GAAG;oBACtB,kBAAkB,EAAE,GAAG;oBACvB,mBAAmB,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;oBAC/C,YAAY,EAAE,OAAO,CAAC,OAAO;oBAC7B,aAAa,EAAE,OAAO,CAAC,OAAO;oBAC9B,aAAa,EAAE,GAAG;oBAClB,aAAa,EAAE,KAAK;oBACpB,SAAS,EAAE,IAAI,EAAE,MAAM,IAAI,IAAI;oBAC/B,OAAO;iBACR,CAAC;YACJ,CAAC;QACH,CAAC;QAED,OAAO;YACL,eAAe,EAAE,MAAM,CAAC,IAAI,CAAC,eAAe;YAC5C,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,YAAY;YACtC,WAAW;YACX,cAAc,EAAE,IAAI,CAAC,MAAM;YAC3B,gBAAgB,EAAE,UAAU;YAC5B,eAAe,EAAE,SAAS;SAC3B,CAAC;IACJ,CAAC;IAED,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE;QACjB,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;QAC3C,KAAK,CAAC,IAAI,CAAC,yBAAyB,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC;QAC9D,KAAK,CAAC,IAAI,CAAC,uBAAuB,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;QACzD,KAAK,CAAC,IAAI,CAAC,oBAAoB,MAAM,CAAC,gBAAgB,UAAU,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC;QAC1F,KAAK,CAAC,IAAI,CAAC,oBAAoB,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC;QACxD,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YACvB,MAAM,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC;YAC7B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;YACjC,KAAK,CAAC,IAAI,CACR,iBAAiB,CAAC,CAAC,iBAAiB,MAAM,CAAC,CAAC,kBAAkB,qBAAqB,CAAC,CAAC,YAAY,MAAM,CAAC,CAAC,aAAa,IAAI,CAC3H,CAAC;YACF,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC,mBAAmB,GAAG,CAAC,CAAC;YAClE,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC,aAAa,GAAG,CAAC,CAAC;YAC1D,KAAK,CAAC,IAAI,CACR,wBAAwB,CAAC,CAAC,aAAa,KAAK,CAAC,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,kCAAkC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,GAAG,CAC7H,CAAC;YACF,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QAC1C,CAAC;QACD,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACpD,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -4,7 +4,9 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { z } from '@cyanheads/mcp-ts-core';
|
|
6
6
|
import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
|
|
7
|
-
export declare const getConditions: import("@cyanheads/mcp-ts-core").ToolDefinition<z.ZodObject<{
|
|
7
|
+
export declare const getConditions: import("@cyanheads/mcp-ts-core").ToolDefinition<z.ZodObject<{
|
|
8
|
+
include_discussion: z.ZodDefault<z.ZodBoolean>;
|
|
9
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
8
10
|
observedAt: z.ZodString;
|
|
9
11
|
currentKp: z.ZodNumber;
|
|
10
12
|
currentGScale: z.ZodNumber;
|
|
@@ -34,22 +36,39 @@ export declare const getConditions: import("@cyanheads/mcp-ts-core").ToolDefinit
|
|
|
34
36
|
label: z.ZodString;
|
|
35
37
|
}, z.core.$strip>;
|
|
36
38
|
R: z.ZodObject<{
|
|
37
|
-
scale: z.ZodNumber
|
|
38
|
-
text: z.ZodString
|
|
39
|
-
label: z.ZodString
|
|
39
|
+
scale: z.ZodNullable<z.ZodNumber>;
|
|
40
|
+
text: z.ZodNullable<z.ZodString>;
|
|
41
|
+
label: z.ZodNullable<z.ZodString>;
|
|
42
|
+
minorProbPercent: z.ZodNullable<z.ZodNumber>;
|
|
43
|
+
majorProbPercent: z.ZodNullable<z.ZodNumber>;
|
|
40
44
|
}, z.core.$strip>;
|
|
41
45
|
S: z.ZodObject<{
|
|
42
|
-
scale: z.ZodNumber
|
|
43
|
-
text: z.ZodString
|
|
44
|
-
label: z.ZodString
|
|
46
|
+
scale: z.ZodNullable<z.ZodNumber>;
|
|
47
|
+
text: z.ZodNullable<z.ZodString>;
|
|
48
|
+
label: z.ZodNullable<z.ZodString>;
|
|
49
|
+
probPercent: z.ZodNullable<z.ZodNumber>;
|
|
45
50
|
}, z.core.$strip>;
|
|
46
51
|
}, z.core.$strip>>;
|
|
47
52
|
summary: z.ZodString;
|
|
53
|
+
discussion: z.ZodNullable<z.ZodObject<{
|
|
54
|
+
issued: z.ZodNullable<z.ZodString>;
|
|
55
|
+
sections: z.ZodArray<z.ZodObject<{
|
|
56
|
+
topic: z.ZodString;
|
|
57
|
+
summary: z.ZodNullable<z.ZodString>;
|
|
58
|
+
forecast: z.ZodNullable<z.ZodString>;
|
|
59
|
+
}, z.core.$strip>>;
|
|
60
|
+
}, z.core.$strip>>;
|
|
48
61
|
}, z.core.$strip>, readonly [{
|
|
49
62
|
readonly reason: "feed_unavailable";
|
|
50
63
|
readonly code: JsonRpcErrorCode.ServiceUnavailable;
|
|
51
|
-
readonly when: "SWPC
|
|
64
|
+
readonly when: "SWPC feed returns 5xx or 429, times out, or answers with a body that is not parseable JSON. Retried before failing.";
|
|
52
65
|
readonly retryable: true;
|
|
53
66
|
readonly recovery: "Retry in 30–60 seconds; SWPC feeds occasionally lag during high-activity events.";
|
|
67
|
+
}, {
|
|
68
|
+
readonly reason: "feed_moved";
|
|
69
|
+
readonly code: JsonRpcErrorCode.ServiceUnavailable;
|
|
70
|
+
readonly when: "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.";
|
|
71
|
+
readonly retryable: false;
|
|
72
|
+
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.";
|
|
54
73
|
}], undefined>;
|
|
55
74
|
//# sourceMappingURL=get-conditions.tool.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-conditions.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/get-conditions.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-conditions.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/get-conditions.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAiNjE,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAmNxB,CAAC"}
|