@cyanheads/epa-mcp-server 0.4.0 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +5 -5
- package/CLAUDE.md +5 -5
- package/Dockerfile +3 -3
- package/README.md +24 -19
- package/changelog/0.4.x/0.4.1.md +34 -0
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/mcp-server/resources/definitions/facility.resource.d.ts +8 -1
- package/dist/mcp-server/resources/definitions/facility.resource.d.ts.map +1 -1
- package/dist/mcp-server/resources/definitions/facility.resource.js +13 -7
- package/dist/mcp-server/resources/definitions/facility.resource.js.map +1 -1
- package/dist/mcp-server/resources/definitions/index.d.ts +7 -1
- package/dist/mcp-server/resources/definitions/index.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/get-facility.tool.d.ts +30 -2
- package/dist/mcp-server/tools/definitions/get-facility.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/get-facility.tool.js +208 -43
- package/dist/mcp-server/tools/definitions/get-facility.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/get-tri-releases.tool.d.ts +4 -2
- package/dist/mcp-server/tools/definitions/get-tri-releases.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/get-tri-releases.tool.js +12 -5
- package/dist/mcp-server/tools/definitions/get-tri-releases.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/index.d.ts +116 -16
- package/dist/mcp-server/tools/definitions/index.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/search-facilities.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/search-facilities.tool.js +34 -16
- package/dist/mcp-server/tools/definitions/search-facilities.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/search-superfund.tool.d.ts +3 -1
- package/dist/mcp-server/tools/definitions/search-superfund.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/search-superfund.tool.js +11 -1
- package/dist/mcp-server/tools/definitions/search-superfund.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/search-tri-releases.tool.d.ts +7 -0
- package/dist/mcp-server/tools/definitions/search-tri-releases.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/search-tri-releases.tool.js +21 -9
- package/dist/mcp-server/tools/definitions/search-tri-releases.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/search-violations.tool.d.ts +20 -3
- package/dist/mcp-server/tools/definitions/search-violations.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/search-violations.tool.js +84 -15
- package/dist/mcp-server/tools/definitions/search-violations.tool.js.map +1 -1
- package/dist/services/airnow/airnow-service.d.ts.map +1 -1
- package/dist/services/airnow/airnow-service.js +9 -3
- package/dist/services/airnow/airnow-service.js.map +1 -1
- package/dist/services/call-budget.d.ts +22 -0
- package/dist/services/call-budget.d.ts.map +1 -0
- package/dist/services/call-budget.js +28 -0
- package/dist/services/call-budget.js.map +1 -0
- package/dist/services/dmap/dmap-service.d.ts +43 -13
- package/dist/services/dmap/dmap-service.d.ts.map +1 -1
- package/dist/services/dmap/dmap-service.js +270 -68
- package/dist/services/dmap/dmap-service.js.map +1 -1
- package/dist/services/echo/echo-service.d.ts +38 -11
- package/dist/services/echo/echo-service.d.ts.map +1 -1
- package/dist/services/echo/echo-service.js +417 -223
- package/dist/services/echo/echo-service.js.map +1 -1
- package/dist/services/echo/types.d.ts +167 -80
- package/dist/services/echo/types.d.ts.map +1 -1
- package/dist/services/ejscreen/ejscreen-service.d.ts.map +1 -1
- package/dist/services/ejscreen/ejscreen-service.js +9 -3
- package/dist/services/ejscreen/ejscreen-service.js.map +1 -1
- package/package.json +6 -6
- package/server.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search-tri-releases.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/search-tri-releases.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,qBAAqB,EAAE,MAAM,0CAA0C,CAAC;AACjF,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAEjE,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,CAAC,yBAAyB,EAAE;IACnE,KAAK,EAAE,+BAA+B;IACtC,WAAW,EACT,
|
|
1
|
+
{"version":3,"file":"search-tri-releases.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/search-tri-releases.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,8 +21,8 @@ export declare const searchViolationsTool: import("@cyanheads/mcp-ts-core").Tool
|
|
|
21
21
|
civil: "civil";
|
|
22
22
|
criminal: "criminal";
|
|
23
23
|
}>>;
|
|
24
|
-
date_filed_start: z.ZodOptional<z.ZodString
|
|
25
|
-
date_filed_end: z.ZodOptional<z.ZodString
|
|
24
|
+
date_filed_start: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodString]>>;
|
|
25
|
+
date_filed_end: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodString]>>;
|
|
26
26
|
limit: z.ZodDefault<z.ZodNumber>;
|
|
27
27
|
}, z.core.$strip>, z.ZodObject<{
|
|
28
28
|
cases: z.ZodArray<z.ZodObject<{
|
|
@@ -44,5 +44,22 @@ export declare const searchViolationsTool: import("@cyanheads/mcp-ts-core").Tool
|
|
|
44
44
|
readonly code: JsonRpcErrorCode.ValidationError;
|
|
45
45
|
readonly when: "Neither state nor zip_code was provided.";
|
|
46
46
|
readonly recovery: "Provide at least one of state or zip_code to scope the enforcement case search.";
|
|
47
|
-
}
|
|
47
|
+
}, {
|
|
48
|
+
readonly reason: "invalid_date";
|
|
49
|
+
readonly code: JsonRpcErrorCode.ValidationError;
|
|
50
|
+
readonly when: "date_filed_start or date_filed_end is not a real calendar date, such as 2024-02-30.";
|
|
51
|
+
readonly recovery: "Pass a real calendar date in YYYY-MM-DD form, such as 2024-02-29.";
|
|
52
|
+
}, {
|
|
53
|
+
readonly reason: "date_range_inverted";
|
|
54
|
+
readonly code: JsonRpcErrorCode.ValidationError;
|
|
55
|
+
readonly when: "date_filed_start is later than date_filed_end.";
|
|
56
|
+
readonly recovery: "Swap the two dates so date_filed_start is on or before date_filed_end.";
|
|
57
|
+
}, {
|
|
58
|
+
readonly reason: "criminal_date_filter";
|
|
59
|
+
readonly code: JsonRpcErrorCode.ValidationError;
|
|
60
|
+
readonly when: "case_type \"criminal\" was combined with a filing-date bound, which ECHO records for civil cases only.";
|
|
61
|
+
readonly recovery: "Drop date_filed_start and date_filed_end to search criminal cases, or set case_type to civil.";
|
|
62
|
+
}], {
|
|
63
|
+
readonly notice: z.ZodOptional<z.ZodString>;
|
|
64
|
+
}>;
|
|
48
65
|
//# sourceMappingURL=search-violations.tool.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search-violations.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/search-violations.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-violations.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/search-violations.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAsBjE,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyP/B,CAAC"}
|
|
@@ -5,32 +5,47 @@
|
|
|
5
5
|
import { tool, z } from '@cyanheads/mcp-ts-core';
|
|
6
6
|
import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
|
|
7
7
|
import { getEchoService } from '../../../services/echo/echo-service.js';
|
|
8
|
+
/**
|
|
9
|
+
* A YYYY-MM-DD date, or a blank string for none; surrounding whitespace is trimmed. Calendar
|
|
10
|
+
* validity is checked in the handler.
|
|
11
|
+
*/
|
|
12
|
+
const filingDate = z.union([
|
|
13
|
+
z.string().trim().length(0).describe('No bound'),
|
|
14
|
+
z
|
|
15
|
+
.string()
|
|
16
|
+
.trim()
|
|
17
|
+
.regex(/^\d{4}-\d{2}-\d{2}$/, 'Use the YYYY-MM-DD form, e.g. 2024-01-31.')
|
|
18
|
+
.describe('Date in YYYY-MM-DD form'),
|
|
19
|
+
]);
|
|
20
|
+
/** True when a YYYY-MM-DD string names a real calendar day (rejects 2024-02-30). */
|
|
21
|
+
const isCalendarDate = (iso) => {
|
|
22
|
+
const parsed = new Date(`${iso}T00:00:00Z`);
|
|
23
|
+
return !Number.isNaN(parsed.getTime()) && parsed.toISOString().startsWith(iso);
|
|
24
|
+
};
|
|
8
25
|
export const searchViolationsTool = tool('epa_search_violations', {
|
|
9
26
|
title: 'Search EPA Enforcement Cases',
|
|
10
|
-
description: "Search EPA civil and criminal enforcement cases by state, regulatory program, or date range. Returns case identifier,
|
|
27
|
+
description: "Search EPA civil and criminal enforcement cases by state, ZIP code, regulatory program, case type, or filing-date range. Returns case identifier, programs involved, penalty assessed, settlement and filing dates, and case type. Designed for area-level violation discovery — for a single known facility's enforcement history use epa_get_facility instead. At least one of state or zip_code is required.",
|
|
11
28
|
annotations: { readOnlyHint: true, openWorldHint: true, idempotentHint: true },
|
|
12
29
|
input: z.object({
|
|
13
30
|
state: z
|
|
14
31
|
.string()
|
|
15
32
|
.optional()
|
|
16
33
|
.describe('2-letter US state abbreviation to filter cases (e.g. "TX", "CA")'),
|
|
17
|
-
zip_code: z.string().optional().describe(
|
|
34
|
+
zip_code: z.string().optional().describe("5-digit ZIP code of the case's facility location"),
|
|
18
35
|
program: z
|
|
19
36
|
.enum(['CAA', 'CWA', 'RCRA', 'SDWA', 'CERCLA', 'FIFRA', 'TSCA'])
|
|
20
37
|
.optional()
|
|
21
|
-
.describe(
|
|
38
|
+
.describe("Filter by regulatory program: CAA=Clean Air Act, CWA=Clean Water Act, RCRA=hazardous waste, SDWA=drinking water, CERCLA=Superfund, FIFRA=pesticides, TSCA=toxic substances. Matches any law a case cites, so a returned case's programsViolated (its primary law) can differ."),
|
|
22
39
|
case_type: z
|
|
23
40
|
.enum(['civil', 'criminal', 'all'])
|
|
24
41
|
.default('all')
|
|
25
|
-
.describe('Filter by case type: civil (regulatory violations), criminal (willful violations), or all'),
|
|
26
|
-
date_filed_start:
|
|
27
|
-
.string()
|
|
42
|
+
.describe('Filter by case type: civil (regulatory violations), criminal (willful violations), or all. A filing-date range covers civil cases only: with a date, all returns civil cases and criminal is rejected.'),
|
|
43
|
+
date_filed_start: filingDate
|
|
28
44
|
.optional()
|
|
29
|
-
.describe('
|
|
30
|
-
date_filed_end:
|
|
31
|
-
.string()
|
|
45
|
+
.describe('Earliest filing date, inclusive (YYYY-MM-DD). Civil cases only. Omit, or pass "", for no lower bound.'),
|
|
46
|
+
date_filed_end: filingDate
|
|
32
47
|
.optional()
|
|
33
|
-
.describe('
|
|
48
|
+
.describe('Latest filing date, inclusive (YYYY-MM-DD). Civil cases only. Omit, or pass "", for no upper bound.'),
|
|
34
49
|
limit: z
|
|
35
50
|
.number()
|
|
36
51
|
.int()
|
|
@@ -63,13 +78,19 @@ export const searchViolationsTool = tool('epa_search_violations', {
|
|
|
63
78
|
caseType: z
|
|
64
79
|
.string()
|
|
65
80
|
.optional()
|
|
66
|
-
.describe('Case category (e.g. "Judicial", "Administrative")'),
|
|
81
|
+
.describe('Case category (e.g. "Judicial", "Administrative - Formal")'),
|
|
67
82
|
penaltyAssessedInDollars: z
|
|
68
83
|
.number()
|
|
69
84
|
.optional()
|
|
70
85
|
.describe('Federal penalty assessed in dollars (parsed from ECHO dollar string)'),
|
|
71
|
-
settlementDate: z
|
|
72
|
-
|
|
86
|
+
settlementDate: z
|
|
87
|
+
.string()
|
|
88
|
+
.optional()
|
|
89
|
+
.describe('Settlement or resolution date (MM/DD/YYYY)'),
|
|
90
|
+
filedDate: z
|
|
91
|
+
.string()
|
|
92
|
+
.optional()
|
|
93
|
+
.describe('Date the enforcement case was filed (MM/DD/YYYY) — the date the filing-date range bounds'),
|
|
73
94
|
state: z
|
|
74
95
|
.string()
|
|
75
96
|
.optional()
|
|
@@ -83,6 +104,12 @@ export const searchViolationsTool = tool('epa_search_violations', {
|
|
|
83
104
|
.optional()
|
|
84
105
|
.describe('Recovery hint when no cases are found — echoes filters and suggests broadening. Absent when cases are returned.'),
|
|
85
106
|
}),
|
|
107
|
+
enrichment: {
|
|
108
|
+
notice: z
|
|
109
|
+
.string()
|
|
110
|
+
.optional()
|
|
111
|
+
.describe('Present when a filing-date range with case_type "all" left criminal cases out of the results.'),
|
|
112
|
+
},
|
|
86
113
|
errors: [
|
|
87
114
|
{
|
|
88
115
|
reason: 'no_geographic_filter',
|
|
@@ -90,20 +117,55 @@ export const searchViolationsTool = tool('epa_search_violations', {
|
|
|
90
117
|
when: 'Neither state nor zip_code was provided.',
|
|
91
118
|
recovery: 'Provide at least one of state or zip_code to scope the enforcement case search.',
|
|
92
119
|
},
|
|
120
|
+
{
|
|
121
|
+
reason: 'invalid_date',
|
|
122
|
+
code: JsonRpcErrorCode.ValidationError,
|
|
123
|
+
when: 'date_filed_start or date_filed_end is not a real calendar date, such as 2024-02-30.',
|
|
124
|
+
recovery: 'Pass a real calendar date in YYYY-MM-DD form, such as 2024-02-29.',
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
reason: 'date_range_inverted',
|
|
128
|
+
code: JsonRpcErrorCode.ValidationError,
|
|
129
|
+
when: 'date_filed_start is later than date_filed_end.',
|
|
130
|
+
recovery: 'Swap the two dates so date_filed_start is on or before date_filed_end.',
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
reason: 'criminal_date_filter',
|
|
134
|
+
code: JsonRpcErrorCode.ValidationError,
|
|
135
|
+
when: 'case_type "criminal" was combined with a filing-date bound, which ECHO records for civil cases only.',
|
|
136
|
+
recovery: 'Drop date_filed_start and date_filed_end to search criminal cases, or set case_type to civil.',
|
|
137
|
+
},
|
|
93
138
|
],
|
|
94
139
|
async handler(input, ctx) {
|
|
95
140
|
if (!input.state?.trim() && !input.zip_code?.trim()) {
|
|
96
141
|
throw ctx.fail('no_geographic_filter', 'At least one of state or zip_code is required to search enforcement cases.');
|
|
97
142
|
}
|
|
143
|
+
const dateFiledStart = input.date_filed_start || undefined;
|
|
144
|
+
const dateFiledEnd = input.date_filed_end || undefined;
|
|
145
|
+
for (const [field, value] of [
|
|
146
|
+
['date_filed_start', dateFiledStart],
|
|
147
|
+
['date_filed_end', dateFiledEnd],
|
|
148
|
+
]) {
|
|
149
|
+
if (value !== undefined && !isCalendarDate(value)) {
|
|
150
|
+
throw ctx.fail('invalid_date', `${field} "${value}" is not a calendar date.`, { field });
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
if (dateFiledStart && dateFiledEnd && dateFiledStart > dateFiledEnd) {
|
|
154
|
+
throw ctx.fail('date_range_inverted', `date_filed_start ${dateFiledStart} is after date_filed_end ${dateFiledEnd}.`);
|
|
155
|
+
}
|
|
156
|
+
const dated = dateFiledStart !== undefined || dateFiledEnd !== undefined;
|
|
157
|
+
if (dated && input.case_type === 'criminal') {
|
|
158
|
+
throw ctx.fail('criminal_date_filter', 'ECHO records filing dates for civil cases only, so a filing-date range cannot select criminal cases.');
|
|
159
|
+
}
|
|
98
160
|
ctx.log.info('epa_search_violations', {
|
|
99
161
|
state: input.state,
|
|
100
162
|
program: input.program,
|
|
101
163
|
caseType: input.case_type,
|
|
164
|
+
dateFiledStart,
|
|
165
|
+
dateFiledEnd,
|
|
102
166
|
});
|
|
103
167
|
const state = input.state?.trim();
|
|
104
168
|
const zipCode = input.zip_code?.trim();
|
|
105
|
-
const dateFiledStart = input.date_filed_start?.trim();
|
|
106
|
-
const dateFiledEnd = input.date_filed_end?.trim();
|
|
107
169
|
const { cases, totalCount } = await getEchoService().searchViolations({
|
|
108
170
|
...(state && { state }),
|
|
109
171
|
...(zipCode && { zipCode }),
|
|
@@ -114,6 +176,9 @@ export const searchViolationsTool = tool('epa_search_violations', {
|
|
|
114
176
|
limit: input.limit,
|
|
115
177
|
}, ctx);
|
|
116
178
|
ctx.log.info('epa_search_violations completed', { count: cases.length, totalCount });
|
|
179
|
+
if (dated && input.case_type === 'all') {
|
|
180
|
+
ctx.enrich.notice('Criminal cases are excluded: ECHO records filing dates for civil cases only, so a filing-date range returns civil cases. Search case_type "criminal" without dates for criminal cases.');
|
|
181
|
+
}
|
|
117
182
|
if (cases.length === 0) {
|
|
118
183
|
const parts = [];
|
|
119
184
|
if (input.state)
|
|
@@ -124,6 +189,10 @@ export const searchViolationsTool = tool('epa_search_violations', {
|
|
|
124
189
|
parts.push(`program="${input.program}"`);
|
|
125
190
|
if (input.case_type && input.case_type !== 'all')
|
|
126
191
|
parts.push(`case_type="${input.case_type}"`);
|
|
192
|
+
if (dateFiledStart)
|
|
193
|
+
parts.push(`date_filed_start="${dateFiledStart}"`);
|
|
194
|
+
if (dateFiledEnd)
|
|
195
|
+
parts.push(`date_filed_end="${dateFiledEnd}"`);
|
|
127
196
|
return {
|
|
128
197
|
cases: [],
|
|
129
198
|
totalCount: 0,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search-violations.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/search-violations.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,8BAA8B;IACrC,WAAW,EACT,
|
|
1
|
+
{"version":3,"file":"search-violations.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/search-violations.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"airnow-service.d.ts","sourceRoot":"","sources":["../../../src/services/airnow/airnow-service.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAM/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAGrE,OAAO,KAAK,EACV,cAAc,EAEd,gBAAgB,EAGjB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"airnow-service.d.ts","sourceRoot":"","sources":["../../../src/services/airnow/airnow-service.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAM/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAGrE,OAAO,KAAK,EACV,cAAc,EAEd,gBAAgB,EAGjB,MAAM,YAAY,CAAC;AA+HpB,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAEhC,YAAY,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc,EAWvD;IAED,wGAAwG;IAClG,UAAU,CAAC,QAAQ,EAAE,cAAc,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAKlF;IAED,mEAAmE;IAC7D,WAAW,CAAC,QAAQ,EAAE,cAAc,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAKnF;IAED,OAAO,CAAC,QAAQ;IAUhB,OAAO,CAAC,QAAQ;YAUF,SAAS;CA6DxB;AAMD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI,CAElF;AAED,wBAAgB,gBAAgB,IAAI,aAAa,CAKhD"}
|
|
@@ -9,6 +9,11 @@ import { serializationError, serviceUnavailable, validationError, } from '@cyanh
|
|
|
9
9
|
import { httpErrorFromResponse, withRetry } from '@cyanheads/mcp-ts-core/utils';
|
|
10
10
|
import { getServerConfig } from '../../config/server-config.js';
|
|
11
11
|
const CACHE_TTL_MS = 60 * 60 * 1000; // 1 hour
|
|
12
|
+
/**
|
|
13
|
+
* Budget for one AirNow lookup — every attempt and backoff — kept under the 60 s default request
|
|
14
|
+
* timeout of MCP SDK clients with room for transport.
|
|
15
|
+
*/
|
|
16
|
+
const REQUEST_DEADLINE_MS = 55_000;
|
|
12
17
|
/** The six AirNow AQI descriptors (lowercased) and their category numbers. */
|
|
13
18
|
const AQI_CATEGORY_NUMBERS = new Map([
|
|
14
19
|
['good', 1],
|
|
@@ -176,8 +181,8 @@ export class AirNowService {
|
|
|
176
181
|
const path = service === 'observation' ? 'observation/current/ziplatlong/' : 'forecast/current/';
|
|
177
182
|
const url = this.buildUrl(path, params);
|
|
178
183
|
ctx.log.debug('AirNow request', { service, ...params });
|
|
179
|
-
const body = await withRetry(async () => {
|
|
180
|
-
const response = await fetch(url, { signal
|
|
184
|
+
const body = await withRetry(async ({ signal }) => {
|
|
185
|
+
const response = await fetch(url, { signal });
|
|
181
186
|
// A ZIP is the only caller-supplied input on a ZIP request, so a 400 rejects it.
|
|
182
187
|
if (response.status === 400 && location.kind === 'zip') {
|
|
183
188
|
const upstream = await response.text();
|
|
@@ -199,9 +204,10 @@ export class AirNowService {
|
|
|
199
204
|
}
|
|
200
205
|
return parseBody(text);
|
|
201
206
|
}, {
|
|
202
|
-
operation: '
|
|
207
|
+
operation: 'AirNow request',
|
|
203
208
|
baseDelayMs: 2000,
|
|
204
209
|
signal: ctx.signal,
|
|
210
|
+
deadlineMs: REQUEST_DEADLINE_MS,
|
|
205
211
|
});
|
|
206
212
|
await ctx.state.set(cacheKey, { body, expiresAt: Date.now() + CACHE_TTL_MS });
|
|
207
213
|
return body;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"airnow-service.js","sourceRoot":"","sources":["../../../src/services/airnow/airnow-service.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"airnow-service.js","sourceRoot":"","sources":["../../../src/services/airnow/airnow-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview One wall-clock budget for a service call that chains upstream requests, shared by
|
|
3
|
+
* every request, retry, and backoff the call makes.
|
|
4
|
+
* @module services/call-budget
|
|
5
|
+
*/
|
|
6
|
+
/** The budget a service call threads through each of its requests. */
|
|
7
|
+
export type CallBudget = {
|
|
8
|
+
/** What is left of the budget, for a request's `withRetry` `deadlineMs`. */
|
|
9
|
+
remainingMs: () => number;
|
|
10
|
+
/**
|
|
11
|
+
* Restates an expired budget as one Timeout naming the call and how to narrow it; any other
|
|
12
|
+
* error, caller cancellation included, passes through unchanged.
|
|
13
|
+
*/
|
|
14
|
+
rethrow: (error: unknown) => never;
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Start a `deadlineMs` budget for one call to `upstream`. An expiry reads
|
|
18
|
+
* "`{upstream}` did not finish the `{task}` within N seconds. `{narrow}`", since the framework's
|
|
19
|
+
* own message reports only the expiring request's remaining milliseconds.
|
|
20
|
+
*/
|
|
21
|
+
export declare function callBudget(upstream: string, task: string, deadlineMs: number, narrow: string): CallBudget;
|
|
22
|
+
//# sourceMappingURL=call-budget.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"call-budget.d.ts","sourceRoot":"","sources":["../../src/services/call-budget.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,sEAAsE;AACtE,MAAM,MAAM,UAAU,GAAG;IACvB,4EAA4E;IAC5E,WAAW,EAAE,MAAM,MAAM,CAAC;IAC1B;;;OAGG;IACH,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,KAAK,CAAC;CACpC,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,UAAU,CACxB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,GACb,UAAU,CAmBZ"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview One wall-clock budget for a service call that chains upstream requests, shared by
|
|
3
|
+
* every request, retry, and backoff the call makes.
|
|
4
|
+
* @module services/call-budget
|
|
5
|
+
*/
|
|
6
|
+
import { McpError, timeout } from '@cyanheads/mcp-ts-core/errors';
|
|
7
|
+
/**
|
|
8
|
+
* Start a `deadlineMs` budget for one call to `upstream`. An expiry reads
|
|
9
|
+
* "`{upstream}` did not finish the `{task}` within N seconds. `{narrow}`", since the framework's
|
|
10
|
+
* own message reports only the expiring request's remaining milliseconds.
|
|
11
|
+
*/
|
|
12
|
+
export function callBudget(upstream, task, deadlineMs, narrow) {
|
|
13
|
+
const startedAt = Date.now();
|
|
14
|
+
return {
|
|
15
|
+
remainingMs: () => Math.max(0, deadlineMs - (Date.now() - startedAt)),
|
|
16
|
+
rethrow: (error) => {
|
|
17
|
+
if (error instanceof McpError && error.data?.reason === 'retry_deadline_exceeded') {
|
|
18
|
+
throw timeout(`${upstream} did not finish the ${task} within ${deadlineMs / 1000} seconds. ${narrow}`, {
|
|
19
|
+
reason: 'retry_deadline_exceeded',
|
|
20
|
+
deadlineMs,
|
|
21
|
+
elapsedMs: Date.now() - startedAt,
|
|
22
|
+
}, { cause: error });
|
|
23
|
+
}
|
|
24
|
+
throw error;
|
|
25
|
+
},
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=call-budget.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"call-budget.js","sourceRoot":"","sources":["../../src/services/call-budget.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAalE;;;;GAIG;AACH,MAAM,UAAU,UAAU,CACxB,QAAgB,EAChB,IAAY,EACZ,UAAkB,EAClB,MAAc;IAEd,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,OAAO;QACL,WAAW,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,CAAC;QACrE,OAAO,EAAE,CAAC,KAAc,EAAS,EAAE;YACjC,IAAI,KAAK,YAAY,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,MAAM,KAAK,yBAAyB,EAAE,CAAC;gBAClF,MAAM,OAAO,CACX,GAAG,QAAQ,uBAAuB,IAAI,WAAW,UAAU,GAAG,IAAI,aAAa,MAAM,EAAE,EACvF;oBACE,MAAM,EAAE,yBAAyB;oBACjC,UAAU;oBACV,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;iBAClC,EACD,EAAE,KAAK,EAAE,KAAK,EAAE,CACjB,CAAC;YACJ,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -11,8 +11,8 @@ export declare class DmapService {
|
|
|
11
11
|
private readonly baseUrl;
|
|
12
12
|
constructor(_config: AppConfig, _storage: StorageService);
|
|
13
13
|
/**
|
|
14
|
-
* Build a DMAP REST URL for a multi-filter query.
|
|
15
|
-
* Format: {base}/{schema}.{table}/{col1}/{op1}/{val1}/and/{col2}/{op2}/{val2}/{first}:{last}
|
|
14
|
+
* Build a DMAP REST JSON URL for a multi-filter query.
|
|
15
|
+
* Format: {base}/{schema}.{table}/{col1}/{op1}/{val1}/and/{col2}/{op2}/{val2}/{first}:{last}/json
|
|
16
16
|
* Rows are 1-based and inclusive: `1:50` is 50 rows. DMAP reads a `first` of 0 as row 1, so
|
|
17
17
|
* `0:49` would return only 49.
|
|
18
18
|
*
|
|
@@ -20,10 +20,34 @@ export declare class DmapService {
|
|
|
20
20
|
* `/join/{schema}.{table}/{leftColumn}/equals/{rightColumn}/and/{filter}…`. Filters before the
|
|
21
21
|
* join bind to the first table only (DMAP rejects a column the first table lacks); filters
|
|
22
22
|
* after the join comparison bind to the joined table. The range then counts joined rows.
|
|
23
|
+
*
|
|
24
|
+
* With `sort`, `/sort/{column}:{asc|desc},…` follows the filters and join, before the range.
|
|
25
|
+
*
|
|
26
|
+
* An `equals` or `in` value goes through exactFilter, so one carrying a character DMAP cannot
|
|
27
|
+
* match throws a ValidationError naming it; `contains` values arrive already rewritten by
|
|
28
|
+
* containsFilter.
|
|
23
29
|
*/
|
|
24
30
|
private buildTableUrl;
|
|
25
|
-
/**
|
|
31
|
+
/**
|
|
32
|
+
* Fetch a DMAP table result as JSON array. Every attempt and backoff ends within `budget`
|
|
33
|
+
* (shared by every request of one service call); expiry rejects with the budget's Timeout.
|
|
34
|
+
*
|
|
35
|
+
* A request line DMAP would count past DMAP_REQUEST_LINE_LIMIT is never sent: batched `in`
|
|
36
|
+
* lists are chunked to fit, so only caller-supplied filter text can push one over, and it fails
|
|
37
|
+
* as a ValidationError. DMAP answers HTTP 400 only from its front end, for a request it cannot
|
|
38
|
+
* parse, never for a filter value — those are HTTP 500. A 400 that still arrives is a request
|
|
39
|
+
* this server built wrong, not the caller's input, and maps to InternalError rather than the
|
|
40
|
+
* default InvalidParams.
|
|
41
|
+
*/
|
|
26
42
|
private fetchTable;
|
|
43
|
+
/**
|
|
44
|
+
* Fetch up to `wanted` rows. Without a wildcarded filter (containsFilter) that is one request
|
|
45
|
+
* ranged `1:wanted`. With one, DMAP's rows can include near-variants that match only through the
|
|
46
|
+
* wildcard, so pages of at least EXACT_TEXT_PAGE_ROWS are read and narrowed to rows containing
|
|
47
|
+
* the text as given, until `wanted` are found, DMAP runs out, or EXACT_TEXT_MAX_PAGES are read.
|
|
48
|
+
* A walk the page limit ends short of `wanted` carries a notice that more matches may exist.
|
|
49
|
+
*/
|
|
50
|
+
private fetchMatchingRows;
|
|
27
51
|
/** Get TRI releases for a specific facility. */
|
|
28
52
|
getTriReleases(params: {
|
|
29
53
|
facilityId: string;
|
|
@@ -31,16 +55,20 @@ export declare class DmapService {
|
|
|
31
55
|
chemicalName?: string;
|
|
32
56
|
}, ctx: Context): Promise<TriRelease[]>;
|
|
33
57
|
/**
|
|
34
|
-
* Add each release's per-medium routine breakdown (tri.tri_release_qty, joined on doc_ctrl_num)
|
|
35
|
-
*
|
|
58
|
+
* Add each release's per-medium routine breakdown (tri.tri_release_qty, joined on doc_ctrl_num).
|
|
59
|
+
* `releases[i]` is the normalized form of `rows[i]`.
|
|
36
60
|
*/
|
|
37
61
|
private withReleaseBreakdown;
|
|
38
62
|
/**
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
63
|
+
* Fetch the per-medium routine releases (tri.tri_release_qty) for a set of TRI submissions and
|
|
64
|
+
* roll them up into air/water/land/underground-injection sums keyed by doc_ctrl_num.
|
|
65
|
+
* getTriReleases does this on every call; searchTriReleases only when includeReleaseBreakdown
|
|
66
|
+
* is set — an uncached tri_release_qty request takes ~18 s upstream.
|
|
67
|
+
*
|
|
68
|
+
* The submissions travel as one `doc_ctrl_num in` list per request, split so each request line
|
|
69
|
+
* stays within IN_LIST_REQUEST_LINE_BUDGET (about 230 thirteen-digit numbers per request). The
|
|
70
|
+
* chunks run BREAKDOWN_CONCURRENCY at a time against the call's deadline, and their rows merge
|
|
71
|
+
* into one rollup; the lists are disjoint, so no row is counted twice.
|
|
44
72
|
*
|
|
45
73
|
* Sparsity is preserved: a row flagged release_na="1" (medium not applicable) or carrying only
|
|
46
74
|
* a release_range_code (no hard total_release) contributes nothing — a null quantity is never
|
|
@@ -51,9 +79,11 @@ export declare class DmapService {
|
|
|
51
79
|
* Search TRI releases by state, optionally filtered by county, year, or chemical.
|
|
52
80
|
* tri.tri_reporting_form carries no state, so one request joins it to tri.tri_facility: the
|
|
53
81
|
* state and county filters bind to the facility table, the year and chemical filters to the
|
|
54
|
-
* forms, and the row range caps the joined rows at `limit`.
|
|
55
|
-
*
|
|
56
|
-
*
|
|
82
|
+
* forms, and the row range caps the joined rows at `limit`. Without `year` the joined rows are
|
|
83
|
+
* sorted newest reporting year first, so `limit` keeps the most recent filings; with `year` the
|
|
84
|
+
* request is unsorted (table order already pages deterministically). However sparse the
|
|
85
|
+
* filters, the search is one request; with includeReleaseBreakdown, fetchReleaseBreakdown adds
|
|
86
|
+
* the per-medium routine releases to every kept record (one request at the 200-record cap).
|
|
57
87
|
*/
|
|
58
88
|
searchTriReleases(params: {
|
|
59
89
|
state: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dmap-service.d.ts","sourceRoot":"","sources":["../../../src/services/dmap/dmap-service.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"dmap-service.d.ts","sourceRoot":"","sources":["../../../src/services/dmap/dmap-service.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAM/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAIrE,OAAO,KAAK,EAOV,aAAa,EACb,UAAU,EACV,WAAW,EACZ,MAAM,YAAY,CAAC;AA6UpB,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IAEjC,YAAY,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc,EAEvD;IAED;;;;;;;;;;;;;;;;OAgBG;IACH,OAAO,CAAC,aAAa;IA4BrB;;;;;;;;;;OAUG;IACH,OAAO,CAAC,UAAU;IAwClB;;;;;;OAMG;YACW,iBAAiB;IA+C/B,gDAAgD;IAC1C,cAAc,CAClB,MAAM,EAAE;QACN,UAAU,EAAE,MAAM,CAAC;QACnB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,EACD,GAAG,EAAE,OAAO,GACX,OAAO,CAAC,UAAU,EAAE,CAAC,CA0BvB;IAED;;;OAGG;YACW,oBAAoB;IAqBlC;;;;;;;;;;;;;;OAcG;YACW,qBAAqB;IAkEnC;;;;;;;;;OASG;IACG,iBAAiB,CACrB,MAAM,EAAE;QACN,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,uBAAuB,CAAC,EAAE,OAAO,CAAC;KACnC,EACD,GAAG,EAAE,OAAO,GACX,OAAO,CAAC,CAAC,UAAU,GAAG;QAAE,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,EAAE,CAAC,CA6D1E;IAED,+DAA+D;IACzD,eAAe,CACnB,MAAM,EAAE;QACN,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,EACD,GAAG,EAAE,OAAO,GACX,OAAO,CAAC,aAAa,EAAE,CAAC,CAwD1B;IAED,2DAA2D;IACrD,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAchF;IAED,0DAA0D;IACpD,kBAAkB,CACtB,MAAM,EAAE;QACN,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,YAAY,CAAC,EAAE,OAAO,CAAC;QACvB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,EACD,GAAG,EAAE,OAAO,GACX,OAAO,CAAC,WAAW,EAAE,CAAC,CAuCxB;IAED;;;;;;OAMG;YACW,2BAA2B;IA0CzC;;;;;;OAMG;YACW,gCAAgC;CA6D/C;AAMD,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI,CAEhF;AAED,wBAAgB,cAAc,IAAI,WAAW,CAK5C"}
|