@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.
Files changed (83) hide show
  1. package/AGENTS.md +2 -2
  2. package/CLAUDE.md +2 -2
  3. package/README.md +9 -5
  4. package/changelog/0.4.x/0.4.1.md +20 -0
  5. package/changelog/0.4.x/0.4.2.md +16 -0
  6. package/dist/config/server-config.d.ts +29 -0
  7. package/dist/config/server-config.d.ts.map +1 -1
  8. package/dist/config/server-config.js +29 -0
  9. package/dist/config/server-config.js.map +1 -1
  10. package/dist/mcp-server/tools/definitions/comparison-contracts.d.ts.map +1 -1
  11. package/dist/mcp-server/tools/definitions/comparison-contracts.js +10 -4
  12. package/dist/mcp-server/tools/definitions/comparison-contracts.js.map +1 -1
  13. package/dist/mcp-server/tools/definitions/nasa-power-compare-locations.tool.d.ts +17 -3
  14. package/dist/mcp-server/tools/definitions/nasa-power-compare-locations.tool.d.ts.map +1 -1
  15. package/dist/mcp-server/tools/definitions/nasa-power-compare-locations.tool.js +19 -3
  16. package/dist/mcp-server/tools/definitions/nasa-power-compare-locations.tool.js.map +1 -1
  17. package/dist/mcp-server/tools/definitions/nasa-power-dataframe-describe.tool.d.ts +3 -3
  18. package/dist/mcp-server/tools/definitions/nasa-power-dataframe-describe.tool.d.ts.map +1 -1
  19. package/dist/mcp-server/tools/definitions/nasa-power-dataframe-describe.tool.js +3 -3
  20. package/dist/mcp-server/tools/definitions/nasa-power-dataframe-describe.tool.js.map +1 -1
  21. package/dist/mcp-server/tools/definitions/nasa-power-dataframe-drop.tool.d.ts +3 -3
  22. package/dist/mcp-server/tools/definitions/nasa-power-dataframe-drop.tool.d.ts.map +1 -1
  23. package/dist/mcp-server/tools/definitions/nasa-power-dataframe-drop.tool.js +3 -3
  24. package/dist/mcp-server/tools/definitions/nasa-power-dataframe-drop.tool.js.map +1 -1
  25. package/dist/mcp-server/tools/definitions/nasa-power-dataframe-query.tool.d.ts +3 -3
  26. package/dist/mcp-server/tools/definitions/nasa-power-dataframe-query.tool.d.ts.map +1 -1
  27. package/dist/mcp-server/tools/definitions/nasa-power-dataframe-query.tool.js +3 -3
  28. package/dist/mcp-server/tools/definitions/nasa-power-dataframe-query.tool.js.map +1 -1
  29. package/dist/mcp-server/tools/definitions/nasa-power-get-climatology.tool.d.ts +37 -3
  30. package/dist/mcp-server/tools/definitions/nasa-power-get-climatology.tool.d.ts.map +1 -1
  31. package/dist/mcp-server/tools/definitions/nasa-power-get-climatology.tool.js +20 -4
  32. package/dist/mcp-server/tools/definitions/nasa-power-get-climatology.tool.js.map +1 -1
  33. package/dist/mcp-server/tools/definitions/nasa-power-get-region.tool.d.ts +17 -3
  34. package/dist/mcp-server/tools/definitions/nasa-power-get-region.tool.d.ts.map +1 -1
  35. package/dist/mcp-server/tools/definitions/nasa-power-get-region.tool.js +26 -6
  36. package/dist/mcp-server/tools/definitions/nasa-power-get-region.tool.js.map +1 -1
  37. package/dist/mcp-server/tools/definitions/nasa-power-get-timeseries.tool.d.ts +37 -3
  38. package/dist/mcp-server/tools/definitions/nasa-power-get-timeseries.tool.d.ts.map +1 -1
  39. package/dist/mcp-server/tools/definitions/nasa-power-get-timeseries.tool.js +20 -4
  40. package/dist/mcp-server/tools/definitions/nasa-power-get-timeseries.tool.js.map +1 -1
  41. package/dist/mcp-server/tools/definitions/nasa-power-list-reference.tool.js +3 -3
  42. package/dist/mcp-server/tools/definitions/nasa-power-list-reference.tool.js.map +1 -1
  43. package/dist/mcp-server/tools/definitions/nasa-power-search-parameters.tool.d.ts.map +1 -1
  44. package/dist/mcp-server/tools/definitions/nasa-power-search-parameters.tool.js +14 -5
  45. package/dist/mcp-server/tools/definitions/nasa-power-search-parameters.tool.js.map +1 -1
  46. package/dist/mcp-server/tools/definitions/point-contracts.d.ts +22 -2
  47. package/dist/mcp-server/tools/definitions/point-contracts.d.ts.map +1 -1
  48. package/dist/mcp-server/tools/definitions/point-contracts.js +16 -6
  49. package/dist/mcp-server/tools/definitions/point-contracts.js.map +1 -1
  50. package/dist/services/canvas/canvas-service.d.ts +59 -6
  51. package/dist/services/canvas/canvas-service.d.ts.map +1 -1
  52. package/dist/services/canvas/canvas-service.js +172 -42
  53. package/dist/services/canvas/canvas-service.js.map +1 -1
  54. package/dist/services/canvas/errors.d.ts +12 -3
  55. package/dist/services/canvas/errors.d.ts.map +1 -1
  56. package/dist/services/canvas/errors.js +25 -5
  57. package/dist/services/canvas/errors.js.map +1 -1
  58. package/dist/services/canvas/inline-split.d.ts +73 -0
  59. package/dist/services/canvas/inline-split.d.ts.map +1 -0
  60. package/dist/services/canvas/inline-split.js +358 -0
  61. package/dist/services/canvas/inline-split.js.map +1 -0
  62. package/dist/services/canvas/producer-estimate.d.ts +13 -0
  63. package/dist/services/canvas/producer-estimate.d.ts.map +1 -0
  64. package/dist/services/canvas/producer-estimate.js +82 -0
  65. package/dist/services/canvas/producer-estimate.js.map +1 -0
  66. package/dist/services/power/normalize.d.ts.map +1 -1
  67. package/dist/services/power/normalize.js +4 -10
  68. package/dist/services/power/normalize.js.map +1 -1
  69. package/dist/services/power/power-service.d.ts +18 -2
  70. package/dist/services/power/power-service.d.ts.map +1 -1
  71. package/dist/services/power/power-service.js +89 -52
  72. package/dist/services/power/power-service.js.map +1 -1
  73. package/dist/services/power/presets.d.ts +7 -2
  74. package/dist/services/power/presets.d.ts.map +1 -1
  75. package/dist/services/power/presets.js +27 -2
  76. package/dist/services/power/presets.js.map +1 -1
  77. package/dist/services/power/unserved-parameters.d.ts +11 -0
  78. package/dist/services/power/unserved-parameters.d.ts.map +1 -0
  79. package/dist/services/power/unserved-parameters.js +47 -0
  80. package/dist/services/power/unserved-parameters.js.map +1 -0
  81. package/package.json +1 -1
  82. package/server.json +3 -3
  83. 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
