@cyanheads/epa-mcp-server 0.1.4 → 0.2.0

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 (53) hide show
  1. package/CLAUDE.md +9 -15
  2. package/Dockerfile +6 -0
  3. package/README.md +7 -7
  4. package/changelog/0.1.x/0.1.5.md +24 -0
  5. package/changelog/0.2.x/0.2.0.md +21 -0
  6. package/changelog/template.md +9 -1
  7. package/dist/config/server-config.d.ts +1 -1
  8. package/dist/config/server-config.d.ts.map +1 -1
  9. package/dist/config/server-config.js +5 -3
  10. package/dist/config/server-config.js.map +1 -1
  11. package/dist/index.js +25 -9
  12. package/dist/index.js.map +1 -1
  13. package/dist/mcp-server/tools/definitions/get-air-quality.tool.d.ts +3 -3
  14. package/dist/mcp-server/tools/definitions/get-air-quality.tool.d.ts.map +1 -1
  15. package/dist/mcp-server/tools/definitions/get-air-quality.tool.js +2 -2
  16. package/dist/mcp-server/tools/definitions/get-air-quality.tool.js.map +1 -1
  17. package/dist/mcp-server/tools/definitions/get-facility.tool.d.ts +1 -1
  18. package/dist/mcp-server/tools/definitions/get-facility.tool.d.ts.map +1 -1
  19. package/dist/mcp-server/tools/definitions/get-tri-releases.tool.d.ts +1 -1
  20. package/dist/mcp-server/tools/definitions/get-tri-releases.tool.d.ts.map +1 -1
  21. package/dist/mcp-server/tools/definitions/index.d.ts +329 -42
  22. package/dist/mcp-server/tools/definitions/index.d.ts.map +1 -1
  23. package/dist/mcp-server/tools/definitions/index.js +11 -2
  24. package/dist/mcp-server/tools/definitions/index.js.map +1 -1
  25. package/dist/mcp-server/tools/definitions/search-facilities.tool.d.ts +12 -4
  26. package/dist/mcp-server/tools/definitions/search-facilities.tool.d.ts.map +1 -1
  27. package/dist/mcp-server/tools/definitions/search-facilities.tool.js +48 -9
  28. package/dist/mcp-server/tools/definitions/search-facilities.tool.js.map +1 -1
  29. package/dist/mcp-server/tools/definitions/search-superfund.tool.d.ts +3 -3
  30. package/dist/mcp-server/tools/definitions/search-superfund.tool.d.ts.map +1 -1
  31. package/dist/mcp-server/tools/definitions/search-superfund.tool.js +2 -2
  32. package/dist/mcp-server/tools/definitions/search-superfund.tool.js.map +1 -1
  33. package/dist/mcp-server/tools/definitions/search-tri-releases.tool.d.ts +5 -1
  34. package/dist/mcp-server/tools/definitions/search-tri-releases.tool.d.ts.map +1 -1
  35. package/dist/mcp-server/tools/definitions/search-tri-releases.tool.js +10 -0
  36. package/dist/mcp-server/tools/definitions/search-tri-releases.tool.js.map +1 -1
  37. package/dist/mcp-server/tools/definitions/search-violations.tool.d.ts +2 -2
  38. package/dist/mcp-server/tools/definitions/search-violations.tool.d.ts.map +1 -1
  39. package/dist/mcp-server/tools/definitions/search-violations.tool.js +1 -1
  40. package/dist/mcp-server/tools/definitions/search-violations.tool.js.map +1 -1
  41. package/dist/mcp-server/tools/definitions/search-water-systems.tool.d.ts +2 -2
  42. package/dist/mcp-server/tools/definitions/search-water-systems.tool.d.ts.map +1 -1
  43. package/dist/mcp-server/tools/definitions/search-water-systems.tool.js +1 -1
  44. package/dist/mcp-server/tools/definitions/search-water-systems.tool.js.map +1 -1
  45. package/dist/services/airnow/airnow-service.d.ts.map +1 -1
  46. package/dist/services/airnow/airnow-service.js +5 -0
  47. package/dist/services/airnow/airnow-service.js.map +1 -1
  48. package/dist/services/echo/echo-service.d.ts +3 -0
  49. package/dist/services/echo/echo-service.d.ts.map +1 -1
  50. package/dist/services/echo/echo-service.js +7 -0
  51. package/dist/services/echo/echo-service.js.map +1 -1
  52. package/package.json +10 -7
  53. package/server.json +7 -7
@@ -10,10 +10,17 @@ export { searchSuperfundTool } from './search-superfund.tool.js';
10
10
  export { searchTriReleasesTool } from './search-tri-releases.tool.js';
11
11
  export { searchViolationsTool } from './search-violations.tool.js';
12
12
  export { searchWaterSystemsTool } from './search-water-systems.tool.js';
