@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.
Files changed (88) hide show
  1. package/AGENTS.md +5 -5
  2. package/CLAUDE.md +5 -5
  3. package/Dockerfile +3 -3
  4. package/README.md +58 -23
  5. package/changelog/0.4.x/0.4.0.md +35 -0
  6. package/changelog/0.4.x/0.4.1.md +34 -0
  7. package/dist/index.js +1 -1
  8. package/dist/index.js.map +1 -1
  9. package/dist/mcp-server/resources/definitions/facility.resource.d.ts +8 -1
  10. package/dist/mcp-server/resources/definitions/facility.resource.d.ts.map +1 -1
  11. package/dist/mcp-server/resources/definitions/facility.resource.js +13 -7
  12. package/dist/mcp-server/resources/definitions/facility.resource.js.map +1 -1
  13. package/dist/mcp-server/resources/definitions/index.d.ts +7 -1
  14. package/dist/mcp-server/resources/definitions/index.d.ts.map +1 -1
  15. package/dist/mcp-server/tools/definitions/get-air-quality.tool.d.ts +23 -9
  16. package/dist/mcp-server/tools/definitions/get-air-quality.tool.d.ts.map +1 -1
  17. package/dist/mcp-server/tools/definitions/get-air-quality.tool.js +165 -93
  18. package/dist/mcp-server/tools/definitions/get-air-quality.tool.js.map +1 -1
  19. package/dist/mcp-server/tools/definitions/get-facility.tool.d.ts +30 -2
  20. package/dist/mcp-server/tools/definitions/get-facility.tool.d.ts.map +1 -1
  21. package/dist/mcp-server/tools/definitions/get-facility.tool.js +211 -53
  22. package/dist/mcp-server/tools/definitions/get-facility.tool.js.map +1 -1
  23. package/dist/mcp-server/tools/definitions/get-tri-releases.tool.d.ts +5 -2
  24. package/dist/mcp-server/tools/definitions/get-tri-releases.tool.d.ts.map +1 -1
  25. package/dist/mcp-server/tools/definitions/get-tri-releases.tool.js +18 -15
  26. package/dist/mcp-server/tools/definitions/get-tri-releases.tool.js.map +1 -1
  27. package/dist/mcp-server/tools/definitions/index.d.ts +165 -32
  28. package/dist/mcp-server/tools/definitions/index.d.ts.map +1 -1
  29. package/dist/mcp-server/tools/definitions/search-facilities.tool.d.ts.map +1 -1
  30. package/dist/mcp-server/tools/definitions/search-facilities.tool.js +39 -26
  31. package/dist/mcp-server/tools/definitions/search-facilities.tool.js.map +1 -1
  32. package/dist/mcp-server/tools/definitions/search-superfund.tool.d.ts +3 -1
  33. package/dist/mcp-server/tools/definitions/search-superfund.tool.d.ts.map +1 -1
  34. package/dist/mcp-server/tools/definitions/search-superfund.tool.js +13 -9
  35. package/dist/mcp-server/tools/definitions/search-superfund.tool.js.map +1 -1
  36. package/dist/mcp-server/tools/definitions/search-tri-releases.tool.d.ts +17 -3
  37. package/dist/mcp-server/tools/definitions/search-tri-releases.tool.d.ts.map +1 -1
  38. package/dist/mcp-server/tools/definitions/search-tri-releases.tool.js +64 -12
  39. package/dist/mcp-server/tools/definitions/search-tri-releases.tool.js.map +1 -1
  40. package/dist/mcp-server/tools/definitions/search-violations.tool.d.ts +20 -3
  41. package/dist/mcp-server/tools/definitions/search-violations.tool.d.ts.map +1 -1
  42. package/dist/mcp-server/tools/definitions/search-violations.tool.js +84 -15
  43. package/dist/mcp-server/tools/definitions/search-violations.tool.js.map +1 -1
  44. package/dist/mcp-server/tools/definitions/search-water-systems.tool.d.ts +3 -1
  45. package/dist/mcp-server/tools/definitions/search-water-systems.tool.d.ts.map +1 -1
  46. package/dist/mcp-server/tools/definitions/search-water-systems.tool.js +22 -7
  47. package/dist/mcp-server/tools/definitions/search-water-systems.tool.js.map +1 -1
  48. package/dist/mcp-server/tools/format-lbs.d.ts +14 -0
  49. package/dist/mcp-server/tools/format-lbs.d.ts.map +1 -0
  50. package/dist/mcp-server/tools/format-lbs.js +16 -0
  51. package/dist/mcp-server/tools/format-lbs.js.map +1 -0
  52. package/dist/mcp-server/tools/format-location.d.ts +18 -0
  53. package/dist/mcp-server/tools/format-location.d.ts.map +1 -0
  54. package/dist/mcp-server/tools/format-location.js +26 -0
  55. package/dist/mcp-server/tools/format-location.js.map +1 -0
  56. package/dist/mcp-server/tools/format-tri-release.d.ts +16 -0
  57. package/dist/mcp-server/tools/format-tri-release.d.ts.map +1 -0
  58. package/dist/mcp-server/tools/format-tri-release.js +23 -0
  59. package/dist/mcp-server/tools/format-tri-release.js.map +1 -0
  60. package/dist/services/airnow/airnow-service.d.ts +10 -29
  61. package/dist/services/airnow/airnow-service.d.ts.map +1 -1
  62. package/dist/services/airnow/airnow-service.js +156 -97
  63. package/dist/services/airnow/airnow-service.js.map +1 -1
  64. package/dist/services/airnow/types.d.ts +62 -23
  65. package/dist/services/airnow/types.d.ts.map +1 -1
  66. package/dist/services/airnow/types.js +2 -1
  67. package/dist/services/airnow/types.js.map +1 -1
  68. package/dist/services/call-budget.d.ts +22 -0
  69. package/dist/services/call-budget.d.ts.map +1 -0
  70. package/dist/services/call-budget.js +28 -0
  71. package/dist/services/call-budget.js.map +1 -0
  72. package/dist/services/dmap/dmap-service.d.ts +76 -7
  73. package/dist/services/dmap/dmap-service.d.ts.map +1 -1
  74. package/dist/services/dmap/dmap-service.js +461 -144
  75. package/dist/services/dmap/dmap-service.js.map +1 -1
  76. package/dist/services/dmap/types.d.ts +17 -4
  77. package/dist/services/dmap/types.d.ts.map +1 -1
  78. package/dist/services/echo/echo-service.d.ts +38 -11
  79. package/dist/services/echo/echo-service.d.ts.map +1 -1
  80. package/dist/services/echo/echo-service.js +417 -223
  81. package/dist/services/echo/echo-service.js.map +1 -1
  82. package/dist/services/echo/types.d.ts +167 -80
  83. package/dist/services/echo/types.d.ts.map +1 -1
  84. package/dist/services/ejscreen/ejscreen-service.d.ts.map +1 -1
  85. package/dist/services/ejscreen/ejscreen-service.js +9 -3
  86. package/dist/services/ejscreen/ejscreen-service.js.map +1 -1
  87. package/package.json +7 -7
  88. 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 returned no facility record for the given Registry ID.";
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
- }], undefined>, import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
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
- }], undefined>, import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
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: "Verify the facility ID via epa_search_facilities. TRI data lags 18 months — try an earlier year.";
186
- }], undefined>, import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
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
- }], undefined>, import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
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
- }], undefined>, import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
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 returned no facility record for the given Registry ID.";
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
- }], undefined>, import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
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
- }], undefined>, import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
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: "Verify the facility ID via epa_search_facilities. TRI data lags 18 months — try an earlier year.";
521
- }], undefined>, import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
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
- }], undefined>, import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
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
- }], undefined>, import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
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").ZodNumber>;
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: "forecast_date_required";
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: "Mode is \"forecast\" but forecast_date was not provided.";
719
- readonly recovery: "Provide forecast_date as YYYY-MM-DD when using mode=\"forecast\".";
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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAStB,CAAC;AAEX;;;;GAIG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;eAAuD,CAAC"}
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;AAGjE,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAiP/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, industry program, or compliance status across all environmental programs (CAA, CWA, RCRA, TRI, SDWA). Returns facility name, EPA Registry ID, coordinates, county FIPS code, per-program registration flags, inspection counts, penalty totals, and TRI release totals. Registry IDs returned here feed epa_get_facility and epa_get_tri_releases. 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.',
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.string().optional().describe('City name. Pair with state for best results.'),
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.boolean().optional().describe('When true, return only active facilities'),
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 these environmental programs. CAA=air, CWA=water, RCRA=waste, TRI=toxic releases, SDWA=drinking water.'),
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 recent significant violations'),
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 and epa_get_tri_releases'),
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.boolean().describe('Registered under Clean Air Act (CAA)'),
77
- water: z.boolean().describe('Registered under Clean Water Act (CWA)'),
78
- rcra: z
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('Registered under Resource Conservation and Recovery Act (RCRA)'),
81
- tri: z.boolean().describe('Participates in Toxic Release Inventory (TRI)'),
82
- sdwa: z.boolean().describe('Regulated under Safe Drinking Water Act (SDWA)'),
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('Total TRI on/off-site releases and transfers in pounds (summary). Use epa_get_tri_releases for per-chemical breakdown.'),
89
- inspectionCount: z.number().optional().describe('Number of EPA inspections on record'),
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('Total assessed penalties in dollars across all programs'),
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?.length && { programs: 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
- const location = [f.street, f.city, f.state, f.zip].filter(Boolean).join(', ');
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.toLocaleString()} lbs`);
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":"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"}
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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"}