@cyanheads/nasa-power-mcp-server 0.4.0 → 0.4.2
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 +2 -2
- package/CLAUDE.md +2 -2
- package/README.md +9 -5
- package/changelog/0.4.x/0.4.1.md +20 -0
- package/changelog/0.4.x/0.4.2.md +16 -0
- package/dist/config/server-config.d.ts +29 -0
- package/dist/config/server-config.d.ts.map +1 -1
- package/dist/config/server-config.js +29 -0
- package/dist/config/server-config.js.map +1 -1
- package/dist/mcp-server/tools/definitions/comparison-contracts.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/comparison-contracts.js +10 -4
- package/dist/mcp-server/tools/definitions/comparison-contracts.js.map +1 -1
- package/dist/mcp-server/tools/definitions/nasa-power-compare-locations.tool.d.ts +17 -3
- package/dist/mcp-server/tools/definitions/nasa-power-compare-locations.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/nasa-power-compare-locations.tool.js +19 -3
- package/dist/mcp-server/tools/definitions/nasa-power-compare-locations.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/nasa-power-dataframe-describe.tool.d.ts +3 -3
- package/dist/mcp-server/tools/definitions/nasa-power-dataframe-describe.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/nasa-power-dataframe-describe.tool.js +3 -3
- package/dist/mcp-server/tools/definitions/nasa-power-dataframe-describe.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/nasa-power-dataframe-drop.tool.d.ts +3 -3
- package/dist/mcp-server/tools/definitions/nasa-power-dataframe-drop.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/nasa-power-dataframe-drop.tool.js +3 -3
- package/dist/mcp-server/tools/definitions/nasa-power-dataframe-drop.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/nasa-power-dataframe-query.tool.d.ts +3 -3
- package/dist/mcp-server/tools/definitions/nasa-power-dataframe-query.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/nasa-power-dataframe-query.tool.js +3 -3
- package/dist/mcp-server/tools/definitions/nasa-power-dataframe-query.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/nasa-power-get-climatology.tool.d.ts +37 -3
- package/dist/mcp-server/tools/definitions/nasa-power-get-climatology.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/nasa-power-get-climatology.tool.js +20 -4
- package/dist/mcp-server/tools/definitions/nasa-power-get-climatology.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/nasa-power-get-region.tool.d.ts +17 -3
- package/dist/mcp-server/tools/definitions/nasa-power-get-region.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/nasa-power-get-region.tool.js +26 -6
- package/dist/mcp-server/tools/definitions/nasa-power-get-region.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/nasa-power-get-timeseries.tool.d.ts +37 -3
- package/dist/mcp-server/tools/definitions/nasa-power-get-timeseries.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/nasa-power-get-timeseries.tool.js +20 -4
- package/dist/mcp-server/tools/definitions/nasa-power-get-timeseries.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/nasa-power-list-reference.tool.js +3 -3
- package/dist/mcp-server/tools/definitions/nasa-power-list-reference.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/nasa-power-search-parameters.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/nasa-power-search-parameters.tool.js +14 -5
- package/dist/mcp-server/tools/definitions/nasa-power-search-parameters.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/point-contracts.d.ts +22 -2
- package/dist/mcp-server/tools/definitions/point-contracts.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/point-contracts.js +16 -6
- package/dist/mcp-server/tools/definitions/point-contracts.js.map +1 -1
- package/dist/services/canvas/canvas-service.d.ts +59 -6
- package/dist/services/canvas/canvas-service.d.ts.map +1 -1
- package/dist/services/canvas/canvas-service.js +172 -42
- package/dist/services/canvas/canvas-service.js.map +1 -1
- package/dist/services/canvas/errors.d.ts +12 -3
- package/dist/services/canvas/errors.d.ts.map +1 -1
- package/dist/services/canvas/errors.js +25 -5
- package/dist/services/canvas/errors.js.map +1 -1
- package/dist/services/canvas/inline-split.d.ts +73 -0
- package/dist/services/canvas/inline-split.d.ts.map +1 -0
- package/dist/services/canvas/inline-split.js +358 -0
- package/dist/services/canvas/inline-split.js.map +1 -0
- package/dist/services/canvas/producer-estimate.d.ts +13 -0
- package/dist/services/canvas/producer-estimate.d.ts.map +1 -0
- package/dist/services/canvas/producer-estimate.js +82 -0
- package/dist/services/canvas/producer-estimate.js.map +1 -0
- package/dist/services/power/normalize.d.ts.map +1 -1
- package/dist/services/power/normalize.js +4 -10
- package/dist/services/power/normalize.js.map +1 -1
- package/dist/services/power/power-service.d.ts +18 -2
- package/dist/services/power/power-service.d.ts.map +1 -1
- package/dist/services/power/power-service.js +89 -52
- package/dist/services/power/power-service.js.map +1 -1
- package/dist/services/power/presets.d.ts +7 -2
- package/dist/services/power/presets.d.ts.map +1 -1
- package/dist/services/power/presets.js +27 -2
- package/dist/services/power/presets.js.map +1 -1
- package/dist/services/power/unserved-parameters.d.ts +11 -0
- package/dist/services/power/unserved-parameters.d.ts.map +1 -0
- package/dist/services/power/unserved-parameters.js +47 -0
- package/dist/services/power/unserved-parameters.js.map +1 -0
- package/package.json +1 -1
- package/server.json +3 -3
- package/skills/nasa-power-guide/SKILL.md +10 -10
|
@@ -10,7 +10,10 @@ export type PowerCallBudget = {
|
|
|
10
10
|
readonly maxBodyBytes: number;
|
|
11
11
|
readonly comparison: boolean;
|
|
12
12
|
attempts: number;
|
|
13
|
+
/** Body bytes decoded by every attempt, discarded ones included; the comparison ceiling bounds it. */
|
|
13
14
|
decodedBytes: number;
|
|
15
|
+
/** Body bytes of the responses the call still holds; a failed attempt's body leaves it at once. */
|
|
16
|
+
heldBytes: number;
|
|
14
17
|
};
|
|
15
18
|
/** Injection boundaries for offline fixtures and deterministic access timestamps. */
|
|
16
19
|
export type PowerServiceOptions = {
|
|
@@ -28,14 +31,27 @@ export declare class PowerService {
|
|
|
28
31
|
private cacheBytes;
|
|
29
32
|
readonly config: ServerConfig;
|
|
30
33
|
constructor(options?: PowerServiceOptions);
|
|
31
|
-
/**
|
|
32
|
-
|
|
34
|
+
/**
|
|
35
|
+
* Start before dictionaries/configuration, then pass the same object through all locations and
|
|
36
|
+
* canvas presentation. `deadlineMs` is what remains of a deadline that started earlier (a
|
|
37
|
+
* producer's tool entry); it defaults to the full call deadline. `onHeldBytes` receives the body
|
|
38
|
+
* bytes the call holds after every streamed chunk, so a producer can grow its in-flight
|
|
39
|
+
* reservation, or abort the call, before the next chunk is read; it receives the lower total
|
|
40
|
+
* again when a failed attempt's body is released, before any retry reads.
|
|
41
|
+
*/
|
|
42
|
+
createCallBudget(ctx: Context, comparison?: boolean, options?: {
|
|
43
|
+
deadlineMs?: number;
|
|
44
|
+
onHeldBytes?: (total: number) => void;
|
|
45
|
+
}): PowerCallBudget;
|
|
33
46
|
/** Abort owned work, remove queued callers, and release bounded cached payloads. */
|
|
34
47
|
dispose(): void;
|
|
35
48
|
private remaining;
|
|
36
49
|
private cached;
|
|
37
50
|
private store;
|
|
51
|
+
/** Stream one body under the byte bounds; a body that fails to read leaves `heldBytes` again. */
|
|
38
52
|
private body;
|
|
53
|
+
/** Classify a non-2xx or non-JSON body, or parse a JSON body against `schema`. */
|
|
54
|
+
private decode;
|
|
39
55
|
private load;
|
|
40
56
|
/** Complete dictionary for one exact community/resolution pair. */
|
|
41
57
|
dictionary(community: Community, resolution: Resolution, ctx: Context, budget?: PowerCallBudget): Promise<ParameterDictionary>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"power-service.d.ts","sourceRoot":"","sources":["../../../src/services/power/power-service.ts"],"names":[],"mappings":"AAAA,0HAA0H;AAC1H,OAAO,KAAK,EAAE,OAAO,EAAK,MAAM,wBAAwB,CAAC;AAGzD,OAAO,EAAiC,KAAK,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAUjG,OAAO,EACL,KAAK,SAAS,EACd,KAAK,mBAAmB,EAExB,KAAK,kBAAkB,EAEvB,KAAK,YAAY,EACjB,KAAK,YAAY,EAEjB,KAAK,eAAe,EACpB,KAAK,aAAa,EAElB,KAAK,UAAU,EAChB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"power-service.d.ts","sourceRoot":"","sources":["../../../src/services/power/power-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,7 @@ import { describePowerError, powerError, REFERENCE_LIMIT_RECOVERY, shapeError }
|
|
|
5
5
|
import { normalizePoint, normalizeRegion, PointPayloadSchema, RegionPayloadSchema, requestedParameters, } from './normalize.js';
|
|
6
6
|
import { TILTED_ALIAS } from './presets.js';
|
|
7
7
|
import { ParameterDictionarySchema, PowerConfigurationSchema, PowerRequestSchema, RegionRequestSchema, } from './types.js';
|
|
8
|
+
import { unservedParameters } from './unserved-parameters.js';
|
|
8
9
|
const origin = 'https://power.larc.nasa.gov';
|
|
9
10
|
function parse(schema, value) {
|
|
10
11
|
const result = schema.safeParse(value);
|
|
@@ -35,20 +36,32 @@ export class PowerService {
|
|
|
35
36
|
this.now = options.now ?? Date.now;
|
|
36
37
|
this.config = options.config ?? getServerConfig();
|
|
37
38
|
}
|
|
38
|
-
/**
|
|
39
|
-
|
|
39
|
+
/**
|
|
40
|
+
* Start before dictionaries/configuration, then pass the same object through all locations and
|
|
41
|
+
* canvas presentation. `deadlineMs` is what remains of a deadline that started earlier (a
|
|
42
|
+
* producer's tool entry); it defaults to the full call deadline. `onHeldBytes` receives the body
|
|
43
|
+
* bytes the call holds after every streamed chunk, so a producer can grow its in-flight
|
|
44
|
+
* reservation, or abort the call, before the next chunk is read; it receives the lower total
|
|
45
|
+
* again when a failed attempt's body is released, before any retry reads.
|
|
46
|
+
*/
|
|
47
|
+
createCallBudget(ctx, comparison = false, options = {}) {
|
|
48
|
+
const deadlineMs = options.deadlineMs ?? POWER_LIMITS.deadlineMs;
|
|
49
|
+
let heldBytes = 0;
|
|
40
50
|
return {
|
|
41
|
-
deadlineAt: this.now() +
|
|
42
|
-
signal: AbortSignal.any([
|
|
43
|
-
ctx.signal,
|
|
44
|
-
this.shutdown.signal,
|
|
45
|
-
AbortSignal.timeout(POWER_LIMITS.deadlineMs),
|
|
46
|
-
]),
|
|
51
|
+
deadlineAt: this.now() + deadlineMs,
|
|
52
|
+
signal: AbortSignal.any([ctx.signal, this.shutdown.signal, AbortSignal.timeout(deadlineMs)]),
|
|
47
53
|
maxAttempts: comparison ? POWER_LIMITS.comparisonAttempts : 6,
|
|
48
54
|
maxBodyBytes: comparison ? POWER_LIMITS.comparisonBodyBytes : POWER_LIMITS.bodyBytes,
|
|
49
55
|
comparison,
|
|
50
56
|
attempts: 0,
|
|
51
57
|
decodedBytes: 0,
|
|
58
|
+
get heldBytes() {
|
|
59
|
+
return heldBytes;
|
|
60
|
+
},
|
|
61
|
+
set heldBytes(total) {
|
|
62
|
+
heldBytes = total;
|
|
63
|
+
options.onHeldBytes?.(total);
|
|
64
|
+
},
|
|
52
65
|
};
|
|
53
66
|
}
|
|
54
67
|
/** Abort owned work, remove queued callers, and release bounded cached payloads. */
|
|
@@ -101,6 +114,7 @@ export class PowerService {
|
|
|
101
114
|
});
|
|
102
115
|
this.cacheBytes += bytes;
|
|
103
116
|
}
|
|
117
|
+
/** Stream one body under the byte bounds; a body that fails to read leaves `heldBytes` again. */
|
|
104
118
|
async body(response, signal, budget) {
|
|
105
119
|
if (!response.body)
|
|
106
120
|
return { text: '', bytes: 0 };
|
|
@@ -121,6 +135,7 @@ export class PowerService {
|
|
|
121
135
|
break;
|
|
122
136
|
bytes += next.value.byteLength;
|
|
123
137
|
budget.decodedBytes += next.value.byteLength;
|
|
138
|
+
budget.heldBytes += next.value.byteLength;
|
|
124
139
|
if (bytes > POWER_LIMITS.bodyBytes ||
|
|
125
140
|
(budget.comparison && budget.decodedBytes > budget.maxBodyBytes)) {
|
|
126
141
|
await reader.cancel();
|
|
@@ -141,11 +156,66 @@ export class PowerService {
|
|
|
141
156
|
}
|
|
142
157
|
return { text, bytes };
|
|
143
158
|
}
|
|
159
|
+
catch (error) {
|
|
160
|
+
budget.heldBytes -= bytes;
|
|
161
|
+
throw error;
|
|
162
|
+
}
|
|
144
163
|
finally {
|
|
145
164
|
signal.removeEventListener('abort', abort);
|
|
146
165
|
reader.releaseLock();
|
|
147
166
|
}
|
|
148
167
|
}
|
|
168
|
+
/** Classify a non-2xx or non-JSON body, or parse a JSON body against `schema`. */
|
|
169
|
+
decode(response, text, schema) {
|
|
170
|
+
if (!response.ok) {
|
|
171
|
+
let diagnostics;
|
|
172
|
+
try {
|
|
173
|
+
diagnostics = JSON.parse(text);
|
|
174
|
+
}
|
|
175
|
+
catch {
|
|
176
|
+
diagnostics = text.slice(0, 4_096);
|
|
177
|
+
}
|
|
178
|
+
const messages = diagnostics &&
|
|
179
|
+
typeof diagnostics === 'object' &&
|
|
180
|
+
'messages' in diagnostics &&
|
|
181
|
+
Array.isArray(diagnostics.messages)
|
|
182
|
+
? diagnostics.messages
|
|
183
|
+
.filter((message) => typeof message === 'string')
|
|
184
|
+
.map((message) => message.slice(0, 2_048))
|
|
185
|
+
.slice(0, 20)
|
|
186
|
+
: [text.slice(0, 4_096)];
|
|
187
|
+
const data = { status: response.status, messages };
|
|
188
|
+
if (response.status === 429)
|
|
189
|
+
throw powerError('upstream_rate_limited', 'NASA POWER rate limited this request.', {
|
|
190
|
+
...data,
|
|
191
|
+
retryAfter: response.headers.get('retry-after') ?? '2',
|
|
192
|
+
});
|
|
193
|
+
if (response.status === 422 || response.status === 400)
|
|
194
|
+
throw powerError('upstream_rejected', 'NASA POWER rejected the request.', data);
|
|
195
|
+
const code = response.status === 401
|
|
196
|
+
? JsonRpcErrorCode.Unauthorized
|
|
197
|
+
: response.status === 403
|
|
198
|
+
? JsonRpcErrorCode.Forbidden
|
|
199
|
+
: response.status === 404
|
|
200
|
+
? JsonRpcErrorCode.NotFound
|
|
201
|
+
: [408, 425, 504].includes(response.status)
|
|
202
|
+
? JsonRpcErrorCode.Timeout
|
|
203
|
+
: response.status >= 500
|
|
204
|
+
? JsonRpcErrorCode.ServiceUnavailable
|
|
205
|
+
: JsonRpcErrorCode.ValidationError;
|
|
206
|
+
throw new McpError(code, describePowerError(`NASA POWER HTTP ${response.status}.`, data), data);
|
|
207
|
+
}
|
|
208
|
+
if (/^\s*<(?:!doctype\s+html|html[\s>])/i.test(text))
|
|
209
|
+
throw new McpError(JsonRpcErrorCode.ServiceUnavailable, 'NASA POWER returned an HTML error page.');
|
|
210
|
+
let raw;
|
|
211
|
+
try {
|
|
212
|
+
raw = JSON.parse(text);
|
|
213
|
+
}
|
|
214
|
+
catch {
|
|
215
|
+
throw shapeError('NASA POWER returned malformed JSON.');
|
|
216
|
+
}
|
|
217
|
+
return parse(schema, raw);
|
|
218
|
+
}
|
|
149
219
|
async load(url, schema, ctx, budget, ttl) {
|
|
150
220
|
this.remaining(budget);
|
|
151
221
|
const key = url.toString();
|
|
@@ -182,53 +252,17 @@ export class PowerService {
|
|
|
182
252
|
throw new McpError(JsonRpcErrorCode.ServiceUnavailable, 'NASA POWER network request failed.', {}, { cause: error });
|
|
183
253
|
}
|
|
184
254
|
const { text, bytes } = await this.body(response, attemptSignal, budget);
|
|
185
|
-
|
|
186
|
-
if (!response.ok) {
|
|
187
|
-
let diagnostics;
|
|
188
|
-
try {
|
|
189
|
-
diagnostics = JSON.parse(text);
|
|
190
|
-
}
|
|
191
|
-
catch {
|
|
192
|
-
diagnostics = text.slice(0, 4_096);
|
|
193
|
-
}
|
|
194
|
-
const messages = diagnostics &&
|
|
195
|
-
typeof diagnostics === 'object' &&
|
|
196
|
-
'messages' in diagnostics &&
|
|
197
|
-
Array.isArray(diagnostics.messages)
|
|
198
|
-
? diagnostics.messages
|
|
199
|
-
.filter((message) => typeof message === 'string')
|
|
200
|
-
.map((message) => message.slice(0, 2_048))
|
|
201
|
-
.slice(0, 20)
|
|
202
|
-
: [text.slice(0, 4_096)];
|
|
203
|
-
const data = { status: response.status, messages };
|
|
204
|
-
if (response.status === 429)
|
|
205
|
-
throw powerError('upstream_rate_limited', 'NASA POWER rate limited this request.', { ...data, retryAfter: response.headers.get('retry-after') ?? '2' });
|
|
206
|
-
if (response.status === 422 || response.status === 400)
|
|
207
|
-
throw powerError('upstream_rejected', 'NASA POWER rejected the request.', data);
|
|
208
|
-
const code = response.status === 401
|
|
209
|
-
? JsonRpcErrorCode.Unauthorized
|
|
210
|
-
: response.status === 403
|
|
211
|
-
? JsonRpcErrorCode.Forbidden
|
|
212
|
-
: response.status === 404
|
|
213
|
-
? JsonRpcErrorCode.NotFound
|
|
214
|
-
: [408, 425, 504].includes(response.status)
|
|
215
|
-
? JsonRpcErrorCode.Timeout
|
|
216
|
-
: response.status >= 500
|
|
217
|
-
? JsonRpcErrorCode.ServiceUnavailable
|
|
218
|
-
: JsonRpcErrorCode.ValidationError;
|
|
219
|
-
throw new McpError(code, describePowerError(`NASA POWER HTTP ${response.status}.`, data), data);
|
|
220
|
-
}
|
|
221
|
-
if (/^\s*<(?:!doctype\s+html|html[\s>])/i.test(text))
|
|
222
|
-
throw new McpError(JsonRpcErrorCode.ServiceUnavailable, 'NASA POWER returned an HTML error page.');
|
|
223
|
-
let raw;
|
|
255
|
+
let value;
|
|
224
256
|
try {
|
|
225
|
-
|
|
257
|
+
this.remaining(budget);
|
|
258
|
+
value = this.decode(response, text, schema);
|
|
259
|
+
this.remaining(budget);
|
|
226
260
|
}
|
|
227
|
-
catch {
|
|
228
|
-
|
|
261
|
+
catch (error) {
|
|
262
|
+
/** A failed attempt's body is discarded, so the call no longer holds it. */
|
|
263
|
+
budget.heldBytes -= bytes;
|
|
264
|
+
throw error;
|
|
229
265
|
}
|
|
230
|
-
const value = parse(schema, raw);
|
|
231
|
-
this.remaining(budget);
|
|
232
266
|
const fetchedAt = new Date(this.now()).toISOString();
|
|
233
267
|
this.store(key, value, fetchedAt, bytes, ttl);
|
|
234
268
|
ctx.log.debug('NASA POWER response received', { bytes, cacheHit: false });
|
|
@@ -334,6 +368,9 @@ export class PowerService {
|
|
|
334
368
|
hint: `Reduce the selection to at most ${parameterLimit} effective codes, including any added PSC and WSC corrections, then retry.`,
|
|
335
369
|
},
|
|
336
370
|
});
|
|
371
|
+
const unserved = unservedParameters(codes, request.temporalResolution);
|
|
372
|
+
if (unserved)
|
|
373
|
+
throw powerError('unsupported_parameter', `NASA POWER lists ${unserved.parameters.join(', ')} for ${request.temporalResolution} but does not serve ${unserved.parameters.length === 1 ? 'it' : 'them'} at that resolution.`, { parameters: unserved.parameters, recovery: { hint: unserved.recovery } });
|
|
337
374
|
const dictionary = await this.dictionary(request.community, request.temporalResolution, ctx, budget);
|
|
338
375
|
const unsupported = codes.filter((code) => !(code in dictionary) &&
|
|
339
376
|
!(code === TILTED_ALIAS && request.temporalResolution === 'climatology'));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"power-service.js","sourceRoot":"","sources":["../../../src/services/power/power-service.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"power-service.js","sourceRoot":"","sources":["../../../src/services/power/power-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -33,6 +33,11 @@ export declare const WIND_SURFACES: {
|
|
|
33
33
|
};
|
|
34
34
|
/** Verified climatology alias; returned members remain dynamic. */
|
|
35
35
|
export declare const TILTED_ALIAS = "SI_EF_TILTED_SURFACE";
|
|
36
|
-
/**
|
|
37
|
-
|
|
36
|
+
/**
|
|
37
|
+
* Membership test for a requested group alias, or undefined when the code is not one. POWER
|
|
38
|
+
* expands these aliases into member columns and never returns the alias itself. Families are
|
|
39
|
+
* recognized by naming taken from captured responses, so members POWER adds to a known family
|
|
40
|
+
* stay covered without a hand-listed code table.
|
|
41
|
+
*/
|
|
42
|
+
export declare function aliasMembership(code: string): ((returned: string) => boolean) | undefined;
|
|
38
43
|
//# sourceMappingURL=presets.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"presets.d.ts","sourceRoot":"","sources":["../../../src/services/power/presets.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,eAAO,MAAM,OAAO;aAClB,QAAQ,YAAG,mBAAmB,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,WAAW,EAAE,KAAK;aAC7F,YAAY,YAAG,OAAO,EAAE,OAAO,EAAE,KAAK;aACtC,aAAa,YAAG,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS;aACnD,eAAe,YAAG,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,mBAAmB;aACnF,aAAa,YAAG,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU;CACxD,CAAC;AACX,wCAAwC;AACxC,MAAM,MAAM,MAAM,GAAG,MAAM,OAAO,OAAO,CAAC;AAC1C,+FAA+F;AAC/F,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,GAAG,MAAM,EAAE,CAKjF;AACD,gEAAgE;AAChE,eAAO,MAAM,aAAa;aACxB,SAAS,EAAE,+CAA+C;aAC1D,SAAS,EAAE,+CAA+C;aAC1D,SAAS,EAAE,oDAAoD;aAC/D,SAAS,EAAE,gDAAgD;aAC3D,SAAS,EAAE,gDAAgD;aAC3D,SAAS,EAAE,kDAAkD;aAC7D,SAAS,EAAE,oCAAoC;aAC/C,SAAS,EAAE,mDAAmD;aAC9D,SAAS,EAAE,6CAA6C;aACxD,UAAU,EAAE,uDAAuD;aACnE,UAAU,EAAE,iBAAiB;aAC7B,UAAU,EAAE,oDAAoD;aAChE,UAAU,EAAE,wBAAwB;aACpC,MAAM,EAAE,gBAAgB;aACxB,SAAS,EAAE,YAAY;aACvB,UAAU,EAAE,wBAAwB;aACpC,YAAY,EAAE,2BAA2B;CACjC,CAAC;AACX,mEAAmE;AACnE,eAAO,MAAM,YAAY,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"presets.d.ts","sourceRoot":"","sources":["../../../src/services/power/presets.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,eAAO,MAAM,OAAO;aAClB,QAAQ,YAAG,mBAAmB,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,WAAW,EAAE,KAAK;aAC7F,YAAY,YAAG,OAAO,EAAE,OAAO,EAAE,KAAK;aACtC,aAAa,YAAG,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS;aACnD,eAAe,YAAG,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,mBAAmB;aACnF,aAAa,YAAG,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU;CACxD,CAAC;AACX,wCAAwC;AACxC,MAAM,MAAM,MAAM,GAAG,MAAM,OAAO,OAAO,CAAC;AAC1C,+FAA+F;AAC/F,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,GAAG,MAAM,EAAE,CAKjF;AACD,gEAAgE;AAChE,eAAO,MAAM,aAAa;aACxB,SAAS,EAAE,+CAA+C;aAC1D,SAAS,EAAE,+CAA+C;aAC1D,SAAS,EAAE,oDAAoD;aAC/D,SAAS,EAAE,gDAAgD;aAC3D,SAAS,EAAE,gDAAgD;aAC3D,SAAS,EAAE,kDAAkD;aAC7D,SAAS,EAAE,oCAAoC;aAC/C,SAAS,EAAE,mDAAmD;aAC9D,SAAS,EAAE,6CAA6C;aACxD,UAAU,EAAE,uDAAuD;aACnE,UAAU,EAAE,iBAAiB;aAC7B,UAAU,EAAE,oDAAoD;aAChE,UAAU,EAAE,wBAAwB;aACpC,MAAM,EAAE,gBAAgB;aACxB,SAAS,EAAE,YAAY;aACvB,UAAU,EAAE,wBAAwB;aACpC,YAAY,EAAE,2BAA2B;CACjC,CAAC;AACX,mEAAmE;AACnE,eAAO,MAAM,YAAY,yBAAyB,CAAC;AASnD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,SAAS,CASzF"}
|
|
@@ -34,6 +34,31 @@ export const WIND_SURFACES = {
|
|
|
34
34
|
};
|
|
35
35
|
/** Verified climatology alias; returned members remain dynamic. */
|
|
36
36
|
export const TILTED_ALIAS = 'SI_EF_TILTED_SURFACE';
|
|
37
|
-
/**
|
|
38
|
-
|
|
37
|
+
/** Tilted and sun-tracker groups return `<group>_<mode>` members (`SI_TRACKER_AVG_DUAL`). */
|
|
38
|
+
const MODE_GROUP = /^SI_(?:TILTED|TRACKER)_(?:AVG|MIN|MAX)$/;
|
|
39
|
+
/** Hour groups: `<base>_HR` returns `<base>_00`…`_23`; `_HR_MAX`/`_HR_MIN` return `<base>_00_MAX`…. */
|
|
40
|
+
const HOUR_GROUP_MEMBER = {
|
|
41
|
+
_HR: /^\d{2}$/,
|
|
42
|
+
_HR_MAX: /^\d{2}_MAX$/,
|
|
43
|
+
_HR_MIN: /^\d{2}_MIN$/,
|
|
44
|
+
};
|
|
45
|
+
/**
|
|
46
|
+
* Membership test for a requested group alias, or undefined when the code is not one. POWER
|
|
47
|
+
* expands these aliases into member columns and never returns the alias itself. Families are
|
|
48
|
+
* recognized by naming taken from captured responses, so members POWER adds to a known family
|
|
49
|
+
* stay covered without a hand-listed code table.
|
|
50
|
+
*/
|
|
51
|
+
export function aliasMembership(code) {
|
|
52
|
+
if (code === TILTED_ALIAS)
|
|
53
|
+
return (returned) => returned.startsWith('SI_TILTED_');
|
|
54
|
+
if (MODE_GROUP.test(code))
|
|
55
|
+
return (returned) => returned.startsWith(`${code}_`);
|
|
56
|
+
for (const [suffix, member] of Object.entries(HOUR_GROUP_MEMBER)) {
|
|
57
|
+
if (!code.endsWith(suffix))
|
|
58
|
+
continue;
|
|
59
|
+
const prefix = `${code.slice(0, -suffix.length)}_`;
|
|
60
|
+
return (returned) => returned.startsWith(prefix) && member.test(returned.slice(prefix.length));
|
|
61
|
+
}
|
|
62
|
+
return undefined;
|
|
63
|
+
}
|
|
39
64
|
//# sourceMappingURL=presets.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"presets.js","sourceRoot":"","sources":["../../../src/services/power/presets.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,QAAQ,EAAE,CAAC,mBAAmB,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,WAAW,EAAE,KAAK,CAAC;IAC9F,YAAY,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;IACvC,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC;IACpD,eAAe,EAAE,CAAC,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,mBAAmB,CAAC;IACpF,aAAa,EAAE,CAAC,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,CAAC;CACzD,CAAC;AAGX,+FAA+F;AAC/F,MAAM,UAAU,gBAAgB,CAAC,MAAc,EAAE,UAAsB;IACrE,OAAO;QACL,GAAG,OAAO,CAAC,MAAM,CAAC;QAClB,GAAG,CAAC,MAAM,KAAK,iBAAiB,IAAI,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;KAC3F,CAAC;AACJ,CAAC;AACD,gEAAgE;AAChE,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,SAAS,EAAE,+CAA+C;IAC1D,SAAS,EAAE,+CAA+C;IAC1D,SAAS,EAAE,oDAAoD;IAC/D,SAAS,EAAE,gDAAgD;IAC3D,SAAS,EAAE,gDAAgD;IAC3D,SAAS,EAAE,kDAAkD;IAC7D,SAAS,EAAE,oCAAoC;IAC/C,SAAS,EAAE,mDAAmD;IAC9D,SAAS,EAAE,6CAA6C;IACxD,UAAU,EAAE,uDAAuD;IACnE,UAAU,EAAE,iBAAiB;IAC7B,UAAU,EAAE,oDAAoD;IAChE,UAAU,EAAE,wBAAwB;IACpC,MAAM,EAAE,gBAAgB;IACxB,SAAS,EAAE,YAAY;IACvB,UAAU,EAAE,wBAAwB;IACpC,YAAY,EAAE,2BAA2B;CACjC,CAAC;AACX,mEAAmE;AACnE,MAAM,CAAC,MAAM,YAAY,GAAG,sBAAsB,CAAC;AACnD,
|
|
1
|
+
{"version":3,"file":"presets.js","sourceRoot":"","sources":["../../../src/services/power/presets.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,QAAQ,EAAE,CAAC,mBAAmB,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,WAAW,EAAE,KAAK,CAAC;IAC9F,YAAY,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;IACvC,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC;IACpD,eAAe,EAAE,CAAC,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,mBAAmB,CAAC;IACpF,aAAa,EAAE,CAAC,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,CAAC;CACzD,CAAC;AAGX,+FAA+F;AAC/F,MAAM,UAAU,gBAAgB,CAAC,MAAc,EAAE,UAAsB;IACrE,OAAO;QACL,GAAG,OAAO,CAAC,MAAM,CAAC;QAClB,GAAG,CAAC,MAAM,KAAK,iBAAiB,IAAI,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;KAC3F,CAAC;AACJ,CAAC;AACD,gEAAgE;AAChE,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,SAAS,EAAE,+CAA+C;IAC1D,SAAS,EAAE,+CAA+C;IAC1D,SAAS,EAAE,oDAAoD;IAC/D,SAAS,EAAE,gDAAgD;IAC3D,SAAS,EAAE,gDAAgD;IAC3D,SAAS,EAAE,kDAAkD;IAC7D,SAAS,EAAE,oCAAoC;IAC/C,SAAS,EAAE,mDAAmD;IAC9D,SAAS,EAAE,6CAA6C;IACxD,UAAU,EAAE,uDAAuD;IACnE,UAAU,EAAE,iBAAiB;IAC7B,UAAU,EAAE,oDAAoD;IAChE,UAAU,EAAE,wBAAwB;IACpC,MAAM,EAAE,gBAAgB;IACxB,SAAS,EAAE,YAAY;IACvB,UAAU,EAAE,wBAAwB;IACpC,YAAY,EAAE,2BAA2B;CACjC,CAAC;AACX,mEAAmE;AACnE,MAAM,CAAC,MAAM,YAAY,GAAG,sBAAsB,CAAC;AACnD,6FAA6F;AAC7F,MAAM,UAAU,GAAG,yCAAyC,CAAC;AAC7D,uGAAuG;AACvG,MAAM,iBAAiB,GAAG;IACxB,GAAG,EAAE,SAAS;IACd,OAAO,EAAE,aAAa;IACtB,OAAO,EAAE,aAAa;CACd,CAAC;AACX;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,IAAI,IAAI,KAAK,YAAY;QAAE,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;IAClF,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC;IAChF,KAAK,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE,CAAC;QACjE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE,SAAS;QACrC,MAAM,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC;QACnD,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IACjG,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** @fileoverview Dictionary codes NASA POWER lists but does not serve at a resolution. @module services/power/unserved-parameters */
|
|
2
|
+
import type { Resolution } from './types.js';
|
|
3
|
+
/**
|
|
4
|
+
* The requested codes POWER does not serve at this resolution, with the recoveries of the
|
|
5
|
+
* families present, or undefined when every code is served.
|
|
6
|
+
*/
|
|
7
|
+
export declare function unservedParameters(codes: readonly string[], resolution: Resolution): {
|
|
8
|
+
parameters: string[];
|
|
9
|
+
recovery: string;
|
|
10
|
+
} | undefined;
|
|
11
|
+
//# sourceMappingURL=unserved-parameters.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unserved-parameters.d.ts","sourceRoot":"","sources":["../../../src/services/power/unserved-parameters.ts"],"names":[],"mappings":"AAAA,qIAAqI;AACrI,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAqC7C;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,SAAS,MAAM,EAAE,EACxB,UAAU,EAAE,UAAU,GACrB;IAAE,UAAU,EAAE,MAAM,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAUxD"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/** Family recoveries; daily GDD values are per-day totals, so their sum is the period total. */
|
|
2
|
+
const RECOVERIES = {
|
|
3
|
+
growing_degree_days: 'Growing degree day codes (GDD4_4, GDD7_2, GDD10, GDD13_3, GDD15_6) are served only at daily resolution: request the window at daily (for a climatology, its start and end years) and sum the daily values for each month, season or year, averaging those sums across years for a climatological value.',
|
|
4
|
+
hour_extremes: 'Hour-of-day maximum and minimum groups (codes such as ALLSKY_SFC_SW_DWN_HR_MAX and ALLSKY_SFC_SW_DWN_HR_MIN) are served only as climatology: request them at climatology resolution, or request the matching hour group (such as ALLSKY_SFC_SW_DWN_HR) at monthly resolution for hour-of-day monthly values.',
|
|
5
|
+
};
|
|
6
|
+
const GDD = ['GDD4_4', 'GDD7_2', 'GDD10', 'GDD13_3', 'GDD15_6'];
|
|
7
|
+
const HOUR_EXTREMES = [
|
|
8
|
+
'ALLSKY_SFC_SW_DIFF_HR_MAX',
|
|
9
|
+
'ALLSKY_SFC_SW_DIFF_HR_MIN',
|
|
10
|
+
'ALLSKY_SFC_SW_DNI_HR_MAX',
|
|
11
|
+
'ALLSKY_SFC_SW_DNI_HR_MIN',
|
|
12
|
+
'ALLSKY_SFC_SW_DWN_HR_MAX',
|
|
13
|
+
'ALLSKY_SFC_SW_DWN_HR_MIN',
|
|
14
|
+
];
|
|
15
|
+
const family = (codes, name) => codes.map((code) => [code, name]);
|
|
16
|
+
/**
|
|
17
|
+
* Every community's dictionary lists these codes at the resolution, yet POWER's data endpoints
|
|
18
|
+
* answer HTTP 500 for them (regional monthly `GDD*` returns only fill values). Found by requesting
|
|
19
|
+
* every monthly and climatology dictionary code in AG, RE and SB on 2026-10-28, then confirmed at a
|
|
20
|
+
* second location and window. No dictionary field separates them from served codes, so they are
|
|
21
|
+
* curated here; re-sweep when POWER changes its products.
|
|
22
|
+
*/
|
|
23
|
+
const UNSERVED = {
|
|
24
|
+
monthly: new Map([
|
|
25
|
+
...family(GDD, 'growing_degree_days'),
|
|
26
|
+
...family(HOUR_EXTREMES, 'hour_extremes'),
|
|
27
|
+
]),
|
|
28
|
+
climatology: new Map(family(GDD, 'growing_degree_days')),
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* The requested codes POWER does not serve at this resolution, with the recoveries of the
|
|
32
|
+
* families present, or undefined when every code is served.
|
|
33
|
+
*/
|
|
34
|
+
export function unservedParameters(codes, resolution) {
|
|
35
|
+
const table = UNSERVED[resolution];
|
|
36
|
+
if (!table)
|
|
37
|
+
return undefined;
|
|
38
|
+
const parameters = codes.filter((code) => table.has(code));
|
|
39
|
+
if (!parameters.length)
|
|
40
|
+
return undefined;
|
|
41
|
+
const families = new Set(parameters.flatMap((code) => table.get(code) ?? []));
|
|
42
|
+
return {
|
|
43
|
+
parameters,
|
|
44
|
+
recovery: [...families].map((name) => RECOVERIES[name]).join(' '),
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=unserved-parameters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unserved-parameters.js","sourceRoot":"","sources":["../../../src/services/power/unserved-parameters.ts"],"names":[],"mappings":"AAGA,gGAAgG;AAChG,MAAM,UAAU,GAAG;IACjB,mBAAmB,EACjB,ySAAyS;IAC3S,aAAa,EACX,8SAA8S;CACxS,CAAC;AAGX,MAAM,GAAG,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;AAChE,MAAM,aAAa,GAAG;IACpB,2BAA2B;IAC3B,2BAA2B;IAC3B,0BAA0B;IAC1B,0BAA0B;IAC1B,0BAA0B;IAC1B,0BAA0B;CAC3B,CAAC;AACF,MAAM,MAAM,GAAG,CAAC,KAAe,EAAE,IAAY,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,CAAU,CAAC,CAAC;AAE7F;;;;;;GAMG;AACH,MAAM,QAAQ,GAA6D;IACzE,OAAO,EAAE,IAAI,GAAG,CAAC;QACf,GAAG,MAAM,CAAC,GAAG,EAAE,qBAAqB,CAAC;QACrC,GAAG,MAAM,CAAC,aAAa,EAAE,eAAe,CAAC;KAC1C,CAAC;IACF,WAAW,EAAE,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,qBAAqB,CAAC,CAAC;CACzD,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAChC,KAAwB,EACxB,UAAsB;IAEtB,MAAM,KAAK,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;IACnC,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3D,IAAI,CAAC,UAAU,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IACzC,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAC9E,OAAO;QACL,UAAU;QACV,QAAQ,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;KAClE,CAAC;AACJ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cyanheads/nasa-power-mcp-server",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.2",
|
|
4
4
|
"mcpName": "io.github.cyanheads/nasa-power-mcp-server",
|
|
5
5
|
"description": "Query NASA POWER solar, wind, building, and agroclimatology data via MCP. STDIO or Streamable HTTP.",
|
|
6
6
|
"author": "Casey Hand <casey@caseyjhand.com> (https://caseyjhand.com)",
|
package/server.json
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
"url": "https://github.com/cyanheads/nasa-power-mcp-server",
|
|
7
7
|
"source": "github"
|
|
8
8
|
},
|
|
9
|
-
"version": "0.4.
|
|
9
|
+
"version": "0.4.2",
|
|
10
10
|
"remotes": [
|
|
11
11
|
{
|
|
12
12
|
"type": "streamable-http",
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"registryBaseUrl": "https://registry.npmjs.org",
|
|
20
20
|
"identifier": "@cyanheads/nasa-power-mcp-server",
|
|
21
21
|
"runtimeHint": "npx",
|
|
22
|
-
"version": "0.4.
|
|
22
|
+
"version": "0.4.2",
|
|
23
23
|
"environmentVariables": [
|
|
24
24
|
{
|
|
25
25
|
"name": "CANVAS_PROVIDER_TYPE",
|
|
@@ -82,7 +82,7 @@
|
|
|
82
82
|
"registryBaseUrl": "https://registry.npmjs.org",
|
|
83
83
|
"identifier": "@cyanheads/nasa-power-mcp-server",
|
|
84
84
|
"runtimeHint": "npx",
|
|
85
|
-
"version": "0.4.
|
|
85
|
+
"version": "0.4.2",
|
|
86
86
|
"environmentVariables": [
|
|
87
87
|
{
|
|
88
88
|
"name": "CANVAS_PROVIDER_TYPE",
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: nasa-power-guide
|
|
3
|
-
description: Plan nasa_power_* calls for NASA POWER solar, wind, temperature, precipitation, and degree-day history. Covers which tool answers a typical-month versus a dated question,
|
|
3
|
+
description: Plan nasa_power_* calls for NASA POWER solar, wind, temperature, precipitation, and degree-day history. Covers which tool answers a typical-month versus a dated question, overlapping data calls, grid-cell size, data freshness, rate versus total units, degree days, and SQL over staged tables. Use before solar sizing, wind screening, site comparison, regional, or agroclimate work with these tools.
|
|
4
4
|
license: Apache-2.0
|
|
5
5
|
metadata:
|
|
6
6
|
author: cyanheads
|
|
7
|
-
version: "1.0"
|
|
7
|
+
version: "1.0.2"
|
|
8
8
|
---
|
|
9
9
|
|
|
10
10
|
## Scope
|
|
@@ -24,22 +24,22 @@ Sites that fall in the same cell return identical values. The `returnedCoordinat
|
|
|
24
24
|
|
|
25
25
|
- **Parameter codes** come from `nasa_power_search_parameters` for one community and temporalResolution pair. A code valid at daily can be missing at hourly: degree days, `T2M_MAX` and `T2M_MIN` have no hourly form. Filter with plain words, for example `degree days` or `wind 50`.
|
|
26
26
|
- **Preset names and the `SI_EF_TILTED_SURFACE` alias** (climatology only) come from `nasa_power_list_reference` topic `presets`.
|
|
27
|
-
- **`canvas_id` and table names** come from the handles on a producing response: `dataset` for observations, `summaryDataset` for regional summaries, `summaryDatasets.buckets` and `summaryDatasets.locations` for comparison summaries.
|
|
27
|
+
- **`canvas_id` and table names** come from the handles on a producing response: `dataset` for observations, `summaryDataset` for point and regional summaries, `summaryDatasets.buckets` and `summaryDatasets.locations` for comparison summaries. A summary handle appears only when the response is too large to return inline even without its rows; `summaries` then holds one entry, `summaryCount` gives the total, and the table restores the array in `summaryIndex` order.
|
|
28
28
|
- **`locationId`, `label` and `cellId`** are row columns. `locationId` follows input position (`location_1` …), and `cellId` numbers the cells in a regional result.
|
|
29
29
|
|
|
30
30
|
## Gates
|
|
31
31
|
|
|
32
|
-
1. **
|
|
33
|
-
2. **Check freshness before you conclude.** The latest days of a window come back as nulls until NASA releases them, and solar can lag meteorology. Read `summaries[].lastValidDate` for each parameter. Never report trailing nulls as zero, as calm, or as "no sun".
|
|
32
|
+
1. **Overlapping data calls are admitted or wait briefly.** `nasa_power_get_timeseries`, `nasa_power_get_climatology`, `nasa_power_get_region` and `nasa_power_compare_locations` share a limited budget, and a small call runs alongside others. A call that doesn't fit waits for a running one to finish, within its own deadline. If it is still refused with `producer_capacity_exhausted`, other data calls are holding the capacity: retry after one returns. A `canvas_busy` refusal means a query or operation on that canvas is still running, or the server's query pool is full: retry when it returns. Neither refusal is about canvases to reuse. For several sites, one `nasa_power_compare_locations` call (up to 10 sites) beats parallel point calls.
|
|
33
|
+
2. **Check freshness before you conclude.** The latest days of a window come back as nulls until NASA releases them, and solar can lag meteorology. Read `summaries[].lastValidDate` for each parameter, from the `summaryDataset` table (`summaryDatasets.locations` for a comparison) when the response staged its summaries. Never report trailing nulls as zero, as calm, or as "no sun".
|
|
34
34
|
3. **Same cell, not a tie.** When `nasa_power_compare_locations` returns `possibleSharedGridCell`, the listed sites sit in one cell. Report them as indistinguishable, not as equal results.
|
|
35
35
|
4. **Rate or total.** Check what a value measures before summing or comparing:
|
|
36
36
|
- `PRECTOTCORR` is mm/day at every resolution. Monthly values, `YYYY13` and climatology months and `ANN` are mean daily rates, so multiply by the number of days for a total.
|
|
37
37
|
- Solar units follow the community: `RE` returns kW-hr/m^2/day and `AG` returns MJ/m^2/day for the same code.
|
|
38
|
-
- Degree-day codes (`GDD*`, `HDD*`, `CDD*`) are totals for their period: per day, per month
|
|
38
|
+
- Degree-day codes (`GDD*`, `HDD*`, `CDD*`) are totals for their period: per day, and for `HDD*` and `CDD*` also per month and per year for `ANN` and `YYYY13`.
|
|
39
39
|
- Temperature, humidity and wind annual records are means.
|
|
40
|
-
5. **Degree days come from NASA.** Growing degree days are source codes `GDD4_4`, `GDD7_2`, `GDD10`, `GDD13_3` and `GDD15_6` (base °C), alongside `HDD*` and `CDD*`. Request them; don't rebuild them from `T2M`.
|
|
40
|
+
5. **Degree days come from NASA.** Growing degree days are source codes `GDD4_4`, `GDD7_2`, `GDD10`, `GDD13_3` and `GDD15_6` (base °C), alongside `HDD*` and `CDD*`. Request them; don't rebuild them from `T2M`. `GDD*` is served only at daily: NASA's dictionary lists it at monthly and climatology, but it has no data there, so those calls fail with `unsupported_parameter` before any data request and `nasa_power_search_parameters` doesn't offer it there. Request `GDD*` at daily over the dates you need and sum the days. For a climatological value, request daily across the climatology's start and end years, sum each year's days for the month, season or year, and average those sums across years.
|
|
41
41
|
6. **Annual rows sit inside monthly data.** Monthly results add one annual record per year (`periodKind` `annual`, `month` null, key `YYYY13`), and climatology adds `ANN`. Exclude these rows before averaging or ranking months.
|
|
42
|
-
7. **A regional box spans at least 2° on each axis.** For a smaller area, use a point call. The box returns one parameter per call, so make
|
|
42
|
+
7. **A regional box spans at least 2° on each axis.** For a smaller area, use a point call. The box returns one parameter per call, so make one call per parameter when you need several.
|
|
43
43
|
8. **Summaries are coarse.** `summaries` aggregate each period kind over the whole window. Comparison buckets are calendar-season means (DJF, MAM, JJA, SON, annual): they don't accumulate and don't follow a growing season. For any other grouping or any sum, compute it from the inline rows or with SQL.
|
|
44
44
|
|
|
45
45
|
## Workflows
|
|
@@ -59,9 +59,9 @@ Sites that fall in the same cell return identical values. The `returnedCoordinat
|
|
|
59
59
|
|
|
60
60
|
### Staged tables and SQL
|
|
61
61
|
|
|
62
|
-
Staging is automatic. A data call stages only when the complete response would not fit inline. Smaller results come back inline with `dataset: null`, even when you pass `canvas_id`, and you compute from those rows directly.
|
|
62
|
+
Staging is automatic. A data call stages only when the complete response would not fit inline. Smaller results come back inline with `dataset: null`, even when you pass `canvas_id`, and you compute from those rows directly. Where staging isn't available, an oversized result is refused with `canvas_required`. The refusal gives the result's row count, how many rows fit inline, and a list of calls (date or year windows, parameter groups, smaller regions or site groups); send those calls instead, as each fits inline.
|
|
63
63
|
|
|
64
|
-
Results too large to return inline are staged as a DataCanvas table, and the response carries a `canvas_id`. Call `nasa_power_dataframe_describe` with it
|
|
64
|
+
Results too large to return inline are staged as a DataCanvas table, and the response carries a `canvas_id`. Call `nasa_power_dataframe_describe` with it and the handle's `table` for column names and provenance before writing SQL (a whole-canvas describe can exceed the response budget, as it does for a wide point selection's two tables), then `nasa_power_dataframe_query` with a read-only query. Pass the same `canvas_id` back to stage further results beside the first; each table expires at the `expiresAt` on its handle.
|
|
65
65
|
|
|
66
66
|
- **Dialect.** DuckDB. Reference tables by the exact `power_…` name from the handle.
|
|
67
67
|
- **Observation columns.** `periodKey`, `periodKind`, `date`, `year`, `month`, `hour`, `latitude`, `longitude`, `elevation`, then one column per returned parameter code. Comparison tables add `locationId` and `label`; regional tables add `cellId`.
|