13
- export declare const allToolDefinitions: readonly [import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
13
+ /**
14
+ * Tools backed only by keyless public APIs (ECHO, DMAP). Always registered —
15
+ * these require no API key.
16
+ */
17
+ export declare const coreToolDefinitions: readonly [import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
14
18
  zip_code: import("zod").ZodOptional<import("zod").ZodString>;
15
19
  state: import("zod").ZodOptional<import("zod").ZodString>;
16
20
  city: import("zod").ZodOptional<import("zod").ZodString>;
21
+ latitude: import("zod").ZodOptional<import("zod").ZodNumber>;
22
+ longitude: import("zod").ZodOptional<import("zod").ZodNumber>;
23
+ radius_miles: import("zod").ZodOptional<import("zod").ZodNumber>;
17
24
  active_only: import("zod").ZodOptional<import("zod").ZodBoolean>;
18
25
  programs: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodEnum<{
19
26
  CAA: "CAA";
@@ -52,15 +59,20 @@ export declare const allToolDefinitions: readonly [import("@cyanheads/mcp-ts-cor
52
59
  message: import("zod").ZodOptional<import("zod").ZodString>;
53
60
  }, import("zod/v4/core").$strip>, readonly [{
54
61
  readonly reason: "no_geographic_filter";
55
- readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.InvalidParams;
56
- readonly when: "No geographic filter (zip_code, state, or city) was provided.";
57
- readonly recovery: "Provide at least one of zip_code, state, or city to scope the search.";
62
+ readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
63
+ readonly when: "No geographic filter (zip_code, state, city, or a latitude+longitude+radius_miles triple) was provided.";
64
+ readonly recovery: "Provide at least one of zip_code, state, or city, or a complete latitude + longitude + radius_miles triple, to scope the search.";
65
+ }, {
66
+ readonly reason: "incomplete_proximity";
67
+ readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
68
+ readonly when: "A proximity search was started but latitude, longitude, and radius_miles were not all provided.";
69
+ readonly recovery: "Proximity search needs all three of latitude, longitude, and radius_miles. Provide the missing value, or use zip_code / state / city instead.";
58
70
  }, {
59
71
  readonly reason: "no_match";
60
72
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
61
73
  readonly when: "No facilities matched the search criteria.";
62
74
  readonly recovery: "Broaden the search by removing filters or expanding the geographic area.";
63
- }]>, import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
75
+ }], undefined>, import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
64
76
  registry_id: import("zod").ZodString;
65
77
  }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
66
78
  registryId: import("zod").ZodString;
@@ -113,7 +125,7 @@ export declare const allToolDefinitions: readonly [import("@cyanheads/mcp-ts-cor
113
125
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
114
126
  readonly when: "ECHO returned no facility record for the given Registry ID.";
115
127
  readonly recovery: "Verify the Registry ID using epa_search_facilities and retry with a valid ID.";
116
- }]>, import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
128
+ }], undefined>, import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
117
129
  state: import("zod").ZodOptional<import("zod").ZodString>;
118
130
  zip_code: import("zod").ZodOptional<import("zod").ZodString>;
