@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
@@ -4,14 +4,17 @@
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 getFacilityTool = tool('epa_get_facility', {
9
11
  title: 'Get EPA Facility Compliance Profile',
10
- description: 'Retrieve a full compliance profile for a single EPA-regulated facility by EPA Registry ID. Returns facility metadata, per-program compliance status, inspection history, formal enforcement actions, penalty totals, and TRI release summary. Use epa_search_facilities to discover Registry IDs. For area-level enforcement discovery use epa_search_violations instead.',
12
+ description: "Retrieve a full compliance profile for a single EPA-regulated facility by EPA Registry ID. Returns facility metadata, ECHO's facility-level compliance status, a per-statute (CAA, CWA, RCRA, SDWA, and others ECHO tracks) compliance summary, the newest 100 inspections and other compliance monitoring records from the last five years, five years of formal enforcement actions with penalties, the latest TRI release total, and the facility's TRI facility IDs for epa_get_tri_releases. Use epa_search_facilities to discover Registry IDs. For area-level enforcement discovery use epa_search_violations instead.",
11
13
  annotations: { readOnlyHint: true, openWorldHint: true, idempotentHint: true },
12
14
  input: z.object({
13
15
  registry_id: z
14
16
  .string()
17
+ .trim()
15
18
  .min(1)
16
19
  .describe('EPA FRS Registry ID for the facility (obtained from epa_search_facilities)'),
17
20
  }),
@@ -26,87 +29,204 @@ export const getFacilityTool = tool('epa_get_facility', {
26
29
  fipsCode: z.string().optional().describe('5-digit county FIPS code'),
27
30
  latitude: z.number().optional().describe('Latitude in decimal degrees'),
28
31
  longitude: z.number().optional().describe('Longitude in decimal degrees'),
29
- complianceStatus: z.string().optional().describe('Overall compliance status text'),
32
+ complianceStatus: z
33
+ .string()
34
+ .optional()
35
+ .describe('ECHO\'s facility-level compliance status, the same value epa_search_facilities returns (e.g. "Significant Violation"). Absent when ECHO assigns none, as for TRI-only facilities, or when ECHO\'s facility search request fails (the notice field then says so).'),
30
36
  programs: z
31
37
  .object({
32
- air: z.boolean().describe('Registered under Clean Air Act (CAA)'),
33
- water: z.boolean().describe('Registered under Clean Water Act (CWA)'),
34
- rcra: z.boolean().describe('Registered under RCRA (hazardous waste)'),
35
- tri: z.boolean().describe('Participates in Toxic Release Inventory (TRI)'),
36
- sdwa: z.boolean().describe('Regulated under Safe Drinking Water Act'),
38
+ air: z
39
+ .boolean()
40
+ .describe('Has an ICIS-Air record (Clean Air Act stationary-source compliance). Emissions-inventory, risk-management, and greenhouse-gas reporting entries alone do not count.'),
41
+ water: z.boolean().describe('Has an ICIS-NPDES record (Clean Water Act discharge permit)'),
42
+ rcra: z.boolean().describe('Has an RCRAInfo record (RCRA hazardous waste handler)'),
43
+ tri: z
44
+ .boolean()
45
+ .describe('Has a Toxics Release Inventory record — true exactly when triFacilityIds is non-empty'),
46
+ sdwa: z
47
+ .boolean()
48
+ .describe('Has an SDWIS record (Safe Drinking Water Act public water system)'),
37
49
  })
38
- .describe('Program registration flags'),
50
+ .describe("Program registration flags, from the ECHO systems in the facility's detailed report"),
51
+ triFacilityIds: z
52
+ .array(z.string())
53
+ .describe('15-character TRI facility IDs recorded for this facility, most recently reported first — pass one as facility_id to epa_get_tri_releases for per-chemical releases. A site can carry several from successive operators. Empty when the facility has no TRI record.'),
39
54
  triReleasesTransfersInLbs: z
40
55
  .number()
41
56
  .optional()
42
- .describe('Total TRI on/off-site releases and transfers in pounds'),
57
+ .describe("Total TRI on- and off-site releases and transfers in pounds for triReleasesTransfersYear, ECHO's latest TRI year for this facility. Absent when ECHO holds no TRI history for it."),
58
+ triReleasesTransfersYear: z
59
+ .number()
60
+ .optional()
61
+ .describe('TRI reporting year triReleasesTransfersInLbs covers'),
43
62
  compliance: z
44
63
  .object({
45
- mediaStatusCode: z.string().optional().describe('Compliance media status code'),
64
+ mediaStatusCode: z
65
+ .string()
66
+ .optional()
67
+ .describe('Not populated: no ECHO response this tool reads carries a media status code.'),
46
68
  mediaStatusDescription: z
47
69
  .string()
48
70
  .optional()
49
- .describe('Human-readable compliance status description'),
71
+ .describe('Not populated: no ECHO response this tool reads carries a media status description. See complianceStatus and programCompliance.'),
50
72
  quartersInViolation: z
51
73
  .number()
52
74
  .optional()
53
- .describe('Number of quarters with compliance violations in the past 3 years'),
75
+ .describe('Quarters (of the last 12) in which any program found the facility in noncompliance'),
54
76
  })
55
77
  .optional()
56
- .describe('Compliance summary from DFR. Absent when ECHO DFR compliance endpoint unavailable.'),
78
+ .describe("Facility-level noncompliance count from ECHO's facility search record. Absent when ECHO reports none or the facility search request fails."),
79
+ programCompliance: z
80
+ .array(z
81
+ .object({
82
+ statute: z
83
+ .string()
84
+ .describe('Statute ECHO summarizes, e.g. CAA, CWA, RCRA, SDWA, TSCA, EPCRA'),
85
+ currentStatus: z
86
+ .string()
87
+ .optional()
88
+ .describe('Current compliance status under this statute, e.g. "No Violation Identified"'),
89
+ quartersInNoncompliance: z
90
+ .number()
91
+ .optional()
92
+ .describe('Quarters in noncompliance over the 3-year window (of 12)'),
93
+ quartersInSignificantNoncompliance: z
94
+ .number()
95
+ .optional()
96
+ .describe('Quarters in significant noncompliance over the 3-year window (of 12)'),
97
+ inspections: z
98
+ .number()
99
+ .optional()
100
+ .describe('Inspections or full compliance evaluations over the 5-year window'),
101
+ lastInspectionDate: z
102
+ .string()
103
+ .optional()
104
+ .describe('Date of the latest inspection (MM/DD/YYYY)'),
105
+ informalActions: z
106
+ .number()
107
+ .optional()
108
+ .describe('Informal enforcement actions over the 5-year window'),
109
+ formalActions: z
110
+ .number()
111
+ .optional()
112
+ .describe('Formal enforcement actions over the 5-year window'),
113
+ totalPenaltiesInDollars: z
114
+ .number()
115
+ .optional()
116
+ .describe('Penalties from formal enforcement actions over the 5-year window, in dollars'),
117
+ threeYearPeriodStart: z
118
+ .string()
119
+ .optional()
120
+ .describe('Start of the 3-year window (MM/DD/YYYY)'),
121
+ fiveYearPeriodStart: z
122
+ .string()
123
+ .optional()
124
+ .describe('Start of the 5-year window (MM/DD/YYYY)'),
125
+ periodEnd: z.string().optional().describe('End of both windows (MM/DD/YYYY)'),
126
+ })
127
+ .describe("One statute's enforcement and compliance summary"))
128
+ .describe("ECHO's per-statute enforcement and compliance summary. Empty when the facility is in no compliance-tracked program, as for TRI-only facilities."),
57
129
  inspections: z
58
130
  .array(z
59
131
  .object({
60
- activityType: z.string().optional().describe('Inspection activity type code'),
61
- activityDate: z.string().optional().describe('Date of inspection'),
62
- description: z.string().optional().describe('Activity type description'),
132
+ category: z
133
+ .string()
134
+ .optional()
135
+ .describe('Kind of record, e.g. "Inspection/Evaluation", "Compliance Investigation", "Information Request", "Offsite Record Review"; absent for RCRA and SDWA records'),
136
+ activityType: z
137
+ .string()
138
+ .optional()
139
+ .describe('Inspection or evaluation type, e.g. "FCE On-Site", "PCE Stack Test", "Compliance Evaluation Inspection"'),
140
+ activityDate: z.string().optional().describe('Date of the record (MM/DD/YYYY)'),
141
+ description: z
142
+ .string()
143
+ .optional()
144
+ .describe('Finding ECHO records for the inspection, when it records one'),
145
+ statute: z.string().optional().describe('Statute the record was under'),
146
+ sourceId: z
147
+ .string()
148
+ .optional()
149
+ .describe('Program ID inspected, e.g. an ICIS-Air ID, NPDES permit, RCRA handler ID, or public water system ID'),
150
+ leadAgency: z.string().optional().describe('Lead agency: EPA, State, or Local'),
63
151
  })
64
- .describe('Single inspection record with activity type and date'))
65
- .describe('Inspection history records'),
152
+ .describe('Single inspection or other compliance monitoring record'))
153
+ .describe('Inspections, evaluations, investigations, and other compliance monitoring records over the 5-year window, newest first; at most 100 (inspectionsTotal gives the full count)'),
154
+ inspectionsTotal: z
155
+ .number()
156
+ .describe("Compliance monitoring records in ECHO's 5-year history for this facility; inspections lists the newest 100 when there are more"),
66
157
  formalActions: z
67
158
  .array(z
68
159
  .object({
69
- caseId: z.string().optional().describe('Enforcement case identifier'),
70
- settlementDate: z.string().optional().describe('Settlement or resolution date'),
160
+ caseId: z
161
+ .string()
162
+ .optional()
163
+ .describe('Enforcement case identifier; absent when ECHO records the action without one, as for RCRA and SDWA actions'),
164
+ settlementDate: z
165
+ .string()
166
+ .optional()
167
+ .describe('Settlement date of the enforcement case (MM/DD/YYYY)'),
71
168
  penaltyAssessedInDollars: z
72
169
  .number()
73
170
  .optional()
74
171
  .describe('Penalty amount assessed in dollars'),
75
- actionType: z.string().optional().describe('Type of formal enforcement action'),
172
+ actionType: z
173
+ .string()
174
+ .optional()
175
+ .describe('Type of formal enforcement action, e.g. "Administrative Order"'),
176
+ actionDate: z.string().optional().describe('Date of the action (MM/DD/YYYY)'),
177
+ statute: z.string().optional().describe('Statute the action was under'),
178
+ sourceId: z.string().optional().describe('Program ID the action concerns'),
179
+ leadAgency: z.string().optional().describe('Lead agency: EPA, State, or Local'),
76
180
  })
77
- .describe('Single formal enforcement action with case ID and penalty amount'))
78
- .describe('Formal enforcement actions on record'),
181
+ .describe('Single formal enforcement action'))
182
+ .describe('Formal enforcement actions over the 5-year window, newest first'),
79
183
  airCompliance: z
80
184
  .object({
81
- programId: z.string().optional().describe('CAA program identifier'),
82
- status: z.string().optional().describe('Air compliance status'),
83
- statusDate: z.string().optional().describe('Date of status determination'),
185
+ programId: z
186
+ .string()
187
+ .optional()
188
+ .describe('ICIS-Air ID when the facility has exactly one; absent when it has several'),
189
+ status: z.string().optional().describe('Current Clean Air Act compliance status'),
190
+ statusDate: z
191
+ .string()
192
+ .optional()
193
+ .describe('End of the latest quarter the status covers (MM/DD/YYYY)'),
84
194
  })
85
195
  .optional()
86
- .describe('CAA-specific compliance details. Present only when facility is registered under CAA (programs.air=true).'),
196
+ .describe('Clean Air Act status. Present only when programs.air is true and ECHO reports a CAA status.'),
87
197
  waterCompliance: z
88
198
  .object({
89
- programId: z.string().optional().describe('CWA program identifier'),
90
- status: z.string().optional().describe('Water compliance status'),
91
- permitId: z.string().optional().describe('NPDES permit ID'),
199
+ programId: z
200
+ .string()
201
+ .optional()
202
+ .describe('Not populated: the CWA program ID is the NPDES permit ID, returned as permitId.'),
203
+ status: z.string().optional().describe('Current Clean Water Act compliance status'),
204
+ permitId: z
205
+ .string()
206
+ .optional()
207
+ .describe('NPDES permit ID when the facility has exactly one; absent when it has several'),
92
208
  })
93
209
  .optional()
94
- .describe('CWA/NPDES permit and compliance details. Present only when facility is registered under CWA (programs.water=true).'),
210
+ .describe('Clean Water Act status. Present only when programs.water is true and ECHO reports a CWA status.'),
95
211
  }),
