@cyanheads/epa-mcp-server 0.3.3 → 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 +58 -23
- package/changelog/0.4.x/0.4.0.md +35 -0
- 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-air-quality.tool.d.ts +23 -9
- package/dist/mcp-server/tools/definitions/get-air-quality.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/get-air-quality.tool.js +165 -93
- package/dist/mcp-server/tools/definitions/get-air-quality.tool.js.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 +211 -53
- 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 +5 -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 +18 -15
- package/dist/mcp-server/tools/definitions/get-tri-releases.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/index.d.ts +165 -32
- 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 +39 -26
- 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 +13 -9
- 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 +17 -3
- 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 +64 -12
- 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/mcp-server/tools/definitions/search-water-systems.tool.d.ts +3 -1
- package/dist/mcp-server/tools/definitions/search-water-systems.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/search-water-systems.tool.js +22 -7
- package/dist/mcp-server/tools/definitions/search-water-systems.tool.js.map +1 -1
- package/dist/mcp-server/tools/format-lbs.d.ts +14 -0
- package/dist/mcp-server/tools/format-lbs.d.ts.map +1 -0
- package/dist/mcp-server/tools/format-lbs.js +16 -0
- package/dist/mcp-server/tools/format-lbs.js.map +1 -0
- package/dist/mcp-server/tools/format-location.d.ts +18 -0
- package/dist/mcp-server/tools/format-location.d.ts.map +1 -0
- package/dist/mcp-server/tools/format-location.js +26 -0
- package/dist/mcp-server/tools/format-location.js.map +1 -0
- package/dist/mcp-server/tools/format-tri-release.d.ts +16 -0
- package/dist/mcp-server/tools/format-tri-release.d.ts.map +1 -0
- package/dist/mcp-server/tools/format-tri-release.js +23 -0
- package/dist/mcp-server/tools/format-tri-release.js.map +1 -0
- package/dist/services/airnow/airnow-service.d.ts +10 -29
- package/dist/services/airnow/airnow-service.d.ts.map +1 -1
- package/dist/services/airnow/airnow-service.js +156 -97
- package/dist/services/airnow/airnow-service.js.map +1 -1
- package/dist/services/airnow/types.d.ts +62 -23
- package/dist/services/airnow/types.d.ts.map +1 -1
- package/dist/services/airnow/types.js +2 -1
- package/dist/services/airnow/types.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 +76 -7
- package/dist/services/dmap/dmap-service.d.ts.map +1 -1
- package/dist/services/dmap/dmap-service.js +461 -144
- package/dist/services/dmap/dmap-service.js.map +1 -1
- package/dist/services/dmap/types.d.ts +17 -4
- package/dist/services/dmap/types.d.ts.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 +7 -7
- package/server.json +9 -3
|
@@ -89,22 +89,47 @@ export declare const coreToolDefinitions: readonly [import("@cyanheads/mcp-ts-co
|
|
|
89
89
|
tri: import("zod").ZodBoolean;
|
|
90
90
|
sdwa: import("zod").ZodBoolean;
|
|
91
91
|
}, import("zod/v4/core").$strip>;
|
|
92
|
+
triFacilityIds: import("zod").ZodArray<import("zod").ZodString>;
|
|
92
93
|
triReleasesTransfersInLbs: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
94
|
+
triReleasesTransfersYear: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
93
95
|
compliance: import("zod").ZodOptional<import("zod").ZodObject<{
|
|
94
96
|
mediaStatusCode: import("zod").ZodOptional<import("zod").ZodString>;
|
|
95
97
|
mediaStatusDescription: import("zod").ZodOptional<import("zod").ZodString>;
|
|
96
98
|
quartersInViolation: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
97
99
|
}, import("zod/v4/core").$strip>>;
|
|
100
|
+
programCompliance: import("zod").ZodArray<import("zod").ZodObject<{
|
|
101
|
+
statute: import("zod").ZodString;
|
|
102
|
+
currentStatus: import("zod").ZodOptional<import("zod").ZodString>;
|
|
103
|
+
quartersInNoncompliance: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
104
|
+
quartersInSignificantNoncompliance: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
105
|
+
inspections: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
106
|
+
lastInspectionDate: import("zod").ZodOptional<import("zod").ZodString>;
|
|
107
|
+
informalActions: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
108
|
+
formalActions: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
109
|
+
totalPenaltiesInDollars: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
110
|
+
threeYearPeriodStart: import("zod").ZodOptional<import("zod").ZodString>;
|
|
111
|
+
fiveYearPeriodStart: import("zod").ZodOptional<import("zod").ZodString>;
|
|
112
|
+
periodEnd: import("zod").ZodOptional<import("zod").ZodString>;
|
|
113
|
+
}, import("zod/v4/core").$strip>>;
|
|
98
114
|
inspections: import("zod").ZodArray<import("zod").ZodObject<{
|
|
115
|
+
category: import("zod").ZodOptional<import("zod").ZodString>;
|
|
99
116
|
activityType: import("zod").ZodOptional<import("zod").ZodString>;
|
|
100
117
|
activityDate: import("zod").ZodOptional<import("zod").ZodString>;
|
|
101
118
|
description: import("zod").ZodOptional<import("zod").ZodString>;
|
|
119
|
+
statute: import("zod").ZodOptional<import("zod").ZodString>;
|
|
120
|
+
sourceId: import("zod").ZodOptional<import("zod").ZodString>;
|
|
121
|
+
leadAgency: import("zod").ZodOptional<import("zod").ZodString>;
|
|
102
122
|
}, import("zod/v4/core").$strip>>;
|
|
123
|
+
inspectionsTotal: import("zod").ZodNumber;
|
|
103
124
|
formalActions: import("zod").ZodArray<import("zod").ZodObject<{
|
|
104
125
|
caseId: import("zod").ZodOptional<import("zod").ZodString>;
|
|
105
126
|
settlementDate: import("zod").ZodOptional<import("zod").ZodString>;
|
|
106
127
|
penaltyAssessedInDollars: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
107
128
|
actionType: import("zod").ZodOptional<import("zod").ZodString>;
|
|
129
|
+
actionDate: import("zod").ZodOptional<import("zod").ZodString>;
|
|
130
|
+
statute: import("zod").ZodOptional<import("zod").ZodString>;
|
|
131
|
+
sourceId: import("zod").ZodOptional<import("zod").ZodString>;
|
|
132
|
+
leadAgency: import("zod").ZodOptional<import("zod").ZodString>;
|
|
108
133
|
}, import("zod/v4/core").$strip>>;
|
|
109
134
|
airCompliance: import("zod").ZodOptional<import("zod").ZodObject<{
|
|
110
135
|
programId: import("zod").ZodOptional<import("zod").ZodString>;
|
|
@@ -119,9 +144,12 @@ export declare const coreToolDefinitions: readonly [import("@cyanheads/mcp-ts-co
|
|
|
119
144
|
}, import("zod/v4/core").$strip>, readonly [{
|
|
120
145
|
readonly reason: "facility_not_found";
|
|
121
146
|
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
|
|
122
|
-
readonly when: "ECHO
|
|
147
|
+
readonly when: "ECHO has no facility for the given Registry ID.";
|
|
123
148
|
readonly recovery: "Verify the Registry ID using epa_search_facilities and retry with a valid ID.";
|
|
124
|
-
|
|
149
|
+
readonly thrownBy: "service";
|
|
150
|
+
}], {
|
|
151
|
+
readonly notice: import("zod").ZodOptional<import("zod").ZodString>;
|
|
152
|
+
}>, import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
|
|
125
153
|
state: import("zod").ZodOptional<import("zod").ZodString>;
|
|
126
154
|
zip_code: import("zod").ZodOptional<import("zod").ZodString>;
|
|
127
155
|
program: import("zod").ZodOptional<import("zod").ZodEnum<{
|
|
@@ -138,8 +166,8 @@ export declare const coreToolDefinitions: readonly [import("@cyanheads/mcp-ts-co
|
|
|
138
166
|
civil: "civil";
|
|
139
167
|
criminal: "criminal";
|
|
140
168
|
}>>;
|
|
141
|
-
date_filed_start: import("zod").ZodOptional<import("zod").ZodString
|
|
142
|
-
date_filed_end: import("zod").ZodOptional<import("zod").ZodString
|
|
169
|
+
date_filed_start: import("zod").ZodOptional<import("zod").ZodUnion<readonly [import("zod").ZodString, import("zod").ZodString]>>;
|
|
170
|
+
date_filed_end: import("zod").ZodOptional<import("zod").ZodUnion<readonly [import("zod").ZodString, import("zod").ZodString]>>;
|
|
143
171
|
limit: import("zod").ZodDefault<import("zod").ZodNumber>;
|
|
144
172
|
}, import("zod/v4/core").$strip>, import("zod").ZodObject<{
|
|
145
173
|
cases: import("zod").ZodArray<import("zod").ZodObject<{
|
|
@@ -161,7 +189,24 @@ export declare const coreToolDefinitions: readonly [import("@cyanheads/mcp-ts-co
|
|
|
161
189
|
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
|
|
162
190
|
readonly when: "Neither state nor zip_code was provided.";
|
|
163
191
|
readonly recovery: "Provide at least one of state or zip_code to scope the enforcement case search.";
|
|
164
|
-
}
|
|
192
|
+
}, {
|
|
193
|
+
readonly reason: "invalid_date";
|
|
194
|
+
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
|
|
195
|
+
readonly when: "date_filed_start or date_filed_end is not a real calendar date, such as 2024-02-30.";
|
|
196
|
+
readonly recovery: "Pass a real calendar date in YYYY-MM-DD form, such as 2024-02-29.";
|
|
197
|
+
}, {
|
|
198
|
+
readonly reason: "date_range_inverted";
|
|
199
|
+
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
|
|
200
|
+
readonly when: "date_filed_start is later than date_filed_end.";
|
|
201
|
+
readonly recovery: "Swap the two dates so date_filed_start is on or before date_filed_end.";
|
|
202
|
+
}, {
|
|
203
|
+
readonly reason: "criminal_date_filter";
|
|
204
|
+
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
|
|
205
|
+
readonly when: "case_type \"criminal\" was combined with a filing-date bound, which ECHO records for civil cases only.";
|
|
206
|
+
readonly recovery: "Drop date_filed_start and date_filed_end to search criminal cases, or set case_type to civil.";
|
|
207
|
+
}], {
|
|
208
|
+
readonly notice: import("zod").ZodOptional<import("zod").ZodString>;
|
|
209
|
+
}>, import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
|
|
165
210
|
facility_id: import("zod").ZodString;
|
|
166
211
|
year: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
167
212
|
chemical_name: import("zod").ZodOptional<import("zod").ZodString>;
|
|
@@ -170,6 +215,7 @@ export declare const coreToolDefinitions: readonly [import("@cyanheads/mcp-ts-co
|
|
|
170
215
|
facilityId: import("zod").ZodString;
|
|
171
216
|
chemicalName: import("zod").ZodString;
|
|
172
217
|
reportingYear: import("zod").ZodNumber;
|
|
218
|
+
reportedUnit: import("zod").ZodOptional<import("zod").ZodLiteral<"grams">>;
|
|
173
219
|
totalReleasesInLbs: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
174
220
|
releasesToAirInLbs: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
175
221
|
releasesToWaterInLbs: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
@@ -182,20 +228,29 @@ export declare const coreToolDefinitions: readonly [import("@cyanheads/mcp-ts-co
|
|
|
182
228
|
readonly reason: "no_releases_found";
|
|
183
229
|
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
|
|
184
230
|
readonly when: "No TRI records found for the given facility ID and filters.";
|
|
185
|
-
readonly recovery: "
|
|
186
|
-
}],
|
|
231
|
+
readonly recovery: "Take the 15-character TRI facility ID from the facilityId field of epa_search_tri_releases, or from epa_get_facility triFacilityIds for a known Registry ID. TRI data lags 18 months — try an earlier year.";
|
|
232
|
+
}], {
|
|
233
|
+
readonly notice: import("zod").ZodOptional<import("zod").ZodString>;
|
|
234
|
+
}>, import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
|
|
187
235
|
state: import("zod").ZodString;
|
|
188
236
|
county: import("zod").ZodOptional<import("zod").ZodString>;
|
|
189
237
|
year: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
190
238
|
chemical_name: import("zod").ZodOptional<import("zod").ZodString>;
|
|
191
239
|
limit: import("zod").ZodDefault<import("zod").ZodNumber>;
|
|
240
|
+
include_release_breakdown: import("zod").ZodDefault<import("zod").ZodBoolean>;
|
|
192
241
|
}, import("zod/v4/core").$strip>, import("zod").ZodObject<{
|
|
193
242
|
releases: import("zod").ZodArray<import("zod").ZodObject<{
|
|
194
243
|
facilityId: import("zod").ZodString;
|
|
195
244
|
facilityName: import("zod").ZodOptional<import("zod").ZodString>;
|
|
245
|
+
countyName: import("zod").ZodOptional<import("zod").ZodString>;
|
|
196
246
|
chemicalName: import("zod").ZodString;
|
|
197
247
|
reportingYear: import("zod").ZodNumber;
|
|
248
|
+
reportedUnit: import("zod").ZodOptional<import("zod").ZodLiteral<"grams">>;
|
|
198
249
|
totalReleasesInLbs: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
250
|
+
releasesToAirInLbs: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
251
|
+
releasesToWaterInLbs: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
252
|
+
releasesToLandInLbs: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
253
|
+
releasesToUndergroundInjectionInLbs: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
199
254
|
}, import("zod/v4/core").$strip>>;
|
|
200
255
|
state: import("zod").ZodString;
|
|
201
256
|
message: import("zod").ZodOptional<import("zod").ZodString>;
|
|
@@ -205,9 +260,10 @@ export declare const coreToolDefinitions: readonly [import("@cyanheads/mcp-ts-co
|
|
|
205
260
|
readonly when: "No TRI records found for the given state and filters.";
|
|
206
261
|
readonly recovery: "Verify the state abbreviation is valid. TRI data lags 18 months — try removing the year filter or using an earlier year.";
|
|
207
262
|
}], {
|
|
208
|
-
readonly truncated: import("zod").ZodBoolean
|
|
209
|
-
readonly shown: import("zod").ZodNumber
|
|
210
|
-
readonly cap: import("zod").ZodNumber
|
|
263
|
+
readonly truncated: import("zod").ZodOptional<import("zod").ZodBoolean>;
|
|
264
|
+
readonly shown: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
265
|
+
readonly cap: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
266
|
+
readonly notice: import("zod").ZodOptional<import("zod").ZodString>;
|
|
211
267
|
}>, import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
|
|
212
268
|
state: import("zod").ZodOptional<import("zod").ZodString>;
|
|
213
269
|
city: import("zod").ZodOptional<import("zod").ZodString>;
|
|
@@ -249,7 +305,9 @@ export declare const coreToolDefinitions: readonly [import("@cyanheads/mcp-ts-co
|
|
|
249
305
|
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
|
|
250
306
|
readonly when: "Latitude and longitude were provided without radius_miles.";
|
|
251
307
|
readonly recovery: "Provide radius_miles together with latitude and longitude for a proximity search.";
|
|
252
|
-
}],
|
|
308
|
+
}], {
|
|
309
|
+
readonly notice: import("zod").ZodOptional<import("zod").ZodString>;
|
|
310
|
+
}>, import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
|
|
253
311
|
state: import("zod").ZodOptional<import("zod").ZodString>;
|
|
254
312
|
zip_code: import("zod").ZodOptional<import("zod").ZodString>;
|
|
255
313
|
has_violation: import("zod").ZodOptional<import("zod").ZodBoolean>;
|
|
@@ -279,7 +337,9 @@ export declare const coreToolDefinitions: readonly [import("@cyanheads/mcp-ts-co
|
|
|
279
337
|
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
|
|
280
338
|
readonly when: "Neither state nor zip_code was provided.";
|
|
281
339
|
readonly recovery: "Provide at least one of state or zip_code to search drinking water systems.";
|
|
282
|
-
}],
|
|
340
|
+
}], {
|
|
341
|
+
readonly notice: import("zod").ZodOptional<import("zod").ZodString>;
|
|
342
|
+
}>, import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
|
|
283
343
|
latitude: import("zod").ZodNumber;
|
|
284
344
|
longitude: import("zod").ZodNumber;
|
|
285
345
|
distance: import("zod").ZodDefault<import("zod").ZodNumber>;
|
|
@@ -424,22 +484,47 @@ export declare const allToolDefinitions: readonly [import("@cyanheads/mcp-ts-cor
|
|
|
424
484
|
tri: import("zod").ZodBoolean;
|
|
425
485
|
sdwa: import("zod").ZodBoolean;
|
|
426
486
|
}, import("zod/v4/core").$strip>;
|
|
487
|
+
triFacilityIds: import("zod").ZodArray<import("zod").ZodString>;
|
|
427
488
|
triReleasesTransfersInLbs: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
489
|
+
triReleasesTransfersYear: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
428
490
|
compliance: import("zod").ZodOptional<import("zod").ZodObject<{
|
|
429
491
|
mediaStatusCode: import("zod").ZodOptional<import("zod").ZodString>;
|
|
430
492
|
mediaStatusDescription: import("zod").ZodOptional<import("zod").ZodString>;
|
|
431
493
|
quartersInViolation: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
432
494
|
}, import("zod/v4/core").$strip>>;
|
|
495
|
+
programCompliance: import("zod").ZodArray<import("zod").ZodObject<{
|
|
496
|
+
statute: import("zod").ZodString;
|
|
497
|
+
currentStatus: import("zod").ZodOptional<import("zod").ZodString>;
|
|
498
|
+
quartersInNoncompliance: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
499
|
+
quartersInSignificantNoncompliance: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
500
|
+
inspections: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
501
|
+
lastInspectionDate: import("zod").ZodOptional<import("zod").ZodString>;
|
|
502
|
+
informalActions: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
503
|
+
formalActions: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
504
|
+
totalPenaltiesInDollars: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
505
|
+
threeYearPeriodStart: import("zod").ZodOptional<import("zod").ZodString>;
|
|
506
|
+
fiveYearPeriodStart: import("zod").ZodOptional<import("zod").ZodString>;
|
|
507
|
+
periodEnd: import("zod").ZodOptional<import("zod").ZodString>;
|
|
508
|
+
}, import("zod/v4/core").$strip>>;
|
|
433
509
|
inspections: import("zod").ZodArray<import("zod").ZodObject<{
|
|
510
|
+
category: import("zod").ZodOptional<import("zod").ZodString>;
|
|
434
511
|
activityType: import("zod").ZodOptional<import("zod").ZodString>;
|
|
435
512
|
activityDate: import("zod").ZodOptional<import("zod").ZodString>;
|
|
436
513
|
description: import("zod").ZodOptional<import("zod").ZodString>;
|
|
514
|
+
statute: import("zod").ZodOptional<import("zod").ZodString>;
|
|
515
|
+
sourceId: import("zod").ZodOptional<import("zod").ZodString>;
|
|
516
|
+
leadAgency: import("zod").ZodOptional<import("zod").ZodString>;
|
|
437
517
|
}, import("zod/v4/core").$strip>>;
|
|
518
|
+
inspectionsTotal: import("zod").ZodNumber;
|
|
438
519
|
formalActions: import("zod").ZodArray<import("zod").ZodObject<{
|
|
439
520
|
caseId: import("zod").ZodOptional<import("zod").ZodString>;
|
|
440
521
|
settlementDate: import("zod").ZodOptional<import("zod").ZodString>;
|
|
441
522
|
penaltyAssessedInDollars: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
442
523
|
actionType: import("zod").ZodOptional<import("zod").ZodString>;
|
|
524
|
+
actionDate: import("zod").ZodOptional<import("zod").ZodString>;
|
|
525
|
+
statute: import("zod").ZodOptional<import("zod").ZodString>;
|
|
526
|
+
sourceId: import("zod").ZodOptional<import("zod").ZodString>;
|
|
527
|
+
leadAgency: import("zod").ZodOptional<import("zod").ZodString>;
|
|
443
528
|
}, import("zod/v4/core").$strip>>;
|
|
444
529
|
airCompliance: import("zod").ZodOptional<import("zod").ZodObject<{
|
|
445
530
|
programId: import("zod").ZodOptional<import("zod").ZodString>;
|
|
@@ -454,9 +539,12 @@ export declare const allToolDefinitions: readonly [import("@cyanheads/mcp-ts-cor
|
|
|
454
539
|
}, import("zod/v4/core").$strip>, readonly [{
|
|
455
540
|
readonly reason: "facility_not_found";
|
|
456
541
|
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
|
|
457
|
-
readonly when: "ECHO
|
|
542
|
+
readonly when: "ECHO has no facility for the given Registry ID.";
|
|
458
543
|
readonly recovery: "Verify the Registry ID using epa_search_facilities and retry with a valid ID.";
|
|
459
|
-
|
|
544
|
+
readonly thrownBy: "service";
|
|
545
|
+
}], {
|
|
546
|
+
readonly notice: import("zod").ZodOptional<import("zod").ZodString>;
|
|
547
|
+
}>, import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
|
|
460
548
|
state: import("zod").ZodOptional<import("zod").ZodString>;
|
|
461
549
|
zip_code: import("zod").ZodOptional<import("zod").ZodString>;
|
|
462
550
|
program: import("zod").ZodOptional<import("zod").ZodEnum<{
|
|
@@ -473,8 +561,8 @@ export declare const allToolDefinitions: readonly [import("@cyanheads/mcp-ts-cor
|
|
|
473
561
|
civil: "civil";
|
|
474
562
|
criminal: "criminal";
|
|
475
563
|
}>>;
|
|
476
|
-
date_filed_start: import("zod").ZodOptional<import("zod").ZodString
|
|
477
|
-
date_filed_end: import("zod").ZodOptional<import("zod").ZodString
|
|
564
|
+
date_filed_start: import("zod").ZodOptional<import("zod").ZodUnion<readonly [import("zod").ZodString, import("zod").ZodString]>>;
|
|
565
|
+
date_filed_end: import("zod").ZodOptional<import("zod").ZodUnion<readonly [import("zod").ZodString, import("zod").ZodString]>>;
|
|
478
566
|
limit: import("zod").ZodDefault<import("zod").ZodNumber>;
|
|
479
567
|
}, import("zod/v4/core").$strip>, import("zod").ZodObject<{
|
|
480
568
|
cases: import("zod").ZodArray<import("zod").ZodObject<{
|
|
@@ -496,7 +584,24 @@ export declare const allToolDefinitions: readonly [import("@cyanheads/mcp-ts-cor
|
|
|
496
584
|
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
|
|
497
585
|
readonly when: "Neither state nor zip_code was provided.";
|
|
498
586
|
readonly recovery: "Provide at least one of state or zip_code to scope the enforcement case search.";
|
|
499
|
-
}
|
|
587
|
+
}, {
|
|
588
|
+
readonly reason: "invalid_date";
|
|
589
|
+
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
|
|
590
|
+
readonly when: "date_filed_start or date_filed_end is not a real calendar date, such as 2024-02-30.";
|
|
591
|
+
readonly recovery: "Pass a real calendar date in YYYY-MM-DD form, such as 2024-02-29.";
|
|
592
|
+
}, {
|
|
593
|
+
readonly reason: "date_range_inverted";
|
|
594
|
+
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
|
|
595
|
+
readonly when: "date_filed_start is later than date_filed_end.";
|
|
596
|
+
readonly recovery: "Swap the two dates so date_filed_start is on or before date_filed_end.";
|
|
597
|
+
}, {
|
|
598
|
+
readonly reason: "criminal_date_filter";
|
|
599
|
+
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
|
|
600
|
+
readonly when: "case_type \"criminal\" was combined with a filing-date bound, which ECHO records for civil cases only.";
|
|
601
|
+
readonly recovery: "Drop date_filed_start and date_filed_end to search criminal cases, or set case_type to civil.";
|
|
602
|
+
}], {
|
|
603
|
+
readonly notice: import("zod").ZodOptional<import("zod").ZodString>;
|
|
604
|
+
}>, import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
|
|
500
605
|
facility_id: import("zod").ZodString;
|
|
501
606
|
year: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
502
607
|
chemical_name: import("zod").ZodOptional<import("zod").ZodString>;
|
|
@@ -505,6 +610,7 @@ export declare const allToolDefinitions: readonly [import("@cyanheads/mcp-ts-cor
|
|
|
505
610
|
facilityId: import("zod").ZodString;
|
|
506
611
|
chemicalName: import("zod").ZodString;
|
|
507
612
|
reportingYear: import("zod").ZodNumber;
|
|
613
|
+
reportedUnit: import("zod").ZodOptional<import("zod").ZodLiteral<"grams">>;
|
|
508
614
|
totalReleasesInLbs: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
509
615
|
releasesToAirInLbs: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
510
616
|
releasesToWaterInLbs: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
@@ -517,20 +623,29 @@ export declare const allToolDefinitions: readonly [import("@cyanheads/mcp-ts-cor
|
|
|
517
623
|
readonly reason: "no_releases_found";
|
|
518
624
|
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
|
|
519
625
|
readonly when: "No TRI records found for the given facility ID and filters.";
|
|
520
|
-
readonly recovery: "
|
|
521
|
-
}],
|
|
626
|
+
readonly recovery: "Take the 15-character TRI facility ID from the facilityId field of epa_search_tri_releases, or from epa_get_facility triFacilityIds for a known Registry ID. TRI data lags 18 months — try an earlier year.";
|
|
627
|
+
}], {
|
|
628
|
+
readonly notice: import("zod").ZodOptional<import("zod").ZodString>;
|
|
629
|
+
}>, import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
|
|
522
630
|
state: import("zod").ZodString;
|
|
523
631
|
county: import("zod").ZodOptional<import("zod").ZodString>;
|
|
524
632
|
year: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
525
633
|
chemical_name: import("zod").ZodOptional<import("zod").ZodString>;
|
|
526
634
|
limit: import("zod").ZodDefault<import("zod").ZodNumber>;
|
|
635
|
+
include_release_breakdown: import("zod").ZodDefault<import("zod").ZodBoolean>;
|
|
527
636
|
}, import("zod/v4/core").$strip>, import("zod").ZodObject<{
|
|
528
637
|
releases: import("zod").ZodArray<import("zod").ZodObject<{
|
|
529
638
|
facilityId: import("zod").ZodString;
|
|
530
639
|
facilityName: import("zod").ZodOptional<import("zod").ZodString>;
|
|
640
|
+
countyName: import("zod").ZodOptional<import("zod").ZodString>;
|
|
531
641
|
chemicalName: import("zod").ZodString;
|
|
532
642
|
reportingYear: import("zod").ZodNumber;
|
|
643
|
+
reportedUnit: import("zod").ZodOptional<import("zod").ZodLiteral<"grams">>;
|
|
533
644
|
totalReleasesInLbs: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
645
|
+
releasesToAirInLbs: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
646
|
+
releasesToWaterInLbs: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
647
|
+
releasesToLandInLbs: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
648
|
+
releasesToUndergroundInjectionInLbs: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
534
649
|
}, import("zod/v4/core").$strip>>;
|
|
535
650
|
state: import("zod").ZodString;
|
|
536
651
|
message: import("zod").ZodOptional<import("zod").ZodString>;
|
|
@@ -540,9 +655,10 @@ export declare const allToolDefinitions: readonly [import("@cyanheads/mcp-ts-cor
|
|
|
540
655
|
readonly when: "No TRI records found for the given state and filters.";
|
|
541
656
|
readonly recovery: "Verify the state abbreviation is valid. TRI data lags 18 months — try removing the year filter or using an earlier year.";
|
|
542
657
|
}], {
|
|
543
|
-
readonly truncated: import("zod").ZodBoolean
|
|
544
|
-
readonly shown: import("zod").ZodNumber
|
|
545
|
-
readonly cap: import("zod").ZodNumber
|
|
658
|
+
readonly truncated: import("zod").ZodOptional<import("zod").ZodBoolean>;
|
|
659
|
+
readonly shown: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
660
|
+
readonly cap: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
661
|
+
readonly notice: import("zod").ZodOptional<import("zod").ZodString>;
|
|
546
662
|
}>, import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
|
|
547
663
|
state: import("zod").ZodOptional<import("zod").ZodString>;
|
|
548
664
|
city: import("zod").ZodOptional<import("zod").ZodString>;
|
|
@@ -584,7 +700,9 @@ export declare const allToolDefinitions: readonly [import("@cyanheads/mcp-ts-cor
|
|
|
584
700
|
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
|
|
585
701
|
readonly when: "Latitude and longitude were provided without radius_miles.";
|
|
586
702
|
readonly recovery: "Provide radius_miles together with latitude and longitude for a proximity search.";
|
|
587
|
-
}],
|
|
703
|
+
}], {
|
|
704
|
+
readonly notice: import("zod").ZodOptional<import("zod").ZodString>;
|
|
705
|
+
}>, import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
|
|
588
706
|
state: import("zod").ZodOptional<import("zod").ZodString>;
|
|
589
707
|
zip_code: import("zod").ZodOptional<import("zod").ZodString>;
|
|
590
708
|
has_violation: import("zod").ZodOptional<import("zod").ZodBoolean>;
|
|
@@ -614,7 +732,9 @@ export declare const allToolDefinitions: readonly [import("@cyanheads/mcp-ts-cor
|
|
|
614
732
|
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
|
|
615
733
|
readonly when: "Neither state nor zip_code was provided.";
|
|
616
734
|
readonly recovery: "Provide at least one of state or zip_code to search drinking water systems.";
|
|
617
|
-
}],
|
|
735
|
+
}], {
|
|
736
|
+
readonly notice: import("zod").ZodOptional<import("zod").ZodString>;
|
|
737
|
+
}>, import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
|
|
618
738
|
latitude: import("zod").ZodNumber;
|
|
619
739
|
longitude: import("zod").ZodNumber;
|
|
620
740
|
distance: import("zod").ZodDefault<import("zod").ZodNumber>;
|
|
@@ -688,34 +808,47 @@ export declare const allToolDefinitions: readonly [import("@cyanheads/mcp-ts-cor
|
|
|
688
808
|
forecast: "forecast";
|
|
689
809
|
}>>;
|
|
690
810
|
forecast_date: import("zod").ZodOptional<import("zod").ZodString>;
|
|
691
|
-
distance_miles: import("zod").ZodDefault<import("zod").ZodNumber>;
|
|
692
811
|
}, import("zod/v4/core").$strip>, import("zod").ZodObject<{
|
|
693
812
|
observations: import("zod").ZodArray<import("zod").ZodObject<{
|
|
694
813
|
reportingArea: import("zod").ZodOptional<import("zod").ZodString>;
|
|
814
|
+
reportingAreaCode: import("zod").ZodOptional<import("zod").ZodString>;
|
|
695
815
|
stateCode: import("zod").ZodOptional<import("zod").ZodString>;
|
|
696
|
-
latitude: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
697
|
-
longitude: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
698
816
|
dateObserved: import("zod").ZodOptional<import("zod").ZodString>;
|
|
699
|
-
hourObserved: import("zod").ZodOptional<import("zod").
|
|
817
|
+
hourObserved: import("zod").ZodOptional<import("zod").ZodString>;
|
|
700
818
|
localTimeZone: import("zod").ZodOptional<import("zod").ZodString>;
|
|
819
|
+
discussion: import("zod").ZodOptional<import("zod").ZodString>;
|
|
701
820
|
readings: import("zod").ZodArray<import("zod").ZodObject<{
|
|
702
821
|
parameterName: import("zod").ZodString;
|
|
703
|
-
aqi: import("zod").ZodNumber
|
|
822
|
+
aqi: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
704
823
|
categoryNumber: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
705
824
|
categoryName: import("zod").ZodOptional<import("zod").ZodString>;
|
|
825
|
+
siteName: import("zod").ZodOptional<import("zod").ZodString>;
|
|
826
|
+
siteID: import("zod").ZodOptional<import("zod").ZodString>;
|
|
827
|
+
reportingAgency: import("zod").ZodOptional<import("zod").ZodString>;
|
|
828
|
+
dateIssue: import("zod").ZodOptional<import("zod").ZodString>;
|
|
829
|
+
dateValid: import("zod").ZodOptional<import("zod").ZodString>;
|
|
830
|
+
forecastAgency: import("zod").ZodOptional<import("zod").ZodString>;
|
|
831
|
+
actionDay: import("zod").ZodOptional<import("zod").ZodBoolean>;
|
|
706
832
|
}, import("zod/v4/core").$strip>>;
|
|
707
833
|
}, import("zod/v4/core").$strip>>;
|
|
708
834
|
mode: import("zod").ZodString;
|
|
709
835
|
message: import("zod").ZodOptional<import("zod").ZodString>;
|
|
836
|
+
attribution: import("zod").ZodString;
|
|
710
837
|
}, import("zod/v4/core").$strip>, readonly [{
|
|
711
838
|
readonly reason: "no_location";
|
|
712
839
|
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
|
|
713
840
|
readonly when: "Neither zip_code nor latitude+longitude was provided.";
|
|
714
841
|
readonly recovery: "Provide either zip_code or both latitude and longitude to identify the location.";
|
|
715
842
|
}, {
|
|
716
|
-
readonly reason: "
|
|
843
|
+
readonly reason: "forecast_date_needs_forecast_mode";
|
|
844
|
+
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
|
|
845
|
+
readonly when: "forecast_date was set while mode is \"current\", where it has no effect.";
|
|
846
|
+
readonly recovery: "Set mode to \"forecast\" to filter by forecast_date, or omit forecast_date.";
|
|
847
|
+
}, {
|
|
848
|
+
readonly reason: "invalid_zip_code";
|
|
717
849
|
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
|
|
718
|
-
readonly when: "
|
|
719
|
-
readonly recovery: "
|
|
850
|
+
readonly when: "AirNow rejected zip_code as invalid (HTTP 400).";
|
|
851
|
+
readonly recovery: "Check that zip_code is a valid 5-digit US ZIP code, or pass latitude and longitude instead.";
|
|
852
|
+
readonly thrownBy: "service";
|
|
720
853
|
}], undefined>];
|
|
721
854
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAYxE;;;GAGG;AACH,eAAO,MAAM,mBAAmB
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAYxE;;;GAGG;AACH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAStB,CAAC;AAEX;;;;GAIG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;eAAuD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search-facilities.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/search-facilities.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"search-facilities.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/search-facilities.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAKjE,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAkQ/B,CAAC"}
|
|
@@ -4,15 +4,20 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { tool, z } from '@cyanheads/mcp-ts-core';
|
|
6
6
|
import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
|
|
7
|
+
import { formatLbs } from '../format-lbs.js';
|
|
8
|
+
import { formatLocationLines } from '../format-location.js';
|
|
7
9
|
import { getEchoService } from '../../../services/echo/echo-service.js';
|
|
8
10
|
export const searchFacilitiesTool = tool('epa_search_facilities', {
|
|
9
11
|
title: 'Search EPA Facilities',
|
|
10
|
-
description: 'Search EPA-regulated facilities by location,
|
|
12
|
+
description: 'Search EPA-regulated facilities by location, environmental program, or compliance status across CAA, CWA, RCRA, TRI, and SDWA. Returns facility name, EPA Registry ID, coordinates, county FIPS code, per-program registration flags, five-year inspection and penalty totals, and TRI release totals. Registry IDs returned here feed epa_get_facility. Supports proximity search via latitude + longitude + radius_miles. At least one geographic filter (zip_code, state, city, or a complete latitude+longitude+radius_miles triple) is required — unscoped searches time out.',
|
|
11
13
|
annotations: { readOnlyHint: true, openWorldHint: true, idempotentHint: true },
|
|
12
14
|
input: z.object({
|
|
13
15
|
zip_code: z.string().optional().describe('5-digit ZIP code to search within'),
|
|
14
16
|
state: z.string().optional().describe('2-letter US state abbreviation (e.g. "WA", "CA")'),
|
|
15
|
-
city: z
|
|
17
|
+
city: z
|
|
18
|
+
.string()
|
|
19
|
+
.optional()
|
|
20
|
+
.describe('City name, case-insensitive; matches cities that begin with it ("TACOMA", or "SEAT" for SEATTLE and SEATAC). Pair with state.'),
|
|
16
21
|
latitude: z
|
|
17
22
|
.number()
|
|
18
23
|
.min(-90)
|
|
@@ -31,15 +36,19 @@ export const searchFacilitiesTool = tool('epa_search_facilities', {
|
|
|
31
36
|
.max(100)
|
|
32
37
|
.optional()
|
|
33
38
|
.describe('Search radius in miles around the given latitude/longitude (max 100). Requires latitude and longitude.'),
|
|
34
|
-
active_only: z
|
|
39
|
+
active_only: z
|
|
40
|
+
.boolean()
|
|
41
|
+
.optional()
|
|
42
|
+
.describe('When true, return only facilities with an active permit'),
|
|
35
43
|
programs: z
|
|
36
44
|
.array(z.enum(['CAA', 'CWA', 'RCRA', 'TRI', 'SDWA']))
|
|
45
|
+
.max(1)
|
|
37
46
|
.optional()
|
|
38
|
-
.describe('Restrict results to facilities registered in
|
|
47
|
+
.describe('Restrict results to facilities registered in one environmental program — ECHO filters on a single program per search, so pass one value. CAA=air, CWA=water, RCRA=hazardous waste, TRI=toxic releases, SDWA=drinking water.'),
|
|
39
48
|
has_violation: z
|
|
40
49
|
.boolean()
|
|
41
50
|
.optional()
|
|
42
|
-
.describe('When true, return only facilities with
|
|
51
|
+
.describe('When true, return only facilities with at least one program in significant noncompliance (complianceStatus "Significant Violation")'),
|
|
43
52
|
limit: z
|
|
44
53
|
.number()
|
|
45
54
|
.int()
|
|
@@ -54,7 +63,7 @@ export const searchFacilitiesTool = tool('epa_search_facilities', {
|
|
|
54
63
|
.object({
|
|
55
64
|
registryId: z
|
|
56
65
|
.string()
|
|
57
|
-
.describe('EPA FRS Registry ID — use as input to epa_get_facility
|
|
66
|
+
.describe('EPA FRS Registry ID — use as input to epa_get_facility'),
|
|
58
67
|
name: z.string().describe('Facility name'),
|
|
59
68
|
street: z.string().optional().describe('Street address'),
|
|
60
69
|
city: z.string().optional().describe('City'),
|
|
@@ -73,24 +82,33 @@ export const searchFacilitiesTool = tool('epa_search_facilities', {
|
|
|
73
82
|
.describe('Overall compliance status text from ECHO'),
|
|
74
83
|
programs: z
|
|
75
84
|
.object({
|
|
76
|
-
air: z
|
|
77
|
-
|
|
78
|
-
|
|
85
|
+
air: z
|
|
86
|
+
.boolean()
|
|
87
|
+
.describe('Has a Clean Air Act (CAA) stationary-source record in ICIS-Air'),
|
|
88
|
+
water: z
|
|
79
89
|
.boolean()
|
|
80
|
-
.describe('
|
|
81
|
-
|
|
82
|
-
|
|
90
|
+
.describe('Has a Clean Water Act (CWA) discharge permit record in ICIS-NPDES'),
|
|
91
|
+
rcra: z.boolean().describe('Has an RCRA hazardous waste handler record'),
|
|
92
|
+
tri: z
|
|
93
|
+
.boolean()
|
|
94
|
+
.describe('Has a Toxics Release Inventory (TRI) facility ID, whether or not it reported in the latest year'),
|
|
95
|
+
sdwa: z
|
|
96
|
+
.boolean()
|
|
97
|
+
.describe('Has a Safe Drinking Water Act (SDWA) public water system record'),
|
|
83
98
|
})
|
|
84
|
-
.describe('Program registration flags'),
|
|
99
|
+
.describe('Program registration flags — the same programs the programs filter selects'),
|
|
85
100
|
triReleasesTransfersInLbs: z
|
|
86
101
|
.number()
|
|
87
102
|
.optional()
|
|
88
|
-
.describe(
|
|
89
|
-
inspectionCount: z
|
|
103
|
+
.describe("Total TRI on/off-site releases and transfers in pounds for ECHO's latest TRI year (summary). For the per-chemical breakdown, call epa_get_tri_releases with the TRI facility ID that epa_search_tri_releases returns as facilityId — the Registry ID is not a TRI facility ID."),
|
|
104
|
+
inspectionCount: z
|
|
105
|
+
.number()
|
|
106
|
+
.optional()
|
|
107
|
+
.describe('Inspections over the last five years, across programs'),
|
|
90
108
|
totalPenaltiesInDollars: z
|
|
91
109
|
.number()
|
|
92
110
|
.optional()
|
|
93
|
-
.describe('
|
|
111
|
+
.describe('Penalties from formal enforcement actions over the last five years, across programs, in dollars'),
|
|
94
112
|
})
|
|
95
113
|
.describe('EPA facility record with Registry ID, location, program flags, and compliance summary'))
|
|
96
114
|
.describe('Matching EPA facilities'),
|
|
@@ -146,7 +164,7 @@ export const searchFacilitiesTool = tool('epa_search_facilities', {
|
|
|
146
164
|
...(longitude !== undefined && { longitude }),
|
|
147
165
|
...(radiusMiles !== undefined && { radiusMiles }),
|
|
148
166
|
...(input.active_only && { activeOnly: input.active_only }),
|
|
149
|
-
...(input.programs?.
|
|
167
|
+
...(input.programs?.[0] && { program: input.programs[0] }),
|
|
150
168
|
...(input.has_violation && { hasViolation: input.has_violation }),
|
|
151
169
|
limit: input.limit,
|
|
152
170
|
}, ctx);
|
|
@@ -161,6 +179,8 @@ export const searchFacilitiesTool = tool('epa_search_facilities', {
|
|
|
161
179
|
parts.push(`city="${input.city}"`);
|
|
162
180
|
if (hasProximity)
|
|
163
181
|
parts.push(`within ${radiusMiles} mi of (${latitude}, ${longitude})`);
|
|
182
|
+
if (input.active_only)
|
|
183
|
+
parts.push('active_only=true');
|
|
164
184
|
if (input.programs?.length)
|
|
165
185
|
parts.push(`programs=[${input.programs.join(', ')}]`);
|
|
166
186
|
if (input.has_violation)
|
|
@@ -182,14 +202,7 @@ export const searchFacilitiesTool = tool('epa_search_facilities', {
|
|
|
182
202
|
for (const f of result.facilities) {
|
|
183
203
|
lines.push(`\n### ${f.name}`);
|
|
184
204
|
lines.push(`**Registry ID:** ${f.registryId}`);
|
|
185
|
-
|
|
186
|
-
if (location)
|
|
187
|
-
lines.push(`**Location:** ${location}`);
|
|
188
|
-
if (f.county)
|
|
189
|
-
lines.push(`**County:** ${f.county}${f.fipsCode ? ` (FIPS: ${f.fipsCode})` : ''}`);
|
|
190
|
-
if (f.latitude !== undefined && f.longitude !== undefined) {
|
|
191
|
-
lines.push(`**Coordinates:** ${f.latitude}, ${f.longitude}`);
|
|
192
|
-
}
|
|
205
|
+
lines.push(...formatLocationLines(f));
|
|
193
206
|
if (f.complianceStatus)
|
|
194
207
|
lines.push(`**Compliance Status:** ${f.complianceStatus}`);
|
|
195
208
|
const activePrograms = Object.entries(f.programs)
|
|
@@ -199,7 +212,7 @@ export const searchFacilitiesTool = tool('epa_search_facilities', {
|
|
|
199
212
|
if (activePrograms)
|
|
200
213
|
lines.push(`**Programs:** ${activePrograms}`);
|
|
201
214
|
if (f.triReleasesTransfersInLbs !== undefined) {
|
|
202
|
-
lines.push(`**TRI Releases+Transfers:** ${f.triReleasesTransfersInLbs
|
|
215
|
+
lines.push(`**TRI Releases+Transfers:** ${formatLbs(f.triReleasesTransfersInLbs)}`);
|
|
203
216
|
}
|
|
204
217
|
if (f.inspectionCount !== undefined)
|
|
205
218
|
lines.push(`**Inspections:** ${f.inspectionCount}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search-facilities.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/search-facilities.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAEjE,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,CAAC,uBAAuB,EAAE;IAChE,KAAK,EAAE,uBAAuB;IAC9B,WAAW,EACT,
|
|
1
|
+
{"version":3,"file":"search-facilities.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/search-facilities.tool.ts"],"names":[],"mappings":"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"}
|