119
131
  program: import("zod").ZodOptional<import("zod").ZodEnum<{
@@ -150,48 +162,281 @@ export declare const allToolDefinitions: readonly [import("@cyanheads/mcp-ts-cor
150
162
  message: import("zod").ZodOptional<import("zod").ZodString>;
151
163
  }, import("zod/v4/core").$strip>, readonly [{
152
164
  readonly reason: "no_geographic_filter";
153
- readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.InvalidParams;
165
+ readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
154
166
  readonly when: "Neither state nor zip_code was provided.";
155
167
  readonly recovery: "Provide at least one of state or zip_code to scope the enforcement case search.";
156
- }]>, import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
168
+ }], undefined>, import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
169
+ facility_id: import("zod").ZodString;
170
+ year: import("zod").ZodOptional<import("zod").ZodNumber>;
171
+ chemical_name: import("zod").ZodOptional<import("zod").ZodString>;
172
+ }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
173
+ releases: import("zod").ZodArray<import("zod").ZodObject<{
174
+ facilityId: import("zod").ZodString;
175
+ chemicalName: import("zod").ZodString;
176
+ reportingYear: import("zod").ZodNumber;
177
+ totalReleasesInLbs: import("zod").ZodOptional<import("zod").ZodNumber>;
178
+ }, import("zod/v4/core").$strip>>;
179
+ facilityId: import("zod").ZodString;
180
+ message: import("zod").ZodOptional<import("zod").ZodString>;
181
+ }, import("zod/v4/core").$strip>, readonly [{
182
+ readonly reason: "no_releases_found";
183
+ readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
184
+ 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<{
187
+ state: import("zod").ZodString;
188
+ county: import("zod").ZodOptional<import("zod").ZodString>;
189
+ year: import("zod").ZodOptional<import("zod").ZodNumber>;
190
+ chemical_name: import("zod").ZodOptional<import("zod").ZodString>;
191
+ limit: import("zod").ZodDefault<import("zod").ZodNumber>;
192
+ }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
193
+ releases: import("zod").ZodArray<import("zod").ZodObject<{
194
+ facilityId: import("zod").ZodString;
195
+ facilityName: import("zod").ZodOptional<import("zod").ZodString>;
196
+ chemicalName: import("zod").ZodString;
197
+ reportingYear: import("zod").ZodNumber;
198
+ totalReleasesInLbs: import("zod").ZodOptional<import("zod").ZodNumber>;
199
+ }, import("zod/v4/core").$strip>>;
200
+ state: import("zod").ZodString;
201
+ message: import("zod").ZodOptional<import("zod").ZodString>;
202
+ }, import("zod/v4/core").$strip>, readonly [{
203
+ readonly reason: "no_releases_found";
204
+ readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
205
+ readonly when: "No TRI records found for the given state and filters.";
206
+ readonly recovery: "Verify the state abbreviation is valid. TRI data lags 18 months — try removing the year filter or using an earlier year.";
207
+ }], {
208
+ readonly truncated: import("zod").ZodBoolean;
209
+ readonly shown: import("zod").ZodNumber;
210
+ readonly cap: import("zod").ZodNumber;
211
+ }>, import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
212
+ state: import("zod").ZodOptional<import("zod").ZodString>;
213
+ city: import("zod").ZodOptional<import("zod").ZodString>;
157
214
  zip_code: import("zod").ZodOptional<import("zod").ZodString>;
158
215
  latitude: import("zod").ZodOptional<import("zod").ZodNumber>;
159
216
  longitude: import("zod").ZodOptional<import("zod").ZodNumber>;
160
- mode: import("zod").ZodDefault<import("zod").ZodEnum<{
161
- current: "current";
162
- forecast: "forecast";
217
+ radius_miles: import("zod").ZodOptional<import("zod").ZodNumber>;
218
+ npl_status: import("zod").ZodDefault<import("zod").ZodEnum<{
219
+ all: "all";
220
+ listed: "listed";
221
+ "not-listed": "not-listed";
222
+ proposed: "proposed";
163
223
  }>>;
164
- forecast_date: import("zod").ZodOptional<import("zod").ZodString>;
165
- distance_miles: import("zod").ZodDefault<import("zod").ZodNumber>;
224
+ limit: import("zod").ZodDefault<import("zod").ZodNumber>;
166
225
  }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
167
- observations: import("zod").ZodArray<import("zod").ZodObject<{
168
- reportingArea: import("zod").ZodOptional<import("zod").ZodString>;
169
- stateCode: import("zod").ZodOptional<import("zod").ZodString>;
226
+ sites: import("zod").ZodArray<import("zod").ZodObject<{
227
+ siteId: import("zod").ZodString;
228
+ name: import("zod").ZodString;
229
+ street: import("zod").ZodOptional<import("zod").ZodString>;
230
+ city: import("zod").ZodOptional<import("zod").ZodString>;
231
+ state: import("zod").ZodOptional<import("zod").ZodString>;
232
+ zip: import("zod").ZodOptional<import("zod").ZodString>;
233
+ county: import("zod").ZodOptional<import("zod").ZodString>;
234
+ fipsCode: import("zod").ZodOptional<import("zod").ZodString>;
235
+ nplStatus: import("zod").ZodOptional<import("zod").ZodString>;
236
+ cleanupStatus: import("zod").ZodOptional<import("zod").ZodString>;
170
237
  latitude: import("zod").ZodOptional<import("zod").ZodNumber>;
171
238
  longitude: import("zod").ZodOptional<import("zod").ZodNumber>;
172
- dateObserved: import("zod").ZodOptional<import("zod").ZodString>;
173
- hourObserved: import("zod").ZodOptional<import("zod").ZodNumber>;
174
- localTimeZone: import("zod").ZodOptional<import("zod").ZodString>;
175
- readings: import("zod").ZodArray<import("zod").ZodObject<{
176
- parameterName: import("zod").ZodString;
177
- aqi: import("zod").ZodNumber;
178
- categoryNumber: import("zod").ZodOptional<import("zod").ZodNumber>;
179
- categoryName: import("zod").ZodOptional<import("zod").ZodString>;
180
- }, import("zod/v4/core").$strip>>;
181
239
  }, import("zod/v4/core").$strip>>;
182
- mode: import("zod").ZodString;
240
+ totalCount: import("zod").ZodNumber;
183
241
  message: import("zod").ZodOptional<import("zod").ZodString>;
184
242
  }, import("zod/v4/core").$strip>, readonly [{
185
- readonly reason: "no_location";
186
- readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.InvalidParams;
187
- readonly when: "Neither zip_code nor latitude+longitude was provided.";
188
- readonly recovery: "Provide either zip_code or both latitude and longitude to identify the location.";
243
+ readonly reason: "no_location_filter";
244
+ readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
245
+ readonly when: "No location filter (state, city, zip_code, or latitude+longitude) was provided.";
246
+ readonly recovery: "Provide at least one location filter: state, city, zip_code, or latitude+longitude+radius_miles.";
189
247
  }, {
190
- readonly reason: "forecast_date_required";
191
- readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.InvalidParams;
192
- readonly when: "Mode is \"forecast\" but forecast_date was not provided.";
193
- readonly recovery: "Provide forecast_date as YYYY-MM-DD when using mode=\"forecast\".";
194
- }]>, import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
248
+ readonly reason: "radius_required";
249
+ readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
250
+ readonly when: "Latitude and longitude were provided without radius_miles.";
251
+ 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<{
253
+ state: import("zod").ZodOptional<import("zod").ZodString>;
254
+ zip_code: import("zod").ZodOptional<import("zod").ZodString>;
255
+ has_violation: import("zod").ZodOptional<import("zod").ZodBoolean>;
256
+ pws_type: import("zod").ZodOptional<import("zod").ZodEnum<{
257
+ community: "community";
258
+ "non-transient": "non-transient";
259
+ transient: "transient";
260
+ }>>;
261
+ limit: import("zod").ZodDefault<import("zod").ZodNumber>;
262
+ }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
263
+ systems: import("zod").ZodArray<import("zod").ZodObject<{
264
+ pwsid: import("zod").ZodString;
265
+ name: import("zod").ZodString;
266
+ state: import("zod").ZodOptional<import("zod").ZodString>;
267
+ city: import("zod").ZodOptional<import("zod").ZodString>;
268
+ zip: import("zod").ZodOptional<import("zod").ZodString>;
269
+ type: import("zod").ZodOptional<import("zod").ZodString>;
270
+ populationServed: import("zod").ZodOptional<import("zod").ZodNumber>;
271
+ primarySourceCode: import("zod").ZodOptional<import("zod").ZodString>;
272
+ hasViolation: import("zod").ZodOptional<import("zod").ZodBoolean>;
273
+ isActive: import("zod").ZodOptional<import("zod").ZodBoolean>;
274
+ }, import("zod/v4/core").$strip>>;
275
+ totalCount: import("zod").ZodNumber;
276
+ message: import("zod").ZodOptional<import("zod").ZodString>;
277
+ }, import("zod/v4/core").$strip>, readonly [{
278
+ readonly reason: "no_geographic_filter";
279
+ readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
280
+ readonly when: "Neither state nor zip_code was provided.";
281
+ readonly recovery: "Provide at least one of state or zip_code to search drinking water systems.";
282
+ }], undefined>];
283
+ /**
284
+ * Full tool surface, adding epa_get_air_quality (requires AIRNOW_API_KEY).
285
+ * index.ts registers this set when the key is configured, falling back to
286
+ * coreToolDefinitions when it is absent.
287
+ */
288
+ export declare const allToolDefinitions: readonly [import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
289
+ zip_code: import("zod").ZodOptional<import("zod").ZodString>;
290
+ state: import("zod").ZodOptional<import("zod").ZodString>;
291
+ city: import("zod").ZodOptional<import("zod").ZodString>;
292
+ latitude: import("zod").ZodOptional<import("zod").ZodNumber>;
293
+ longitude: import("zod").ZodOptional<import("zod").ZodNumber>;
294
+ radius_miles: import("zod").ZodOptional<import("zod").ZodNumber>;
295
+ active_only: import("zod").ZodOptional<import("zod").ZodBoolean>;
296
+ programs: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodEnum<{
297
+ CAA: "CAA";
298
+ CWA: "CWA";
299
+ RCRA: "RCRA";
300
+ TRI: "TRI";
301
+ SDWA: "SDWA";
302
+ }>>>;
303
+ has_violation: import("zod").ZodOptional<import("zod").ZodBoolean>;
304
+ limit: import("zod").ZodDefault<import("zod").ZodNumber>;
305
+ }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
306
+ facilities: import("zod").ZodArray<import("zod").ZodObject<{
307
+ registryId: import("zod").ZodString;
308
+ name: import("zod").ZodString;
309
+ street: import("zod").ZodOptional<import("zod").ZodString>;
310
+ city: import("zod").ZodOptional<import("zod").ZodString>;
311
+ state: import("zod").ZodOptional<import("zod").ZodString>;
312
+ zip: import("zod").ZodOptional<import("zod").ZodString>;
313
+ county: import("zod").ZodOptional<import("zod").ZodString>;
314
+ fipsCode: import("zod").ZodOptional<import("zod").ZodString>;
315
+ latitude: import("zod").ZodOptional<import("zod").ZodNumber>;
316
+ longitude: import("zod").ZodOptional<import("zod").ZodNumber>;
317
+ complianceStatus: import("zod").ZodOptional<import("zod").ZodString>;
318
+ programs: import("zod").ZodObject<{
319
+ air: import("zod").ZodBoolean;
320
+ water: import("zod").ZodBoolean;
321
+ rcra: import("zod").ZodBoolean;
322
+ tri: import("zod").ZodBoolean;
323
+ sdwa: import("zod").ZodBoolean;
324
+ }, import("zod/v4/core").$strip>;
325
+ triReleasesTransfersInLbs: import("zod").ZodOptional<import("zod").ZodNumber>;
326
+ inspectionCount: import("zod").ZodOptional<import("zod").ZodNumber>;
327
+ totalPenaltiesInDollars: import("zod").ZodOptional<import("zod").ZodNumber>;
328
+ }, import("zod/v4/core").$strip>>;
329
+ totalCount: import("zod").ZodNumber;
330
+ message: import("zod").ZodOptional<import("zod").ZodString>;
331
+ }, import("zod/v4/core").$strip>, readonly [{
332
+ readonly reason: "no_geographic_filter";
333
+ readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
334
+ readonly when: "No geographic filter (zip_code, state, city, or a latitude+longitude+radius_miles triple) was provided.";
335
+ readonly recovery: "Provide at least one of zip_code, state, or city, or a complete latitude + longitude + radius_miles triple, to scope the search.";
336
+ }, {
337
+ readonly reason: "incomplete_proximity";
338
+ readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
339
+ readonly when: "A proximity search was started but latitude, longitude, and radius_miles were not all provided.";
340
+ readonly recovery: "Proximity search needs all three of latitude, longitude, and radius_miles. Provide the missing value, or use zip_code / state / city instead.";
341
+ }, {
342
+ readonly reason: "no_match";
343
+ readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
344
+ readonly when: "No facilities matched the search criteria.";
345
+ readonly recovery: "Broaden the search by removing filters or expanding the geographic area.";
346
+ }], undefined>, import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
347
+ registry_id: import("zod").ZodString;
348
+ }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
349
+ registryId: import("zod").ZodString;
350
+ name: import("zod").ZodString;
351
+ street: import("zod").ZodOptional<import("zod").ZodString>;
352
+ city: import("zod").ZodOptional<import("zod").ZodString>;
353
+ state: import("zod").ZodOptional<import("zod").ZodString>;
354
+ zip: import("zod").ZodOptional<import("zod").ZodString>;
355
+ county: import("zod").ZodOptional<import("zod").ZodString>;
356
+ fipsCode: import("zod").ZodOptional<import("zod").ZodString>;
357
+ latitude: import("zod").ZodOptional<import("zod").ZodNumber>;
358
+ longitude: import("zod").ZodOptional<import("zod").ZodNumber>;
359
+ complianceStatus: import("zod").ZodOptional<import("zod").ZodString>;
360
+ programs: import("zod").ZodObject<{
361
+ air: import("zod").ZodBoolean;
362
+ water: import("zod").ZodBoolean;
363
+ rcra: import("zod").ZodBoolean;
364
+ tri: import("zod").ZodBoolean;
365
+ sdwa: import("zod").ZodBoolean;
366
+ }, import("zod/v4/core").$strip>;
367
+ triReleasesTransfersInLbs: import("zod").ZodOptional<import("zod").ZodNumber>;
368
+ compliance: import("zod").ZodOptional<import("zod").ZodObject<{
369
+ mediaStatusCode: import("zod").ZodOptional<import("zod").ZodString>;
370
+ mediaStatusDescription: import("zod").ZodOptional<import("zod").ZodString>;
371
+ quartersInViolation: import("zod").ZodOptional<import("zod").ZodNumber>;
372
+ }, import("zod/v4/core").$strip>>;
373
+ inspections: import("zod").ZodArray<import("zod").ZodObject<{
374
+ activityType: import("zod").ZodOptional<import("zod").ZodString>;
375
+ activityDate: import("zod").ZodOptional<import("zod").ZodString>;
376
+ description: import("zod").ZodOptional<import("zod").ZodString>;
377
+ }, import("zod/v4/core").$strip>>;
378
+ formalActions: import("zod").ZodArray<import("zod").ZodObject<{
379
+ caseId: import("zod").ZodOptional<import("zod").ZodString>;
380
+ settlementDate: import("zod").ZodOptional<import("zod").ZodString>;
381
+ penaltyAssessedInDollars: import("zod").ZodOptional<import("zod").ZodNumber>;
382
+ actionType: import("zod").ZodOptional<import("zod").ZodString>;
383
+ }, import("zod/v4/core").$strip>>;
384
+ airCompliance: import("zod").ZodOptional<import("zod").ZodObject<{
385
+ programId: import("zod").ZodOptional<import("zod").ZodString>;
386
+ status: import("zod").ZodOptional<import("zod").ZodString>;
387
+ statusDate: import("zod").ZodOptional<import("zod").ZodString>;
388
+ }, import("zod/v4/core").$strip>>;
389
+ waterCompliance: import("zod").ZodOptional<import("zod").ZodObject<{
390
+ programId: import("zod").ZodOptional<import("zod").ZodString>;
391
+ status: import("zod").ZodOptional<import("zod").ZodString>;
392
+ permitId: import("zod").ZodOptional<import("zod").ZodString>;
393
+ }, import("zod/v4/core").$strip>>;
394
+ }, import("zod/v4/core").$strip>, readonly [{
395
+ readonly reason: "facility_not_found";
396
+ readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
397
+ readonly when: "ECHO returned no facility record for the given Registry ID.";
398
+ readonly recovery: "Verify the Registry ID using epa_search_facilities and retry with a valid ID.";
399
+ }], undefined>, import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
400
+ state: import("zod").ZodOptional<import("zod").ZodString>;
401
+ zip_code: import("zod").ZodOptional<import("zod").ZodString>;
402
+ program: import("zod").ZodOptional<import("zod").ZodEnum<{
403
+ CAA: "CAA";
404
+ CWA: "CWA";
405
+ RCRA: "RCRA";
406
+ SDWA: "SDWA";
407
+ CERCLA: "CERCLA";
408
+ FIFRA: "FIFRA";
409
+ TSCA: "TSCA";
410
+ }>>;
411
+ case_type: import("zod").ZodDefault<import("zod").ZodEnum<{
412
+ all: "all";
413
+ criminal: "criminal";
414
+ civil: "civil";
415
+ }>>;
416
+ date_filed_start: import("zod").ZodOptional<import("zod").ZodString>;
417
+ date_filed_end: import("zod").ZodOptional<import("zod").ZodString>;
418
+ limit: import("zod").ZodDefault<import("zod").ZodNumber>;
419
+ }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
420
+ cases: import("zod").ZodArray<import("zod").ZodObject<{
421
+ caseId: import("zod").ZodOptional<import("zod").ZodString>;
422
+ caseName: import("zod").ZodOptional<import("zod").ZodString>;
423
+ facilityName: import("zod").ZodOptional<import("zod").ZodString>;
424
+ registryId: import("zod").ZodOptional<import("zod").ZodString>;
425
+ programsViolated: import("zod").ZodOptional<import("zod").ZodString>;
426
+ caseType: import("zod").ZodOptional<import("zod").ZodString>;
427
+ penaltyAssessedInDollars: import("zod").ZodOptional<import("zod").ZodNumber>;
428
+ settlementDate: import("zod").ZodOptional<import("zod").ZodString>;
429
+ filedDate: import("zod").ZodOptional<import("zod").ZodString>;
430
+ state: import("zod").ZodOptional<import("zod").ZodString>;
431
+ }, import("zod/v4/core").$strip>>;
432
+ totalCount: import("zod").ZodNumber;
433
+ message: import("zod").ZodOptional<import("zod").ZodString>;
434
+ }, import("zod/v4/core").$strip>, readonly [{
435
+ readonly reason: "no_geographic_filter";
436
+ readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
437
+ readonly when: "Neither state nor zip_code was provided.";
438
+ readonly recovery: "Provide at least one of state or zip_code to scope the enforcement case search.";
439
+ }], undefined>, import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
195
440
  facility_id: import("zod").ZodString;
