@cyanheads/earthquake-mcp-server 0.1.16 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/CLAUDE.md +31 -23
  2. package/Dockerfile +13 -7
  3. package/README.md +17 -8
  4. package/dist/index.js +1 -1
  5. package/dist/index.js.map +1 -1
  6. package/dist/mcp-server/resources/definitions/earthquake-event.resource.d.ts +5 -3
  7. package/dist/mcp-server/resources/definitions/earthquake-event.resource.d.ts.map +1 -1
  8. package/dist/mcp-server/resources/definitions/earthquake-feed.resource.d.ts.map +1 -1
  9. package/dist/mcp-server/resources/definitions/earthquake-feed.resource.js +4 -1
  10. package/dist/mcp-server/resources/definitions/earthquake-feed.resource.js.map +1 -1
  11. package/dist/mcp-server/tools/definitions/earthquake-count.tool.d.ts +34 -2
  12. package/dist/mcp-server/tools/definitions/earthquake-count.tool.d.ts.map +1 -1
  13. package/dist/mcp-server/tools/definitions/earthquake-count.tool.js +129 -5
  14. package/dist/mcp-server/tools/definitions/earthquake-count.tool.js.map +1 -1
  15. package/dist/mcp-server/tools/definitions/earthquake-get-event.tool.d.ts +5 -3
  16. package/dist/mcp-server/tools/definitions/earthquake-get-event.tool.d.ts.map +1 -1
  17. package/dist/mcp-server/tools/definitions/earthquake-get-event.tool.js +1 -1
  18. package/dist/mcp-server/tools/definitions/earthquake-get-event.tool.js.map +1 -1
  19. package/dist/mcp-server/tools/definitions/earthquake-get-feed.tool.d.ts +18 -4
  20. package/dist/mcp-server/tools/definitions/earthquake-get-feed.tool.d.ts.map +1 -1
  21. package/dist/mcp-server/tools/definitions/earthquake-get-feed.tool.js +97 -12
  22. package/dist/mcp-server/tools/definitions/earthquake-get-feed.tool.js.map +1 -1
  23. package/dist/mcp-server/tools/definitions/earthquake-search.tool.d.ts +22 -9
  24. package/dist/mcp-server/tools/definitions/earthquake-search.tool.d.ts.map +1 -1
  25. package/dist/mcp-server/tools/definitions/earthquake-search.tool.js +106 -31
  26. package/dist/mcp-server/tools/definitions/earthquake-search.tool.js.map +1 -1
  27. package/dist/mcp-server/tools/fdsn-error.d.ts +27 -0
  28. package/dist/mcp-server/tools/fdsn-error.d.ts.map +1 -0
  29. package/dist/mcp-server/tools/fdsn-error.js +71 -0
  30. package/dist/mcp-server/tools/fdsn-error.js.map +1 -0
  31. package/dist/mcp-server/tools/query-params.d.ts +7 -1
  32. package/dist/mcp-server/tools/query-params.d.ts.map +1 -1
  33. package/dist/mcp-server/tools/query-params.js +13 -1
  34. package/dist/mcp-server/tools/query-params.js.map +1 -1
  35. package/dist/mcp-server/tools/schemas.d.ts +5 -3
  36. package/dist/mcp-server/tools/schemas.d.ts.map +1 -1
  37. package/dist/mcp-server/tools/schemas.js +44 -12
  38. package/dist/mcp-server/tools/schemas.js.map +1 -1
  39. package/dist/services/emsc/emsc-service.d.ts +4 -2
  40. package/dist/services/emsc/emsc-service.d.ts.map +1 -1
  41. package/dist/services/emsc/emsc-service.js +29 -12
  42. package/dist/services/emsc/emsc-service.js.map +1 -1
  43. package/dist/services/usgs/types.d.ts +16 -3
  44. package/dist/services/usgs/types.d.ts.map +1 -1
  45. package/dist/services/usgs/usgs-service.d.ts +4 -2
  46. package/dist/services/usgs/usgs-service.d.ts.map +1 -1
  47. package/dist/services/usgs/usgs-service.js +22 -31
  48. package/dist/services/usgs/usgs-service.js.map +1 -1
  49. package/package.json +10 -9
  50. package/server.json +3 -3
@@ -5,18 +5,23 @@
5
5
  import { tool, z } from '@cyanheads/mcp-ts-core';
6
6
  import { JsonRpcErrorCode, McpError } from '@cyanheads/mcp-ts-core/errors';
7
7
  import { getServerConfig } from '../../../config/server-config.js';
8
- import { buildQueryParams } from '../../../mcp-server/tools/query-params.js';
8
+ import { upstreamRejection } from '../../../mcp-server/tools/fdsn-error.js';
9
+ import { buildQueryParams, ignoredUsgsFilters } from '../../../mcp-server/tools/query-params.js';
9
10
  import { EarthquakeEventSchema, formatEvent } from '../../../mcp-server/tools/schemas.js';
10
11
  import { getEmscService } from '../../../services/emsc/emsc-service.js';
11
12
  import { getUsgsService } from '../../../services/usgs/usgs-service.js';
