@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.
- package/CLAUDE.md +31 -23
- package/Dockerfile +13 -7
- package/README.md +17 -8
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/mcp-server/resources/definitions/earthquake-event.resource.d.ts +5 -3
- package/dist/mcp-server/resources/definitions/earthquake-event.resource.d.ts.map +1 -1
- package/dist/mcp-server/resources/definitions/earthquake-feed.resource.d.ts.map +1 -1
- package/dist/mcp-server/resources/definitions/earthquake-feed.resource.js +4 -1
- package/dist/mcp-server/resources/definitions/earthquake-feed.resource.js.map +1 -1
- package/dist/mcp-server/tools/definitions/earthquake-count.tool.d.ts +34 -2
- package/dist/mcp-server/tools/definitions/earthquake-count.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/earthquake-count.tool.js +129 -5
- package/dist/mcp-server/tools/definitions/earthquake-count.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/earthquake-get-event.tool.d.ts +5 -3
- package/dist/mcp-server/tools/definitions/earthquake-get-event.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/earthquake-get-event.tool.js +1 -1
- package/dist/mcp-server/tools/definitions/earthquake-get-event.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/earthquake-get-feed.tool.d.ts +18 -4
- package/dist/mcp-server/tools/definitions/earthquake-get-feed.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/earthquake-get-feed.tool.js +97 -12
- package/dist/mcp-server/tools/definitions/earthquake-get-feed.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/earthquake-search.tool.d.ts +22 -9
- package/dist/mcp-server/tools/definitions/earthquake-search.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/earthquake-search.tool.js +106 -31
- package/dist/mcp-server/tools/definitions/earthquake-search.tool.js.map +1 -1
- package/dist/mcp-server/tools/fdsn-error.d.ts +27 -0
- package/dist/mcp-server/tools/fdsn-error.d.ts.map +1 -0
- package/dist/mcp-server/tools/fdsn-error.js +71 -0
- package/dist/mcp-server/tools/fdsn-error.js.map +1 -0
- package/dist/mcp-server/tools/query-params.d.ts +7 -1
- package/dist/mcp-server/tools/query-params.d.ts.map +1 -1
- package/dist/mcp-server/tools/query-params.js +13 -1
- package/dist/mcp-server/tools/query-params.js.map +1 -1
- package/dist/mcp-server/tools/schemas.d.ts +5 -3
- package/dist/mcp-server/tools/schemas.d.ts.map +1 -1
- package/dist/mcp-server/tools/schemas.js +44 -12
- package/dist/mcp-server/tools/schemas.js.map +1 -1
- package/dist/services/emsc/emsc-service.d.ts +4 -2
- package/dist/services/emsc/emsc-service.d.ts.map +1 -1
- package/dist/services/emsc/emsc-service.js +29 -12
- package/dist/services/emsc/emsc-service.js.map +1 -1
- package/dist/services/usgs/types.d.ts +16 -3
- package/dist/services/usgs/types.d.ts.map +1 -1
- package/dist/services/usgs/usgs-service.d.ts +4 -2
- package/dist/services/usgs/usgs-service.d.ts.map +1 -1
- package/dist/services/usgs/usgs-service.js +22 -31
- package/dist/services/usgs/usgs-service.js.map +1 -1
- package/package.json +10 -9
- package/server.json +3 -3
|
@@ -11,8 +11,10 @@ export declare class EmscService {
|
|
|
11
11
|
private readonly timeoutMs;
|
|
12
12
|
constructor(_config: AppConfig, _storage: StorageService, emscBaseUrl: string, timeoutMs: number);
|
|
13
13
|
/**
|
|
14
|
-
* Query EMSC FDSN event API.
|
|
15
|
-
*
|
|
14
|
+
* Query EMSC FDSN event API. `params.offset` pages through the match set
|
|
15
|
+
* (1-based, forwarded to the upstream `offset` parameter). When results are
|
|
16
|
+
* truncated at the requested limit, a follow-up count query populates
|
|
17
|
+
* totalCount with the real match total for the whole filter set.
|
|
16
18
|
*/
|
|
17
19
|
searchEvents(params: EarthquakeQueryParams, ctx: Context): Promise<{
|
|
18
20
|
events: EarthquakeEvent[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emsc-service.d.ts","sourceRoot":"","sources":["../../../src/services/emsc/emsc-service.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAE/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"emsc-service.d.ts","sourceRoot":"","sources":["../../../src/services/emsc/emsc-service.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAE/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAErE,OAAO,KAAK,EACV,eAAe,EACf,qBAAqB,EAItB,MAAM,kBAAkB,CAAC;AA8D1B,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;gBAGjC,OAAO,EAAE,SAAS,EAClB,QAAQ,EAAE,cAAc,EACxB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM;IAMnB;;;;;OAKG;IACG,YAAY,CAChB,MAAM,EAAE,qBAAqB,EAC7B,GAAG,EAAE,OAAO,GACX,OAAO,CAAC;QACT,MAAM,EAAE,eAAe,EAAE,CAAC;QAC1B,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;IA+DF,qCAAqC;IACrC,WAAW,CACT,MAAM,EAAE,qBAAqB,EAC7B,GAAG,EAAE,OAAO,GACX,OAAO,CAAC;QACT,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;QAC1B,YAAY,EAAE,OAAO,CAAC;KACvB,CAAC;IAoCF,qFAAqF;IACrF,OAAO,CAAC,cAAc;CAwBvB;AAMD,wBAAgB,eAAe,CAC7B,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,cAAc,EACvB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,GAChB,IAAI,CAEN;AAED,wBAAgB,cAAc,IAAI,WAAW,CAK5C"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* @module services/emsc/emsc-service
|
|
4
4
|
*/
|
|
5
5
|
import { serviceUnavailable } from '@cyanheads/mcp-ts-core/errors';
|
|
6
|
-
import { fetchWithTimeout,
|
|
6
|
+
import { fetchWithTimeout, requestContextService, withRetry } from '@cyanheads/mcp-ts-core/utils';
|
|
7
7
|
/** 1 degree of latitude ≈ 111.2 km. */
|
|
8
8
|
const KM_PER_DEGREE = 111.2;
|
|
9
9
|
/** Build a request context from a handler context for use with withRetry/fetchWithTimeout. */
|
|
@@ -47,9 +47,15 @@ function normalizeEmscFeature(f) {
|
|
|
47
47
|
cdi: null,
|
|
48
48
|
mmi: null,
|
|
49
49
|
alert: null,
|
|
50
|
-
tsunami: 0,
|
|
51
50
|
significance: null,
|
|
52
|
-
status
|
|
51
|
+
// The FDSN response carries no review-status and no tsunami field. Both stay
|
|
52
|
+
// null rather than asserting "reviewed" or "no tsunami flag" from data the
|
|
53
|
+
// source never published — EMSC-RTS solutions are real-time and get revised.
|
|
54
|
+
status: null,
|
|
55
|
+
tsunami: null,
|
|
56
|
+
// What EMSC does publish about provenance, so callers can judge it themselves
|
|
57
|
+
...(p.source_catalog ? { source_catalog: p.source_catalog } : {}),
|
|
58
|
+
...(p.auth ? { auth: p.auth } : {}),
|
|
53
59
|
};
|
|
54
60
|
}
|
|
55
61
|
export class EmscService {
|
|
@@ -60,8 +66,10 @@ export class EmscService {
|
|
|
60
66
|
this.timeoutMs = timeoutMs;
|
|
61
67
|
}
|
|
62
68
|
/**
|
|
63
|
-
* Query EMSC FDSN event API.
|
|
64
|
-
*
|
|
69
|
+
* Query EMSC FDSN event API. `params.offset` pages through the match set
|
|
70
|
+
* (1-based, forwarded to the upstream `offset` parameter). When results are
|
|
71
|
+
* truncated at the requested limit, a follow-up count query populates
|
|
72
|
+
* totalCount with the real match total for the whole filter set.
|
|
65
73
|
*/
|
|
66
74
|
async searchEvents(params, ctx) {
|
|
67
75
|
const query = this.buildFdsnQuery(params);
|
|
@@ -72,13 +80,18 @@ export class EmscService {
|
|
|
72
80
|
signal: ctx.signal,
|
|
73
81
|
headers: { Accept: 'application/json' },
|
|
74
82
|
});
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
}
|
|
83
|
+
// fetchWithTimeout throws a status-mapped McpError on any non-2xx before
|
|
84
|
+
// returning, so a Response here is always 2xx.
|
|
78
85
|
const text = await response.text();
|
|
79
86
|
if (/^\s*<(!DOCTYPE\s+html|html[\s>])/i.test(text)) {
|
|
80
87
|
throw serviceUnavailable('EMSC returned HTML instead of JSON.', { url });
|
|
81
88
|
}
|
|
89
|
+
// EMSC answers a zero-match query — including an offset past the last
|
|
90
|
+
// match — with 204 No Content and an empty body, which is a match set of
|
|
91
|
+
// size zero, not a parse failure.
|
|
92
|
+
if (text.trim() === '') {
|
|
93
|
+
return { events: [], count: 0 };
|
|
94
|
+
}
|
|
82
95
|
const data = JSON.parse(text);
|
|
83
96
|
const events = data.features.map(normalizeEmscFeature);
|
|
84
97
|
return {
|
|
@@ -97,7 +110,9 @@ export class EmscService {
|
|
|
97
110
|
// failing the search.
|
|
98
111
|
const requestedLimit = params.limit ?? 100;
|
|
99
112
|
if (result.count > 0 && result.count === requestedLimit) {
|
|
100
|
-
|
|
113
|
+
// The total is a property of the filter set, not of the page — offset,
|
|
114
|
+
// limit, and orderBy are stripped so every page reports the same total.
|
|
115
|
+
const { limit: _limit, offset: _offset, orderBy: _orderBy, ...countParams } = params;
|
|
101
116
|
try {
|
|
102
117
|
const { count: totalCount } = await this.countEvents(countParams, ctx);
|
|
103
118
|
return { ...result, totalCount };
|
|
@@ -120,9 +135,8 @@ export class EmscService {
|
|
|
120
135
|
signal: ctx.signal,
|
|
121
136
|
headers: { Accept: 'application/json' },
|
|
122
137
|
});
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
}
|
|
138
|
+
// fetchWithTimeout throws a status-mapped McpError on any non-2xx before
|
|
139
|
+
// returning, so a Response here is always 2xx.
|
|
126
140
|
const text = await response.text();
|
|
127
141
|
if (/^\s*<(!DOCTYPE\s+html|html[\s>])/i.test(text)) {
|
|
128
142
|
throw serviceUnavailable('EMSC returned HTML instead of JSON.', { url });
|
|
@@ -168,6 +182,9 @@ export class EmscService {
|
|
|
168
182
|
// EMSC does not support alertlevel, minfelt, minsig — silently omit
|
|
169
183
|
if (params.limit != null)
|
|
170
184
|
q.set('limit', String(params.limit));
|
|
185
|
+
// FDSN offset is 1-based — offset=1 is the first match, and 0 is rejected.
|
|
186
|
+
if (params.offset != null)
|
|
187
|
+
q.set('offset', String(params.offset));
|
|
171
188
|
if (params.orderBy)
|
|
172
189
|
q.set('orderby', params.orderBy);
|
|
173
190
|
return q.toString();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emsc-service.js","sourceRoot":"","sources":["../../../src/services/emsc/emsc-service.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAEnE,OAAO,
|
|
1
|
+
{"version":3,"file":"emsc-service.js","sourceRoot":"","sources":["../../../src/services/emsc/emsc-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,9 +2,17 @@
|
|
|
2
2
|
* @fileoverview Shared domain types for USGS and EMSC earthquake data.
|
|
3
3
|
* @module services/usgs/types
|
|
4
4
|
*/
|
|
5
|
-
/**
|
|
5
|
+
/**
|
|
6
|
+
* Normalized earthquake event returned by both USGS and EMSC sources.
|
|
7
|
+
*
|
|
8
|
+
* Fields a source does not publish are never synthesized: `status` and
|
|
9
|
+
* `tsunami` are null when the source reports no such value, and
|
|
10
|
+
* `source_catalog` / `auth` are omitted entirely rather than filled in.
|
|
11
|
+
*/
|
|
6
12
|
export interface EarthquakeEvent {
|
|
7
13
|
alert: 'green' | 'yellow' | 'orange' | 'red' | null;
|
|
14
|
+
/** Agency or network the source names as authoritative — EMSC `auth`, USGS `net`. */
|
|
15
|
+
auth?: string;
|
|
8
16
|
cdi: number | null;
|
|
9
17
|
depth_km: number | null;
|
|
10
18
|
detail_url?: string;
|
|
@@ -18,10 +26,12 @@ export interface EarthquakeEvent {
|
|
|
18
26
|
mmi: number | null;
|
|
19
27
|
place: string;
|
|
20
28
|
significance: number | null;
|
|
21
|
-
|
|
29
|
+
/** Upstream catalog the solution came from, e.g. "EMSC-RTS". */
|
|
30
|
+
source_catalog?: string;
|
|
31
|
+
status: 'automatic' | 'reviewed' | 'deleted' | null;
|
|
22
32
|
time: string;
|
|
23
33
|
title: string;
|
|
24
|
-
tsunami: number;
|
|
34
|
+
tsunami: number | null;
|
|
25
35
|
updated: string;
|
|
26
36
|
}
|
|
27
37
|
/** Raw USGS GeoJSON feature properties from list/query responses. */
|
|
@@ -94,6 +104,7 @@ export interface EmscEventProperties {
|
|
|
94
104
|
lon?: number | null;
|
|
95
105
|
mag?: number | null;
|
|
96
106
|
magtype?: string | null;
|
|
107
|
+
source_catalog?: string | null;
|
|
97
108
|
time?: string;
|
|
98
109
|
unid?: string;
|
|
99
110
|
}
|
|
@@ -129,6 +140,8 @@ export interface EarthquakeQueryParams {
|
|
|
129
140
|
minFelt?: number;
|
|
130
141
|
minMagnitude?: number;
|
|
131
142
|
minSignificance?: number;
|
|
143
|
+
/** 1-based index of the first event to return. Both FDSN upstreams reject 0. */
|
|
144
|
+
offset?: number;
|
|
132
145
|
orderBy?: string;
|
|
133
146
|
radiusKm?: number;
|
|
134
147
|
startTime?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/services/usgs/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/services/usgs/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;GAMG;AACH,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,KAAK,GAAG,IAAI,CAAC;IACpD,qFAAqF;IACrF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,gEAAgE;IAChE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,WAAW,GAAG,UAAU,GAAG,SAAS,GAAG,IAAI,CAAC;IACpD,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,qEAAqE;AACrE,MAAM,WAAW,qBAAqB;IACpC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACrB;AAED,gCAAgC;AAChC,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE;QACR,IAAI,EAAE,OAAO,CAAC;QACd,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;KAC9C,CAAC;IACF,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,qBAAqB,CAAC;IAClC,IAAI,EAAE,SAAS,CAAC;CACjB;AAED,mDAAmD;AACnD,MAAM,WAAW,qBAAqB;IACpC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,QAAQ,EAAE;QACR,SAAS,EAAE,MAAM,CAAC;QAClB,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IACF,IAAI,EAAE,mBAAmB,CAAC;CAC3B;AAED,+BAA+B;AAC/B,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,iCAAiC;AACjC,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,gCAAgC;AAChC,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE;QACR,IAAI,EAAE,OAAO,CAAC;QACd,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;KAC9C,CAAC;IACF,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,mBAAmB,CAAC;IAChC,IAAI,EAAE,SAAS,CAAC;CACjB;AAED,4CAA4C;AAC5C,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,IAAI,EAAE,mBAAmB,CAAC;CAC3B;AAED,+BAA+B;AAC/B,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;CACf;AAED,4EAA4E;AAC5E,MAAM,WAAW,qBAAqB;IACpC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gFAAgF;IAChF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB"}
|
|
@@ -18,8 +18,10 @@ export declare class UsgsService {
|
|
|
18
18
|
feedUrl: string;
|
|
19
19
|
}>;
|
|
20
20
|
/**
|
|
21
|
-
* Query USGS FDSN event API.
|
|
22
|
-
*
|
|
21
|
+
* Query USGS FDSN event API. `params.offset` pages through the match set
|
|
22
|
+
* (1-based, forwarded to the upstream `offset` parameter). When results are
|
|
23
|
+
* truncated at the requested limit, a follow-up count query populates
|
|
24
|
+
* totalCount with the real match total for the whole filter set.
|
|
23
25
|
*/
|
|
24
26
|
searchEvents(params: EarthquakeQueryParams, ctx: Context): Promise<{
|
|
25
27
|
events: EarthquakeEvent[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usgs-service.d.ts","sourceRoot":"","sources":["../../../src/services/usgs/usgs-service.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAE/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"usgs-service.d.ts","sourceRoot":"","sources":["../../../src/services/usgs/usgs-service.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAE/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAErE,OAAO,KAAK,EACV,eAAe,EACf,qBAAqB,EAItB,MAAM,YAAY,CAAC;AA+DpB,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;gBAGjC,OAAO,EAAE,SAAS,EAClB,QAAQ,EAAE,cAAc,EACxB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM;IAMnB,gDAAgD;IAChD,OAAO,CACL,aAAa,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,aAAa,EAC5D,UAAU,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,EAC7C,GAAG,EAAE,OAAO,GACX,OAAO,CAAC;QAAE,MAAM,EAAE,eAAe,EAAE,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAwC9F;;;;;OAKG;IACG,YAAY,CAChB,MAAM,EAAE,qBAAqB,EAC7B,GAAG,EAAE,OAAO,GACX,OAAO,CAAC;QACT,MAAM,EAAE,eAAe,EAAE,CAAC;QAC1B,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;IAwDF,6CAA6C;IAC7C,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,eAAe,CAAC;IAuCjE,qCAAqC;IACrC,WAAW,CACT,MAAM,EAAE,qBAAqB,EAC7B,GAAG,EAAE,OAAO,GACX,OAAO,CAAC;QACT,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;QAC1B,YAAY,EAAE,OAAO,CAAC;KACvB,CAAC;IAoCF,2CAA2C;IAC3C,OAAO,CAAC,cAAc;CAsBvB;AAMD,wBAAgB,eAAe,CAC7B,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,cAAc,EACvB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,GAChB,IAAI,CAEN;AAED,wBAAgB,cAAc,IAAI,WAAW,CAK5C"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* @module services/usgs/usgs-service
|
|
4
4
|
*/
|
|
5
5
|
import { notFound, serviceUnavailable } from '@cyanheads/mcp-ts-core/errors';
|
|
6
|
-
import { fetchWithTimeout,
|
|
6
|
+
import { fetchWithTimeout, requestContextService, withRetry } from '@cyanheads/mcp-ts-core/utils';
|
|
7
7
|
/** Convert a USGS epoch-millisecond timestamp to an ISO 8601 string. */
|
|
8
8
|
function epochMsToIso(ms) {
|
|
9
9
|
if (ms == null)
|
|
@@ -47,9 +47,13 @@ function normalizeUsgsFeature(f) {
|
|
|
47
47
|
cdi: p.cdi ?? null,
|
|
48
48
|
mmi: p.mmi ?? null,
|
|
49
49
|
alert,
|
|
50
|
-
tsunami: p.tsunami ??
|
|
50
|
+
tsunami: p.tsunami ?? null,
|
|
51
51
|
significance: p.sig ?? null,
|
|
52
52
|
status,
|
|
53
|
+
// USGS `net` is the contributor considered the preferred source for the
|
|
54
|
+
// event — the same provenance EMSC reports as `auth`. USGS publishes no
|
|
55
|
+
// catalog identifier on event records, so source_catalog stays absent.
|
|
56
|
+
...(p.net ? { auth: p.net } : {}),
|
|
53
57
|
...(p.url ? { event_url: p.url } : {}),
|
|
54
58
|
...(p.detail ? { detail_url: p.detail } : {}),
|
|
55
59
|
};
|
|
@@ -70,12 +74,8 @@ export class UsgsService {
|
|
|
70
74
|
signal: ctx.signal,
|
|
71
75
|
headers: { Accept: 'application/json' },
|
|
72
76
|
});
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
service: 'USGS Feed',
|
|
76
|
-
data: { feedUrl },
|
|
77
|
-
});
|
|
78
|
-
}
|
|
77
|
+
// fetchWithTimeout throws a status-mapped McpError on any non-2xx before
|
|
78
|
+
// returning, so a Response here is always 2xx.
|
|
79
79
|
const text = await response.text();
|
|
80
80
|
if (/^\s*<(!DOCTYPE\s+html|html[\s>])/i.test(text)) {
|
|
81
81
|
throw serviceUnavailable('USGS returned HTML instead of GeoJSON — likely rate-limited or a CDN error.', { feedUrl });
|
|
@@ -96,8 +96,10 @@ export class UsgsService {
|
|
|
96
96
|
});
|
|
97
97
|
}
|
|
98
98
|
/**
|
|
99
|
-
* Query USGS FDSN event API.
|
|
100
|
-
*
|
|
99
|
+
* Query USGS FDSN event API. `params.offset` pages through the match set
|
|
100
|
+
* (1-based, forwarded to the upstream `offset` parameter). When results are
|
|
101
|
+
* truncated at the requested limit, a follow-up count query populates
|
|
102
|
+
* totalCount with the real match total for the whole filter set.
|
|
101
103
|
*/
|
|
102
104
|
async searchEvents(params, ctx) {
|
|
103
105
|
const query = this.buildFdsnQuery(params);
|
|
@@ -108,20 +110,8 @@ export class UsgsService {
|
|
|
108
110
|
signal: ctx.signal,
|
|
109
111
|
headers: { Accept: 'application/json' },
|
|
110
112
|
});
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
const body = await response.text();
|
|
114
|
-
const broadMatch = /(\d+) matching events exceeds search limit/.exec(body);
|
|
115
|
-
if (broadMatch?.[1]) {
|
|
116
|
-
const totalCount = parseInt(broadMatch[1], 10);
|
|
117
|
-
throw Object.assign(new Error(`Query matches ${totalCount} events, exceeding the 20,000-event limit. ` +
|
|
118
|
-
'Narrow time range, raise min_magnitude, or add location filters.'), { code: -32007, data: { reason: 'query_too_broad', totalCount } });
|
|
119
|
-
}
|
|
120
|
-
throw await httpErrorFromResponse(response, { service: 'USGS FDSN' });
|
|
121
|
-
}
|
|
122
|
-
if (!response.ok) {
|
|
123
|
-
throw await httpErrorFromResponse(response, { service: 'USGS FDSN', data: { url } });
|
|
124
|
-
}
|
|
113
|
+
// fetchWithTimeout throws a status-mapped McpError on any non-2xx before
|
|
114
|
+
// returning, so a Response here is always 2xx.
|
|
125
115
|
const text = await response.text();
|
|
126
116
|
if (/^\s*<(!DOCTYPE\s+html|html[\s>])/i.test(text)) {
|
|
127
117
|
throw serviceUnavailable('USGS returned HTML instead of GeoJSON.', { url });
|
|
@@ -144,7 +134,9 @@ export class UsgsService {
|
|
|
144
134
|
// to an absent totalCount rather than failing the search.
|
|
145
135
|
const requestedLimit = params.limit ?? 100;
|
|
146
136
|
if (result.count > 0 && result.count === requestedLimit) {
|
|
147
|
-
|
|
137
|
+
// The total is a property of the filter set, not of the page — offset,
|
|
138
|
+
// limit, and orderBy are stripped so every page reports the same total.
|
|
139
|
+
const { limit: _limit, offset: _offset, orderBy: _orderBy, ...countParams } = params;
|
|
148
140
|
try {
|
|
149
141
|
const { count: totalCount } = await this.countEvents(countParams, ctx);
|
|
150
142
|
return { ...result, totalCount };
|
|
@@ -196,12 +188,8 @@ export class UsgsService {
|
|
|
196
188
|
signal: ctx.signal,
|
|
197
189
|
headers: { Accept: 'application/json' },
|
|
198
190
|
});
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
service: 'USGS Count',
|
|
202
|
-
data: { url },
|
|
203
|
-
});
|
|
204
|
-
}
|
|
191
|
+
// fetchWithTimeout throws a status-mapped McpError on any non-2xx before
|
|
192
|
+
// returning, so a Response here is always 2xx.
|
|
205
193
|
const text = await response.text();
|
|
206
194
|
if (/^\s*<(!DOCTYPE\s+html|html[\s>])/i.test(text)) {
|
|
207
195
|
throw serviceUnavailable('USGS returned HTML instead of JSON.', { url });
|
|
@@ -249,6 +237,9 @@ export class UsgsService {
|
|
|
249
237
|
q.set('minsig', String(params.minSignificance));
|
|
250
238
|
if (params.limit != null)
|
|
251
239
|
q.set('limit', String(params.limit));
|
|
240
|
+
// FDSN offset is 1-based — offset=1 is the first match, and 0 is rejected.
|
|
241
|
+
if (params.offset != null)
|
|
242
|
+
q.set('offset', String(params.offset));
|
|
252
243
|
if (params.orderBy)
|
|
253
244
|
q.set('orderby', params.orderBy);
|
|
254
245
|
return q.toString();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usgs-service.js","sourceRoot":"","sources":["../../../src/services/usgs/usgs-service.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAE7E,OAAO,
|
|
1
|
+
{"version":3,"file":"usgs-service.js","sourceRoot":"","sources":["../../../src/services/usgs/usgs-service.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cyanheads/earthquake-mcp-server",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"mcpName": "io.github.cyanheads/earthquake-mcp-server",
|
|
5
5
|
"description": "Search USGS and EMSC seismic data — real-time feeds, event queries, and earthquake counts via MCP. STDIO or Streamable HTTP.",
|
|
6
6
|
"type": "module",
|
|
@@ -55,7 +55,7 @@
|
|
|
55
55
|
"url": "https://github.com/cyanheads/earthquake-mcp-server/issues"
|
|
56
56
|
},
|
|
57
57
|
"homepage": "https://github.com/cyanheads/earthquake-mcp-server#readme",
|
|
58
|
-
"author": "
|
|
58
|
+
"author": "Casey Hand <casey@caseyjhand.com> (https://caseyjhand.com)",
|
|
59
59
|
"funding": [
|
|
60
60
|
{
|
|
61
61
|
"type": "github",
|
|
@@ -67,7 +67,7 @@
|
|
|
67
67
|
}
|
|
68
68
|
],
|
|
69
69
|
"license": "Apache-2.0",
|
|
70
|
-
"packageManager": "bun@1.3.
|
|
70
|
+
"packageManager": "bun@1.3.14",
|
|
71
71
|
"engines": {
|
|
72
72
|
"bun": ">=1.3.0",
|
|
73
73
|
"node": ">=24.0.0"
|
|
@@ -76,17 +76,18 @@
|
|
|
76
76
|
"access": "public"
|
|
77
77
|
},
|
|
78
78
|
"dependencies": {
|
|
79
|
-
"@cyanheads/mcp-ts-core": "^0.10.
|
|
79
|
+
"@cyanheads/mcp-ts-core": "^0.10.17",
|
|
80
80
|
"pino-pretty": "^13.1.3",
|
|
81
81
|
"zod": "^4.4.3"
|
|
82
82
|
},
|
|
83
83
|
"devDependencies": {
|
|
84
|
-
"@biomejs/biome": "^2.5.
|
|
85
|
-
"@
|
|
84
|
+
"@biomejs/biome": "^2.5.5",
|
|
85
|
+
"@socketsecurity/bun-security-scanner": "^1.1.2",
|
|
86
|
+
"@types/node": "^26.1.1",
|
|
86
87
|
"depcheck": "^1.4.7",
|
|
87
|
-
"ignore": "^7.0.
|
|
88
|
-
"tsc-alias": "^1.
|
|
88
|
+
"ignore": "^7.0.6",
|
|
89
|
+
"tsc-alias": "^1.9.1",
|
|
89
90
|
"typescript": "^6.0.3",
|
|
90
|
-
"vitest": "^4.1.
|
|
91
|
+
"vitest": "^4.1.10"
|
|
91
92
|
}
|
|
92
93
|
}
|
package/server.json
CHANGED
|
@@ -12,14 +12,14 @@
|
|
|
12
12
|
"url": "https://earthquake.caseyjhand.com/mcp"
|
|
13
13
|
}
|
|
14
14
|
],
|
|
15
|
-
"version": "0.
|
|
15
|
+
"version": "0.3.0",
|
|
16
16
|
"packages": [
|
|
17
17
|
{
|
|
18
18
|
"registryType": "npm",
|
|
19
19
|
"registryBaseUrl": "https://registry.npmjs.org",
|
|
20
20
|
"identifier": "@cyanheads/earthquake-mcp-server",
|
|
21
21
|
"runtimeHint": "bun",
|
|
22
|
-
"version": "0.
|
|
22
|
+
"version": "0.3.0",
|
|
23
23
|
"packageArguments": [
|
|
24
24
|
{
|
|
25
25
|
"type": "positional",
|
|
@@ -48,7 +48,7 @@
|
|
|
48
48
|
"registryBaseUrl": "https://registry.npmjs.org",
|
|
49
49
|
"identifier": "@cyanheads/earthquake-mcp-server",
|
|
50
50
|
"runtimeHint": "bun",
|
|
51
|
-
"version": "0.
|
|
51
|
+
"version": "0.3.0",
|
|
52
52
|
"packageArguments": [
|
|
53
53
|
{
|
|
54
54
|
"type": "positional",
|