wsdot-mcp-server
Qué hace este MCP
Provides Washington highway conditions, alerts, cameras, travel times, ferry schedules and capacity, vessel locations, tolls, and border waits.
Herramientas
Esquema de entrada
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['crossings', 'totalCount']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['api_unavailable', 'invalid_access_code'], 'description': 'Machine-readable failure mode. Declared by this tool: `api_unavailable`: WSDOT Traffic API is unreachable or returns a non-2xx response after retries. `invalid_access_code`: WSDOT rejected the request because WSDOT_ACCESS_CODE is missing, invalid, or not registered. Other values are possible when a failure originates below the handler.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'notice': {'type': 'string', 'description': 'Optional notice when no crossing data is available. Absent on normal results.'}, 'crossings': {'type': 'array', 'items': {'type': 'object', 'properties': {'location': {'type': 'object', 'properties': {'latitude': {'type': 'number', 'description': 'Latitude of the crossing.'}, 'milePost': {'type': 'number', 'description': 'Milepost of the crossing.'}, 'roadName': {'type': 'string', 'description': 'Road serving the crossing.'}, 'direction': {'type': 'string', 'description': 'Travel direction code (N/S/E/W/B); frequently null for border crossings.'}, 'longitude': {'type': 'number', 'description': 'Longitude of the crossing.'}, 'description': {'type': 'string', 'description': 'Readable crossing/lane name (e.g. "I-5 General Purpose", "I-5 Nexus Lane").'}}, 'description': 'Geographic location and readable name of the crossing.', 'additionalProperties': False}, 'updateTime': {'type': 'string', 'description': 'When this wait time was last updated (ISO 8601).'}, 'crossingName': {'type': 'string', 'description': 'Route-code crossing identifier (e.g. "I5", "I5Nexus", "SR539", "SR9"). See location.description for the readable name.'}, 'waitTimeInMinutes': {'type': 'number', 'description': 'Current vehicle wait time in minutes. Omitted when the crossing reports no data (WSDOT emits a -1 sentinel for closed/unmonitored crossings).'}}, 'description': 'Wait time data for one border crossing.', 'additionalProperties': False}, 'description': 'All WA/Canada border crossing wait times.'}, 'totalCount': {'type': 'number', 'description': 'Total number of crossings returned.'}}, 'additionalProperties': False}
Esquema de entrada
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['alerts', 'totalCount']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['api_unavailable', 'invalid_access_code'], 'description': 'Machine-readable failure mode. Declared by this tool: `api_unavailable`: WSF Ferry API is unreachable or returns a non-2xx response after retries. `invalid_access_code`: WSF rejected the request because WSDOT_ACCESS_CODE is missing, invalid, or not registered. Other values are possible when a failure originates below the handler.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'alerts': {'type': 'array', 'items': {'type': 'object', 'required': ['impactedRouteIds'], 'properties': {'alertId': {'type': 'number', 'description': 'Unique alert identifier.'}, 'alertType': {'type': 'string', 'description': 'Alert kind as WSF categorizes it, e.g. "All Alerts".'}, 'alertTitle': {'type': 'string', 'description': "The bulletin's own title."}, 'publishDate': {'type': 'string', 'description': 'When the alert was published (ISO 8601).'}, 'bulletinText': {'type': 'string', 'description': 'Full bulletin body as plain text, normalized from the upstream HTML â\x80\x94 links are rendered inline as "link text (url)". Detail that appears nowhere else, such as a replacement sailing, lives here.'}, 'affectsAllRoutes': {'type': 'boolean', 'description': 'True when the alert applies fleet-wide. A fleet-wide alert need not enumerate routes, so while this is true an empty impactedRouteIds means every route rather than none.'}, 'alertDescription': {'type': 'string', 'description': 'One-line summary of the alert or disruption, as shown on the route pages. Falls back to the title when upstream publishes no summary.'}, 'impactedRouteIds': {'type': 'array', 'items': {'type': 'number'}, 'description': 'Route IDs affected by this alert. Cross-reference with wsdot_get_ferry_routes to get route names; some seasonal or interisland route IDs may not be listed there for a given date. Empty means no specific routes unless affectsAllRoutes is true, which makes it fleet-wide.'}}, 'description': 'A WSF ferry service alert or disruption.', 'additionalProperties': False}, 'description': 'Active ferry service alerts and disruptions.'}, 'notice': {'type': 'string', 'description': 'Optional notice when no alerts are active. Absent when alerts are present.'}, 'totalCount': {'type': 'number', 'description': 'Total number of active alerts.'}}, 'additionalProperties': False}
Esquema de entrada
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'tripDate': {'type': 'string', 'description': 'Date for which to list routes, in ISO 8601 format (YYYY-MM-DD). Defaults to today if omitted.'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['routes', 'tripDate', 'totalCount']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['api_unavailable', 'invalid_access_code', 'invalid_date'], 'description': 'Machine-readable failure mode. Declared by this tool: `api_unavailable`: WSF Ferry API is unreachable or returns a non-2xx response after retries. `invalid_access_code`: WSF rejected the request because WSDOT_ACCESS_CODE is missing, invalid, or not registered. `invalid_date`: The tripDate is not a valid YYYY-MM-DD date, or WSF rejects it as outside the dates it has published a schedule for. Other values are possible when a failure originates below the handler.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'notice': {'type': 'string', 'description': 'Optional notice when no routes are available for the date. Absent on normal results.'}, 'routes': {'type': 'array', 'items': {'type': 'object', 'properties': {'routeId': {'type': 'number', 'description': 'Numeric route identifier. Corresponds to impactedRouteIds in ferry alerts.'}, 'description': {'type': 'string', 'description': 'Full route description (e.g. "Seattle/Bainbridge Island").'}, 'routeAbbrev': {'type': 'string', 'description': 'Short route abbreviation (e.g. "SEA-BBI").'}, 'terminalPairs': {'type': 'array', 'items': {'type': 'object', 'required': ['departingTerminalId', 'arrivingTerminalId'], 'properties': {'arrivingTerminalId': {'type': 'number', 'description': 'Arriving terminal ID â\x80\x94 the arrivingTerminalId to pass to wsdot_get_ferry_schedule.'}, 'departingTerminalId': {'type': 'number', 'description': 'Departing terminal ID â\x80\x94 the departingTerminalId to pass to wsdot_get_ferry_schedule.'}, 'arrivingTerminalName': {'type': 'string', 'description': 'Arriving terminal name. Absent when upstream omits it.'}, 'departingTerminalName': {'type': 'string', 'description': 'Departing terminal name. Absent when upstream omits it.'}}, 'description': 'One direction of service between two terminals on the requested date.', 'additionalProperties': False}, 'description': 'Directed terminal pairs this route serves on the requested date; empty when it serves none. Absent only when upstream omits the route ID the lookup needs.'}}, 'description': 'A WSF ferry route operating on the requested date.', 'additionalProperties': False}, 'description': 'Ferry routes operating on the requested date.'}, 'tripDate': {'type': 'string', 'description': 'Date for which routes were retrieved (ISO 8601).'}, 'totalCount': {'type': 'number', 'description': 'Total number of routes returned.'}}, 'additionalProperties': False}
Esquema de entrada
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['departingTerminalId', 'arrivingTerminalId'], 'properties': {'tripDate': {'type': 'string', 'description': 'Date in ISO 8601 format (YYYY-MM-DD). Defaults to today if omitted.'}, 'remainingOnly': {'type': 'boolean', 'description': 'When true, returns only future sailings for today. Ignored for future dates. Default: false.'}, 'arrivingTerminalId': {'type': 'integer', 'maximum': 9007199254740991, 'description': 'Numeric ID of the arriving terminal.', 'exclusiveMinimum': 0}, 'departingTerminalId': {'type': 'integer', 'maximum': 9007199254740991, 'description': 'Numeric ID of the departing terminal. Use wsdot_get_ferry_terminals to look up terminal IDs.', 'exclusiveMinimum': 0}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['sailings', 'tripDate', 'remainingOnly', 'totalSailings']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['api_unavailable', 'invalid_access_code', 'invalid_terminal_pair', 'invalid_date'], 'description': 'Machine-readable failure mode. Declared by this tool: `api_unavailable`: WSF Ferry API is unreachable or returns a non-2xx response after retries. `invalid_access_code`: WSF rejected the request because WSDOT_ACCESS_CODE is missing, invalid, or not registered. `invalid_terminal_pair`: The terminal ID pair is invalid or does not form a valid ferry route. `invalid_date`: The tripDate is not a valid YYYY-MM-DD date, WSF rejects it as outside the dates it has published a schedule for, or WSF lists no routes on it. Other values are possible when a failure originates below the handler.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'notice': {'type': 'string', 'description': 'Optional notice when no sailings are found â\x80\x94 e.g. invalid terminal pair or no service for this date. Absent when sailings are present.'}, 'sailings': {'type': 'array', 'items': {'type': 'object', 'properties': {'vesselId': {'type': 'number', 'description': 'ID of the assigned vessel â\x80\x94 the same vesselId wsdot_get_vessel_locations reports.'}, 'vesselName': {'type': 'string', 'description': 'Vessel assigned to this sailing.'}, 'arrivalTime': {'type': 'string', 'description': 'Scheduled arrival time (ISO 8601, UTC), on the same terms as departureTime. Absent on the routes WSF publishes no arrival time for.'}, 'loadingRule': {'type': 'number', 'description': "WSF's loading-rule code for this sailing. WSF does not document the codes: 3 appears on nearly every sailing, and 1 has appeared only on sailings whose annotation restricts vehicles. Read the sailingâ\x80\x99s annotations for the restriction itself."}, 'departureTime': {'type': 'string', 'description': 'Scheduled departure time (ISO 8601, UTC). WSF publishes schedules in Pacific time, so a sailing late in the service day carries the following UTC calendar date and will not match tripDate. Convert to America/Los_Angeles before showing a clock time.'}, 'annotationIndexes': {'type': 'array', 'items': {'type': 'number', 'description': 'A position in annotations.'}, 'description': 'Positions in annotations of the notes that apply to this sailing; each resolves to an entry. Empty when none apply.'}, 'vesselHandicapAccessible': {'type': 'boolean', 'description': 'Whether WSF marks the assigned vessel as handicap accessible.'}}, 'description': 'One scheduled sailing with departure time, vessel assignment, and the notes that apply to it.', 'additionalProperties': False}, 'description': 'Scheduled sailings for this route and date.'}, 'tripDate': {'type': 'string', 'description': 'Date of the schedule (ISO 8601).'}, 'annotations': {'type': 'array', 'items': {'type': 'string', 'description': 'One note, as plain text.'}, 'description': 'Notes WSF attaches to this pair\'s sailings (vehicle restrictions, routing, delays), converted from HTML to plain text with link destinations kept as "text (url)". Sailings point at the ones that apply to them through annotationIndexes. Empty when the pair has none.'}, 'sailingNotes': {'type': 'string', 'description': 'A note covering every sailing on this pair (e.g. a boarding-pass requirement), converted from HTML to plain text. Absent when WSF publishes none, which is the case for most pairs.'}, 'remainingOnly': {'type': 'boolean', 'description': "Whether the result holds only today's remaining sailings. False for any date other than today, whatever was requested."}, 'totalSailings': {'type': 'number', 'description': 'Total number of sailings returned.'}, 'arrivingTerminalName': {'type': 'string', 'description': 'Arriving terminal name.'}, 'departingTerminalName': {'type': 'string', 'description': 'Departing terminal name.'}}, 'additionalProperties': False}
Esquema de entrada
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['terminals', 'totalCount']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['api_unavailable', 'invalid_access_code'], 'description': 'Machine-readable failure mode. Declared by this tool: `api_unavailable`: WSF Ferry API is unreachable or returns a non-2xx response after retries. `invalid_access_code`: WSF rejected the request because WSDOT_ACCESS_CODE is missing, invalid, or not registered. Other values are possible when a failure originates below the handler.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'notice': {'type': 'string', 'description': 'Optional notice when no terminal data is available. Absent on normal results.'}, 'terminals': {'type': 'array', 'items': {'type': 'object', 'properties': {'latitude': {'type': 'number', 'description': 'Terminal latitude.'}, 'longitude': {'type': 'number', 'description': 'Terminal longitude.'}, 'terminalId': {'type': 'number', 'description': 'Numeric terminal ID used in schedule and space API calls. Absent when upstream omits it.'}, 'terminalName': {'type': 'string', 'description': 'Full terminal name (e.g. "Bainbridge Island"). Absent when upstream omits it.'}, 'terminalAbbrev': {'type': 'string', 'description': 'Short abbreviation (e.g. "BI").'}}, 'description': 'A WSF ferry terminal with its ID and location.', 'additionalProperties': False}, 'description': 'All WSF ferry terminals.'}, 'totalCount': {'type': 'number', 'description': 'Total number of terminals returned.'}}, 'additionalProperties': False}
Esquema de entrada
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['passes', 'totalCount']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['api_unavailable', 'invalid_access_code'], 'description': 'Machine-readable failure mode. Declared by this tool: `api_unavailable`: WSDOT Traffic API is unreachable or returns a non-2xx response after retries. `invalid_access_code`: WSDOT rejected the request because WSDOT_ACCESS_CODE is missing, invalid, or not registered. Other values are possible when a failure originates below the handler.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'notice': {'type': 'string', 'description': 'Optional notice when no pass data is available â\x80\x94 e.g. API temporarily unavailable. Absent on normal results.'}, 'passes': {'type': 'array', 'items': {'type': 'object', 'properties': {'latitude': {'type': 'number', 'description': 'Pass latitude.'}, 'elevation': {'type': 'number', 'description': 'Pass summit elevation in feet.'}, 'longitude': {'type': 'number', 'description': 'Pass longitude.'}, 'dateUpdated': {'type': 'string', 'description': 'Timestamp of the last condition update (ISO 8601).'}, 'roadCondition': {'type': 'string', 'description': 'Road surface condition (e.g. "Wet", "Snow and Ice Covered").'}, 'mountainPassId': {'type': 'number', 'description': 'Numeric identifier for the pass. Absent when upstream omits it.'}, 'restrictionOne': {'type': 'object', 'properties': {'text': {'type': 'string', 'description': 'Restriction / traction-law text (e.g. "Traction Tires Required, Chains Required (Except All Wheel Drive)"). Reads "No current information available" or "No restrictions" when nothing is in effect.'}, 'travelDirection': {'type': 'string', 'description': 'Direction this restriction applies to (e.g. "Northbound", "Eastbound", "Both directions").'}}, 'description': 'Primary travel/traction restriction (typically one direction of travel).', 'additionalProperties': False}, 'restrictionTwo': {'type': 'object', 'properties': {'text': {'type': 'string', 'description': 'Restriction / traction-law text for the second direction.'}, 'travelDirection': {'type': 'string', 'description': 'Direction this restriction applies to (e.g. "Southbound", "Westbound").'}}, 'description': 'Secondary travel/traction restriction (typically the opposite direction).', 'additionalProperties': False}, 'mountainPassName': {'type': 'string', 'description': 'Human-readable pass name (e.g. "Snoqualmie Pass"). Absent when upstream omits it.'}, 'weatherCondition': {'type': 'string', 'description': 'Current weather description (e.g. "Snowing", "Cloudy").'}, 'travelAdvisoryActive': {'type': 'boolean', 'description': 'True when a travel advisory is in effect.'}, 'temperatureInFahrenheit': {'type': 'number', 'description': 'Current temperature at the pass in Fahrenheit.'}}, 'description': 'Conditions for one mountain pass.', 'additionalProperties': False}, 'description': 'All WA mountain pass conditions.'}, 'totalCount': {'type': 'number', 'description': 'Total number of passes returned.'}}, 'additionalProperties': False}
Esquema de entrada
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'limit': {'type': 'integer', 'maximum': 20, 'minimum': 1, 'description': 'Maximum terminals to return in this page (1â\x80\x9320). Defaults to 5. Counts terminals, not sailings.'}, 'offset': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Zero-based index of the first terminal to return, for paging. Defaults to 0.'}, 'departingTerminalId': {'type': 'integer', 'maximum': 9007199254740991, 'description': 'Filter to a specific terminal by numeric ID. Omit to return all terminals.', 'exclusiveMinimum': 0}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['terminals', 'totalCount', 'nextOffset', 'hasMore']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['api_unavailable', 'invalid_access_code'], 'description': 'Machine-readable failure mode. Declared by this tool: `api_unavailable`: WSF Ferry API is unreachable or returns a non-2xx response after retries. `invalid_access_code`: WSF rejected the request because WSDOT_ACCESS_CODE is missing, invalid, or not registered. Other values are possible when a failure originates below the handler.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'notice': {'type': 'string', 'description': 'Informational note about the page window, or guidance when no terminal space data is available, the filter matched nothing, or the offset ran past the end.'}, 'hasMore': {'type': 'boolean', 'description': 'True when more terminals remain beyond the current page.'}, 'terminals': {'type': 'array', 'items': {'type': 'object', 'required': ['departingSpaces'], 'properties': {'terminalId': {'type': 'number', 'description': 'Terminal numeric ID.'}, 'terminalName': {'type': 'string', 'description': 'Terminal name.'}, 'departingSpaces': {'type': 'array', 'items': {'type': 'object', 'properties': {'departure': {'type': 'string', 'description': 'Scheduled departure time for this sailing.'}, 'vesselName': {'type': 'string', 'description': 'Vessel assigned to this sailing.'}, 'isCancelled': {'type': 'boolean', 'description': 'Whether this sailing is cancelled.'}, 'maxSpaceCount': {'type': 'number', 'description': 'Maximum vehicle capacity for this sailing.'}, 'itineraryLabel': {'type': 'string', 'description': 'Upstream itinerary string for the sailing, e.g. "Anacortes -> Friday Harbor". A display label only â\x80\x94 it may name the departing terminal or several stops, so do not read it as the destination.'}, 'driveUpSpaceCount': {'type': 'number', 'description': 'Available drive-up vehicle spaces. Zero means full â\x80\x94 oversubscribed sailings report a negative count upstream and are floored to zero here, so this value is never negative.'}, 'arrivingTerminalIds': {'type': 'array', 'items': {'type': 'number'}, 'description': 'Numeric IDs of the terminals this sailing serves â\x80\x94 the destinations. Pass one to wsdot_get_ferry_schedule as arrivingTerminalId, or resolve names with wsdot_get_ferry_terminals.'}, 'displayDriveUpSpace': {'type': 'boolean', 'description': 'Whether WSF publishes a drive-up count for this sailing. False means driveUpSpaceCount is not reported, not that the lane is empty.'}, 'driveUpSpaceHexColor': {'type': 'string', 'description': 'Color code for drive-up space indicator (for UI rendering).'}, 'reservableSpaceCount': {'type': 'number', 'description': 'Available reservable vehicle spaces, floored at zero like driveUpSpaceCount. Zero means no reservable space remains.'}, 'displayReservableSpace': {'type': 'boolean', 'description': 'Whether this sailing takes vehicle reservations. False means reservableSpaceCount does not apply.'}}, 'description': 'Space availability for one upcoming sailing.', 'additionalProperties': False}, 'description': 'Upcoming sailings and available vehicle spaces.'}}, 'description': 'Space availability at one WSF terminal.', 'additionalProperties': False}, 'description': 'Terminal space availability by terminal.'}, 'nextOffset': {'type': ['number', 'null'], 'description': 'Offset to pass to retrieve the next page, or null when this is the last page.'}, 'totalCount': {'type': 'number', 'description': 'Total terminals matching the filter across all pages (not just this page). Counts terminals, not sailings.'}, 'terminalFilter': {'type': 'number', 'description': 'The terminal ID filter applied, or absent if no filter was used.'}}, 'additionalProperties': False}
Esquema de entrada
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'limit': {'type': 'integer', 'maximum': 500, 'minimum': 1, 'description': 'Maximum toll rates to return in this page (1â\x80\x93500). Defaults to 50. A large page ends sooner, at the 24,000-byte response budget.'}, 'offset': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Zero-based index of the first toll rate to return, for paging. Defaults to 0.'}, 'stateRoute': {'type': 'string', 'maxLength': 200, 'description': 'Tolled route to filter by. Accepts natural forms â\x80\x94 "SR 520", "520", "0520", "I-405", "405" â\x80\x94 matched case- and space-insensitively against each row\'s posted designation, so a route-type prefix must agree: "SR 405" matches nothing because the I-405 Express Lanes are an Interstate. A route with no tolled facility returns an empty page whose notice names the tolled routes. Omit to include every facility.'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['rates', 'totalCount', 'nextOffset', 'hasMore']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['api_unavailable', 'invalid_access_code'], 'description': 'Machine-readable failure mode. Declared by this tool: `api_unavailable`: WSDOT Traffic API is unreachable or returns a non-2xx response after retries. `invalid_access_code`: WSDOT rejected the request because WSDOT_ACCESS_CODE is missing, invalid, or not registered. Other values are possible when a failure originates below the handler.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'rates': {'type': 'array', 'items': {'type': 'object', 'properties': {'message': {'type': 'string', 'description': 'Dynamic message associated with this toll.'}, 'tripName': {'type': 'string', 'description': 'Name of the tolled trip or lane segment.'}, 'stateRoute': {'type': 'string', 'description': 'Route number as the feed reports it: bare and zero-padded, with no route type ("099", "405"). The rendered text shows the posted designation (SR 99, I-405).'}, 'endLatitude': {'type': 'number', 'description': 'Latitude of the segment end point.'}, 'endMilepost': {'type': 'number', 'description': 'Ending milepost of the toll segment.'}, 'timeUpdated': {'type': 'string', 'description': 'When this toll rate was last updated (ISO 8601).'}, 'endLongitude': {'type': 'number', 'description': 'Longitude of the segment end point.'}, 'startLatitude': {'type': 'number', 'description': 'Latitude of the segment start point.'}, 'startMilepost': {'type': 'number', 'description': 'Starting milepost of the toll segment.'}, 'startLongitude': {'type': 'number', 'description': 'Longitude of the segment start point.'}, 'endLocationName': {'type': 'string', 'description': 'Human-readable end location name.'}, 'travelDirection': {'type': 'string', 'description': 'Direction code the feed assigns the toll trip: N, S, E, or W. On SR 99, SR 509, and SR 520 it is one fixed code per facility (S, S, and E) although trips run both ways, so read the direction of travel from the segment ends â\x80\x94 startLocationName/endLocationName and startMilepost â\x86\x92 endMilepost â\x80\x94 not from this code.'}, 'startLocationName': {'type': 'string', 'description': 'Human-readable start location name.'}, 'tollRateInDollars': {'type': 'number', 'description': 'Current toll rate in US dollars.'}}, 'description': 'Current toll rate for one segment or trip.', 'additionalProperties': False}, 'description': 'Current toll rates for the matching tolled facilities.'}, 'notice': {'type': 'string', 'description': 'Informational note about the page window, or guidance when no toll rate data is available, the route has no tolled facility, or the offset ran past the end.'}, 'hasMore': {'type': 'boolean', 'description': 'True when more toll rates remain beyond the current page.'}, 'nextOffset': {'type': ['number', 'null'], 'description': 'Offset to pass to retrieve the next page, or null when this is the last page.'}, 'totalCount': {'type': 'number', 'description': 'Total toll rate entries matching the filter across all pages (not just this page).'}, 'appliedFilters': {'type': 'object', 'properties': {'stateRoute': {'type': 'string', 'description': 'State route filter applied.'}}, 'description': 'Active filters applied to the toll rates. Absent when no filter was applied.', 'additionalProperties': False}}, 'additionalProperties': False}
Esquema de entrada
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'limit': {'type': 'integer', 'maximum': 500, 'minimum': 1, 'description': 'Maximum corridors to return in this page (1â\x80\x93500). Defaults to 50. A large page ends sooner, at the 24,000-byte response budget.'}, 'route': {'type': 'string', 'maxLength': 200, 'description': 'Optional filter. A route designation â\x80\x94 "I-5", "5", "005", "SR 520", "520" â\x80\x94 matches every corridor whose start or end point is on that route, whichever form the feed reports. Any text also matches the corridor name as a case-insensitive substring, so "Everett" finds the Seattle-Everett corridors. Omit to return all corridors.'}, 'offset': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Zero-based index of the first corridor to return, for paging. Defaults to 0.'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['corridors', 'totalCount', 'nextOffset', 'hasMore']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['api_unavailable', 'invalid_access_code'], 'description': 'Machine-readable failure mode. Declared by this tool: `api_unavailable`: WSDOT Traffic API is unreachable or returns a non-2xx response after retries. `invalid_access_code`: WSDOT rejected the request because WSDOT_ACCESS_CODE is missing, invalid, or not registered. Other values are possible when a failure originates below the handler.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'notice': {'type': 'string', 'description': 'Informational note about the page window, or guidance when no corridors matched the route filter or the offset ran past the end.'}, 'hasMore': {'type': 'boolean', 'description': 'True when more corridors remain beyond the current page.'}, 'corridors': {'type': 'array', 'items': {'type': 'object', 'properties': {'name': {'type': 'string', 'description': 'Corridor name (e.g. "I-5: Northgate to Downtown").'}, 'endPoint': {'type': 'object', 'properties': {'milePost': {'type': 'number', 'description': 'Ending milepost.'}, 'roadName': {'type': 'string', 'description': 'Road name at the end.'}, 'direction': {'type': 'string', 'description': 'Travel direction code: N (north), S (south), E (east), W (west).'}}, 'description': 'End of the measured corridor.', 'additionalProperties': False}, 'startPoint': {'type': 'object', 'properties': {'milePost': {'type': 'number', 'description': 'Starting milepost.'}, 'roadName': {'type': 'string', 'description': 'Road name at the start.'}, 'direction': {'type': 'string', 'description': 'Travel direction code: N (north), S (south), E (east), W (west).'}}, 'description': 'Start of the measured corridor.', 'additionalProperties': False}, 'description': {'type': 'string', 'description': 'Additional corridor description.'}, 'timeUpdated': {'type': 'string', 'description': 'When the travel time data was last updated (ISO 8601).'}, 'travelTimeId': {'type': 'number', 'description': 'Unique corridor identifier.'}, 'delayInMinutes': {'type': 'number', 'description': 'Delay above average in minutes. Positive means congestion. Absent when either travel time is unavailable.'}, 'distanceInMiles': {'type': 'number', 'description': 'Corridor distance in miles.'}, 'averageTimeInMinutes': {'type': 'number', 'description': 'Historical average travel time in minutes. Absent when WSDOT reports no measurement for the corridor.'}, 'currentTimeInMinutes': {'type': 'number', 'description': 'Current travel time in minutes. Absent when WSDOT reports no measurement for the corridor â\x80\x94 a reversible express lane closed in this direction reports none.'}}, 'description': 'Travel time data for one highway corridor.', 'additionalProperties': False}, 'description': 'Travel time corridors matching the filter.'}, 'nextOffset': {'type': ['number', 'null'], 'description': 'Offset to pass to retrieve the next page, or null when this is the last page.'}, 'totalCount': {'type': 'number', 'description': 'Total corridors matching the filter across all pages (not just this page).'}, 'routeFilter': {'type': 'string', 'description': 'The route name filter applied (lowercased), or absent if no filter was used.'}}, 'additionalProperties': False}
Esquema de entrada
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['vessels', 'totalCount']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['api_unavailable', 'invalid_access_code'], 'description': 'Machine-readable failure mode. Declared by this tool: `api_unavailable`: WSF Ferry API is unreachable or returns a non-2xx response after retries. `invalid_access_code`: WSF rejected the request because WSDOT_ACCESS_CODE is missing, invalid, or not registered. Other values are possible when a failure originates below the handler.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'notice': {'type': 'string', 'description': 'Optional notice when no vessel data is available. Absent on normal results.'}, 'vessels': {'type': 'array', 'items': {'type': 'object', 'required': ['opRouteAbbrev'], 'properties': {'eta': {'type': 'string', 'description': 'Estimated arrival time at the destination terminal.'}, 'speed': {'type': 'number', 'description': 'Speed in knots.'}, 'atDock': {'type': 'boolean', 'description': 'True when the vessel is docked at a terminal.'}, 'heading': {'type': 'number', 'description': 'Heading in degrees (0â\x80\x93359).'}, 'latitude': {'type': 'number', 'description': 'Current latitude (AIS position).'}, 'leftDock': {'type': 'string', 'description': 'Time the vessel last left the dock.'}, 'vesselId': {'type': 'number', 'description': 'Unique vessel identifier.'}, 'inService': {'type': 'boolean', 'description': 'Whether the vessel is currently in service.'}, 'longitude': {'type': 'number', 'description': 'Current longitude (AIS position).'}, 'timestamp': {'type': 'string', 'description': 'AIS data timestamp â\x80\x94 indicates position data age.'}, 'vesselName': {'type': 'string', 'description': 'Vessel name (e.g. "Yakima", "Walla Walla").'}, 'opRouteAbbrev': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Abbreviations of routes this vessel operates on.'}, 'arrivingTerminalId': {'type': 'number', 'description': 'Terminal the vessel is heading toward.'}, 'scheduledDeparture': {'type': 'string', 'description': 'Scheduled departure time.'}, 'departingTerminalId': {'type': 'number', 'description': 'Terminal the vessel is departing from.'}, 'arrivingTerminalName': {'type': 'string', 'description': 'Arriving terminal name.'}, 'departingTerminalName': {'type': 'string', 'description': 'Departing terminal name.'}}, 'description': 'Real-time position and status for one WSF vessel.', 'additionalProperties': False}, 'description': 'All WSF vessels with real-time position data.'}, 'totalCount': {'type': 'number', 'description': 'Total number of vessels returned.'}}, 'additionalProperties': False}
Esquema de entrada
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'limit': {'type': 'integer', 'maximum': 500, 'minimum': 1, 'description': 'Maximum alerts to return in this page (1â\x80\x93500). Defaults to 20. A page of long alerts can end sooner, at the 24,000-byte response budget.'}, 'offset': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Zero-based index of the first alert to return, for paging. Defaults to 0.'}, 'region': {'type': 'string', 'maxLength': 200, 'description': 'WSDOT region name as it appears in alert data: "Northwest", "Olympic", "Southwest", "South Central", "North Central", or "Eastern". Matching is case-insensitive; any other value is rejected. These are names, not the two-letter codes wsdot_search_cameras takes.'}, 'stateRoute': {'type': 'string', 'maxLength': 200, 'description': 'State route to filter by. Accepts natural forms â\x80\x94 "I-90", "90", "090", "SR 520", "520" â\x80\x94 matched case- and space-insensitively to the route number. A route-type prefix is compared only when both sides carry one, so "SR 26" never matches US 26 while a bare "26" matches either. Omit to include all routes.'}, 'endMilepost': {'type': 'number', 'description': 'End of the milepost range. Matched by extent overlap like startMilepost, so an alert beginning inside the range and continuing past it is returned.'}, 'startMilepost': {'type': 'number', 'description': 'Start of the milepost range. An alert matches when its extent overlaps the range, so a closure running from MP 10 to MP 30 is returned for a range starting at MP 20. Either bound may be given alone; when both are given, startMilepost must not exceed endMilepost. Alerts reporting no milepost are always included.'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['alerts', 'totalCount', 'nextOffset', 'hasMore', 'appliedFilters']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['api_unavailable', 'invalid_access_code', 'invalid_region', 'invalid_milepost_range'], 'description': 'Machine-readable failure mode. Declared by this tool: `api_unavailable`: WSDOT Traffic API is unreachable or returns a non-2xx response after retries. `invalid_access_code`: WSDOT rejected the request because WSDOT_ACCESS_CODE is missing, invalid, or not registered. `invalid_region`: The region is not one of the WSDOT region names the alerts feed carries. `invalid_milepost_range`: startMilepost is greater than endMilepost. Other values are possible when a failure originates below the handler.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'alerts': {'type': 'array', 'items': {'type': 'object', 'properties': {'county': {'type': 'string', 'description': 'County where the alert is located.'}, 'region': {'type': 'string', 'description': 'WSDOT region where the alert is located.'}, 'alertId': {'type': 'number', 'description': 'Unique alert identifier.'}, 'endTime': {'type': 'string', 'description': 'When the event is expected to end (ISO 8601).'}, 'priority': {'type': 'string', 'description': 'Priority level.'}, 'startTime': {'type': 'string', 'description': 'When the event started or is scheduled to start (ISO 8601).'}, 'eventStatus': {'type': 'string', 'description': 'Current status of the event.'}, 'eventCategory': {'type': 'string', 'description': 'Category (e.g. "Incident", "Construction", "Closure").'}, 'lastUpdatedTime': {'type': 'string', 'description': 'When this alert was last updated (ISO 8601).'}, 'endRoadwayLocation': {'type': 'object', 'properties': {'latitude': {'type': 'number', 'description': 'Latitude.'}, 'milePost': {'type': 'number', 'description': 'Ending milepost.'}, 'roadName': {'type': 'string', 'description': 'Road name.'}, 'direction': {'type': 'string', 'description': 'Travel direction code: N/S/E/W, B (both directions), A (alternating); may appear as NB/SB/EB/WB.'}, 'longitude': {'type': 'number', 'description': 'Longitude.'}}, 'description': 'End location of the alert, if the event spans a range.', 'additionalProperties': False}, 'extendedDescription': {'type': 'string', 'description': 'Full description of the alert, normalized to plain text on the same terms as headlineDescription. Often absent â\x80\x94 most alerts carry only a headline.'}, 'headlineDescription': {'type': 'string', 'description': 'Short summary of the alert, as plain text. Upstream authors these in a rich-text editor, so any markup is normalized away and a link is rendered inline as "link text (url)".'}, 'startRoadwayLocation': {'type': 'object', 'properties': {'latitude': {'type': 'number', 'description': 'Latitude.'}, 'milePost': {'type': 'number', 'description': 'Starting milepost.'}, 'roadName': {'type': 'string', 'description': 'Road name.'}, 'direction': {'type': 'string', 'description': 'Travel direction code: N/S/E/W, B (both directions), A (alternating); may appear as NB/SB/EB/WB.'}, 'longitude': {'type': 'number', 'description': 'Longitude.'}}, 'description': 'Start location of the alert.', 'additionalProperties': False}}, 'description': 'A highway alert or incident.', 'additionalProperties': False}, 'description': 'Matching highway alerts.'}, 'notice': {'type': 'string', 'description': 'Informational note about the page window, or guidance when no alerts matched the filters or the offset ran past the end.'}, 'hasMore': {'type': 'boolean', 'description': 'True when more alerts remain beyond the current page.'}, 'nextOffset': {'type': ['number', 'null'], 'description': 'Offset to pass to retrieve the next page, or null when this is the last page.'}, 'totalCount': {'type': 'number', 'description': 'Total alerts matching the filters across all pages (not just this page).'}, 'appliedFilters': {'type': 'object', 'properties': {'region': {'type': 'string', 'description': 'Region filter applied.'}, 'stateRoute': {'type': 'string', 'description': 'State route filter applied.'}, 'endMilepost': {'type': 'number', 'description': 'End milepost filter applied.'}, 'startMilepost': {'type': 'number', 'description': 'Start milepost filter applied.'}}, 'description': 'Active filters applied to the alert search.', 'additionalProperties': False}}, 'additionalProperties': False}
Esquema de entrada
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'limit': {'type': 'integer', 'maximum': 500, 'minimum': 1, 'description': 'Maximum cameras to return in this page (1â\x80\x93500). Defaults to 50. A large page ends sooner, at the 24,000-byte response budget.'}, 'offset': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Zero-based index of the first camera to return, for paging. Defaults to 0.'}, 'region': {'type': 'string', 'maxLength': 200, 'description': 'WSDOT region code: NW (Northwest), SW (Southwest), OL (Olympic), ER (Eastern), SC (South Central), NC (North Central), OS (Oregon â\x80\x94 the TripCheck cameras around Portland), or WA (airport cameras plus a few ferry-terminal cameras â\x80\x94 most ferry-terminal cameras sit in NW and OL). Matching is case-insensitive; any other value is rejected. These are codes, not the region names wsdot_search_alerts takes.'}, 'stateRoute': {'type': 'string', 'maxLength': 200, 'description': 'State route to filter by. Accepts natural forms â\x80\x94 "I-90", "90", "090", "SR 520", "520" â\x80\x94 matched case- and space-insensitively to the route number. Camera road names carry a route-type prefix, which is compared when the filter carries one too: "SR 26" excludes US 26, while a bare "26" returns both. A lettered suffix is part of the route, so "US 97" excludes US 97A. Omit to include all routes.'}, 'endMilepost': {'type': 'number', 'description': 'End of the milepost range to filter cameras.'}, 'startMilepost': {'type': 'number', 'description': 'Start of the milepost range to filter cameras. Either bound may be given alone; when both are given, startMilepost must not exceed endMilepost. Cameras reporting no milepost are always included.'}, 'titleContains': {'type': 'string', 'maxLength': 200, 'description': 'Words to find in the camera title, as WSDOT wrote it. Case-insensitive; every whitespace-separated word must appear, in any order â\x80\x94 "Snoqualmie" returns "Snoqualmie Summit" and "East Snoqualmie Summit" but not a nearby camera titled "Hyak". Most titles lead with route and milepost ("I-90 at MP 52: â\x80¦"), so filter a route with stateRoute rather than here. Combines with the other filters. Omit to include every title.'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['cameras', 'totalCount', 'nextOffset', 'hasMore', 'appliedFilters']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['api_unavailable', 'invalid_access_code', 'invalid_region', 'invalid_milepost_range'], 'description': 'Machine-readable failure mode. Declared by this tool: `api_unavailable`: WSDOT Traffic API is unreachable or returns a non-2xx response after retries. `invalid_access_code`: WSDOT rejected the request because WSDOT_ACCESS_CODE is missing, invalid, or not registered. `invalid_region`: The region is not one of the region codes the camera feed carries. `invalid_milepost_range`: startMilepost is greater than endMilepost. Other values are possible when a failure originates below the handler.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'notice': {'type': 'string', 'description': 'Informational note about the page window, copyright, or empty results. Absent when not applicable.'}, 'cameras': {'type': 'array', 'items': {'type': 'object', 'properties': {'title': {'type': 'string', 'description': 'Camera title or location description.'}, 'region': {'type': 'string', 'description': 'WSDOT region.'}, 'cameraId': {'type': 'number', 'description': 'Unique camera identifier.'}, 'imageUrl': {'type': 'string', 'description': 'URL of the WSDOT-hosted camera image (JPEG). WSDOT copyright applies.'}, 'latitude': {'type': 'number', 'description': 'Camera latitude.'}, 'milePost': {'type': 'number', 'description': 'Milepost location of the camera.'}, 'roadName': {'type': 'string', 'description': 'Road the camera monitors.'}, 'direction': {'type': 'string', 'description': 'Traffic-direction code monitored: N/S/E/W, B (both), NB/SB/EB/WB. Some sites use other location-specific markers.'}, 'longitude': {'type': 'number', 'description': 'Camera longitude.'}, 'imageWidth': {'type': 'number', 'description': 'Image width in pixels.'}, 'description': {'type': 'string', 'description': 'Additional description.'}, 'imageHeight': {'type': 'number', 'description': 'Image height in pixels.'}}, 'description': 'Camera metadata and image URL for one WSDOT highway camera.', 'additionalProperties': False}, 'description': 'Camera metadata and image URLs. Images are copyright WSDOT.'}, 'hasMore': {'type': 'boolean', 'description': 'True when more cameras remain beyond the current page.'}, 'nextOffset': {'type': ['number', 'null'], 'description': 'Offset to pass to retrieve the next page, or null when this is the last page.'}, 'totalCount': {'type': 'number', 'description': 'Total cameras matching the filters across all pages (not just this page).'}, 'appliedFilters': {'type': 'object', 'properties': {'region': {'type': 'string', 'description': 'Region filter applied.'}, 'stateRoute': {'type': 'string', 'description': 'State route filter applied.'}, 'endMilepost': {'type': 'number', 'description': 'End milepost filter applied.'}, 'startMilepost': {'type': 'number', 'description': 'Start milepost filter applied.'}, 'titleContains': {'type': 'string', 'description': 'Title words filter applied.'}}, 'description': 'Active filters applied to the camera search.', 'additionalProperties': False}}, 'additionalProperties': False}
Cambios recientes en herramientas
Servidores MCP similares
MolTravel
Searches and provides details for flights, hotels, rental cars, ferries, airports, travel experiences, destinations, country info…
Wmata
Provides Washington Metro rail and bus routes, stops, stations, service incidents, route details, and real-time arrival predictio…
Openrouteservice
Provides geocoding, routing, travel-time matrices, isochrones, snapping, and elevation data using OpenStreetMap-based services.
Google_maps
Provides Google Maps geocoding, place search and details, directions, distance matrices, and elevation data.
SeaWeb
Searches and extracts web information about entities and travel locations, including restaurants, salons, tourist conditions, dis…
Aviationstack
Provides airline, airport, city, country, and flight directory data, including real-time and scheduled flight details.
Nps
Searches National Park Service data for parks, campgrounds, activities, alerts, visitor statistics, locations, fees, and operatin…
Tfl
Provides London transport journey planning, line status, disruptions, stop arrivals, and Santander Cycle availability.