@cyanheads/wsdot-mcp-server 0.1.13 → 0.1.15
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 +39 -28
- package/CLAUDE.md +39 -28
- package/Dockerfile +1 -1
- package/LICENSE +1 -1
- package/README.md +5 -3
- package/changelog/0.1.x/0.1.14.md +29 -0
- package/changelog/0.1.x/0.1.15.md +18 -0
- package/dist/mcp-server/tools/definitions/get-border-waits.tool.d.ts +6 -0
- package/dist/mcp-server/tools/definitions/get-border-waits.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/get-border-waits.tool.js +7 -0
- package/dist/mcp-server/tools/definitions/get-border-waits.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/get-ferry-alerts.tool.d.ts +6 -0
- package/dist/mcp-server/tools/definitions/get-ferry-alerts.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/get-ferry-alerts.tool.js +7 -0
- package/dist/mcp-server/tools/definitions/get-ferry-alerts.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/get-ferry-routes.tool.d.ts +6 -0
- package/dist/mcp-server/tools/definitions/get-ferry-routes.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/get-ferry-routes.tool.js +7 -0
- package/dist/mcp-server/tools/definitions/get-ferry-routes.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/get-ferry-schedule.tool.d.ts +6 -0
- package/dist/mcp-server/tools/definitions/get-ferry-schedule.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/get-ferry-schedule.tool.js +21 -10
- package/dist/mcp-server/tools/definitions/get-ferry-schedule.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/get-ferry-terminals.tool.d.ts +6 -0
- package/dist/mcp-server/tools/definitions/get-ferry-terminals.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/get-ferry-terminals.tool.js +7 -0
- package/dist/mcp-server/tools/definitions/get-ferry-terminals.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/get-mountain-passes.tool.d.ts +6 -0
- package/dist/mcp-server/tools/definitions/get-mountain-passes.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/get-mountain-passes.tool.js +7 -0
- package/dist/mcp-server/tools/definitions/get-mountain-passes.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/get-terminal-space.tool.d.ts +6 -0
- package/dist/mcp-server/tools/definitions/get-terminal-space.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/get-terminal-space.tool.js +7 -0
- package/dist/mcp-server/tools/definitions/get-terminal-space.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/get-toll-rates.tool.d.ts +6 -0
- package/dist/mcp-server/tools/definitions/get-toll-rates.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/get-toll-rates.tool.js +7 -0
- package/dist/mcp-server/tools/definitions/get-toll-rates.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/get-travel-times.tool.d.ts +6 -0
- package/dist/mcp-server/tools/definitions/get-travel-times.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/get-travel-times.tool.js +28 -9
- package/dist/mcp-server/tools/definitions/get-travel-times.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/get-vessel-locations.tool.d.ts +6 -0
- package/dist/mcp-server/tools/definitions/get-vessel-locations.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/get-vessel-locations.tool.js +7 -0
- package/dist/mcp-server/tools/definitions/get-vessel-locations.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/search-alerts.tool.d.ts +6 -0
- package/dist/mcp-server/tools/definitions/search-alerts.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/search-alerts.tool.js +18 -4
- package/dist/mcp-server/tools/definitions/search-alerts.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/search-cameras.tool.d.ts +6 -0
- package/dist/mcp-server/tools/definitions/search-cameras.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/search-cameras.tool.js +8 -1
- package/dist/mcp-server/tools/definitions/search-cameras.tool.js.map +1 -1
- package/dist/services/ferry/ferry-service.d.ts.map +1 -1
- package/dist/services/ferry/ferry-service.js +11 -26
- package/dist/services/ferry/ferry-service.js.map +1 -1
- package/dist/services/traffic/route-match.d.ts +18 -0
- package/dist/services/traffic/route-match.d.ts.map +1 -0
- package/dist/services/traffic/route-match.js +51 -0
- package/dist/services/traffic/route-match.js.map +1 -0
- package/dist/services/traffic/traffic-service.d.ts +0 -11
- package/dist/services/traffic/traffic-service.d.ts.map +1 -1
- package/dist/services/traffic/traffic-service.js +61 -84
- package/dist/services/traffic/traffic-service.js.map +1 -1
- package/dist/services/traffic/types.d.ts +8 -1
- package/dist/services/traffic/types.d.ts.map +1 -1
- package/dist/services/wsdot-http.d.ts +47 -0
- package/dist/services/wsdot-http.d.ts.map +1 -0
- package/dist/services/wsdot-http.js +145 -0
- package/dist/services/wsdot-http.js.map +1 -0
- package/package.json +8 -8
- package/server.json +3 -3
|
@@ -3,12 +3,14 @@
|
|
|
3
3
|
* toll rates, border crossings, and cameras.
|
|
4
4
|
* @module services/traffic/traffic-service
|
|
5
5
|
*/
|
|
6
|
-
import { serviceUnavailable } from '@cyanheads/mcp-ts-core/errors';
|
|
7
6
|
import { withRetry } from '@cyanheads/mcp-ts-core/utils';
|
|
8
7
|
import { getServerConfig } from '../../config/server-config.js';
|
|
9
8
|
import { wcfDateField } from '../../services/wcf-date.js';
|
|
9
|
+
import { assertUpstreamJson, fetchUpstream, redactUrl } from '../../services/wsdot-http.js';
|
|
10
|
+
import { routeMatches } from './route-match.js';
|
|
10
11
|
const BASE_URL = 'https://www.wsdot.wa.gov/Traffic/api';
|
|
11
12
|
const TIMEOUT_MS = 15_000;
|
|
13
|
+
const SERVICE = 'WSDOT Traffic API';
|
|
12
14
|
export class TrafficApiService {
|
|
13
15
|
constructor(_config, _storage) { }
|
|
14
16
|
accessCode() {
|
|
@@ -16,32 +18,14 @@ export class TrafficApiService {
|
|
|
16
18
|
}
|
|
17
19
|
fetchJson(path, ctx) {
|
|
18
20
|
const url = `${BASE_URL}/${path}${path.includes('?') ? '&' : '?'}AccessCode=${this.accessCode()}`;
|
|
21
|
+
const endpoint = redactUrl(url);
|
|
19
22
|
return withRetry(async () => {
|
|
20
|
-
const
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
// 4xx is a client error that won't succeed on retry — mark non-retryable so withRetry
|
|
27
|
-
// fails fast instead of burning all attempts (the data.retryable === false opt-out).
|
|
28
|
-
const isClientError = response.status >= 400 && response.status < 500;
|
|
29
|
-
throw serviceUnavailable(`WSDOT Traffic API returned HTTP ${response.status}.`, {
|
|
30
|
-
url,
|
|
31
|
-
status: response.status,
|
|
32
|
-
...(isClientError && { retryable: false }),
|
|
33
|
-
});
|
|
34
|
-
}
|
|
35
|
-
// Auth failure returns HTML, not JSON — detect by Content-Type
|
|
36
|
-
const contentType = response.headers.get('content-type') ?? '';
|
|
37
|
-
if (contentType.includes('text/html')) {
|
|
38
|
-
throw serviceUnavailable('WSDOT Traffic API returned an HTML page instead of JSON. Verify that WSDOT_ACCESS_CODE is set to a valid access code.', { url });
|
|
39
|
-
}
|
|
40
|
-
const text = await response.text();
|
|
41
|
-
if (/^\s*<(!DOCTYPE\s+html|html[\s>])/i.test(text)) {
|
|
42
|
-
throw serviceUnavailable('WSDOT Traffic API returned HTML content. Verify that WSDOT_ACCESS_CODE is set to a valid access code.', { url });
|
|
43
|
-
}
|
|
44
|
-
return JSON.parse(text);
|
|
23
|
+
const response = await fetchUpstream(url, endpoint, SERVICE, TIMEOUT_MS, ctx);
|
|
24
|
+
// The body is read before any status check: an unregistered access code comes back as a
|
|
25
|
+
// 400 whose body carries WSDOT's own explanation, which a status-first throw discards.
|
|
26
|
+
const body = await response.text();
|
|
27
|
+
assertUpstreamJson({ body, endpoint, response, service: SERVICE }, ctx);
|
|
28
|
+
return JSON.parse(body);
|
|
45
29
|
}, {
|
|
46
30
|
operation: 'TrafficApiService.fetchJson',
|
|
47
31
|
baseDelayMs: 1000,
|
|
@@ -96,27 +80,32 @@ export class TrafficApiService {
|
|
|
96
80
|
const result = await this.fetchJson('HighwayAlerts/HighwayAlertsREST.svc/GetAlertsAsJson', ctx);
|
|
97
81
|
let alerts = result.map(normalizeAlert);
|
|
98
82
|
if (params.stateRoute) {
|
|
99
|
-
// Compare
|
|
100
|
-
//
|
|
101
|
-
|
|
83
|
+
// Compare route designations (not a roadName substring) so "90" matches I-90 without also
|
|
84
|
+
// matching SR 290, natural forms ("I-90") resolve against the feed's bare "090", and a
|
|
85
|
+
// prefixed filter such as "SR 26" does not pull in US 26.
|
|
86
|
+
const target = params.stateRoute;
|
|
102
87
|
alerts = alerts.filter((a) => {
|
|
103
88
|
const start = a.startRoadwayLocation?.roadName;
|
|
104
89
|
const end = a.endRoadwayLocation?.roadName;
|
|
105
|
-
return ((start != null &&
|
|
106
|
-
(end != null &&
|
|
90
|
+
return ((start != null && routeMatches(target, start)) ||
|
|
91
|
+
(end != null && routeMatches(target, end)));
|
|
107
92
|
});
|
|
108
93
|
}
|
|
109
94
|
if (params.region) {
|
|
110
95
|
const region = params.region.toLowerCase();
|
|
111
96
|
alerts = alerts.filter((a) => a.region?.toLowerCase() === region);
|
|
112
97
|
}
|
|
113
|
-
if (params.startMilepost != null) {
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
const
|
|
119
|
-
|
|
98
|
+
if (params.startMilepost != null || params.endMilepost != null) {
|
|
99
|
+
// An alert is an extent, so the requested range is tested for overlap against the span
|
|
100
|
+
// between the mileposts the alert reports — a closure running from MP 10 to MP 30 covers a
|
|
101
|
+
// request for MP 20. Mileposts descend on a decreasing-direction record, so the span is
|
|
102
|
+
// taken as min/max rather than assuming start <= end. An alert with no milepost is kept.
|
|
103
|
+
const min = params.startMilepost ?? Number.NEGATIVE_INFINITY;
|
|
104
|
+
const max = params.endMilepost ?? Number.POSITIVE_INFINITY;
|
|
105
|
+
alerts = alerts.filter((a) => {
|
|
106
|
+
const posts = [a.startRoadwayLocation?.milePost, a.endRoadwayLocation?.milePost].filter((mp) => mp != null);
|
|
107
|
+
return posts.length === 0 || (Math.min(...posts) <= max && Math.max(...posts) >= min);
|
|
108
|
+
});
|
|
120
109
|
}
|
|
121
110
|
return alerts;
|
|
122
111
|
}
|
|
@@ -127,8 +116,8 @@ export class TrafficApiService {
|
|
|
127
116
|
...(t.TravelTimeID != null && { travelTimeId: t.TravelTimeID }),
|
|
128
117
|
...(t.Name != null && { name: t.Name }),
|
|
129
118
|
...(t.Description != null && { description: t.Description }),
|
|
130
|
-
...(t.CurrentTime
|
|
131
|
-
...(t.AverageTime
|
|
119
|
+
...(isMeasuredDuration(t.CurrentTime, t.Distance) && { currentTimeInMinutes: t.CurrentTime }),
|
|
120
|
+
...(isMeasuredDuration(t.AverageTime, t.Distance) && { averageTimeInMinutes: t.AverageTime }),
|
|
132
121
|
...wcfDateField('timeUpdated', t.TimeUpdated),
|
|
133
122
|
...(t.Distance != null && { distanceInMiles: t.Distance }),
|
|
134
123
|
...(t.StartPoint != null && {
|
|
@@ -203,11 +192,11 @@ export class TrafficApiService {
|
|
|
203
192
|
const result = await this.fetchJson('HighwayCameras/HighwayCamerasREST.svc/GetCamerasAsJson', ctx);
|
|
204
193
|
let cameras = result.map(normalizeCamera);
|
|
205
194
|
if (params.stateRoute) {
|
|
206
|
-
// Match on the
|
|
207
|
-
//
|
|
208
|
-
//
|
|
209
|
-
const target =
|
|
210
|
-
cameras = cameras.filter((c) => c.roadName != null &&
|
|
195
|
+
// Match on the route designation so natural forms ("I-90", "SR 520") and padded/bare numbers
|
|
196
|
+
// ("090", "90") all resolve to the same route, "90" can't substring-match a different route
|
|
197
|
+
// such as "SR 290", and the prefixed camera road names stay distinct: "SR 26" is not US 26.
|
|
198
|
+
const target = params.stateRoute;
|
|
199
|
+
cameras = cameras.filter((c) => c.roadName != null && routeMatches(target, c.roadName));
|
|
211
200
|
}
|
|
212
201
|
if (params.region) {
|
|
213
202
|
const region = params.region.toUpperCase();
|
|
@@ -226,18 +215,32 @@ export class TrafficApiService {
|
|
|
226
215
|
}
|
|
227
216
|
// --- Normalization helpers ---
|
|
228
217
|
/**
|
|
229
|
-
*
|
|
230
|
-
*
|
|
231
|
-
*
|
|
232
|
-
*
|
|
233
|
-
*
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
218
|
+
* Reports whether a travel-time figure is a measurement. WSDOT emits 0 rather than null for a
|
|
219
|
+
* corridor it is not currently measuring — the reversible express lanes report 0 while closed in
|
|
220
|
+
* the queried direction — and a corridor with distance cannot be a zero-minute trip. Keyed on the
|
|
221
|
+
* value, not the corridor name: the opposite-direction express lanes carry real measurements under
|
|
222
|
+
* the same naming. A 0 stands when the feed reports no distance, since nothing contradicts it.
|
|
223
|
+
*/
|
|
224
|
+
function isMeasuredDuration(minutes, distanceInMiles) {
|
|
225
|
+
if (minutes == null)
|
|
226
|
+
return false;
|
|
227
|
+
return minutes !== 0 || distanceInMiles == null || distanceInMiles === 0;
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* WSDOT fills an *unpopulated* roadway location with zeros rather than omitting it — a point alert
|
|
231
|
+
* carries an end location whose MilePost, Latitude, and Longitude are all 0. Those are placeholders,
|
|
232
|
+
* not a position at MP 0 in the Gulf of Guinea, so they are dropped; the road name and direction
|
|
233
|
+
* the record does carry are kept.
|
|
237
234
|
*/
|
|
238
|
-
|
|
239
|
-
const
|
|
240
|
-
return
|
|
235
|
+
function normalizeRoadwayLocation(loc) {
|
|
236
|
+
const unpopulated = loc.MilePost === 0 && loc.Latitude === 0 && loc.Longitude === 0;
|
|
237
|
+
return {
|
|
238
|
+
...(loc.RoadName != null && { roadName: loc.RoadName }),
|
|
239
|
+
...(loc.Direction != null && { direction: loc.Direction }),
|
|
240
|
+
...(!unpopulated && loc.MilePost != null && { milePost: loc.MilePost }),
|
|
241
|
+
...(!unpopulated && loc.Latitude != null && { latitude: loc.Latitude }),
|
|
242
|
+
...(!unpopulated && loc.Longitude != null && { longitude: loc.Longitude }),
|
|
243
|
+
};
|
|
241
244
|
}
|
|
242
245
|
function normalizeAlert(a) {
|
|
243
246
|
return {
|
|
@@ -250,36 +253,10 @@ function normalizeAlert(a) {
|
|
|
250
253
|
...(a.Region != null && { region: a.Region }),
|
|
251
254
|
...(a.County != null && { county: a.County }),
|
|
252
255
|
...(a.StartRoadwayLocation != null && {
|
|
253
|
-
startRoadwayLocation:
|
|
254
|
-
...(a.StartRoadwayLocation.RoadName != null && {
|
|
255
|
-
roadName: a.StartRoadwayLocation.RoadName,
|
|
256
|
-
}),
|
|
257
|
-
...(a.StartRoadwayLocation.Direction != null && {
|
|
258
|
-
direction: a.StartRoadwayLocation.Direction,
|
|
259
|
-
}),
|
|
260
|
-
...(a.StartRoadwayLocation.MilePost != null && {
|
|
261
|
-
milePost: a.StartRoadwayLocation.MilePost,
|
|
262
|
-
}),
|
|
263
|
-
...(a.StartRoadwayLocation.Latitude != null && {
|
|
264
|
-
latitude: a.StartRoadwayLocation.Latitude,
|
|
265
|
-
}),
|
|
266
|
-
...(a.StartRoadwayLocation.Longitude != null && {
|
|
267
|
-
longitude: a.StartRoadwayLocation.Longitude,
|
|
268
|
-
}),
|
|
269
|
-
},
|
|
256
|
+
startRoadwayLocation: normalizeRoadwayLocation(a.StartRoadwayLocation),
|
|
270
257
|
}),
|
|
271
258
|
...(a.EndRoadwayLocation != null && {
|
|
272
|
-
endRoadwayLocation:
|
|
273
|
-
...(a.EndRoadwayLocation.RoadName != null && { roadName: a.EndRoadwayLocation.RoadName }),
|
|
274
|
-
...(a.EndRoadwayLocation.Direction != null && {
|
|
275
|
-
direction: a.EndRoadwayLocation.Direction,
|
|
276
|
-
}),
|
|
277
|
-
...(a.EndRoadwayLocation.MilePost != null && { milePost: a.EndRoadwayLocation.MilePost }),
|
|
278
|
-
...(a.EndRoadwayLocation.Latitude != null && { latitude: a.EndRoadwayLocation.Latitude }),
|
|
279
|
-
...(a.EndRoadwayLocation.Longitude != null && {
|
|
280
|
-
longitude: a.EndRoadwayLocation.Longitude,
|
|
281
|
-
}),
|
|
282
|
-
},
|
|
259
|
+
endRoadwayLocation: normalizeRoadwayLocation(a.EndRoadwayLocation),
|
|
283
260
|
}),
|
|
284
261
|
...wcfDateField('startTime', a.StartTime),
|
|
285
262
|
...wcfDateField('endTime', a.EndTime),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"traffic-service.js","sourceRoot":"","sources":["../../../src/services/traffic/traffic-service.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"traffic-service.js","sourceRoot":"","sources":["../../../src/services/traffic/traffic-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -43,7 +43,10 @@ export interface MountainPass {
|
|
|
43
43
|
travelAdvisoryActive?: boolean;
|
|
44
44
|
weatherCondition?: string;
|
|
45
45
|
}
|
|
46
|
-
/**
|
|
46
|
+
/**
|
|
47
|
+
* Raw roadway location from upstream API. An unpopulated location (the end point of a point alert)
|
|
48
|
+
* arrives with MilePost, Latitude, and Longitude all 0 — placeholders dropped during normalization.
|
|
49
|
+
*/
|
|
47
50
|
export interface RawRoadwayLocation {
|
|
48
51
|
Direction?: string | null;
|
|
49
52
|
Latitude?: number | null;
|
|
@@ -99,7 +102,9 @@ export interface RawRoadTimePoint {
|
|
|
99
102
|
}
|
|
100
103
|
/** Raw travel time entry from upstream API. */
|
|
101
104
|
export interface RawTravelTime {
|
|
105
|
+
/** Minutes; WSDOT emits 0 for a corridor it is not measuring (dropped during normalization). */
|
|
102
106
|
AverageTime?: number | null;
|
|
107
|
+
/** Minutes; WSDOT emits 0 for a corridor it is not measuring (dropped during normalization). */
|
|
103
108
|
CurrentTime?: number | null;
|
|
104
109
|
Description?: string | null;
|
|
105
110
|
Distance?: number | null;
|
|
@@ -117,7 +122,9 @@ export interface RoadTimePoint {
|
|
|
117
122
|
}
|
|
118
123
|
/** Normalized travel time corridor. */
|
|
119
124
|
export interface TravelTime {
|
|
125
|
+
/** Absent when WSDOT reports no measurement — e.g. a reversible express lane closed this way. */
|
|
120
126
|
averageTimeInMinutes?: number;
|
|
127
|
+
/** Absent when WSDOT reports no measurement — e.g. a reversible express lane closed this way. */
|
|
121
128
|
currentTimeInMinutes?: number;
|
|
122
129
|
description?: string;
|
|
123
130
|
distanceInMiles?: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/services/traffic/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,4EAA4E;AAC5E,MAAM,WAAW,oBAAoB;IACnC,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC;AAED,qDAAqD;AACrD,MAAM,WAAW,eAAe;IAC9B,iFAAiF;IACjF,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,cAAc,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAAC;IAC7C,cAAc,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAAC;IAC7C,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,uBAAuB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,oBAAoB,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACtC,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC;AAED,kEAAkE;AAClE,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,0CAA0C;AAC1C,MAAM,WAAW,YAAY;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,iBAAiB,CAAC;IACnC,cAAc,CAAC,EAAE,iBAAiB,CAAC;IACnC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/services/traffic/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Shared upstream-HTTP handling for the WSDOT Traffic and WSF Ferry services.
|
|
3
|
+
* Owns the three things both services must get identically right: keeping the access code out
|
|
4
|
+
* of every error payload, classifying network/timeout failures, and turning a non-2xx (or an
|
|
5
|
+
* HTML/auth-shaped) response into the `invalid_access_code` / `api_unavailable` contract the
|
|
6
|
+
* tools declare.
|
|
7
|
+
* @module services/wsdot-http
|
|
8
|
+
*/
|
|
9
|
+
import type { Context } from '@cyanheads/mcp-ts-core';
|
|
10
|
+
/** Options for {@link assertUpstreamJson}. */
|
|
11
|
+
export interface UpstreamCheck {
|
|
12
|
+
/** Response body, already read as text. */
|
|
13
|
+
body: string;
|
|
14
|
+
/** Request URL with the credential-bearing query string removed. */
|
|
15
|
+
endpoint: string;
|
|
16
|
+
/** The upstream response whose body was read into `body`. */
|
|
17
|
+
response: Response;
|
|
18
|
+
/** Display name of the upstream API, used in error messages. */
|
|
19
|
+
service: string;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Drop the query string — it carries `AccessCode` / `apiaccesscode`. Error payloads, messages,
|
|
23
|
+
* and log fields use this form so the credential never leaves the process.
|
|
24
|
+
*/
|
|
25
|
+
export declare function redactUrl(url: string): string;
|
|
26
|
+
/**
|
|
27
|
+
* Fetch `url`, cancelling on `ctx.signal` or after `timeoutMs`.
|
|
28
|
+
*
|
|
29
|
+
* Network rejections are re-thrown as classified `McpError`s carrying only `endpoint`: Bun and
|
|
30
|
+
* Node attach the requested URL — access code and all — to network errors as `error.path`, so the
|
|
31
|
+
* raw rejection is never re-thrown, chained as `cause`, or logged. Only its message survives,
|
|
32
|
+
* scrubbed.
|
|
33
|
+
*
|
|
34
|
+
* @param url - Full request URL including the access code.
|
|
35
|
+
* @param endpoint - The same URL with its query string removed ({@link redactUrl}).
|
|
36
|
+
*/
|
|
37
|
+
export declare function fetchUpstream(url: string, endpoint: string, service: string, timeoutMs: number, ctx: Context): Promise<Response>;
|
|
38
|
+
/**
|
|
39
|
+
* Throw unless the response is a JSON success.
|
|
40
|
+
*
|
|
41
|
+
* The body is inspected *before* any status check, because both APIs explain an unregistered
|
|
42
|
+
* access code in the body of a 400: WSDOT Traffic answers `Content-Type: text/html` with
|
|
43
|
+
* `Bad Request`, WSF answers JSON naming the access code. Those become `invalid_access_code`
|
|
44
|
+
* (a server configuration fault, non-retryable); every other non-2xx becomes `api_unavailable`.
|
|
45
|
+
*/
|
|
46
|
+
export declare function assertUpstreamJson({ body, endpoint, response, service }: UpstreamCheck, ctx: Context): void;
|
|
47
|
+
//# sourceMappingURL=wsdot-http.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wsdot-http.d.ts","sourceRoot":"","sources":["../../src/services/wsdot-http.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AA6BtD,8CAA8C;AAC9C,MAAM,WAAW,aAAa;IAC5B,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,oEAAoE;IACpE,QAAQ,EAAE,MAAM,CAAC;IACjB,6DAA6D;IAC7D,QAAQ,EAAE,QAAQ,CAAC;IACnB,gEAAgE;IAChE,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAG7C;AA0BD;;;;;;;;;;GAUG;AACH,wBAAsB,aAAa,CACjC,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,OAAO,GACX,OAAO,CAAC,QAAQ,CAAC,CAwBnB;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,aAAa,EACpD,GAAG,EAAE,OAAO,GACX,IAAI,CA8CN"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Shared upstream-HTTP handling for the WSDOT Traffic and WSF Ferry services.
|
|
3
|
+
* Owns the three things both services must get identically right: keeping the access code out
|
|
4
|
+
* of every error payload, classifying network/timeout failures, and turning a non-2xx (or an
|
|
5
|
+
* HTML/auth-shaped) response into the `invalid_access_code` / `api_unavailable` contract the
|
|
6
|
+
* tools declare.
|
|
7
|
+
* @module services/wsdot-http
|
|
8
|
+
*/
|
|
9
|
+
import { configurationError, serviceUnavailable, timeout } from '@cyanheads/mcp-ts-core/errors';
|
|
10
|
+
/** Env var holding the credential both APIs authenticate with. Named in every access-code error. */
|
|
11
|
+
const ACCESS_CODE_ENV = 'WSDOT_ACCESS_CODE';
|
|
12
|
+
/** Where an operator registers for a code. */
|
|
13
|
+
const REGISTRATION_URL = 'https://wsdot.wa.gov/traffic/api/';
|
|
14
|
+
/** Maximum characters of an upstream error body carried into `error.data.body`. */
|
|
15
|
+
const BODY_LIMIT = 300;
|
|
16
|
+
/** Body that opens as an HTML document. */
|
|
17
|
+
const HTML_DOCUMENT = /^\s*<(!DOCTYPE\s+html|html[\s>])/i;
|
|
18
|
+
/** WSF names the credential in its rejection body ("…for a developer Access Code…"). */
|
|
19
|
+
const NAMES_ACCESS_CODE = /access\s*code/i;
|
|
20
|
+
/**
|
|
21
|
+
* `AccessCode=` / `apiaccesscode=` and their value, anywhere in a text blob. Upstream error
|
|
22
|
+
* pages echo the request query string, so any text copied into an error must be scrubbed.
|
|
23
|
+
* The parameter name goes with the value — otherwise an echoed query string reads as the
|
|
24
|
+
* upstream naming the credential as the fault.
|
|
25
|
+
*/
|
|
26
|
+
const CREDENTIAL_ASSIGNMENT = /\S*access_?code=[^&\s"'<]*/gi;
|
|
27
|
+
/** Stand-in left where a credential assignment was removed. */
|
|
28
|
+
const REDACTED = '[credential redacted]';
|
|
29
|
+
/**
|
|
30
|
+
* Drop the query string — it carries `AccessCode` / `apiaccesscode`. Error payloads, messages,
|
|
31
|
+
* and log fields use this form so the credential never leaves the process.
|
|
32
|
+
*/
|
|
33
|
+
export function redactUrl(url) {
|
|
34
|
+
const query = url.indexOf('?');
|
|
35
|
+
return query === -1 ? url : url.slice(0, query);
|
|
36
|
+
}
|
|
37
|
+
/** Replace any credential assignment inside free text with a placeholder. */
|
|
38
|
+
function scrub(text) {
|
|
39
|
+
return text.replace(CREDENTIAL_ASSIGNMENT, REDACTED);
|
|
40
|
+
}
|
|
41
|
+
/** Cap a scrubbed string. Scrubbing runs first so a truncation can never leave a partial
|
|
42
|
+
* credential behind. */
|
|
43
|
+
function cap(text) {
|
|
44
|
+
return text.length > BODY_LIMIT ? `${text.slice(0, BODY_LIMIT)}…` : text;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Both APIs authenticate solely with the access code, so a 4xx whose body names the access code —
|
|
48
|
+
* how WSF answers an unregistered one — is a credential problem rather than a bad request, as is
|
|
49
|
+
* any 401/403.
|
|
50
|
+
*
|
|
51
|
+
* @param body - The *scrubbed* body: an echoed request query string must not read as the upstream
|
|
52
|
+
* naming the credential as the fault.
|
|
53
|
+
*/
|
|
54
|
+
function rejectsAccessCode(status, body) {
|
|
55
|
+
if (status === 401 || status === 403)
|
|
56
|
+
return true;
|
|
57
|
+
return status >= 400 && status < 500 && NAMES_ACCESS_CODE.test(body);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Fetch `url`, cancelling on `ctx.signal` or after `timeoutMs`.
|
|
61
|
+
*
|
|
62
|
+
* Network rejections are re-thrown as classified `McpError`s carrying only `endpoint`: Bun and
|
|
63
|
+
* Node attach the requested URL — access code and all — to network errors as `error.path`, so the
|
|
64
|
+
* raw rejection is never re-thrown, chained as `cause`, or logged. Only its message survives,
|
|
65
|
+
* scrubbed.
|
|
66
|
+
*
|
|
67
|
+
* @param url - Full request URL including the access code.
|
|
68
|
+
* @param endpoint - The same URL with its query string removed ({@link redactUrl}).
|
|
69
|
+
*/
|
|
70
|
+
export async function fetchUpstream(url, endpoint, service, timeoutMs, ctx) {
|
|
71
|
+
const signal = ctx.signal.aborted
|
|
72
|
+
? ctx.signal
|
|
73
|
+
: AbortSignal.any([ctx.signal, AbortSignal.timeout(timeoutMs)]);
|
|
74
|
+
try {
|
|
75
|
+
return await fetch(url, { signal });
|
|
76
|
+
}
|
|
77
|
+
catch (cause) {
|
|
78
|
+
if (ctx.signal.aborted) {
|
|
79
|
+
throw timeout(`${service} request cancelled.`, { url: endpoint });
|
|
80
|
+
}
|
|
81
|
+
const name = cause instanceof Error ? cause.name : '';
|
|
82
|
+
if (name === 'TimeoutError' || name === 'AbortError') {
|
|
83
|
+
throw timeout(`${service} request timed out after ${timeoutMs}ms.`, {
|
|
84
|
+
url: endpoint,
|
|
85
|
+
timeoutMs,
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
const detail = scrub(cause instanceof Error ? cause.message : String(cause));
|
|
89
|
+
throw serviceUnavailable(`${service} request failed: ${detail}`, {
|
|
90
|
+
url: endpoint,
|
|
91
|
+
reason: 'api_unavailable',
|
|
92
|
+
...ctx.recoveryFor('api_unavailable'),
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Throw unless the response is a JSON success.
|
|
98
|
+
*
|
|
99
|
+
* The body is inspected *before* any status check, because both APIs explain an unregistered
|
|
100
|
+
* access code in the body of a 400: WSDOT Traffic answers `Content-Type: text/html` with
|
|
101
|
+
* `Bad Request`, WSF answers JSON naming the access code. Those become `invalid_access_code`
|
|
102
|
+
* (a server configuration fault, non-retryable); every other non-2xx becomes `api_unavailable`.
|
|
103
|
+
*/
|
|
104
|
+
export function assertUpstreamJson({ body, endpoint, response, service }, ctx) {
|
|
105
|
+
const contentType = response.headers.get('content-type') ?? '';
|
|
106
|
+
const htmlPage = contentType.includes('text/html');
|
|
107
|
+
const htmlBody = HTML_DOCUMENT.test(body);
|
|
108
|
+
// Success bodies are the hot path and can be large — nothing below touches them.
|
|
109
|
+
if (response.ok && !htmlPage && !htmlBody)
|
|
110
|
+
return;
|
|
111
|
+
const scrubbed = scrub(body).trim();
|
|
112
|
+
const snippet = cap(scrubbed);
|
|
113
|
+
const upstream = htmlBody || snippet === '' ? '' : ` Upstream: "${snippet}".`;
|
|
114
|
+
// HTML is how both APIs answer an unregistered access code — WSDOT Traffic pairs it with a 400,
|
|
115
|
+
// and a 2xx login page carries the same meaning. A 5xx HTML page is an outage page: reporting it
|
|
116
|
+
// as a credential fault would blame the operator's config and skip the retry it deserves.
|
|
117
|
+
const htmlAuthPage = response.status < 500 && (htmlPage || htmlBody);
|
|
118
|
+
if (htmlAuthPage || rejectsAccessCode(response.status, scrubbed)) {
|
|
119
|
+
const detail = htmlPage
|
|
120
|
+
? 'returned an HTML page instead of JSON'
|
|
121
|
+
: htmlBody
|
|
122
|
+
? 'returned HTML content instead of JSON'
|
|
123
|
+
: `rejected the request with HTTP ${response.status}`;
|
|
124
|
+
throw configurationError(`${service} ${detail} — ${ACCESS_CODE_ENV} is missing, invalid, or not registered.${upstream} Register an access code at ${REGISTRATION_URL} and set ${ACCESS_CODE_ENV}.`, {
|
|
125
|
+
url: endpoint,
|
|
126
|
+
status: response.status,
|
|
127
|
+
body: snippet,
|
|
128
|
+
reason: 'invalid_access_code',
|
|
129
|
+
...ctx.recoveryFor('invalid_access_code'),
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
if (!response.ok) {
|
|
133
|
+
throw serviceUnavailable(`${service} returned HTTP ${response.status}.${upstream}`, {
|
|
134
|
+
url: endpoint,
|
|
135
|
+
status: response.status,
|
|
136
|
+
body: snippet,
|
|
137
|
+
reason: 'api_unavailable',
|
|
138
|
+
...ctx.recoveryFor('api_unavailable'),
|
|
139
|
+
// 4xx is a client error that won't succeed on retry — mark non-retryable so withRetry
|
|
140
|
+
// fails fast instead of burning all attempts (the data.retryable === false opt-out).
|
|
141
|
+
...(response.status >= 400 && response.status < 500 && { retryable: false }),
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=wsdot-http.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wsdot-http.js","sourceRoot":"","sources":["../../src/services/wsdot-http.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cyanheads/wsdot-mcp-server",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.15",
|
|
4
4
|
"description": "Query WA highway conditions, ferry schedules, vessel locations, toll rates, border waits, and alerts via MCP. STDIO or Streamable HTTP.",
|
|
5
5
|
"mcpName": "io.github.cyanheads/wsdot-mcp-server",
|
|
6
6
|
"type": "module",
|
|
@@ -82,18 +82,18 @@
|
|
|
82
82
|
"access": "public"
|
|
83
83
|
},
|
|
84
84
|
"dependencies": {
|
|
85
|
-
"@cyanheads/mcp-ts-core": "^0.
|
|
85
|
+
"@cyanheads/mcp-ts-core": "^0.11.0",
|
|
86
86
|
"pino-pretty": "^13.1.3",
|
|
87
87
|
"zod": "^4.4.3"
|
|
88
88
|
},
|
|
89
89
|
"devDependencies": {
|
|
90
|
-
"@biomejs/biome": "^2.5.
|
|
90
|
+
"@biomejs/biome": "^2.5.5",
|
|
91
91
|
"@socketsecurity/bun-security-scanner": "^1.1.2",
|
|
92
|
-
"@types/node": "^26.1.
|
|
92
|
+
"@types/node": "^26.1.2",
|
|
93
93
|
"depcheck": "^1.4.7",
|
|
94
|
-
"ignore": "^7.0.
|
|
95
|
-
"tsc-alias": "^1.
|
|
96
|
-
"typescript": "^
|
|
97
|
-
"vitest": "^4.1.
|
|
94
|
+
"ignore": "^7.0.6",
|
|
95
|
+
"tsc-alias": "^1.9.1",
|
|
96
|
+
"typescript": "^7.0.2",
|
|
97
|
+
"vitest": "^4.1.10"
|
|
98
98
|
}
|
|
99
99
|
}
|
package/server.json
CHANGED
|
@@ -12,14 +12,14 @@
|
|
|
12
12
|
"url": "https://wsdot.caseyjhand.com/mcp"
|
|
13
13
|
}
|
|
14
14
|
],
|
|
15
|
-
"version": "0.1.
|
|
15
|
+
"version": "0.1.15",
|
|
16
16
|
"packages": [
|
|
17
17
|
{
|
|
18
18
|
"registryType": "npm",
|
|
19
19
|
"registryBaseUrl": "https://registry.npmjs.org",
|
|
20
20
|
"identifier": "@cyanheads/wsdot-mcp-server",
|
|
21
21
|
"runtimeHint": "node",
|
|
22
|
-
"version": "0.1.
|
|
22
|
+
"version": "0.1.15",
|
|
23
23
|
"packageArguments": [
|
|
24
24
|
{
|
|
25
25
|
"type": "positional",
|
|
@@ -54,7 +54,7 @@
|
|
|
54
54
|
"registryBaseUrl": "https://registry.npmjs.org",
|
|
55
55
|
"identifier": "@cyanheads/wsdot-mcp-server",
|
|
56
56
|
"runtimeHint": "node",
|
|
57
|
-
"version": "0.1.
|
|
57
|
+
"version": "0.1.15",
|
|
58
58
|
"packageArguments": [
|
|
59
59
|
{
|
|
60
60
|
"type": "positional",
|