196
441
  year: import("zod").ZodOptional<import("zod").ZodNumber>;
197
442
  chemical_name: import("zod").ZodOptional<import("zod").ZodString>;
@@ -209,7 +454,7 @@ export declare const allToolDefinitions: readonly [import("@cyanheads/mcp-ts-cor
209
454
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
210
455
  readonly when: "No TRI records found for the given facility ID and filters.";
211
456
  readonly recovery: "Verify the facility ID via epa_search_facilities. TRI data lags 18 months — try an earlier year.";
212
- }]>, import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
457
+ }], undefined>, import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
213
458
  state: import("zod").ZodString;
214
459
  county: import("zod").ZodOptional<import("zod").ZodString>;
215
460
  year: import("zod").ZodOptional<import("zod").ZodNumber>;
@@ -230,7 +475,11 @@ export declare const allToolDefinitions: readonly [import("@cyanheads/mcp-ts-cor
230
475
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
231
476
  readonly when: "No TRI records found for the given state and filters.";
232
477
  readonly recovery: "Verify the state abbreviation is valid. TRI data lags 18 months — try removing the year filter or using an earlier year.";
233
- }]>, import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
478
+ }], {
479
+ readonly truncated: import("zod").ZodBoolean;
480
+ readonly shown: import("zod").ZodNumber;
481
+ readonly cap: import("zod").ZodNumber;
482
+ }>, import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
234
483
  state: import("zod").ZodOptional<import("zod").ZodString>;
