@cyanheads/earthquake-mcp-server 0.1.15 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/CLAUDE.md +31 -23
  2. package/Dockerfile +13 -7
  3. package/README.md +9 -4
  4. package/dist/mcp-server/resources/definitions/earthquake-event.resource.d.ts +1 -1
  5. package/dist/mcp-server/resources/definitions/earthquake-feed.resource.d.ts +1 -1
  6. package/dist/mcp-server/resources/definitions/earthquake-feed.resource.d.ts.map +1 -1
  7. package/dist/mcp-server/resources/definitions/earthquake-feed.resource.js +8 -2
  8. package/dist/mcp-server/resources/definitions/earthquake-feed.resource.js.map +1 -1
  9. package/dist/mcp-server/tools/definitions/earthquake-count.tool.d.ts +20 -1
  10. package/dist/mcp-server/tools/definitions/earthquake-count.tool.d.ts.map +1 -1
  11. package/dist/mcp-server/tools/definitions/earthquake-count.tool.js +79 -16
  12. package/dist/mcp-server/tools/definitions/earthquake-count.tool.js.map +1 -1
  13. package/dist/mcp-server/tools/definitions/earthquake-get-event.tool.d.ts +1 -1
  14. package/dist/mcp-server/tools/definitions/earthquake-get-feed.tool.d.ts +6 -1
  15. package/dist/mcp-server/tools/definitions/earthquake-get-feed.tool.d.ts.map +1 -1
  16. package/dist/mcp-server/tools/definitions/earthquake-get-feed.tool.js +93 -13
  17. package/dist/mcp-server/tools/definitions/earthquake-get-feed.tool.js.map +1 -1
  18. package/dist/mcp-server/tools/definitions/earthquake-search.tool.d.ts +24 -6
  19. package/dist/mcp-server/tools/definitions/earthquake-search.tool.d.ts.map +1 -1
  20. package/dist/mcp-server/tools/definitions/earthquake-search.tool.js +130 -42
  21. package/dist/mcp-server/tools/definitions/earthquake-search.tool.js.map +1 -1
  22. package/dist/mcp-server/tools/query-params.d.ts +34 -0
  23. package/dist/mcp-server/tools/query-params.d.ts.map +1 -0
  24. package/dist/mcp-server/tools/query-params.js +42 -0
  25. package/dist/mcp-server/tools/query-params.js.map +1 -0
  26. package/dist/mcp-server/tools/schemas.d.ts +1 -1
  27. package/dist/mcp-server/tools/schemas.d.ts.map +1 -1
  28. package/dist/mcp-server/tools/schemas.js +5 -2
  29. package/dist/mcp-server/tools/schemas.js.map +1 -1
  30. package/dist/services/emsc/emsc-service.d.ts +6 -1
  31. package/dist/services/emsc/emsc-service.d.ts.map +1 -1
  32. package/dist/services/emsc/emsc-service.js +43 -11
  33. package/dist/services/emsc/emsc-service.js.map +1 -1
  34. package/dist/services/usgs/types.d.ts +3 -1
  35. package/dist/services/usgs/types.d.ts.map +1 -1
  36. package/dist/services/usgs/usgs-service.d.ts +6 -1
  37. package/dist/services/usgs/usgs-service.d.ts.map +1 -1
  38. package/dist/services/usgs/usgs-service.js +39 -33
  39. package/dist/services/usgs/usgs-service.js.map +1 -1
  40. package/package.json +10 -9
  41. package/server.json +3 -3
@@ -3,9 +3,14 @@
3
3
  * @module mcp-server/tools/definitions/earthquake-get-feed.tool
4
4
  */
5
5
  import { tool, z } from '@cyanheads/mcp-ts-core';
6
- import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
6
+ import { JsonRpcErrorCode, McpError } from '@cyanheads/mcp-ts-core/errors';
7
+ import { paginateArray, requestContextService } from '@cyanheads/mcp-ts-core/utils';
7
8
  import { EarthquakeEventSchema, formatEvent } from '../../../mcp-server/tools/schemas.js';
8
9
  import { getUsgsService } from '../../../services/usgs/usgs-service.js';