12
13
  export const earthquakeSearch = tool('earthquake_search', {
13
14
  title: 'Search Earthquakes',
14
15
  description: 'Search earthquakes by time range, magnitude, depth, location radius, PAGER alert level, or felt reports. ' +
15
- 'Supports USGS (global, richer metadata: PAGER, DYFI, ShakeMap) and EMSC (European-Mediterranean, independent catalog). ' +
16
+ 'Supports USGS (global, richer metadata: PAGER, DYFI, ShakeMap) and EMSC, an independent global ' +
17
+ 'catalog operated by the European-Mediterranean Seismological Centre. ' +
16
18
  'For location-based queries, provide latitude, longitude, and radius_km together. ' +
17
- 'USGS-specific filters (alert_level, min_felt, min_significance) are ignored when source=emsc. ' +
19
+ 'USGS-specific filters (alert_level, min_felt, min_significance) are not sent when source=emsc ' +
20
+ 'the response names them in ignoredFilters. ' +
18
21
  'Use earthquake_count first to gauge result size before requesting large result sets. ' +
19
- 'Results are capped at 20,000 events per query.',
22
+ 'A single call returns at most 20,000 events; larger result sets are retrieved by paging with ' +
23
+ 'offset, which is passed straight through to the upstream FDSN API. When a result is capped, ' +
24
+ 'nextOffset carries the offset for the following page and totalCount the full match count.',
20
25
  annotations: { readOnlyHint: true, idempotentHint: true, openWorldHint: true },
21
26
  input: z.object({
22
27
  start_time: z
@@ -85,18 +90,30 @@ export const earthquakeSearch = tool('earthquake_search', {
85
90
  source: z
86
91
  .enum(['usgs', 'emsc'])
87
92
  .default('usgs')
88
- .describe('Data source. ' +
93
+ .describe('Data source. Both catalogs are global. ' +
89
94
  '"usgs" covers global events with PAGER, DYFI, and ShakeMap metadata. ' +
90
- '"emsc" covers the European-Mediterranean region with an independent catalog ' +
91
- 'useful for cross-verification or European-focused queries.'),
95
+ '"emsc" is an independent global catalog operated by the European-Mediterranean ' +
96
+ 'Seismological Centre — use it to cross-check any event, anywhere, against a separate ' +
97
+ 'network. It publishes no PAGER, DYFI, or ShakeMap metadata and no per-event detail ' +
98
+ 'endpoint; its station coverage is densest around Europe and the Mediterranean.'),
92
99
  limit: z
93
100
  .number()
94
101
  .int()
95
102
  .min(1)
96
103
  .max(20000)
97
104
  .optional()
98
- .describe('Maximum events to return. Default 100. ' +
99
- 'Large limits (>1000) may result in slow responses. Max 20000.'),
105
+ .describe('Maximum events to return per call. Default 100. ' +
106
+ 'Large limits (>1000) may result in slow responses. Max 20000. ' +
107
+ 'Combine with offset to retrieve match sets larger than one call can return.'),
108
+ offset: z
109
+ .number()
110
+ .int()
111
+ .min(1)
112
+ .optional()
113
+ .describe('Index of the first event to return, counting from 1 — offset=1 is the first match ' +
114
+ '(both upstream APIs reject 0). Omit for the first page, then pass the nextOffset ' +
115
+ 'value from a capped result to fetch the next one. Ordering is set by order_by, so ' +
116
+ 'keep order_by, limit, and every filter identical across pages.'),
100
117
  order_by: z
101
118
  .enum(['time', 'time-asc', 'magnitude', 'magnitude-asc'])
102
119
  .default('time')
@@ -121,13 +138,25 @@ export const earthquakeSearch = tool('earthquake_search', {
121
138
  truncated: z
122
139
  .boolean()
123
140
  .optional()
124
- .describe('True when results were capped by the limit parameter and more events likely exist. ' +
125
- 'totalCount carries the full match count when available.'),
141
+ .describe('True when results were capped by the limit parameter and more events remain. ' +
142
+ 'totalCount carries the full match count when available, and nextOffset the input ' +
143
+ 'for the following page.'),
144
+ nextOffset: z
145
+ .number()
146
+ .optional()
147
+ .describe('Value to pass as the offset input to retrieve the next page, with every other input ' +
148
+ 'unchanged. Present only when more events remain; absent means this was the last page.'),
126
149
  notice: z
127
150
  .string()
128
151
  .optional()
129
152
  .describe('Recovery guidance when results are empty or capped — how to broaden filters or get the full count. ' +
130
153
  'Absent when the result set is non-empty and within the limit.'),
154
+ ignoredFilters: z
155
+ .array(z.string().describe('Name of an input filter that was not applied.'))
156
+ .optional()
157
+ .describe('USGS-only filters supplied in the input but not sent upstream because source=emsc ' +
158
+ 'does not support them. The result set is NOT constrained by these — re-run with ' +
159
+ 'source=usgs to apply them. Absent when every supplied filter was applied.'),
131
160
  queryEcho: z
132
161
  .object({
133
162
  start_time: z
@@ -162,6 +191,10 @@ export const earthquakeSearch = tool('earthquake_search', {
162
191
  .describe('Significance filter sent upstream. Absent for EMSC — not supported there.'),
163
192
  source: z.enum(['usgs', 'emsc']).describe('Data source queried.'),
164
193
  limit: z.number().describe('Effective result limit sent upstream.'),
194
+ offset: z
195
+ .number()
196
+ .optional()
197
+ .describe('1-based paging offset sent upstream. Absent when the first page was fetched.'),
165
198
  order_by: z.string().describe('Sort order sent upstream.'),
166
199
  })
167
200
  .optional()
@@ -174,15 +207,12 @@ export const earthquakeSearch = tool('earthquake_search', {
174
207
  .map(([key, value]) => `${key}=${String(value)}`)
175
208
  .join(' · ')}`,
176
209
  },
210
+ ignoredFilters: {
211
+ render: (f) => `**Ignored filters (not supported by EMSC, not sent upstream):** ${(f ?? []).join(', ')} — ` +
212
+ 'these results are NOT constrained by the listed filters. Re-run with source=usgs to apply them.',
213
+ },
177
214
  },
178
215
  errors: [
179
- {
180
- reason: 'query_too_broad',
181
- code: JsonRpcErrorCode.ValidationError,
182
- when: 'Query matches more than 20,000 events — exceeds USGS search limit.',
183
- recovery: 'Narrow the time range, raise min_magnitude, or add a location radius filter. ' +
184
- 'Use earthquake_count first to gauge result size.',
185
- },
186
216
  {
187
217
  reason: 'invalid_radius',
188
218
  code: JsonRpcErrorCode.ValidationError,
@@ -192,9 +222,25 @@ export const earthquakeSearch = tool('earthquake_search', {
192
222
  {
193
223
  reason: 'source_unavailable',
194
224
  code: JsonRpcErrorCode.ServiceUnavailable,
195
- when: 'Selected source API returns non-2xx or times out.',
225
+ when: 'Selected source API returns a 5xx or is unreachable.',
226
+ retryable: true,
196
227
  recovery: 'Try the other source (usgs or emsc) or retry after a short delay.',
197
228
  },
229
+ {
230
+ reason: 'source_timeout',
231
+ code: JsonRpcErrorCode.Timeout,
232
+ when: 'Selected source API did not answer before the request deadline.',
233
+ retryable: true,
234
+ recovery: 'Narrow the time range, raise min_magnitude, or lower limit so the upstream query ' +
235
+ 'returns faster, then retry. Use earthquake_count first to size the match set.',
236
+ },
237
+ {
238
+ reason: 'upstream_rejected',
239
+ code: JsonRpcErrorCode.InvalidParams,
240
+ when: 'The source API rejected the query parameters with a 4xx response.',
241
+ recovery: 'Read the upstream reason in the error message — it names the offending parameter and ' +
242
+ 'the accepted format. Correct that parameter and call again.',
243
+ },
198
244
  ],
199
245
  async handler(input, ctx) {
200
246
  // Validate radius params — all three must be provided together
@@ -210,6 +256,7 @@ export const earthquakeSearch = tool('earthquake_search', {
210
256
  ctx.log.info('Searching earthquakes', {
211
257
  source: input.source,
212
258
  limit,
259
+ offset: input.offset,
213
260
  start_time: input.start_time,
214
261
  min_magnitude: input.min_magnitude,
215
262
  });
@@ -217,6 +264,7 @@ export const earthquakeSearch = tool('earthquake_search', {
217
264
  const params = {
218
265
  ...buildQueryParams(input),
219
266
  limit,
267
+ ...(input.offset != null ? { offset: input.offset } : {}),
220
268
  orderBy: input.order_by,
221
269
  };
222
270
  let result;
@@ -232,12 +280,20 @@ export const earthquakeSearch = tool('earthquake_search', {
232
280
  ...ctx.recoveryFor('source_unavailable'),
233
281
  });
234
282
  }
235
- // Plain Error from UsgsService.searchEvents query_too_broad path (data.reason set by service)
236
- if (err.data?.reason === 'query_too_broad') {
237
- throw ctx.fail('query_too_broad', err.message, {
238
- ...ctx.recoveryFor('query_too_broad'),
283
+ // A timeout classifies as Timeout, not ServiceUnavailable it needs its own
284
+ // branch or it bypasses the contract and reaches the caller with no recovery hint.
285
+ if (err instanceof McpError && err.code === JsonRpcErrorCode.Timeout) {
286
+ throw ctx.fail('source_timeout', err.message, {
287
+ ...ctx.recoveryFor('source_timeout'),
239
288
  });
240
289
  }
290
+ // A 4xx means the upstream rejected the parameters, and its body says which one.
291
+ // The framework leaves that body out of the message, so fold it in here — otherwise
292
+ // content[]-only clients see a bare status code.
293
+ const rejection = upstreamRejection(err);
294
+ if (rejection) {
295
+ throw ctx.fail('upstream_rejected', `${input.source.toUpperCase()} rejected the query: ${rejection.reason}`, { ...ctx.recoveryFor('upstream_rejected'), status: rejection.status }, { cause: err });
296
+ }
241
297
  throw err;
242
298
  }
243
299
  ctx.log.info('Search completed', { source: input.source, count: result.count });
@@ -262,24 +318,43 @@ export const earthquakeSearch = tool('earthquake_search', {
262
318
  : {}),
263
319
  source: input.source,
264
320
  limit,
321
+ ...(input.offset != null ? { offset: input.offset } : {}),
265
322
  order_by: input.order_by,
266
323
  },
267
324
  });
268
- const truncated = result.count === limit && result.count > 0;
269
- // Populate enrichmenttotalCount and truncated flag are meta about the result set,
270
- // not domain payload; they reach both structuredContent and content[] via enrichment.
325
+ // An absence from queryEcho is too quiet a signal that a supplied filter never
326
+ // constrained the results name the dropped filters outright.
327
+ const ignoredFilters = ignoredUsgsFilters(input, input.source);
328
+ if (ignoredFilters.length > 0)
329
+ ctx.enrich({ ignoredFilters });
330
+ // Offsets are 1-based upstream, so the events consumed through this page are
331
+ // (offset - 1) + count and the next page starts at offset + count. A full page
332
+ // that exactly exhausts a known total is the last page, not a truncated one.
333
+ const offset = input.offset ?? 1;
334
+ const nextOffset = offset + result.count;
335
+ const filledPage = result.count === limit && result.count > 0;
336
+ const truncated = filledPage && (result.totalCount == null || offset - 1 + result.count < result.totalCount);
337
+ // Populate enrichment — totalCount, the truncation flag, and the next page's
338
+ // offset are meta about the result set, not domain payload; they reach both
339
+ // structuredContent and content[] via enrichment.
271
340
  if (result.totalCount != null)
272
341
  ctx.enrich({ totalCount: result.totalCount });
273
342
  if (truncated)
274
- ctx.enrich({ truncated: true });
343
+ ctx.enrich({ truncated: true, nextOffset });
275
344
  if (result.count === 0) {
276
- ctx.enrich.notice('No events matched the query. ' +
277
- 'Try broadening the time range, lowering min_magnitude, or expanding the radius.');
345
+ ctx.enrich.notice(offset > 1
346
+ ? `No events at offset ${offset} the previous page was the last one. ` +
347
+ 'Lower offset to re-read earlier pages, or broaden the filters for a larger match set.'
348
+ : 'No events matched the query. ' +
349
+ 'Try broadening the time range, lowering min_magnitude, or expanding the radius.');
278
350
  }
279
351
  else if (truncated) {
280
352
  ctx.enrich.notice(result.totalCount != null
281
- ? `Results capped at the limit (${limit}) ${result.totalCount} events match. Narrow filters or increase limit.`
282
- : `Results capped at the limit (${limit}). Use earthquake_count to get the total match count, then narrow filters or increase limit.`);
353
+ ? `Showing events ${offset}–${offset + result.count - 1} of ${result.totalCount} matches. ` +
354
+ `Call again with offset=${nextOffset} and the same filters for the next page, or narrow the filters.`
355
+ : `Results capped at the limit (${limit}). ` +
356
+ `Call again with offset=${nextOffset} and the same filters for the next page, ` +
357
+ 'or use earthquake_count to get the total match count first.');
283
358
  }
284
359
  return {
285
360
  count: result.count,
@@ -1 +1 @@
1
- {"version":3,"file":"earthquake-search.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/earthquake-search.tool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"earthquake-search.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/earthquake-search.tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * @fileoverview Pulls the actionable sentence out of an FDSN service's 4xx error body.
3
+ * `fetchWithTimeout` captures the upstream body into `error.data.body` but leaves the
4
+ * thrown message at a bare status code, so a content[]-only client sees "Status: 400"
5
+ * and nothing to act on. Shared by earthquake_search and earthquake_count, which catch
6
+ * the same upstream error shape.
7
+ * @module mcp-server/tools/fdsn-error
8
+ */
9
+ /**
10
+ * Extract the reason lines from an FDSN error body, dropping the status stamp, the
11
+ * generic HTTP reason phrase, and the trailing boilerplate. USGS puts the useful
12
+ * sentence on the line after `Error 400: Bad Request`; EMSC puts it on the stamp line
13
+ * itself — both shapes reduce to the same result. Returns undefined when nothing
14
+ * beyond boilerplate survives.
15
+ */
16
+ export declare function extractFdsnReason(body: string): string | undefined;
17
+ /**
18
+ * Recognize an upstream 4xx — the source rejected the caller's parameters — and read
19
+ * the reason out of the captured body. Returns undefined for every other failure
20
+ * (5xx, network, timeout, or a 4xx whose body says nothing) so the caller rethrows
21
+ * unchanged.
22
+ */
23
+ export declare function upstreamRejection(err: unknown): {
24
+ status: number;
25
+ reason: string;
26
+ } | undefined;
27
+ //# sourceMappingURL=fdsn-error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fdsn-error.d.ts","sourceRoot":"","sources":["../../../src/mcp-server/tools/fdsn-error.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAwBH;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAmBlE;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAU9F"}
@@ -0,0 +1,71 @@
1
+ /**
2
+ * @fileoverview Pulls the actionable sentence out of an FDSN service's 4xx error body.
3
+ * `fetchWithTimeout` captures the upstream body into `error.data.body` but leaves the
4
+ * thrown message at a bare status code, so a content[]-only client sees "Status: 400"
5
+ * and nothing to act on. Shared by earthquake_search and earthquake_count, which catch
6
+ * the same upstream error shape.
7
+ * @module mcp-server/tools/fdsn-error
8
+ */
9
+ import { McpError } from '@cyanheads/mcp-ts-core/errors';
10
+ /**
11
+ * Boilerplate both FDSN implementations append after the reason — a usage URL, the
12
+ * echoed request (which carries an internal upstream hostname), a submission timestamp,
13
+ * and service versions. None of it helps the caller, so extraction stops here.
14
+ */
15
+ const TRAILER_START = /^(usage details|request:|request submitted:|service version|fdsnws-event:)/i;
16
+ /** The `Error 400: ` stamp both services prefix onto the first line. */
17
+ const STATUS_STAMP = /^error\s+\d{3}:\s*/i;
18
+ /** Generic HTTP reason phrase USGS repeats after the stamp — no diagnostic value. */
19
+ const STATUS_PHRASE_ONLY = /^(bad request|unauthorized|forbidden|not found|unprocessable entity|internal server error)$/i;
20
+ /** Upper bound on the extracted reason — fits the full USGS sentence, stops short of a body dump. */
21
+ const MAX_REASON_CHARS = 300;
22
+ /** An HTML error page carries no reason line worth extracting. */
23
+ const HTML_BODY = /^\s*<(!doctype\s|html[\s>])/i;
24
+ /**
25
+ * Extract the reason lines from an FDSN error body, dropping the status stamp, the
26
+ * generic HTTP reason phrase, and the trailing boilerplate. USGS puts the useful
27
+ * sentence on the line after `Error 400: Bad Request`; EMSC puts it on the stamp line
28
+ * itself — both shapes reduce to the same result. Returns undefined when nothing
29
+ * beyond boilerplate survives.
30
+ */
31
+ export function extractFdsnReason(body) {
32
+ if (HTML_BODY.test(body))
33
+ return;
34
+ const segments = [];
35
+ for (const raw of body.split('\n')) {
36
+ const line = raw.trim();
37
+ if (line === '')
38
+ continue;
39
+ if (TRAILER_START.test(line))
40
+ break;
41
+ const stripped = line.replace(STATUS_STAMP, '');
42
+ if (stripped === '' || STATUS_PHRASE_ONLY.test(stripped))
43
+ continue;
44
+ segments.push(stripped);
45
+ }
46
+ if (segments.length === 0)
47
+ return;
48
+ const reason = segments.join(' ');
49
+ return reason.length > MAX_REASON_CHARS
50
+ ? `${reason.slice(0, MAX_REASON_CHARS).trimEnd()}…`
51
+ : reason;
52
+ }
53
+ /**
54
+ * Recognize an upstream 4xx — the source rejected the caller's parameters — and read
55
+ * the reason out of the captured body. Returns undefined for every other failure
56
+ * (5xx, network, timeout, or a 4xx whose body says nothing) so the caller rethrows
57
+ * unchanged.
58
+ */
59
+ export function upstreamRejection(err) {
60
+ if (!(err instanceof McpError))
61
+ return;
62
+ const status = err.data?.status;
63
+ const body = err.data?.body;
64
+ if (typeof status !== 'number' || status < 400 || status >= 500)
65
+ return;
66
+ if (typeof body !== 'string')
67
+ return;
68
+ const reason = extractFdsnReason(body);
69
+ return reason ? { status, reason } : undefined;
70
+ }
71
+ //# sourceMappingURL=fdsn-error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fdsn-error.js","sourceRoot":"","sources":["../../../src/mcp-server/tools/fdsn-error.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAEzD;;;;GAIG;AACH,MAAM,aAAa,GAAG,6EAA6E,CAAC;AAEpG,wEAAwE;AACxE,MAAM,YAAY,GAAG,qBAAqB,CAAC;AAE3C,qFAAqF;AACrF,MAAM,kBAAkB,GACtB,8FAA8F,CAAC;AAEjG,qGAAqG;AACrG,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAE7B,kEAAkE;AAClE,MAAM,SAAS,GAAG,8BAA8B,CAAC;AAEjD;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO;IAEjC,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;QACxB,IAAI,IAAI,KAAK,EAAE;YAAE,SAAS;QAC1B,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,MAAM;QACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;QAChD,IAAI,QAAQ,KAAK,EAAE,IAAI,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC;YAAE,SAAS;QACnE,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC1B,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAElC,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClC,OAAO,MAAM,CAAC,MAAM,GAAG,gBAAgB;QACrC,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC,OAAO,EAAE,GAAG;QACnD,CAAC,CAAC,MAAM,CAAC;AACb,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAY;IAC5C,IAAI,CAAC,CAAC,GAAG,YAAY,QAAQ,CAAC;QAAE,OAAO;IAEvC,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC;IAChC,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC;IAC5B,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,GAAG,GAAG,IAAI,MAAM,IAAI,GAAG;QAAE,OAAO;IACxE,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO;IAErC,MAAM,MAAM,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACvC,OAAO,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AACjD,CAAC"}
@@ -1,7 +1,8 @@
1
1
  /**
2
2
  * @fileoverview Shared tool-input → FDSN query-param builder for earthquake_search and earthquake_count.
3
3
  * Resolves the documented 30-day default time window server-side so USGS and EMSC behave identically
4
- * (EMSC applies no upstream default and would otherwise query its entire catalog).
4
+ * (EMSC applies no upstream default and would otherwise query its entire catalog), and names the
5
+ * USGS-only filters an EMSC query drops so both tools can report them.
5
6
  * @module mcp-server/tools/query-params
6
7
  */
7
8
  import type { EarthquakeQueryParams } from '../../services/usgs/types.js';
@@ -20,6 +21,11 @@ export interface EarthquakeFilterInput {
20
21
  radius_km?: number | undefined;
21
22
  start_time?: string | undefined;
22
23
  }
24
+ /**
25
+ * Name the USGS-only filters the caller supplied that will not reach the upstream
26
+ * query. Empty for a USGS query, where every filter is sent.
27
+ */
28
+ export declare function ignoredUsgsFilters(input: EarthquakeFilterInput, source: 'usgs' | 'emsc'): string[];
23
29
  /**
24
30
  * Resolve the default start time: 30 days before end_time, or before now when
25
31
  * end_time is also omitted. Returns undefined for an unparseable end_time —
@@ -1 +1 @@
1
- {"version":3,"file":"query-params.d.ts","sourceRoot":"","sources":["../../../src/mcp-server/tools/query-params.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEtE,wFAAwF;AACxF,MAAM,WAAW,qBAAqB;IACpC,WAAW,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,KAAK,GAAG,SAAS,CAAC;IAChE,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,gBAAgB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACjC;AAMD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAIrE;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,GAAG,qBAAqB,CAgBpF"}
1
+ {"version":3,"file":"query-params.d.ts","sourceRoot":"","sources":["../../../src/mcp-server/tools/query-params.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEtE,wFAAwF;AACxF,MAAM,WAAW,qBAAqB;IACpC,WAAW,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,KAAK,GAAG,SAAS,CAAC;IAChE,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,gBAAgB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACjC;AAKD;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,qBAAqB,EAC5B,MAAM,EAAE,MAAM,GAAG,MAAM,GACtB,MAAM,EAAE,CAGV;AAMD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAIrE;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,GAAG,qBAAqB,CAgBpF"}
@@ -1,9 +1,21 @@
1
1
  /**
2
2
  * @fileoverview Shared tool-input → FDSN query-param builder for earthquake_search and earthquake_count.
3
3
  * Resolves the documented 30-day default time window server-side so USGS and EMSC behave identically
4
- * (EMSC applies no upstream default and would otherwise query its entire catalog).
4
+ * (EMSC applies no upstream default and would otherwise query its entire catalog), and names the
5
+ * USGS-only filters an EMSC query drops so both tools can report them.
5
6
  * @module mcp-server/tools/query-params
6
7
  */
8
+ /** Filters only the USGS FDSN API implements — EMSC has no equivalent parameter. */
9
+ const USGS_ONLY_FILTERS = ['alert_level', 'min_felt', 'min_significance'];
10
+ /**
11
+ * Name the USGS-only filters the caller supplied that will not reach the upstream
12
+ * query. Empty for a USGS query, where every filter is sent.
13
+ */
14
+ export function ignoredUsgsFilters(input, source) {
15
+ if (source !== 'emsc')
16
+ return [];
17
+ return USGS_ONLY_FILTERS.filter((name) => input[name] != null);
18
+ }
7
19
  /** Documented default time window applied when start_time is omitted. */
8
20
  const DEFAULT_WINDOW_DAYS = 30;
9
21
  const DAY_MS = 86_400_000;
@@ -1 +1 @@
1
- {"version":3,"file":"query-params.js","sourceRoot":"","sources":["../../../src/mcp-server/tools/query-params.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAoBH,yEAAyE;AACzE,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAC/B,MAAM,MAAM,GAAG,UAAU,CAAC;AAE1B;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAgB;IAC/C,MAAM,MAAM,GAAG,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;IAChE,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QAAE,OAAO;IAC3C,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,mBAAmB,GAAG,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;AACjF,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAA4B;IAC3D,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,IAAI,gBAAgB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACvE,OAAO;QACL,GAAG,CAAC,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3C,GAAG,CAAC,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9D,GAAG,CAAC,KAAK,CAAC,aAAa,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7E,GAAG,CAAC,KAAK,CAAC,aAAa,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7E,GAAG,CAAC,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/D,GAAG,CAAC,KAAK,CAAC,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAClE,GAAG,CAAC,KAAK,CAAC,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjE,GAAG,CAAC,KAAK,CAAC,YAAY,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzE,GAAG,CAAC,KAAK,CAAC,YAAY,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzE,GAAG,CAAC,KAAK,CAAC,WAAW,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvE,GAAG,CAAC,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9D,GAAG,CAAC,KAAK,CAAC,gBAAgB,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,KAAK,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACvF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"query-params.js","sourceRoot":"","sources":["../../../src/mcp-server/tools/query-params.ts"],"names":[],"mappings":"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"}
@@ -24,13 +24,15 @@ export declare const EarthquakeEventSchema: z.ZodObject<{
24
24
  orange: "orange";
25
25
  red: "red";
26
26
  }>>;
27
- tsunami: z.ZodNumber;
27
+ tsunami: z.ZodNullable<z.ZodNumber>;
28
28
  significance: z.ZodNullable<z.ZodNumber>;
29
- status: z.ZodEnum<{
29
+ status: z.ZodNullable<z.ZodEnum<{
30
30
  automatic: "automatic";
31
31
  reviewed: "reviewed";
32
32
  deleted: "deleted";
33
- }>;
33
+ }>>;
34
+ source_catalog: z.ZodOptional<z.ZodString>;
35
+ auth: z.ZodOptional<z.ZodString>;
34
36
  event_url: z.ZodOptional<z.ZodString>;
35
37
  detail_url: z.ZodOptional<z.ZodString>;
36
38
  }, z.core.$strip>;
@@ -1 +1 @@
1
- {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../../src/mcp-server/tools/schemas.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AAE3C,yFAAyF;AACzF,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA0DhC,CAAC;AAEH,+FAA+F;AAC/F,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAE1E,uGAAuG;AACvG,wBAAgB,WAAW,CAAC,KAAK,EAAE,qBAAqB,GAAG,MAAM,EAAE,CAgClE"}
1
+ {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../../src/mcp-server/tools/schemas.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AAE3C,yFAAyF;AACzF,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAkFhC,CAAC;AAEH,+FAA+F;AAC/F,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAE1E,uGAAuG;AACvG,wBAAgB,WAAW,CAAC,KAAK,EAAE,qBAAqB,GAAG,MAAM,EAAE,CAiDlE"}
@@ -26,29 +26,39 @@ export const EarthquakeEventSchema = z.object({
26
26
  felt: z
27
27
  .number()
28
28
  .nullable()
29
- .describe('Number of DYFI (Did You Feel It?) responses. Null if no reports. USGS only.'),
29
+ .describe('Number of DYFI (Did You Feel It?) responses. Null when USGS has received no reports for the event, and always null for EMSC, which publishes no DYFI field — a null is not evidence the event went unfelt.'),
30
30
  cdi: z
31
31
  .number()
32
32
  .nullable()
33
- .describe('Maximum reported intensity (Community Decimal Intensity, 0–12 scale). USGS only.'),
33
+ .describe('Maximum reported intensity (Community Decimal Intensity, 0–12 scale), derived from DYFI responses. Null when USGS computed no DYFI intensity, and always null for EMSC, which publishes no such field.'),
34
34
  mmi: z
35
35
  .number()
36
36
  .nullable()
37
- .describe('Maximum ShakeMap instrumental intensity (Modified Mercalli, 0–12 scale). USGS only.'),
37
+ .describe('Maximum ShakeMap instrumental intensity (Modified Mercalli, 0–12 scale). Null when USGS produced no ShakeMap for the event, and always null for EMSC, which publishes no such field.'),
38
38
  alert: z
39
39
  .enum(['green', 'yellow', 'orange', 'red'])
40
40
  .nullable()
41
- .describe('PAGER estimated impact alert level. Null if not computed. USGS only.'),
41
+ .describe('PAGER estimated impact alert level. Null when USGS ran no PAGER assessment, and always null for EMSC, which publishes no such field.'),
42
42
  tsunami: z
43
43
  .number()
44
- .describe('1 if a tsunami warning was issued; 0 otherwise. USGS only; 0 for EMSC events.'),
44
+ .nullable()
45
+ .describe('USGS tsunami flag: 1 for large events in oceanic regions, 0 otherwise. It is not a warning — USGS states the flag does not indicate whether a tsunami did or will exist; check NOAA (tsunami.gov) for actual alert status. Null when the source publishes no such flag, as EMSC does not.'),
45
46
  significance: z
46
47
  .number()
47
48
  .nullable()
48
- .describe('USGS significance score (0–2000+). Combines magnitude, felt reports, PAGER. USGS only.'),
49
+ .describe('USGS significance score (0–2000+). Combines magnitude, felt reports, PAGER. Null when USGS computed no score, and always null for EMSC, which publishes no such field.'),
49
50
  status: z
50
51
  .enum(['automatic', 'reviewed', 'deleted'])
51
- .describe('Review status. Automatic detections may be revised.'),
52
+ .nullable()
53
+ .describe('Human-review state: "automatic" (posted by automatic processing, not yet verified by a person), "reviewed" (examined by an analyst), or "deleted". Null when the source publishes no review status — EMSC does not, so treat an EMSC solution as unverified and subject to revision rather than final.'),
54
+ source_catalog: z
55
+ .string()
56
+ .optional()
57
+ .describe('Upstream catalog this solution came from, e.g. "EMSC-RTS" (EMSC real-time seismicity, revised as analysis continues). Absent for USGS, which publishes no catalog identifier on event records.'),
58
+ auth: z
59
+ .string()
60
+ .optional()
61
+ .describe('Code of the agency or network the source names as authoritative for this solution, e.g. "NEIC", "BMKG", "NDI" from EMSC or "us", "ci", "ak" from USGS. Absent when the source reports none.'),
52
62
  event_url: z.string().optional().describe('USGS event page URL. Present for USGS events only.'),
53
63
  detail_url: z
54
64
  .string()
@@ -61,23 +71,45 @@ export function formatEvent(event) {
61
71
  lines.push(`## ${event.title}`);
62
72
  lines.push(`**ID:** ${event.id} | **Magnitude:** ${event.magnitude !== null ? event.magnitude : 'unknown'} (${event.magnitude_type}) | **Depth:** ${event.depth_km !== null ? `${event.depth_km} km` : 'unknown'}`);
63
73
  lines.push(`**Place:** ${event.place}`);
64
- lines.push(`**Time:** ${event.time} | **Updated:** ${event.updated} | **Status:** ${event.status}`);
74
+ lines.push(`**Time:** ${event.time} | **Updated:** ${event.updated}`);
65
75
  lines.push(`**Location:** ${event.latitude.toFixed(4)}°, ${event.longitude.toFixed(4)}°`);
66
- // Impact fields (USGS-specific; render explicitly for format-parity compliance)
76
+ // Provenance review state plus whatever catalog/agency the source named.
77
+ // A null status is rendered, never dropped: it means the source publishes none.
78
+ const provenance = [`Status: ${event.status ?? 'not published by source'}`];
79
+ if (event.source_catalog)
80
+ provenance.push(`Catalog: ${event.source_catalog}`);
81
+ if (event.auth)
82
+ provenance.push(`Agency: ${event.auth}`);
83
+ lines.push(`**Provenance:** ${provenance.join(' | ')}`);
67
84
  lines.push(`**PAGER Alert:** ${event.alert !== null ? event.alert.toUpperCase() : 'Not computed'}`);
68
85
  // Render tsunami as its raw value so the linter's format-parity sentinel check passes
69
- lines.push(`**Tsunami (warning flag):** ${event.tsunami}${event.tsunami !== 0 ? ' ⚠️ Warning issued' : ''}`);
86
+ lines.push(`**Tsunami flag:** ${event.tsunami === null
87
+ ? 'not published by source'
88
+ : `${event.tsunami}${event.tsunami !== 0 ? ' ⚠️ Large oceanic event — check tsunami.gov for actual alert status' : ''}`}`);
89
+ // Every impact field reaches content[]: present ones with their value, absent
90
+ // ones collected into one "Not reported" segment so a fully sparse event reads
91
+ // as a single line rather than four.
70
92
  const impactParts = [];
93
+ const notReported = [];
71
94
  if (event.felt !== null)
72
95
  impactParts.push(`Felt by ${event.felt} (DYFI)`);
96
+ else
97
+ notReported.push('DYFI felt reports');
73
98
  if (event.mmi !== null)
74
99
  impactParts.push(`ShakeMap MMI: ${event.mmi}`);
100
+ else
101
+ notReported.push('ShakeMap MMI');
75
102
  if (event.cdi !== null)
76
103
  impactParts.push(`CDI: ${event.cdi}`);
104
+ else
105
+ notReported.push('CDI');
77
106
  if (event.significance !== null)
78
107
  impactParts.push(`Significance: ${event.significance}`);
79
- if (impactParts.length > 0)
80
- lines.push(`**Impact:** ${impactParts.join(' | ')}`);
108
+ else
109
+ notReported.push('significance');
110
+ if (notReported.length > 0)
111
+ impactParts.push(`Not reported: ${notReported.join(', ')}`);
112
+ lines.push(`**Impact:** ${impactParts.join(' | ')}`);
81
113
  if (event.event_url)
82
114
  lines.push(`**USGS page:** ${event.event_url}`);
83
115
  if (event.detail_url)
@@ -1 +1 @@
1
- {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../../src/mcp-server/tools/schemas.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AAE3C,yFAAyF;AACzF,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;IACzD,KAAK,EAAE,CAAC;SACL,MAAM,EAAE;SACR,QAAQ,CAAC,oFAAoF,CAAC;IACjG,SAAS,EAAE,CAAC;SACT,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,+GAA+G,CAChH;IACH,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;IAC9E,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;IACtD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iDAAiD,CAAC;IAC/E,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;IACrD,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;IACvE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;IACzE,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,yJAAyJ,CAC1J;IACH,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,6EAA6E,CAAC;IAC1F,GAAG,EAAE,CAAC;SACH,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,kFAAkF,CAAC;IAC/F,GAAG,EAAE,CAAC;SACH,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,qFAAqF,CACtF;IACH,KAAK,EAAE,CAAC;SACL,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;SAC1C,QAAQ,EAAE;SACV,QAAQ,CAAC,sEAAsE,CAAC;IACnF,OAAO,EAAE,CAAC;SACP,MAAM,EAAE;SACR,QAAQ,CAAC,+EAA+E,CAAC;IAC5F,YAAY,EAAE,CAAC;SACZ,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,wFAAwF,CACzF;IACH,MAAM,EAAE,CAAC;SACN,IAAI,CAAC,CAAC,WAAW,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;SAC1C,QAAQ,CAAC,qDAAqD,CAAC;IAClE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oDAAoD,CAAC;IAC/F,UAAU,EAAE,CAAC;SACV,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,8EAA8E,CAAC;CAC5F,CAAC,CAAC;AAKH,uGAAuG;AACvG,MAAM,UAAU,WAAW,CAAC,KAA4B;IACtD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;IAChC,KAAK,CAAC,IAAI,CACR,WAAW,KAAK,CAAC,EAAE,qBAAqB,KAAK,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,KAAK,KAAK,CAAC,cAAc,kBAAkB,KAAK,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,SAAS,EAAE,CACxM,CAAC;IACF,KAAK,CAAC,IAAI,CAAC,cAAc,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;IACxC,KAAK,CAAC,IAAI,CACR,aAAa,KAAK,CAAC,IAAI,mBAAmB,KAAK,CAAC,OAAO,kBAAkB,KAAK,CAAC,MAAM,EAAE,CACxF,CAAC;IACF,KAAK,CAAC,IAAI,CAAC,iBAAiB,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAE1F,gFAAgF;IAChF,KAAK,CAAC,IAAI,CACR,oBAAoB,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,cAAc,EAAE,CACxF,CAAC;IACF,sFAAsF;IACtF,KAAK,CAAC,IAAI,CACR,+BAA+B,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE,EAAE,CACjG,CAAC;IAEF,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI;QAAE,WAAW,CAAC,IAAI,CAAC,WAAW,KAAK,CAAC,IAAI,SAAS,CAAC,CAAC;IAC1E,IAAI,KAAK,CAAC,GAAG,KAAK,IAAI;QAAE,WAAW,CAAC,IAAI,CAAC,iBAAiB,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;IACvE,IAAI,KAAK,CAAC,GAAG,KAAK,IAAI;QAAE,WAAW,CAAC,IAAI,CAAC,QAAQ,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;IAC9D,IAAI,KAAK,CAAC,YAAY,KAAK,IAAI;QAAE,WAAW,CAAC,IAAI,CAAC,iBAAiB,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC;IACzF,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,eAAe,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAEjF,IAAI,KAAK,CAAC,SAAS;QAAE,KAAK,CAAC,IAAI,CAAC,kBAAkB,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;IACrE,IAAI,KAAK,CAAC,UAAU;QAAE,KAAK,CAAC,IAAI,CAAC,mBAAmB,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;IAExE,OAAO,KAAK,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../../src/mcp-server/tools/schemas.ts"],"names":[],"mappings":"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"}