- /** Start before dictionaries/configuration, then pass the same object through all locations and canvas presentation. */
32
- createCallBudget(ctx: Context, comparison?: boolean): PowerCallBudget;
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":"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"}
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
- /** Start before dictionaries/configuration, then pass the same object through all locations and canvas presentation. */
39
- createCallBudget(ctx, comparison = false) {
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() + POWER_LIMITS.deadlineMs,
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
- this.remaining(budget);
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
- raw = JSON.parse(text);
257
+ this.remaining(budget);
258
+ value = this.decode(response, text, schema);
259
+ this.remaining(budget);
226
260
  }
227
- catch {
228
- throw shapeError('NASA POWER returned malformed JSON.');
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
- /** Dictionary-advertised groups expand only within their returned member namespace. */
37
- export declare const TILTED_GROUP_ALIASES: readonly ['SI_TILTED_AVG', 'SI_TILTED_MIN', 'SI_TILTED_MAX'];
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;AACnD,uFAAuF;AACvF,eAAO,MAAM,oBAAoB,YAAI,eAAe,EAAE,eAAe,EAAE,eAAe,CAAU,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
- /** Dictionary-advertised groups expand only within their returned member namespace. */
38
- export const TILTED_GROUP_ALIASES = ['SI_TILTED_AVG', 'SI_TILTED_MIN', 'SI_TILTED_MAX'];
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,uFAAuF;AACvF,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,eAAe,EAAE,eAAe,EAAE,eAAe,CAAU,CAAC"}
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.0",
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.0",
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.0",
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.0",
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, one data call at a time, 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.
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. **One data call at a time.** `nasa_power_get_timeseries`, `nasa_power_get_climatology`, `nasa_power_get_region` and `nasa_power_compare_locations` share one admission budget. While one is running, another call is refused immediately with `canvas_capacity_exhausted`, however small it is. Its recovery text about canvases does not apply here: wait for the running call to return, then retry. For several sites, use one `nasa_power_compare_locations` call (up to 10 sites) instead of 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. 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, and per year for `ANN` and `YYYY13`.
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`. The dictionary also lists `GDD*` at monthly and climatology, but NASA's monthly and climatology endpoints fail on them with HTTP 500. Request `GDD*` at daily and sum the days.
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 sequential calls for several parameters (gate 1).
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 for the staged table and column names before writing SQL, 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.
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`.