@cyanheads/epa-mcp-server 0.4.0 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +5 -5
- package/CLAUDE.md +5 -5
- package/Dockerfile +3 -3
- package/README.md +24 -19
- package/changelog/0.4.x/0.4.1.md +34 -0
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/mcp-server/resources/definitions/facility.resource.d.ts +8 -1
- package/dist/mcp-server/resources/definitions/facility.resource.d.ts.map +1 -1
- package/dist/mcp-server/resources/definitions/facility.resource.js +13 -7
- package/dist/mcp-server/resources/definitions/facility.resource.js.map +1 -1
- package/dist/mcp-server/resources/definitions/index.d.ts +7 -1
- package/dist/mcp-server/resources/definitions/index.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/get-facility.tool.d.ts +30 -2
- package/dist/mcp-server/tools/definitions/get-facility.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/get-facility.tool.js +208 -43
- package/dist/mcp-server/tools/definitions/get-facility.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/get-tri-releases.tool.d.ts +4 -2
- package/dist/mcp-server/tools/definitions/get-tri-releases.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/get-tri-releases.tool.js +12 -5
- package/dist/mcp-server/tools/definitions/get-tri-releases.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/index.d.ts +116 -16
- package/dist/mcp-server/tools/definitions/index.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/search-facilities.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/search-facilities.tool.js +34 -16
- package/dist/mcp-server/tools/definitions/search-facilities.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/search-superfund.tool.d.ts +3 -1
- package/dist/mcp-server/tools/definitions/search-superfund.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/search-superfund.tool.js +11 -1
- package/dist/mcp-server/tools/definitions/search-superfund.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/search-tri-releases.tool.d.ts +7 -0
- package/dist/mcp-server/tools/definitions/search-tri-releases.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/search-tri-releases.tool.js +21 -9
- package/dist/mcp-server/tools/definitions/search-tri-releases.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/search-violations.tool.d.ts +20 -3
- package/dist/mcp-server/tools/definitions/search-violations.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/search-violations.tool.js +84 -15
- package/dist/mcp-server/tools/definitions/search-violations.tool.js.map +1 -1
- package/dist/services/airnow/airnow-service.d.ts.map +1 -1
- package/dist/services/airnow/airnow-service.js +9 -3
- package/dist/services/airnow/airnow-service.js.map +1 -1
- package/dist/services/call-budget.d.ts +22 -0
- package/dist/services/call-budget.d.ts.map +1 -0
- package/dist/services/call-budget.js +28 -0
- package/dist/services/call-budget.js.map +1 -0
- package/dist/services/dmap/dmap-service.d.ts +43 -13
- package/dist/services/dmap/dmap-service.d.ts.map +1 -1
- package/dist/services/dmap/dmap-service.js +270 -68
- package/dist/services/dmap/dmap-service.js.map +1 -1
- package/dist/services/echo/echo-service.d.ts +38 -11
- package/dist/services/echo/echo-service.d.ts.map +1 -1
- package/dist/services/echo/echo-service.js +417 -223
- package/dist/services/echo/echo-service.js.map +1 -1
- package/dist/services/echo/types.d.ts +167 -80
- package/dist/services/echo/types.d.ts.map +1 -1
- package/dist/services/ejscreen/ejscreen-service.d.ts.map +1 -1
- package/dist/services/ejscreen/ejscreen-service.js +9 -3
- package/dist/services/ejscreen/ejscreen-service.js.map +1 -1
- package/package.json +6 -6
- package/server.json +3 -3
|
@@ -8,16 +8,26 @@ import type { Context } from '@cyanheads/mcp-ts-core';
|
|
|
8
8
|
import type { AppConfig } from '@cyanheads/mcp-ts-core/config';
|
|
9
9
|
import type { StorageService } from '@cyanheads/mcp-ts-core/storage';
|
|
10
10
|
import type { EpaCase, EpaFacility, EpaFacilityProfile } from './types.js';
|
|
11
|
+
/** Programs a facility search filters on. */
|
|
12
|
+
export type FacilityProgram = 'CAA' | 'CWA' | 'RCRA' | 'TRI' | 'SDWA';
|
|
13
|
+
/** Enforcement case types a case search filters on. */
|
|
14
|
+
export type CaseType = 'civil' | 'criminal' | 'all';
|
|
11
15
|
export declare class EchoService {
|
|
12
16
|
private readonly baseUrl;
|
|
13
|
-
|
|
17
|
+
private readonly userAgent;
|
|
18
|
+
constructor(config: AppConfig, _storage: StorageService);
|
|
14
19
|
/** Build URL with query params. */
|
|
15
20
|
private buildUrl;
|
|
16
|
-
/**
|
|
21
|
+
/**
|
|
22
|
+
* Fetch JSON from ECHO with retry. `retry.deadlineMs` bounds every attempt and backoff and is
|
|
23
|
+
* required, so no ECHO request runs without a share of its tool call's budget; `maxRetries`
|
|
24
|
+
* narrows the attempt count.
|
|
25
|
+
*/
|
|
17
26
|
private fetchJson;
|
|
18
27
|
/**
|
|
19
|
-
* Search EPA-regulated facilities using ECHO get_facility_info
|
|
20
|
-
* At least one geographic parameter must be
|
|
28
|
+
* Search EPA-regulated facilities using ECHO get_facility_info, then get_qid for the first
|
|
29
|
+
* page when ECHO does not return the rows inline. At least one geographic parameter must be
|
|
30
|
+
* supplied.
|
|
21
31
|
*/
|
|
22
32
|
searchFacilities(params: {
|
|
23
33
|
zipCode?: string;
|
|
@@ -27,7 +37,7 @@ export declare class EchoService {
|
|
|
27
37
|
longitude?: number;
|
|
28
38
|
radiusMiles?: number;
|
|
29
39
|
activeOnly?: boolean;
|
|
30
|
-
|
|
40
|
+
program?: FacilityProgram;
|
|
31
41
|
hasViolation?: boolean;
|
|
32
42
|
limit?: number;
|
|
33
43
|
}, ctx: Context): Promise<{
|
|
@@ -35,14 +45,26 @@ export declare class EchoService {
|
|
|
35
45
|
totalCount: number;
|
|
36
46
|
}>;
|
|
37
47
|
/**
|
|
38
|
-
* Retrieve a full compliance profile for a single facility
|
|
48
|
+
* Retrieve a full compliance profile for a single facility from one
|
|
49
|
+
* dfr_rest_services.get_dfr response, plus a best-effort facility search row for the
|
|
50
|
+
* facility-level compliance status that no DFR section carries.
|
|
39
51
|
*
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
* always returned 0 results. Steps 2-5 run in parallel after the initial DFR fetch.
|
|
52
|
+
* get_dfr takes a Registry ID or a program ID (a TRI or RCRA ID resolves to its Registry ID);
|
|
53
|
+
* echo_rest_services.get_facility_info takes the resolved Registry ID only as `p_frs`.
|
|
54
|
+
* A failed status lookup is disclosed as an enrichment notice.
|
|
44
55
|
*/
|
|
45
56
|
getFacility(registryId: string, ctx: Context): Promise<EpaFacilityProfile>;
|
|
57
|
+
/** The getFacility profile, with the notice to show when the status lookup failed. */
|
|
58
|
+
getFacilityReport(registryId: string, ctx: Context): Promise<{
|
|
59
|
+
profile: EpaFacilityProfile;
|
|
60
|
+
notice?: string;
|
|
61
|
+
}>;
|
|
62
|
+
/**
|
|
63
|
+
* Best-effort echo_rest_services.get_facility_info?p_frs row, the only source of ECHO's
|
|
64
|
+
* facility-level compliance status. Two attempts within what is left of the call's budget;
|
|
65
|
+
* any failure but caller cancellation returns `failed` instead of throwing.
|
|
66
|
+
*/
|
|
67
|
+
private fetchFacilityStatusRow;
|
|
46
68
|
/**
|
|
47
69
|
* Search EPA enforcement cases using a two-step ECHO case_rest_services flow.
|
|
48
70
|
*
|
|
@@ -51,12 +73,17 @@ export declare class EchoService {
|
|
|
51
73
|
*
|
|
52
74
|
* The single-step approach (reading Cases from get_case_info) always returns empty because
|
|
53
75
|
* get_case_info is a discovery/cluster endpoint that does not include paginated case records.
|
|
76
|
+
*
|
|
77
|
+
* Filing dates are validated YYYY-MM-DD strings. A date bound sends both MM/DD/YYYY ends ECHO
|
|
78
|
+
* requires — an open end reads 01/01/1900 or today (UTC), and each end is clamped to that span —
|
|
79
|
+
* with the civil filing milestones. A range that clamps empty returns no cases without a
|
|
80
|
+
* request: ECHO answers an inverted range with an in-band error, not an empty result.
|
|
54
81
|
*/
|
|
55
82
|
searchViolations(params: {
|
|
56
83
|
state?: string;
|
|
57
84
|
zipCode?: string;
|
|
58
85
|
program?: string;
|
|
59
|
-
caseType?:
|
|
86
|
+
caseType?: CaseType;
|
|
60
87
|
dateFiledStart?: string;
|
|
61
88
|
dateFiledEnd?: string;
|
|
62
89
|
limit?: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"echo-service.d.ts","sourceRoot":"","sources":["../../../src/services/echo/echo-service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"echo-service.d.ts","sourceRoot":"","sources":["../../../src/services/echo/echo-service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAO/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAIrE,OAAO,KAAK,EACV,OAAO,EACP,WAAW,EACX,kBAAkB,EAWnB,MAAM,YAAY,CAAC;AA4BpB,6CAA6C;AAC7C,MAAM,MAAM,eAAe,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;AActE,uDAAuD;AACvD,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,UAAU,GAAG,KAAK,CAAC;AA+MpD,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IAGnC,YAAY,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc,EAGtD;IAED,mCAAmC;IACnC,OAAO,CAAC,QAAQ;IAahB;;;;OAIG;IACH,OAAO,CAAC,SAAS;IAmCjB;;;;OAIG;IACG,gBAAgB,CACpB,MAAM,EAAE;QACN,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,OAAO,CAAC,EAAE,eAAe,CAAC;QAC1B,YAAY,CAAC,EAAE,OAAO,CAAC;QACvB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,EACD,GAAG,EAAE,OAAO,GACX,OAAO,CAAC;QAAE,UAAU,EAAE,WAAW,EAAE,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAgE5D;IAED;;;;;;;;OAQG;IACG,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAI/E;IAED,sFAAsF;IAChF,iBAAiB,CACrB,UAAU,EAAE,MAAM,EAClB,GAAG,EAAE,OAAO,GACX,OAAO,CAAC;QAAE,OAAO,EAAE,kBAAkB,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAkK3D;IAED;;;;OAIG;YACW,sBAAsB;IA6BpC;;;;;;;;;;;;;OAaG;IACG,gBAAgB,CACpB,MAAM,EAAE;QACN,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,QAAQ,CAAC,EAAE,QAAQ,CAAC;QACpB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,EACD,GAAG,EAAE,OAAO,GACX,OAAO,CAAC;QAAE,KAAK,EAAE,OAAO,EAAE,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAiFnD;CACF;AAMD,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI,CAEhF;AAED,wBAAgB,cAAc,IAAI,WAAW,CAK5C"}
|