10
+ /** Events returned per call when the caller does not set limit. */
11
+ const DEFAULT_PAGE_SIZE = 100;
12
+ /** Upper bound on events per call, matching the limit input's maximum. */
13
+ const MAX_PAGE_SIZE = 1000;
9
14
  export const earthquakeGetFeed = tool('earthquake_get_feed', {
10
15
  title: 'Get USGS Earthquake Feed',
11
16
  description: 'Fetch a USGS pre-computed real-time earthquake feed by magnitude tier and time window. ' +
@@ -13,7 +18,12 @@ export const earthquakeGetFeed = tool('earthquake_get_feed', {
13
18
  'use them for "what\'s happening now" queries. ' +
14
19
  '"all" includes microseisms (M<1); "significant" is a USGS curation based on magnitude, ' +
15
20
  'felt reports, and PAGER impact estimates. ' +
16
- '"hour" returns 0–10 events typically; "month" can exceed 10,000 for the "all" tier. ' +
21
+ '"hour" returns 0–10 events typically; "month" can exceed 10,000 for the "all" tier, ' +
22
+ 'so results are returned a page at a time: count is the page size, totalCount the whole feed, ' +
23
+ 'and nextCursor the input for the following page. ' +
24
+ 'The cursor is opaque and must be passed back verbatim — unlike earthquake_search, these feeds ' +
25
+ 'have no upstream paging parameter and USGS regenerates them about once a minute, so a numeric ' +
26
+ 'offset across two calls would skip or repeat events. ' +
17
27
  'For historical or filtered queries, use earthquake_search instead.',
18
28
  annotations: { readOnlyHint: true, idempotentHint: true, openWorldHint: true },
19
29
  input: z.object({
@@ -30,26 +40,56 @@ export const earthquakeGetFeed = tool('earthquake_get_feed', {
30
40
  .describe('Time window for the feed. ' +
31
41
  '"hour" typically returns 0–10 events; "month" can exceed 10,000 for the "all" tier. ' +
32
42
  'Prefer "hour" or "day" for real-time status checks.'),
43
+ limit: z
44
+ .number()
45
+ .int()
46
+ .min(1)
47
+ .max(MAX_PAGE_SIZE)
48
+ .optional()
49
+ .describe(`Maximum events to return in this call. Default ${DEFAULT_PAGE_SIZE}, max ${MAX_PAGE_SIZE}. ` +
50
+ 'Applies to the first page; later pages carry the page size inside the cursor, so set it ' +
51
+ 'on the first call rather than changing it mid-sequence.'),
52
+ cursor: z
53
+ .string()
54
+ .optional()
55
+ .describe("Opaque token for the next page, taken verbatim from a previous call's nextCursor. " +
56
+ 'Omit for the first page. Do not construct, parse, or edit it — it encodes a position ' +
57
+ 'in the feed snapshot and is rejected if malformed.'),
33
58
  }),
34
59
  output: z.object({
35
- count: z.number().describe('Number of events in the feed.'),
60
+ count: z.number().describe('Number of events returned in this page, not the whole feed.'),
36
61
  generated_at: z
37
62
  .string()
38
63
  .describe('ISO 8601 UTC timestamp when this feed was generated by USGS.'),
39
64
  events: z
40
65
  .array(EarthquakeEventSchema.describe('A single earthquake event.'))
41
- .describe('Earthquake events, newest first.'),
66
+ .describe('Earthquake events for this page, newest first.'),
42
67
  feed_url: z.string().describe('Source feed URL.'),
43
68
  }),
44
- // Agent-facing context for empty-feed windows — a notice so structuredContent-only
45
- // clients see recovery guidance without parsing format() text.
69
+ // Agent-facing context for empty-feed windows and paging state notices and page
70
+ // metadata reach structuredContent and content[] without parsing format() text.
46
71
  enrichment: {
72
+ totalCount: z
73
+ .number()
74
+ .optional()
75
+ .describe('Number of events in the whole feed, across every page.'),
76
+ truncated: z
77
+ .boolean()
78
+ .optional()
79
+ .describe('True when the feed holds more events than this page returned. ' +
80
+ 'nextCursor carries the input for the following page.'),
81
+ nextCursor: z
82
+ .string()
83
+ .optional()
84
+ .describe('Opaque token to pass back as the cursor input for the next page. ' +
85
+ 'Present only when more events remain; absent means this was the last page.'),
47
86
  notice: z
48
87
  .string()
49
88
  .optional()
50
- .describe('Recovery guidance when the feed contains no events suggests narrowing the magnitude tier, ' +
51
- 'widening the time window, or using earthquake_search for filtered queries. ' +
52
- 'Absent when the feed contains events.'),
89
+ .describe('Recovery guidance when the feed contains no events, or how to continue when a page was ' +
90
+ 'capped — narrowing the magnitude tier, widening the time window, paging with the ' +
91
+ 'cursor, or using earthquake_search for filtered queries. ' +
92
+ 'Absent when a single page covers the whole feed.'),
53
93
  },
54
94
  errors: [
55
95
  {
@@ -63,22 +103,62 @@ export const earthquakeGetFeed = tool('earthquake_get_feed', {
63
103
  ctx.log.info('Fetching USGS feed', {
64
104
  magnitude_tier: input.magnitude_tier,
65
105
  time_window: input.time_window,
106
+ limit: input.limit,
107
+ paged: input.cursor != null,
66
108
  });
67
- const result = await getUsgsService().getFeed(input.magnitude_tier, input.time_window, ctx);
109
+ let result;
110
+ try {
111
+ result = await getUsgsService().getFeed(input.magnitude_tier, input.time_window, ctx);
112
+ }
113
+ catch (err) {
114
+ if (err instanceof McpError && err.code === JsonRpcErrorCode.ServiceUnavailable) {
115
+ throw ctx.fail('feed_unavailable', err.message, {
116
+ ...ctx.recoveryFor('feed_unavailable'),
117
+ });
118
+ }
119
+ throw err;
120
+ }
68
121
  ctx.log.info('Feed fetched', {
69
122
  count: result.count,
70
123
  magnitude_tier: input.magnitude_tier,
71
124
  time_window: input.time_window,
72
125
  });
73
- if (result.count === 0) {
126
+ // USGS serves the feed as one precomputed document with no upstream paging
127
+ // parameter, so a page is a slice of the array already in memory — the shape
128
+ // paginateArray's opaque cursor is built for.
129
+ const page = paginateArray(result.events, input.cursor, input.limit ?? DEFAULT_PAGE_SIZE, MAX_PAGE_SIZE, requestContextService.createRequestContext({
130
+ operation: 'earthquakeGetFeed.paginate',
131
+ parentContext: {
132
+ requestId: ctx.requestId,
133
+ traceId: ctx.traceId,
134
+ tenantId: ctx.tenantId,
135
+ timestamp: new Date().toISOString(),
136
+ },
137
+ }));
138
+ const totalCount = result.events.length;
139
+ ctx.enrich({ totalCount });
140
+ if (page.nextCursor != null) {
141
+ ctx.enrich({ truncated: true, nextCursor: page.nextCursor });
142
+ }
143
+ if (totalCount === 0) {
74
144
  ctx.enrich.notice(`No events in the ${input.magnitude_tier}/${input.time_window} feed. ` +
75
145
  'Try a wider time_window (e.g. "day" or "week"), a lower magnitude_tier (e.g. "1.0" or "all"), ' +
76
146
  'or use earthquake_search for filtered historical queries.');
77
147
  }
148
+ else if (page.items.length === 0) {
149
+ ctx.enrich.notice('No events at this cursor — the previous page was the last one. ' +
150
+ 'Start over without a cursor to re-read the feed from the beginning.');
151
+ }
152
+ else if (page.nextCursor != null) {
153
+ ctx.enrich.notice(`Showing ${page.items.length} of ${totalCount} events in the ` +
154
+ `${input.magnitude_tier}/${input.time_window} feed. ` +
155
+ 'Call again with the nextCursor value as cursor for the following page, ' +
156
+ 'or narrow magnitude_tier or time_window for a smaller feed.');
157
+ }
78
158
  return {
79
- count: result.count,
159
+ count: page.items.length,
80
160
  generated_at: result.generatedAt,
81
- events: result.events,
161
+ events: page.items,
82
162
  feed_url: result.feedUrl,
83
163
  };
84
164
  },
@@ -1 +1 @@
1
- {"version":3,"file":"earthquake-get-feed.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/earthquake-get-feed.tool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"earthquake-get-feed.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/earthquake-get-feed.tool.ts"],"names":[],"mappings":"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"}
@@ -27,6 +27,7 @@ export declare const earthquakeSearch: import("@cyanheads/mcp-ts-core").ToolDefi
27
27
  emsc: "emsc";
28
28
  }>>;
29
29
  limit: z.ZodOptional<z.ZodNumber>;
30
+ offset: z.ZodOptional<z.ZodNumber>;
30
31
  order_by: z.ZodDefault<z.ZodEnum<{
31
32
  magnitude: "magnitude";
32
33
  time: "time";
@@ -42,7 +43,7 @@ export declare const earthquakeSearch: import("@cyanheads/mcp-ts-core").ToolDefi
42
43
  events: z.ZodArray<z.ZodObject<{
43
44
  id: z.ZodString;
44
45
  title: z.ZodString;
45
- magnitude: z.ZodNumber;
46
+ magnitude: z.ZodNullable<z.ZodNumber>;
46
47
  magnitude_type: z.ZodString;
47
48
  time: z.ZodString;
48
49
  updated: z.ZodString;
@@ -70,11 +71,6 @@ export declare const earthquakeSearch: import("@cyanheads/mcp-ts-core").ToolDefi
70
71
  detail_url: z.ZodOptional<z.ZodString>;
71
72
  }, z.core.$strip>>;
72
73
  }, z.core.$strip>, readonly [{
73
- readonly reason: "query_too_broad";
74
- readonly code: JsonRpcErrorCode.ValidationError;
75
- readonly when: "Query matches more than 20,000 events — exceeds USGS search limit.";
76
- readonly recovery: string;
77
- }, {
78
74
  readonly reason: "invalid_radius";
79
75
  readonly code: JsonRpcErrorCode.ValidationError;
80
76
  readonly when: "latitude or longitude provided without radius_km, or vice versa.";
@@ -87,6 +83,28 @@ export declare const earthquakeSearch: import("@cyanheads/mcp-ts-core").ToolDefi
87
83
  }], {
88
84
  readonly totalCount: z.ZodOptional<z.ZodNumber>;
89
85
  readonly truncated: z.ZodOptional<z.ZodBoolean>;
86
+ readonly nextOffset: z.ZodOptional<z.ZodNumber>;
90
87
  readonly notice: z.ZodOptional<z.ZodString>;
88
+ readonly queryEcho: z.ZodOptional<z.ZodObject<{
89
+ start_time: z.ZodOptional<z.ZodString>;
90
+ end_time: z.ZodOptional<z.ZodString>;
91
+ min_magnitude: z.ZodOptional<z.ZodNumber>;
92
+ max_magnitude: z.ZodOptional<z.ZodNumber>;
93
+ latitude: z.ZodOptional<z.ZodNumber>;
94
+ longitude: z.ZodOptional<z.ZodNumber>;
95
+ radius_km: z.ZodOptional<z.ZodNumber>;
96
+ min_depth_km: z.ZodOptional<z.ZodNumber>;
97
+ max_depth_km: z.ZodOptional<z.ZodNumber>;
98
+ alert_level: z.ZodOptional<z.ZodString>;
99
+ min_felt: z.ZodOptional<z.ZodNumber>;
100
+ min_significance: z.ZodOptional<z.ZodNumber>;
101
+ source: z.ZodEnum<{
102
+ usgs: "usgs";
103
+ emsc: "emsc";
104
+ }>;
105
+ limit: z.ZodNumber;
106
+ offset: z.ZodOptional<z.ZodNumber>;
107
+ order_by: z.ZodString;
108
+ }, z.core.$strip>>;
91
109
  }>;
92
110
  //# sourceMappingURL=earthquake-search.tool.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"earthquake-search.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/earthquake-search.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAY,MAAM,+BAA+B,CAAC;AAO3E,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyR3B,CAAC"}
1
+ {"version":3,"file":"earthquake-search.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/earthquake-search.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAY,MAAM,+BAA+B,CAAC;AAQ3E,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA+X3B,CAAC"}
@@ -5,6 +5,7 @@
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
9
  import { EarthquakeEventSchema, formatEvent } from '../../../mcp-server/tools/schemas.js';
9
10
  import { getEmscService } from '../../../services/emsc/emsc-service.js';
10
11
  import { getUsgsService } from '../../../services/usgs/usgs-service.js';
@@ -15,14 +16,17 @@ export const earthquakeSearch = tool('earthquake_search', {
15
16
  'For location-based queries, provide latitude, longitude, and radius_km together. ' +
16
17
  'USGS-specific filters (alert_level, min_felt, min_significance) are ignored when source=emsc. ' +
17
18
  'Use earthquake_count first to gauge result size before requesting large result sets. ' +
18
- 'Results are capped at 20,000 events per query.',
19
+ 'A single call returns at most 20,000 events; larger result sets are retrieved by paging with ' +
20
+ 'offset, which is passed straight through to the upstream FDSN API. When a result is capped, ' +
21
+ 'nextOffset carries the offset for the following page and totalCount the full match count.',
19
22
  annotations: { readOnlyHint: true, idempotentHint: true, openWorldHint: true },
20
23
  input: z.object({
21
24
  start_time: z
22
25
  .string()
23
26
  .optional()
24
27
  .describe('Start of time range as ISO 8601 (e.g. "2026-01-01" or "2026-05-23T00:00:00"). ' +
25
- 'Defaults to 30 days before end_time if omitted.'),
28
+ 'Defaults to 30 days before end_time (or before the current time) if omitted' +
29
+ 'applied server-side so USGS and EMSC honor the same window.'),
26
30
  end_time: z
27
31
  .string()
28
32
  .optional()
@@ -93,8 +97,18 @@ export const earthquakeSearch = tool('earthquake_search', {
93
97
  .min(1)
94
98
  .max(20000)
95
99
  .optional()
96
- .describe('Maximum events to return. Default 100. ' +
97
- 'Large limits (>1000) may result in slow responses. Max 20000.'),
100
+ .describe('Maximum events to return per call. Default 100. ' +
101
+ 'Large limits (>1000) may result in slow responses. Max 20000. ' +
102
+ 'Combine with offset to retrieve match sets larger than one call can return.'),
103
+ offset: z
104
+ .number()
105
+ .int()
106
+ .min(1)
107
+ .optional()
108
+ .describe('Index of the first event to return, counting from 1 — offset=1 is the first match ' +
109
+ '(both upstream APIs reject 0). Omit for the first page, then pass the nextOffset ' +
110
+ 'value from a capped result to fetch the next one. Ordering is set by order_by, so ' +
111
+ 'keep order_by, limit, and every filter identical across pages.'),
98
112
  order_by: z
99
113
  .enum(['time', 'time-asc', 'magnitude', 'magnitude-asc'])
100
114
  .default('time')
@@ -108,33 +122,82 @@ export const earthquakeSearch = tool('earthquake_search', {
108
122
  .describe('Matching earthquake events.'),
109
123
  }),
110
124
  // Agent-facing context on the success path — total match count, truncation flag,
111
- // and recovery guidance for empty or capped result sets. Populated via ctx.enrich(...)
112
- // so it reaches both structuredContent and content[] automatically.
125
+ // query echo, and recovery guidance for empty or capped result sets. Populated via
126
+ // ctx.enrich(...) so it reaches both structuredContent and content[] automatically.
113
127
  enrichment: {
114
128
  totalCount: z
115
129
  .number()
116
130
  .optional()
117
131
  .describe('Total events matching the query before the limit was applied. ' +
118
- 'Absent when the upstream API does not report a total count.'),
132
+ 'Fetched via a follow-up count query when results are truncated at the limit; absent otherwise.'),
119
133
  truncated: z
120
134
  .boolean()
121
135
  .optional()
122
- .describe('True when results were capped by the limit parameter and more events likely exist. ' +
123
- 'Use earthquake_count to get the total match count.'),
136
+ .describe('True when results were capped by the limit parameter and more events remain. ' +
137
+ 'totalCount carries the full match count when available, and nextOffset the input ' +
138
+ 'for the following page.'),
139
+ nextOffset: z
140
+ .number()
141
+ .optional()
142
+ .describe('Value to pass as the offset input to retrieve the next page, with every other input ' +
143
+ 'unchanged. Present only when more events remain; absent means this was the last page.'),
124
144
  notice: z
125
145
  .string()
126
146
  .optional()
127
147
  .describe('Recovery guidance when results are empty or capped — how to broaden filters or get the full count. ' +
128
148
  'Absent when the result set is non-empty and within the limit.'),
149
+ queryEcho: z
150
+ .object({
151
+ start_time: z
152
+ .string()
153
+ .optional()
154
+ .describe('Effective query start time sent upstream — server-resolved to a 30-day window when omitted from input.'),
155
+ end_time: z
156
+ .string()
157
+ .optional()
158
+ .describe('Effective query end time. Absent when omitted from input — the upstream defaults to the current time.'),
159
+ min_magnitude: z.number().optional().describe('Minimum magnitude filter sent upstream.'),
160
+ max_magnitude: z.number().optional().describe('Maximum magnitude filter sent upstream.'),
161
+ latitude: z.number().optional().describe('Radius-search latitude sent upstream.'),
162
+ longitude: z.number().optional().describe('Radius-search longitude sent upstream.'),
163
+ radius_km: z
164
+ .number()
165
+ .optional()
166
+ .describe('Search radius in km sent upstream (converted to degrees for EMSC).'),
167
+ min_depth_km: z.number().optional().describe('Minimum depth filter sent upstream.'),
168
+ max_depth_km: z.number().optional().describe('Maximum depth filter sent upstream.'),
169
+ alert_level: z
170
+ .string()
171
+ .optional()
172
+ .describe('PAGER alert filter sent upstream. Absent for EMSC — not supported there.'),
173
+ min_felt: z
174
+ .number()
175
+ .optional()
176
+ .describe('DYFI felt-report filter sent upstream. Absent for EMSC — not supported there.'),
177
+ min_significance: z
178
+ .number()
179
+ .optional()
180
+ .describe('Significance filter sent upstream. Absent for EMSC — not supported there.'),
181
+ source: z.enum(['usgs', 'emsc']).describe('Data source queried.'),
182
+ limit: z.number().describe('Effective result limit sent upstream.'),
183
+ offset: z
184
+ .number()
185
+ .optional()
186
+ .describe('1-based paging offset sent upstream. Absent when the first page was fetched.'),
187
+ order_by: z.string().describe('Sort order sent upstream.'),
188
+ })
189
+ .optional()
190
+ .describe('Echo of the effective parameters sent to the upstream API, including server-resolved defaults. ' +
191
+ 'Use to diagnose unexpected or empty results — a filter absent here was not sent upstream.'),
129
192
  },
130
- errors: [
131
- {
132
- reason: 'query_too_broad',
133
- code: JsonRpcErrorCode.ValidationError,
134
- when: 'Query matches more than 20,000 events — exceeds USGS search limit.',
135
- recovery: 'Narrow the time range, raise min_magnitude, or add a location radius filter. ' +
136
- 'Use earthquake_count first to gauge result size.',
193
+ enrichmentTrailer: {
194
+ queryEcho: {
195
+ render: (q) => `**Query echo:** ${Object.entries(q ?? {})
196
+ .map(([key, value]) => `${key}=${String(value)}`)
197
+ .join(' · ')}`,
137
198
  },
199
+ },
200
+ errors: [
138
201
  {
139
202
  reason: 'invalid_radius',
140
203
  code: JsonRpcErrorCode.ValidationError,
@@ -162,25 +225,16 @@ export const earthquakeSearch = tool('earthquake_search', {
162
225
  ctx.log.info('Searching earthquakes', {
163
226
  source: input.source,
164
227
  limit,
228
+ offset: input.offset,
165
229
  start_time: input.start_time,
166
230
  min_magnitude: input.min_magnitude,
167
231
  });
168
- // Use conditional spreads to satisfy exactOptionalPropertyTypes
232
+ // Shared builder applies the documented 30-day start-time default server-side
169
233
  const params = {
234
+ ...buildQueryParams(input),
170
235
  limit,
236
+ ...(input.offset != null ? { offset: input.offset } : {}),
171
237
  orderBy: input.order_by,
172
- ...(input.start_time != null ? { startTime: input.start_time } : {}),
173
- ...(input.end_time != null ? { endTime: input.end_time } : {}),
174
- ...(input.min_magnitude != null ? { minMagnitude: input.min_magnitude } : {}),
175
- ...(input.max_magnitude != null ? { maxMagnitude: input.max_magnitude } : {}),
176
- ...(input.latitude != null ? { latitude: input.latitude } : {}),
177
- ...(input.longitude != null ? { longitude: input.longitude } : {}),
178
- ...(input.radius_km != null ? { radiusKm: input.radius_km } : {}),
179
- ...(input.min_depth_km != null ? { minDepthKm: input.min_depth_km } : {}),
180
- ...(input.max_depth_km != null ? { maxDepthKm: input.max_depth_km } : {}),
181
- ...(input.alert_level != null ? { alertLevel: input.alert_level } : {}),
182
- ...(input.min_felt != null ? { minFelt: input.min_felt } : {}),
183
- ...(input.min_significance != null ? { minSignificance: input.min_significance } : {}),
184
238
  };
185
239
  let result;
186
240
  try {
@@ -195,28 +249,62 @@ export const earthquakeSearch = tool('earthquake_search', {
195
249
  ...ctx.recoveryFor('source_unavailable'),
196
250
  });
197
251
  }
198
- // Plain Error from UsgsService.searchEvents query_too_broad path (data.reason set by service)
199
- if (err.data?.reason === 'query_too_broad') {
200
- throw ctx.fail('query_too_broad', err.message, {
201
- ...ctx.recoveryFor('query_too_broad'),
202
- });
203
- }
204
252
  throw err;
205
253
  }
206
254
  ctx.log.info('Search completed', { source: input.source, count: result.count });
207
- const truncated = result.count === limit && result.count > 0;
208
- // Populate enrichment totalCount and truncated flag are meta about the result set,
209
- // not domain payload; they reach both structuredContent and content[] via enrichment.
255
+ // Echo the effective upstream parameters on every success path — USGS-only
256
+ // filters are excluded for EMSC because buildFdsnQuery does not send them.
257
+ const isUsgs = input.source !== 'emsc';
258
+ ctx.enrich({
259
+ queryEcho: {
260
+ ...(params.startTime != null ? { start_time: params.startTime } : {}),
261
+ ...(params.endTime != null ? { end_time: params.endTime } : {}),
262
+ ...(params.minMagnitude != null ? { min_magnitude: params.minMagnitude } : {}),
263
+ ...(params.maxMagnitude != null ? { max_magnitude: params.maxMagnitude } : {}),
264
+ ...(params.latitude != null ? { latitude: params.latitude } : {}),
265
+ ...(params.longitude != null ? { longitude: params.longitude } : {}),
266
+ ...(params.radiusKm != null ? { radius_km: params.radiusKm } : {}),
267
+ ...(params.minDepthKm != null ? { min_depth_km: params.minDepthKm } : {}),
268
+ ...(params.maxDepthKm != null ? { max_depth_km: params.maxDepthKm } : {}),
269
+ ...(isUsgs && params.alertLevel != null ? { alert_level: params.alertLevel } : {}),
270
+ ...(isUsgs && params.minFelt != null ? { min_felt: params.minFelt } : {}),
271
+ ...(isUsgs && params.minSignificance != null
272
+ ? { min_significance: params.minSignificance }
273
+ : {}),
274
+ source: input.source,
275
+ limit,
276
+ ...(input.offset != null ? { offset: input.offset } : {}),
277
+ order_by: input.order_by,
278
+ },
279
+ });
280
+ // Offsets are 1-based upstream, so the events consumed through this page are
281
+ // (offset - 1) + count and the next page starts at offset + count. A full page
282
+ // that exactly exhausts a known total is the last page, not a truncated one.
283
+ const offset = input.offset ?? 1;
284
+ const nextOffset = offset + result.count;
285
+ const filledPage = result.count === limit && result.count > 0;
286
+ const truncated = filledPage && (result.totalCount == null || offset - 1 + result.count < result.totalCount);
287
+ // Populate enrichment — totalCount, the truncation flag, and the next page's
288
+ // offset are meta about the result set, not domain payload; they reach both
289
+ // structuredContent and content[] via enrichment.
210
290
  if (result.totalCount != null)
211
291
  ctx.enrich({ totalCount: result.totalCount });
212
292
  if (truncated)
213
- ctx.enrich({ truncated: true });
293
+ ctx.enrich({ truncated: true, nextOffset });
214
294
  if (result.count === 0) {
215
- ctx.enrich.notice('No events matched the query. ' +
216
- 'Try broadening the time range, lowering min_magnitude, or expanding the radius.');
295
+ ctx.enrich.notice(offset > 1
296
+ ? `No events at offset ${offset} the previous page was the last one. ` +
297
+ 'Lower offset to re-read earlier pages, or broaden the filters for a larger match set.'
298
+ : 'No events matched the query. ' +
299
+ 'Try broadening the time range, lowering min_magnitude, or expanding the radius.');
217
300
  }
218
301
  else if (truncated) {
219
- ctx.enrich.notice(`Results capped at the limit (${limit}). Use earthquake_count to get the total match count, then narrow filters or increase limit.`);
302
+ ctx.enrich.notice(result.totalCount != null
303
+ ? `Showing events ${offset}–${offset + result.count - 1} of ${result.totalCount} matches. ` +
304
+ `Call again with offset=${nextOffset} and the same filters for the next page, or narrow the filters.`
305
+ : `Results capped at the limit (${limit}). ` +
306
+ `Call again with offset=${nextOffset} and the same filters for the next page, ` +
307
+ 'or use earthquake_count to get the total match count first.');
220
308
  }
221
309
  return {
222
310
  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,34 @@
1
+ /**
2
+ * @fileoverview Shared tool-input → FDSN query-param builder for earthquake_search and earthquake_count.
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).
5
+ * @module mcp-server/tools/query-params
6
+ */
7
+ import type { EarthquakeQueryParams } from '../../services/usgs/types.js';
8
+ /** Filter inputs shared by the earthquake_search and earthquake_count input schemas. */
9
+ export interface EarthquakeFilterInput {
10
+ alert_level?: 'green' | 'yellow' | 'orange' | 'red' | undefined;
11
+ end_time?: string | undefined;
12
+ latitude?: number | undefined;
13
+ longitude?: number | undefined;
14
+ max_depth_km?: number | undefined;
15
+ max_magnitude?: number | undefined;
16
+ min_depth_km?: number | undefined;
17
+ min_felt?: number | undefined;
18
+ min_magnitude?: number | undefined;
19
+ min_significance?: number | undefined;
20
+ radius_km?: number | undefined;
21
+ start_time?: string | undefined;
22
+ }
23
+ /**
24
+ * Resolve the default start time: 30 days before end_time, or before now when
25
+ * end_time is also omitted. Returns undefined for an unparseable end_time —
26
+ * the upstream API rejects the bad end_time itself.
27
+ */
28
+ export declare function defaultStartTime(endTime?: string): string | undefined;
29
+ /**
30
+ * Build FDSN query params from tool input, applying the 30-day start-time
31
+ * default. Conditional spreads satisfy exactOptionalPropertyTypes.
32
+ */
33
+ export declare function buildQueryParams(input: EarthquakeFilterInput): EarthquakeQueryParams;
34
+ //# sourceMappingURL=query-params.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * @fileoverview Shared tool-input → FDSN query-param builder for earthquake_search and earthquake_count.
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).
5
+ * @module mcp-server/tools/query-params
6
+ */
7
+ /** Documented default time window applied when start_time is omitted. */
8
+ const DEFAULT_WINDOW_DAYS = 30;
9
+ const DAY_MS = 86_400_000;
10
+ /**
11
+ * Resolve the default start time: 30 days before end_time, or before now when
12
+ * end_time is also omitted. Returns undefined for an unparseable end_time —
13
+ * the upstream API rejects the bad end_time itself.
14
+ */
15
+ export function defaultStartTime(endTime) {
16
+ const anchor = endTime != null ? new Date(endTime) : new Date();
17
+ if (Number.isNaN(anchor.getTime()))
18
+ return;
19
+ return new Date(anchor.getTime() - DEFAULT_WINDOW_DAYS * DAY_MS).toISOString();
20
+ }
21
+ /**
22
+ * Build FDSN query params from tool input, applying the 30-day start-time
23
+ * default. Conditional spreads satisfy exactOptionalPropertyTypes.
24
+ */
25
+ export function buildQueryParams(input) {
26
+ const startTime = input.start_time ?? defaultStartTime(input.end_time);
27
+ return {
28
+ ...(startTime != null ? { startTime } : {}),
29
+ ...(input.end_time != null ? { endTime: input.end_time } : {}),
30
+ ...(input.min_magnitude != null ? { minMagnitude: input.min_magnitude } : {}),
31
+ ...(input.max_magnitude != null ? { maxMagnitude: input.max_magnitude } : {}),
32
+ ...(input.latitude != null ? { latitude: input.latitude } : {}),
33
+ ...(input.longitude != null ? { longitude: input.longitude } : {}),
34
+ ...(input.radius_km != null ? { radiusKm: input.radius_km } : {}),
35
+ ...(input.min_depth_km != null ? { minDepthKm: input.min_depth_km } : {}),
36
+ ...(input.max_depth_km != null ? { maxDepthKm: input.max_depth_km } : {}),
37
+ ...(input.alert_level != null ? { alertLevel: input.alert_level } : {}),
38
+ ...(input.min_felt != null ? { minFelt: input.min_felt } : {}),
39
+ ...(input.min_significance != null ? { minSignificance: input.min_significance } : {}),
40
+ };
41
+ }
42
+ //# sourceMappingURL=query-params.js.map
@@ -0,0 +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"}