235
484
  city: import("zod").ZodOptional<import("zod").ZodString>;
236
485
  zip_code: import("zod").ZodOptional<import("zod").ZodString>;
@@ -263,15 +512,15 @@ export declare const allToolDefinitions: readonly [import("@cyanheads/mcp-ts-cor
263
512
  message: import("zod").ZodOptional<import("zod").ZodString>;
264
513
  }, import("zod/v4/core").$strip>, readonly [{
265
514
  readonly reason: "no_location_filter";
266
- readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.InvalidParams;
515
+ readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
267
516
  readonly when: "No location filter (state, city, zip_code, or latitude+longitude) was provided.";
268
517
  readonly recovery: "Provide at least one location filter: state, city, zip_code, or latitude+longitude+radius_miles.";
269
518
  }, {
270
519
  readonly reason: "radius_required";
271
- readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.InvalidParams;
520
+ readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
272
521
  readonly when: "Latitude and longitude were provided without radius_miles.";
273
522
  readonly recovery: "Provide radius_miles together with latitude and longitude for a proximity search.";
274
- }]>, import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
523
+ }], undefined>, import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
275
524
  state: import("zod").ZodOptional<import("zod").ZodString>;
276
525
  zip_code: import("zod").ZodOptional<import("zod").ZodString>;