212
+ enrichment: {
213
+ notice: z
214
+ .string()
215
+ .optional()
216
+ .describe("Present when ECHO's facility search request failed, so complianceStatus and compliance are missing; every other field comes from the facility's detailed report."),
217
+ },
96
218
  errors: [
97
219
  {
98
220
  reason: 'facility_not_found',
99
221
  code: JsonRpcErrorCode.NotFound,
100
- when: 'ECHO returned no facility record for the given Registry ID.',
222
+ when: 'ECHO has no facility for the given Registry ID.',
101
223
  recovery: 'Verify the Registry ID using epa_search_facilities and retry with a valid ID.',
224
+ thrownBy: 'service',
102
225
  },
103
226
  ],
104
227
  async handler(input, ctx) {
105
228
  ctx.log.info('epa_get_facility', { registryId: input.registry_id });
106
- const profile = await getEchoService().getFacility(input.registry_id.trim(), ctx);
107
- if (!profile.registryId) {
108
- throw ctx.fail('facility_not_found', `No facility found for Registry ID "${input.registry_id}".`);
109
- }
229
+ const profile = await getEchoService().getFacility(input.registry_id, ctx);
110
230
  ctx.log.info('epa_get_facility completed', {
111
231
  registryId: profile.registryId,
112
232
  inspections: profile.inspections.length,
@@ -118,16 +238,7 @@ export const getFacilityTool = tool('epa_get_facility', {
118
238
  const lines = [];
119
239
  lines.push(`## ${result.name}`);
120
240
  lines.push(`**Registry ID:** ${result.registryId}`);
121
- const location = [result.street, result.city, result.state, result.zip]
122
- .filter(Boolean)
123
- .join(', ');
124
- if (location)
125
- lines.push(`**Location:** ${location}`);
126
- if (result.county)
127
- lines.push(`**County:** ${result.county}${result.fipsCode ? ` (FIPS: ${result.fipsCode})` : ''}`);
128
- if (result.latitude !== undefined && result.longitude !== undefined) {
129
- lines.push(`**Coordinates:** ${result.latitude}, ${result.longitude}`);
130
- }
241
+ lines.push(...formatLocationLines(result));
131
242
  if (result.complianceStatus)
132
243
  lines.push(`**Compliance Status:** ${result.complianceStatus}`);
133
244
  const activePrograms = Object.entries(result.programs)
@@ -136,8 +247,14 @@ export const getFacilityTool = tool('epa_get_facility', {
136
247
  .join(', ');
137
248
  if (activePrograms)
138
249
  lines.push(`**Programs:** ${activePrograms}`);
250
+ if (result.triFacilityIds.length > 0) {
251
+ lines.push(`**TRI Facility IDs:** ${result.triFacilityIds.join(', ')} (most recent first; for epa_get_tri_releases)`);
252
+ }
139
253
  if (result.triReleasesTransfersInLbs !== undefined) {
140
- lines.push(`**TRI Releases+Transfers:** ${result.triReleasesTransfersInLbs.toLocaleString()} lbs`);
254
+ const year = result.triReleasesTransfersYear !== undefined
255
+ ? ` (${result.triReleasesTransfersYear})`
256
+ : '';
257
+ lines.push(`**TRI Releases+Transfers${year}:** ${formatLbs(result.triReleasesTransfersInLbs)}`);
141
258
  }
142
259
  if (result.compliance) {
143
260
  lines.push('\n### Compliance Summary');
@@ -149,10 +266,41 @@ export const getFacilityTool = tool('epa_get_facility', {
149
266
  lines.push(`**Quarters in Violation (3yr):** ${result.compliance.quartersInViolation}`);
150
267
  }
151
268
  }
269
+ if (result.programCompliance.length > 0) {
270
+ lines.push('\n### Program Compliance');
271
+ for (const p of result.programCompliance) {
272
+ const parts = [
273
+ p.currentStatus,
274
+ p.quartersInNoncompliance !== undefined &&
275
+ `Quarters in noncompliance: ${p.quartersInNoncompliance} of 12`,
276
+ p.quartersInSignificantNoncompliance !== undefined &&
277
+ `in significant noncompliance: ${p.quartersInSignificantNoncompliance}`,
278
+ p.inspections !== undefined && `Inspections: ${p.inspections}`,
279
+ p.lastInspectionDate && `last ${p.lastInspectionDate}`,
280
+ p.informalActions !== undefined && `Informal actions: ${p.informalActions}`,
281
+ p.formalActions !== undefined && `Formal actions: ${p.formalActions}`,
282
+ p.totalPenaltiesInDollars !== undefined &&
283
+ `Penalties: $${p.totalPenaltiesInDollars.toLocaleString('en-US')}`,
284
+ p.threeYearPeriodStart && `3-year window from ${p.threeYearPeriodStart}`,
285
+ p.fiveYearPeriodStart && `5-year window from ${p.fiveYearPeriodStart}`,
286
+ p.periodEnd && `through ${p.periodEnd}`,
287
+ ].filter(Boolean);
288
+ lines.push(`- **${p.statute}:** ${parts.join(' | ') || 'no summary values'}`);
289
+ }
290
+ }
152
291
  if (result.inspections.length > 0) {
153
- lines.push('\n### Inspections');
292
+ const shown = result.inspectionsTotal > result.inspections.length
293
+ ? `newest ${result.inspections.length} of ${result.inspectionsTotal}`
294
+ : `${result.inspectionsTotal}`;
295
+ lines.push(`\n### Inspections (${shown})`);
154
296
  for (const insp of result.inspections) {
155
- const parts = [insp.activityDate, insp.activityType, insp.description]
297
+ const parts = [
298
+ insp.activityDate,
299
+ [insp.statute, insp.sourceId].filter(Boolean).join(' '),
300
+ [insp.category, insp.activityType].filter(Boolean).join(': '),
301
+ insp.leadAgency && `${insp.leadAgency} lead`,
302
+ insp.description,
303
+ ]
156
304
  .filter(Boolean)
157
305
  .join(' — ');
158
306
  lines.push(`- ${parts || 'Inspection record (no detail)'}`);
@@ -161,10 +309,20 @@ export const getFacilityTool = tool('epa_get_facility', {
161
309
  if (result.formalActions.length > 0) {
162
310
  lines.push('\n### Formal Enforcement Actions');
163
311
  for (const fa of result.formalActions) {
164
- const penalty = fa.penaltyAssessedInDollars !== undefined
165
- ? ` | Penalty: $${fa.penaltyAssessedInDollars.toLocaleString()}`
166
- : '';
167
- lines.push(`- ${fa.caseId ?? 'Case'}: ${fa.actionType ?? 'Action'}${penalty}${fa.settlementDate ? ` (${fa.settlementDate})` : ''}`);
312
+ const where = [fa.actionDate, [fa.statute, fa.sourceId].filter(Boolean).join(' ')]
313
+ .filter(Boolean)
314
+ .join(' — ');
315
+ const details = [
316
+ fa.actionType ?? 'Action',
317
+ fa.penaltyAssessedInDollars !== undefined &&
318
+ `Penalty: $${fa.penaltyAssessedInDollars.toLocaleString('en-US')}`,
319
+ fa.caseId && `Case ${fa.caseId}`,
320
+ fa.settlementDate && `Settled ${fa.settlementDate}`,
321
+ fa.leadAgency && `${fa.leadAgency} lead`,
322
+ ]
323
+ .filter(Boolean)
324
+ .join(' | ');
325
+ lines.push(`- ${where ? `${where} — ` : ''}${details}`);
168
326
  }
169
327
  }
170
328
  if (result.airCompliance) {
@@ -1 +1 @@
1
- {"version":3,"file":"get-facility.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/get-facility.tool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"get-facility.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/get-facility.tool.ts"],"names":[],"mappings":"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"}
@@ -13,6 +13,7 @@ export declare const getTriReleasesTool: import("@cyanheads/mcp-ts-core").ToolDe
13
13
  facilityId: z.ZodString;
14
14
  chemicalName: z.ZodString;
15
15
  reportingYear: z.ZodNumber;
16
+ reportedUnit: z.ZodOptional<z.ZodLiteral<"grams">>;
16
17
  totalReleasesInLbs: z.ZodOptional<z.ZodNumber>;
17
18
  releasesToAirInLbs: z.ZodOptional<z.ZodNumber>;
18
19
  releasesToWaterInLbs: z.ZodOptional<z.ZodNumber>;
@@ -25,6 +26,8 @@ export declare const getTriReleasesTool: import("@cyanheads/mcp-ts-core").ToolDe
25
26
  readonly reason: "no_releases_found";
26
27
  readonly code: JsonRpcErrorCode.NotFound;
27
28
  readonly when: "No TRI records found for the given facility ID and filters.";
28
- readonly recovery: "Verify the facility ID via epa_search_facilities. TRI data lags 18 months — try an earlier year.";
29
- }], undefined>;
29
+ 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.";
30
+ }], {
31
+ readonly notice: z.ZodOptional<z.ZodString>;
32
+ }>;
30
33
  //# sourceMappingURL=get-tri-releases.tool.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"get-tri-releases.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/get-tri-releases.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,kBAAkB;;;;;;;;;;;;;;;;;;;;;;cAgJ7B,CAAC"}
1
+ {"version":3,"file":"get-tri-releases.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/get-tri-releases.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAIjE,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;EAqJ7B,CAAC"}
@@ -4,16 +4,17 @@
4
4
  */
5
5
  import { tool, z } from '@cyanheads/mcp-ts-core';
6
6
  import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
7
+ import { formatTriReleaseLines } from '../format-tri-release.js';
7
8
  import { getDmapService } from '../../../services/dmap/dmap-service.js';
8
9
  export const getTriReleasesTool = tool('epa_get_tri_releases', {
9
10
  title: 'Get TRI Chemical Releases for Facility',
10
- description: 'Query Toxic Release Inventory annual chemical release data for a specific facility. Returns per-chemical release records with chemical name, total release quantity, and reporting year. TRI data lags ~18 months — the most recent available year is typically 2 years prior to the current calendar year. Obtain facility_id (TRI facility ID) from epa_search_facilities. Use epa_search_tri_releases to identify top emitters across a region.',
11
+ description: 'Query Toxic Release Inventory annual chemical release data for a specific facility. Returns per-chemical release records with chemical name, reporting year, routine on-site releases by medium (air, water, land, underground injection), and the one-time / non-routine release quantity. Quantities are in pounds; dioxin and dioxin-like compounds, which TRI has facilities report in grams, are converted and marked with reportedUnit. TRI data lags ~18 months — the most recent available year is typically 2 years prior to the current calendar year. facility_id is the 15-character TRI facility ID: take it from the facilityId field of epa_search_tri_releases, which also identifies top emitters across a region, or from the triFacilityIds of epa_get_facility for a facility you already hold a Registry ID for. A 12-digit EPA Registry ID is a different identifier and matches no TRI records.',
11
12
  annotations: { readOnlyHint: true, openWorldHint: true, idempotentHint: true },
12
13
  input: z.object({
13
14
  facility_id: z
14
15
  .string()
15
16
  .min(1)
16
- .describe('TRI facility ID (from the RegistryID field returned by epa_search_facilities)'),
17
+ .describe('15-character TRI facility ID (e.g. "9867WSNRWD1981S") — the facilityId field returned by epa_search_tri_releases, or an entry of epa_get_facility triFacilityIds. A 12-digit EPA Registry ID matches no TRI records.'),
17
18
  year: z
18
19
  .number()
19
20
  .int()
@@ -23,8 +24,9 @@ export const getTriReleasesTool = tool('epa_get_tri_releases', {
23
24
  .describe('Reporting year to retrieve. Defaults to all available years. TRI data is typically available through ~2 years prior to the current year.'),
24
25
  chemical_name: z
25
26
  .string()
27
+ .max(4094)
26
28
  .optional()
27
- .describe('Optional filter to restrict results to a specific chemical (partial match, case-insensitive)'),
29
+ .describe('Optional filter to restrict results to a specific chemical (partial match, case-insensitive). Commas, apostrophes, brackets, and Greek letters are matched as written, e.g. "4,4\'-Methylenedianiline".'),
28
30
  }),
29
31
  output: z.object({
30
32
  releases: z
@@ -33,6 +35,10 @@ export const getTriReleasesTool = tool('epa_get_tri_releases', {
33
35
  facilityId: z.string().describe('TRI facility identifier'),
34
36
  chemicalName: z.string().describe('Chemical name as reported to TRI'),
35
37
  reportingYear: z.number().describe('Year of the TRI submission'),
38
+ reportedUnit: z
39
+ .literal('grams')
40
+ .optional()
41
+ .describe('Present as "grams" when TRI had the facility report this chemical in grams (dioxin and dioxin-like compounds); its quantities here are converted to pounds (1 lb = 453.59237 g). Absent for chemicals reported in pounds.'),
36
42
  totalReleasesInLbs: z
37
43
  .number()
38
44
  .optional()
@@ -62,12 +68,18 @@ export const getTriReleasesTool = tool('epa_get_tri_releases', {
62
68
  .optional()
63
69
  .describe('Recovery hint when no releases are found — suggests alternative years or checking the facility ID. Absent when releases are returned.'),
64
70
  }),
71
+ enrichment: {
72
+ notice: z
73
+ .string()
74
+ .optional()
75
+ .describe('Present when a punctuated chemical_name filter read its page limit before finding every filing spelled as given, so more matching records may exist.'),
76
+ },
65
77
  errors: [
66
78
  {
67
79
  reason: 'no_releases_found',
68
80
  code: JsonRpcErrorCode.NotFound,
69
81
  when: 'No TRI records found for the given facility ID and filters.',
70
- recovery: 'Verify the facility ID via epa_search_facilities. TRI data lags 18 months — try an earlier year.',
82
+ 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.',
71
83
  },
72
84
  ],
73
85
  async handler(input, ctx) {
@@ -85,7 +97,7 @@ export const getTriReleasesTool = tool('epa_get_tri_releases', {
85
97
  return {
86
98
  releases: [],
87
99
  facilityId: input.facility_id,
88
- message: `No TRI releases found for facility "${input.facility_id}"${yearNote}${chemNote}. TRI data lags ~18 months — try year ${new Date().getFullYear() - 2} or earlier. Verify the facility ID with epa_search_facilities.`,
100
+ message: `No TRI releases found for facility "${input.facility_id}"${yearNote}${chemNote}. TRI data lags ~18 months — try year ${new Date().getFullYear() - 2} or earlier. Verify the facility ID with epa_search_tri_releases — facility_id is its 15-character facilityId, not a 12-digit EPA Registry ID; epa_get_facility returns a Registry ID's TRI IDs as triFacilityIds.`,
89
101
  };
90
102
  }
91
103
  return { releases, facilityId: input.facility_id };
@@ -99,16 +111,7 @@ export const getTriReleasesTool = tool('epa_get_tri_releases', {
99
111
  for (const r of result.releases) {
100
112
  lines.push(`\n### ${r.chemicalName} (${r.reportingYear})`);
101
113
  lines.push(`**Facility ID:** ${r.facilityId}`);
102
- if (r.releasesToAirInLbs !== undefined)
103
- lines.push(`**Air Releases:** ${r.releasesToAirInLbs.toLocaleString()} lbs`);
104
- if (r.releasesToWaterInLbs !== undefined)
105
- lines.push(`**Water Releases:** ${r.releasesToWaterInLbs.toLocaleString()} lbs`);
106
- if (r.releasesToLandInLbs !== undefined)
107
- lines.push(`**Land Releases:** ${r.releasesToLandInLbs.toLocaleString()} lbs`);
108
- if (r.releasesToUndergroundInjectionInLbs !== undefined)
109
- lines.push(`**Underground Injection:** ${r.releasesToUndergroundInjectionInLbs.toLocaleString()} lbs`);
110
- if (r.totalReleasesInLbs !== undefined)
111
- lines.push(`**One-Time / Non-Routine Release:** ${r.totalReleasesInLbs.toLocaleString()} lbs`);
114
+ lines.push(...formatTriReleaseLines(r));
112
115
  }
113
116
  return [{ type: 'text', text: lines.join('\n') }];
114
117
  },
@@ -1 +1 @@
1
- {"version":3,"file":"get-tri-releases.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/get-tri-releases.tool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"get-tri-releases.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/get-tri-releases.tool.ts"],"names":[],"mappings":"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"}