277
526
  has_violation: import("zod").ZodOptional<import("zod").ZodBoolean>;
@@ -298,8 +547,46 @@ export declare const allToolDefinitions: readonly [import("@cyanheads/mcp-ts-cor
298
547
  message: import("zod").ZodOptional<import("zod").ZodString>;
299
548
  }, import("zod/v4/core").$strip>, readonly [{
300
549
  readonly reason: "no_geographic_filter";
301
- readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.InvalidParams;
550
+ readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
302
551
  readonly when: "Neither state nor zip_code was provided.";
303
552
  readonly recovery: "Provide at least one of state or zip_code to search drinking water systems.";
304
- }]>];
553
+ }], undefined>, import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
554
+ zip_code: import("zod").ZodOptional<import("zod").ZodString>;
555
+ latitude: import("zod").ZodOptional<import("zod").ZodNumber>;
556
+ longitude: import("zod").ZodOptional<import("zod").ZodNumber>;
557
+ mode: import("zod").ZodDefault<import("zod").ZodEnum<{
558
+ current: "current";
559
+ forecast: "forecast";
560
+ }>>;
561
+ forecast_date: import("zod").ZodOptional<import("zod").ZodString>;
562
+ distance_miles: import("zod").ZodDefault<import("zod").ZodNumber>;
563
+ }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
564
+ observations: import("zod").ZodArray<import("zod").ZodObject<{
565
+ reportingArea: import("zod").ZodOptional<import("zod").ZodString>;
566
+ stateCode: import("zod").ZodOptional<import("zod").ZodString>;
567
+ latitude: import("zod").ZodOptional<import("zod").ZodNumber>;
568
+ longitude: import("zod").ZodOptional<import("zod").ZodNumber>;
569
+ dateObserved: import("zod").ZodOptional<import("zod").ZodString>;
570
+ hourObserved: import("zod").ZodOptional<import("zod").ZodNumber>;
571
+ localTimeZone: import("zod").ZodOptional<import("zod").ZodString>;
572
+ readings: import("zod").ZodArray<import("zod").ZodObject<{
573
+ parameterName: import("zod").ZodString;
574
+ aqi: import("zod").ZodNumber;
575
+ categoryNumber: import("zod").ZodOptional<import("zod").ZodNumber>;
576
+ categoryName: import("zod").ZodOptional<import("zod").ZodString>;
577
+ }, import("zod/v4/core").$strip>>;
578
+ }, import("zod/v4/core").$strip>>;
579
+ mode: import("zod").ZodString;
580
+ message: import("zod").ZodOptional<import("zod").ZodString>;
581
+ }, import("zod/v4/core").$strip>, readonly [{
582
+ readonly reason: "no_location";
583
+ readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
584
+ readonly when: "Neither zip_code nor latitude+longitude was provided.";
585
+ readonly recovery: "Provide either zip_code or both latitude and longitude to identify the location.";
586
+ }, {
587
+ readonly reason: "forecast_date_required";
588
+ readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
589
+ readonly when: "Mode is \"forecast\" but forecast_date was not provided.";
590
+ readonly recovery: "Provide forecast_date as YYYY-MM-DD when using mode=\"forecast\".";
591
+ }], undefined>];
305
592
  //# 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,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;AAWxE,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IASrB,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,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;AAWxE;;;GAGG;AACH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;eAQtB,CAAC;AAEX;;;;GAIG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;eAAuD,CAAC"}
@@ -18,14 +18,23 @@ import { searchSuperfundTool } from './search-superfund.tool.js';
18
18
  import { searchTriReleasesTool } from './search-tri-releases.tool.js';
19
19
  import { searchViolationsTool } from './search-violations.tool.js';
20
20
  import { searchWaterSystemsTool } from './search-water-systems.tool.js';
21
- export const allToolDefinitions = [
21
+ /**
22
+ * Tools backed only by keyless public APIs (ECHO, DMAP). Always registered —
23
+ * these require no API key.
24
+ */
25
+ export const coreToolDefinitions = [
22
26
  searchFacilitiesTool,
23
27
  getFacilityTool,
24
28
  searchViolationsTool,
25
- getAirQualityTool,
26
29
  getTriReleasesTool,
27
30
  searchTriReleasesTool,
28
31
  searchSuperfundTool,
29
32
  searchWaterSystemsTool,
30
33
  ];
34
+ /**
35
+ * Full tool surface, adding epa_get_air_quality (requires AIRNOW_API_KEY).
36
+ * index.ts registers this set when the key is configured, falling back to
37
+ * coreToolDefinitions when it is absent.
38
+ */
39
+ export const allToolDefinitions = [...coreToolDefinitions, getAirQualityTool];
31
40
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","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,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;AAExE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,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;AAExE,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,oBAAoB;IACpB,eAAe;IACf,oBAAoB;IACpB,iBAAiB;IACjB,kBAAkB;IAClB,qBAAqB;IACrB,mBAAmB;IACnB,sBAAsB;CACd,CAAC"}
1
+ {"version":3,"file":"index.js","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,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;AAExE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,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;AAExE;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,oBAAoB;IACpB,eAAe;IACf,oBAAoB;IACpB,kBAAkB;IAClB,qBAAqB;IACrB,mBAAmB;IACnB,sBAAsB;CACd,CAAC;AAEX;;;;GAIG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,GAAG,mBAAmB,EAAE,iBAAiB,CAAU,CAAC"}
@@ -8,6 +8,9 @@ export declare const searchFacilitiesTool: import("@cyanheads/mcp-ts-core").Tool
8
8
  zip_code: z.ZodOptional<z.ZodString>;
9
9
  state: z.ZodOptional<z.ZodString>;
10
10
  city: z.ZodOptional<z.ZodString>;
11
+ latitude: z.ZodOptional<z.ZodNumber>;
12
+ longitude: z.ZodOptional<z.ZodNumber>;
13
+ radius_miles: z.ZodOptional<z.ZodNumber>;
11
14
  active_only: z.ZodOptional<z.ZodBoolean>;
12
15
  programs: z.ZodOptional<z.ZodArray<z.ZodEnum<{
13
16
  CAA: "CAA";
@@ -46,13 +49,18 @@ export declare const searchFacilitiesTool: import("@cyanheads/mcp-ts-core").Tool
46
49
  message: z.ZodOptional<z.ZodString>;
47
50
  }, z.core.$strip>, readonly [{
48
51
  readonly reason: "no_geographic_filter";
49
- readonly code: JsonRpcErrorCode.InvalidParams;
50
- readonly when: "No geographic filter (zip_code, state, or city) was provided.";
51
- readonly recovery: "Provide at least one of zip_code, state, or city to scope the search.";
52
+ readonly code: JsonRpcErrorCode.ValidationError;
53
+ readonly when: "No geographic filter (zip_code, state, city, or a latitude+longitude+radius_miles triple) was provided.";
54
+ readonly recovery: "Provide at least one of zip_code, state, or city, or a complete latitude + longitude + radius_miles triple, to scope the search.";
55
+ }, {
56
+ readonly reason: "incomplete_proximity";
57
+ readonly code: JsonRpcErrorCode.ValidationError;
58
+ readonly when: "A proximity search was started but latitude, longitude, and radius_miles were not all provided.";
59
+ readonly recovery: "Proximity search needs all three of latitude, longitude, and radius_miles. Provide the missing value, or use zip_code / state / city instead.";
52
60
  }, {
53
61
  readonly reason: "no_match";
54
62
  readonly code: JsonRpcErrorCode.NotFound;
55
63
  readonly when: "No facilities matched the search criteria.";
56
64
  readonly recovery: "Broaden the search by removing filters or expanding the geographic area.";
57
- }]>;
65
+ }], undefined>;
58
66
  //# sourceMappingURL=search-facilities.tool.d.ts.map
@@ -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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuM/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;AAGjE,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cA2P/B,CAAC"}