changedOutput schema / oneOf
Previous value: -[
- {
- "additionalProperties": false,
- "properties": {
- "accuracyRegionId": {
- "type": [
- "string",
- "null"
- ]
- },
- "airQualityTrend": {
- "additionalProperties": false,
- "properties": {
- "backfilledFrom": {
- "type": "string"
- },
- "firstDate": {
- "type": "string"
- },
- "lastDate": {
- "type": "string"
- },
- "latestValue": {
- "type": "number"
- },
- "scale": {
- "enum": [
- "us_aqi",
- "aqhi"
- ]
- }
- },
- "required": [
- "scale",
- "firstDate",
- "lastDate",
- "latestValue"
- ],
- "type": "object"
- },
- "days": {
- "items": {
- "additionalProperties": false,
- "properties": {
- "airQuality": {
- "additionalProperties": false,
- "properties": {
- "aqi": {
- "type": "number"
- },
- "category": {
- "type": "string"
- },
- "scale": {
- "enum": [
- "us_aqi",
- "aqhi"
- ]
- },
- "sourceName": {
- "type": "string"
- },
- "warning": {
- "type": "boolean"
- }
- },
- "required": [
- "aqi",
- "category",
- "scale",
- "sourceName",
- "warning"
- ],
- "type": "object"
- },
- "avalancheBasis": {
- "additionalProperties": false,
- "properties": {
- "centerName": {
- "type": [
- "string",
- "null"
- ]
- },
- "included": {
- "type": "boolean"
- },
- "reason": {
- "enum": [
- "off_season",
- "no_zone",
- "not_yet_issued",
- "expired",
- "unavailable",
- null
- ]
- }
- },
- "required": [
- "included",
- "reason",
- "centerName"
- ],
- "type": "object"
- },
- "avalancheDanger": {
- "enum": [
- "low",
- "moderate",
- "considerable",
- "high",
- "extreme",
- "no_data"
- ]
- },
- "cornHarvestWindow": {
- "anyOf": [
- {
- "additionalProperties": false,
- "properties": {
- "status": {
- "type": "string"
- },
- "window": {
- "anyOf": [
- {
- "additionalProperties": false,
- "properties": {
- "end": {
- "type": "string"
- },
- "start": {
- "type": "string"
- }
- },
- "required": [
- "start",
- "end"
- ],
- "type": "object"
- },
- {
- "type": "null"
- }
- ]
- }
- },
- "required": [
- "status",
- "window"
- ],
- "type": "object"
- },
- {
- "type": "null"
- }
- ]
- },
- "date": {
- "type": "string"
- },
- "moonIllumination": {
- "type": "number"
- },
- "moonPhase": {
- "enum": [
- "new",
- "waxing_crescent",
- "first_quarter",
- "waxing_gibbous",
- "full",
- "waning_gibbous",
- "last_quarter",
- "waning_crescent"
- ]
- },
- "overallRating": {
- "enum": [
- "excellent",
- "good",
- "marginal",
- "poor",
- "dangerous",
- null
- ]
- },
- "precipChancePercent": {
- "type": [
- "number",
- "null"
- ]
- },
- "provenance": {
- "additionalProperties": false,
- "properties": {
- "weather": {
- "additionalProperties": false,
- "properties": {
- "fetchedAt": {
- "type": [
- "string",
- "null"
- ]
- },
- "sourceName": {
- "type": "string"
- },
- "url": {
- "type": "string"
- }
- },
- "required": [
- "sourceName"
- ],
- "type": "object"
- }
- },
- "required": [
- "weather"
- ],
- "type": "object"
- },
- "referencePoint": {
- "const": "route-high-point"
- },
- "snowpackCondition": {
- "enum": [
- "powder",
- "packed_powder",
- "wind_crust",
- "sun_crust",
- "corn",
- "ice",
- "wet_heavy",
- "bare"
- ]
- },
- "summitTempHighF": {
- "type": "number"
- },
- "summitTempLowF": {
- "type": "number"
- },
- "sunrise": {
- "type": "string"
- },
- "sunriseAt": {
- "type": [
- "string",
- "null"
- ]
- },
- "sunset": {
- "type": "string"
- },
- "sunsetAt": {
- "type": [
- "string",
- "null"
- ]
- },
- "windAvgMph": {
- "type": "number"
- },
- "windDirection": {
- "type": "string"
- },
- "windMaxMph": {
- "type": "number"
- }
- },
- "required": [
- "date",
- "overallRating",
- "summitTempLowF",
- "summitTempHighF",
- "windMaxMph",
- "windDirection",
- "precipChancePercent",
- "provenance",
- "sunrise",
- "sunset",
- "sunriseAt",
- "sunsetAt",
- "moonPhase",
- "moonIllumination",
- "snowpackCondition",
- "referencePoint",
- "windAvgMph"
- ],
- "type": "object"
- },
- "maxItems": 5,
- "type": "array"
- },
- "disclaimer": {
- "type": "string"
- },
- "disclaimerText": {
- "const": "This data is for informational purposes only. ClimbCast presents information, you manage risk. Ratings are decision-support heuristics, not advice. For any safety-critical decision, always consult the official source bulletin directly. Forecasts may contain errors and are not a substitute for sound human judgment. Weather and avalanche conditions can change rapidly and without warning. You are solely responsible for your decisions in the outdoors."
- },
- "lockedOutlook": {
- "additionalProperties": false,
- "properties": {
- "lockedDayCount": {
- "minimum": 1,
- "type": "integer"
- },
- "maxHorizonDays": {
- "const": 15
- },
- "note": {
- "const": "This response covers days 1 to 5. Later days are published on climbcast.io."
- },
- "throughDate": {
- "type": "string"
- }
- },
- "required": [
- "lockedDayCount",
- "throughDate",
- "maxHorizonDays",
- "note"
- ],
- "type": "object"
- },
- "objective": {
- "additionalProperties": false,
- "properties": {
- "name": {
- "type": "string"
- },
- "slug": {
- "type": "string"
- }
- },
- "required": [
- "slug",
- "name"
- ],
- "type": "object"
- },
- "route": {
- "additionalProperties": false,
- "properties": {
- "activityMode": {
- "enum": [
- "mountaineering",
- "skimo_splitboard",
- "rock_climbing"
- ]
- },
- "catalogGainFt": {
- "type": "number"
- },
- "highPointElevationFt": {
- "type": "number"
- },
- "id": {
- "type": "string"
- },
- "name": {
- "type": "string"
- },
- "supportedActivities": {
- "items": {
- "enum": [
- "mountaineering",
- "skimo_splitboard",
- "rock_climbing"
- ]
- },
- "type": "array"
- }
- },
- "required": [
- "id",
- "name",
- "catalogGainFt",
- "activityMode",
- "supportedActivities"
- ],
- "type": "object"
- },
- "source": {
- "const": "ClimbCast"
- },
- "sourceUrl": {
- "type": "string"
- },
- "sources": {
- "items": {
- "$ref": "#/$defs/source"
- },
- "type": "array"
- },
- "timeZone": {
- "type": "string"
- },
- "updatedAt": {
- "type": "string"
- },
- "utcOffsetSeconds": {
- "type": "number"
- }
- },
- "required": [
- "source",
- "sourceUrl",
- "disclaimer",
- "objective",
- "accuracyRegionId",
- "updatedAt",
- "sources",
- "disclaimerText",
- "route",
- "days"
- ],
- "type": "object"
- },
- {
- "additionalProperties": false,
- "properties": {
- "disclaimerText": {
- "const": "This data is for informational purposes only. ClimbCast presents information, you manage risk. Ratings are decision-support heuristics, not advice. For any safety-critical decision, always consult the official source bulletin directly. Forecasts may contain errors and are not a substitute for sound human judgment. Weather and avalanche conditions can change rapidly and without warning. You are solely responsible for your decisions in the outdoors."
- },
- "message": {
- "type": "string"
- },
- "status": {
- "const": "not_found"
- },
- "suggestions": {
- "items": {
- "additionalProperties": false,
- "properties": {
- "name": {
- "type": "string"
- },
- "slug": {
- "type": "string"
- }
- },
- "required": [
- "slug",
- "name"
- ],
- "type": "object"
- },
- "maxItems": 3,
- "type": "array"
- },
- "try": {
- "const": "search_objectives"
- }
- },
- "required": [
- "status",
- "message",
- "try",
- "suggestions",
- "disclaimerText"
- ],
- "type": "object"
- },
- {
- "additionalProperties": false,
- "properties": {
- "disclaimerText": {
- "const": "This data is for informational purposes only. ClimbCast presents information, you manage risk. Ratings are decision-support heuristics, not advice. For any safety-critical decision, always consult the official source bulletin directly. Forecasts may contain errors and are not a substitute for sound human judgment. Weather and avalanche conditions can change rapidly and without warning. You are solely responsible for your decisions in the outdoors."
- },
- "error": {
- "const": "invalid_input"
- },
- "fields": {
- "items": {
- "additionalProperties": false,
- "properties": {
- "allowed": {
- "items": {
- "type": "string"
- },
- "type": "array"
- },
- "field": {
- "type": "string"
- },
- "problem": {
- "enum": [
- "required",
- "type",
- "enum",
- "length",
- "pattern",
- "range",
- "format",
- "not_in_window",
- "unexpected"
- ]
- }
- },
- "required": [
- "field",
- "problem"
- ],
- "type": "object"
- },
- "type": "array"
- },
- "message": {
- "type": "string"
- },
- "requestId": {
- "type": [
- "string",
- "null"
- ]
- }
- },
- "required": [
- "error",
- "message",
- "requestId",
- "disclaimerText",
- "fields"
- ],
- "type": "object"
- },
- {
- "additionalProperties": false,
- "properties": {
- "disclaimerText": {
- "const": "This data is for informational purposes only. ClimbCast presents information, you manage risk. Ratings are decision-support heuristics, not advice. For any safety-critical decision, always consult the official source bulletin directly. Forecasts may contain errors and are not a substitute for sound human judgment. Weather and avalanche conditions can change rapidly and without warning. You are solely responsible for your decisions in the outdoors."
- },
- "error": {
- "enum": [
- "MCP_BUSY",
- "MCP_RESPONSE_TOO_LARGE",
- "MCP_VOICE_GATE_FAILED",
- "MCP_TOOL_FAILED",
- "rate_limited",
- "processing_limit",
- "response_limit"
- ]
- },
- "message": {
- "type": "string"
- },
- "requestId": {
- "type": [
- "string",
- "null"
- ]
- }
- },
- "required": [
- "error",
- "message",
- "requestId",
- "disclaimerText"
- ],
- "type": "object"
- }
-]New value: +[
+ {
+ "additionalProperties": false,
+ "properties": {
+ "access": {
+ "additionalProperties": false,
+ "properties": {
+ "appliesTo": {
+ "enum": [
+ "route",
+ "objective"
+ ]
+ },
+ "lastReviewed": {
+ "type": "string"
+ },
+ "managingUnit": {
+ "type": "string"
+ },
+ "notes": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "overnightParking": {
+ "additionalProperties": false,
+ "properties": {
+ "details": {
+ "type": "string"
+ },
+ "lastReviewed": {
+ "type": "string"
+ },
+ "officialUrl": {
+ "type": "string"
+ },
+ "overnightAllowed": {
+ "type": "boolean"
+ },
+ "overnightAllowedLabel": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "overnightAllowed",
+ "overnightAllowedLabel",
+ "details",
+ "officialUrl",
+ "lastReviewed"
+ ],
+ "type": "object"
+ },
+ "parkingPasses": {
+ "items": {
+ "additionalProperties": false,
+ "properties": {
+ "acceptedAlternativeLabels": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "acceptedAlternatives": {
+ "items": {
+ "enum": [
+ "northwest_forest_pass",
+ "discover_pass",
+ "sno_park",
+ "america_the_beautiful",
+ "national_park_entrance",
+ "vehicle_day_use",
+ "bc_parks_day_use",
+ "none",
+ "other"
+ ]
+ },
+ "type": "array"
+ },
+ "appliesWhen": {
+ "additionalProperties": false,
+ "properties": {
+ "aboveElevationFt": {
+ "type": "number"
+ },
+ "dayUseOnly": {
+ "const": true
+ },
+ "glacierTravel": {
+ "type": "boolean"
+ },
+ "groupSizeAtLeast": {
+ "type": "number"
+ },
+ "note": {
+ "type": "string"
+ },
+ "overnightOnly": {
+ "const": true
+ },
+ "seasonEndMonth": {
+ "type": "number"
+ },
+ "seasonStartMonth": {
+ "type": "number"
+ }
+ },
+ "required": [],
+ "type": "object"
+ },
+ "fees": {
+ "items": {
+ "additionalProperties": false,
+ "properties": {
+ "amount": {
+ "type": "number"
+ },
+ "currency": {
+ "enum": [
+ "USD",
+ "CAD"
+ ]
+ },
+ "note": {
+ "type": "string"
+ },
+ "unit": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "amount",
+ "currency",
+ "unit"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "lastReviewed": {
+ "type": "string"
+ },
+ "officialUrl": {
+ "type": "string"
+ },
+ "pass": {
+ "enum": [
+ "northwest_forest_pass",
+ "discover_pass",
+ "sno_park",
+ "america_the_beautiful",
+ "national_park_entrance",
+ "vehicle_day_use",
+ "bc_parks_day_use",
+ "none",
+ "other"
+ ]
+ },
+ "passLabel": {
+ "type": "string"
+ },
+ "required": {
+ "enum": [
+ "yes",
+ "no",
+ "seasonal",
+ "self-issue",
+ "conditional"
+ ]
+ },
+ "requiredLabel": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "pass",
+ "passLabel",
+ "required",
+ "requiredLabel",
+ "fees",
+ "officialUrl",
+ "lastReviewed"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "permits": {
+ "items": {
+ "additionalProperties": false,
+ "properties": {
+ "appliesWhen": {
+ "additionalProperties": false,
+ "properties": {
+ "aboveElevationFt": {
+ "type": "number"
+ },
+ "dayUseOnly": {
+ "const": true
+ },
+ "glacierTravel": {
+ "type": "boolean"
+ },
+ "groupSizeAtLeast": {
+ "type": "number"
+ },
+ "note": {
+ "type": "string"
+ },
+ "overnightOnly": {
+ "const": true
+ },
+ "seasonEndMonth": {
+ "type": "number"
+ },
+ "seasonStartMonth": {
+ "type": "number"
+ }
+ },
+ "required": [],
+ "type": "object"
+ },
+ "feeFreeDaysNote": {
+ "type": "string"
+ },
+ "fees": {
+ "items": {
+ "additionalProperties": false,
+ "properties": {
+ "amount": {
+ "type": "number"
+ },
+ "currency": {
+ "enum": [
+ "USD",
+ "CAD"
+ ]
+ },
+ "note": {
+ "type": "string"
+ },
+ "unit": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "amount",
+ "currency",
+ "unit"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "issueMethod": {
+ "items": {
+ "enum": [
+ "online_prepay",
+ "online_reservation",
+ "ranger_station",
+ "ticket_window",
+ "self_issue_trailhead",
+ "lottery",
+ "none"
+ ]
+ },
+ "type": "array"
+ },
+ "issueMethodLabels": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "kind": {
+ "enum": [
+ "climbing",
+ "wilderness_overnight",
+ "wilderness_day",
+ "monument_climbing",
+ "timed_entry",
+ "cave",
+ "other"
+ ]
+ },
+ "kindLabel": {
+ "type": "string"
+ },
+ "lastReviewed": {
+ "type": "string"
+ },
+ "officialUrl": {
+ "type": "string"
+ },
+ "payUrl": {
+ "type": "string"
+ },
+ "quota": {
+ "type": "string"
+ },
+ "required": {
+ "enum": [
+ "yes",
+ "no",
+ "seasonal",
+ "self-issue",
+ "conditional"
+ ]
+ },
+ "requiredLabel": {
+ "type": "string"
+ },
+ "validityNote": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "kind",
+ "kindLabel",
+ "required",
+ "requiredLabel",
+ "fees",
+ "issueMethod",
+ "issueMethodLabels",
+ "officialUrl",
+ "lastReviewed"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "verifyBeforeTripNote": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "appliesTo",
+ "permits",
+ "parkingPasses",
+ "notes",
+ "lastReviewed"
+ ],
+ "type": "object"
+ },
+ "accuracyRegionId": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "airQualityTrend": {
+ "additionalProperties": false,
+ "properties": {
+ "backfilledFrom": {
+ "type": "string"
+ },
+ "firstDate": {
+ "type": "string"
+ },
+ "lastDate": {
+ "type": "string"
+ },
+ "latestValue": {
+ "type": "number"
+ },
+ "scale": {
+ "enum": [
+ "us_aqi",
+ "aqhi"
+ ]
+ }
+ },
+ "required": [
+ "scale",
+ "firstDate",
+ "lastDate",
+ "latestValue"
+ ],
+ "type": "object"
+ },
+ "days": {
+ "items": {
+ "additionalProperties": false,
+ "properties": {
+ "airQuality": {
+ "additionalProperties": false,
+ "properties": {
+ "aqi": {
+ "type": "number"
+ },
+ "category": {
+ "type": "string"
+ },
+ "scale": {
+ "enum": [
+ "us_aqi",
+ "aqhi"
+ ]
+ },
+ "sourceName": {
+ "type": "string"
+ },
+ "warning": {
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "aqi",
+ "category",
+ "scale",
+ "sourceName",
+ "warning"
+ ],
+ "type": "object"
+ },
+ "avalanche": {
+ "additionalProperties": false,
+ "properties": {
+ "bulletinState": {
+ "enum": [
+ "no_zone",
+ "off_season",
+ "no_rating",
+ "between_issuances",
+ "not_yet_issued",
+ "unavailable",
+ "active"
+ ]
+ },
+ "bulletinUrl": {
+ "type": "string"
+ },
+ "center": {
+ "additionalProperties": false,
+ "properties": {
+ "name": {
+ "oneOf": [
+ {
+ "type": "string"
+ },
+ {
+ "additionalProperties": false,
+ "properties": {
+ "attribution": {
+ "type": "string"
+ },
+ "issuedAt": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "kind": {
+ "const": "third_party_quote"
+ },
+ "text": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "kind",
+ "text",
+ "attribution",
+ "issuedAt"
+ ],
+ "type": "object"
+ }
+ ]
+ },
+ "url": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "name"
+ ],
+ "type": "object"
+ },
+ "isCurrent": {
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "bulletinState",
+ "isCurrent"
+ ],
+ "type": "object"
+ },
+ "avalancheBasis": {
+ "additionalProperties": false,
+ "properties": {
+ "centerName": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "included": {
+ "type": "boolean"
+ },
+ "reason": {
+ "enum": [
+ "off_season",
+ "no_zone",
+ "not_yet_issued",
+ "expired",
+ "unavailable",
+ null
+ ]
+ }
+ },
+ "required": [
+ "included",
+ "reason",
+ "centerName"
+ ],
+ "type": "object"
+ },
+ "avalancheDanger": {
+ "enum": [
+ "low",
+ "moderate",
+ "considerable",
+ "high",
+ "extreme",
+ "no_data"
+ ]
+ },
+ "cornHarvestWindow": {
+ "anyOf": [
+ {
+ "additionalProperties": false,
+ "properties": {
+ "confidence": {
+ "enum": [
+ "high",
+ "medium",
+ "low",
+ "uncertain"
+ ]
+ },
+ "endAt": {
+ "type": "string"
+ },
+ "reason": {
+ "type": "string"
+ },
+ "refreeze": {
+ "enum": [
+ "passed",
+ "marginal",
+ "failed",
+ "not_evaluated"
+ ]
+ },
+ "startAt": {
+ "type": "string"
+ },
+ "status": {
+ "type": "string"
+ },
+ "window": {
+ "anyOf": [
+ {
+ "additionalProperties": false,
+ "properties": {
+ "end": {
+ "type": "string"
+ },
+ "start": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "start",
+ "end"
+ ],
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ },
+ "required": [
+ "status",
+ "window"
+ ],
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "date": {
+ "type": "string"
+ },
+ "moonIllumination": {
+ "type": "number"
+ },
+ "moonPhase": {
+ "enum": [
+ "new",
+ "waxing_crescent",
+ "first_quarter",
+ "waxing_gibbous",
+ "full",
+ "waning_gibbous",
+ "last_quarter",
+ "waning_crescent"
+ ]
+ },
+ "overallRating": {
+ "enum": [
+ "excellent",
+ "good",
+ "marginal",
+ "poor",
+ "dangerous",
+ null
+ ]
+ },
+ "precipChancePercent": {
+ "type": [
+ "number",
+ "null"
+ ]
+ },
+ "provenance": {
+ "additionalProperties": false,
+ "properties": {
+ "weather": {
+ "additionalProperties": false,
+ "properties": {
+ "fetchedAt": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "sourceName": {
+ "type": "string"
+ },
+ "url": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "sourceName"
+ ],
+ "type": "object"
+ }
+ },
+ "required": [
+ "weather"
+ ],
+ "type": "object"
+ },
+ "referencePoint": {
+ "const": "route-high-point"
+ },
+ "rockConditions": {
+ "additionalProperties": false,
+ "properties": {
+ "cragTempF": {
+ "type": "number"
+ },
+ "humidityPercent": {
+ "type": "number"
+ },
+ "rockStatus": {
+ "enum": [
+ "dry",
+ "likely_dry",
+ "damp",
+ "wet",
+ "unknown"
+ ]
+ },
+ "rockStatusDescription": {
+ "type": "string"
+ },
+ "sendingWindowEnd": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "sendingWindowEndAt": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "sendingWindowNote": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "sendingWindowStart": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "sendingWindowStartAt": {
+ "type": [
+ "string",
+ "null"
+ ]
+ }
+ },
+ "required": [
+ "rockStatus",
+ "rockStatusDescription",
+ "cragTempF",
+ "humidityPercent",
+ "sendingWindowStart",
+ "sendingWindowEnd",
+ "sendingWindowStartAt",
+ "sendingWindowEndAt",
+ "sendingWindowNote"
+ ],
+ "type": "object"
+ },
+ "snowpackCondition": {
+ "enum": [
+ "powder",
+ "packed_powder",
+ "wind_crust",
+ "sun_crust",
+ "corn",
+ "ice",
+ "wet_heavy",
+ "bare"
+ ]
+ },
+ "summitTempHighF": {
+ "type": "number"
+ },
+ "summitTempLowF": {
+ "type": "number"
+ },
+ "sunrise": {
+ "type": "string"
+ },
+ "sunriseAt": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "sunset": {
+ "type": "string"
+ },
+ "sunsetAt": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "uncertainty": {
+ "additionalProperties": false,
+ "properties": {
+ "climatology": {
+ "additionalProperties": false,
+ "properties": {
+ "normalMedian": {
+ "type": "number"
+ },
+ "percentile": {
+ "type": "number"
+ },
+ "sampleSize": {
+ "type": "number"
+ },
+ "summary": {
+ "type": "string"
+ },
+ "unit": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "percentile",
+ "summary",
+ "sampleSize",
+ "normalMedian",
+ "unit"
+ ],
+ "type": "object"
+ },
+ "climatologyPercentiles": {
+ "items": {
+ "additionalProperties": false,
+ "properties": {
+ "normalMedian": {
+ "type": "number"
+ },
+ "percentile": {
+ "type": "number"
+ },
+ "sampleSize": {
+ "type": "number"
+ },
+ "summary": {
+ "type": "string"
+ },
+ "unit": {
+ "type": "string"
+ },
+ "variable": {
+ "enum": [
+ "summitHighTempF",
+ "freezingLevelFt",
+ "precipInWetDay"
+ ]
+ }
+ },
+ "required": [
+ "variable",
+ "percentile",
+ "summary",
+ "sampleSize",
+ "normalMedian",
+ "unit"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "confidence": {
+ "additionalProperties": false,
+ "properties": {
+ "level": {
+ "enum": [
+ "high",
+ "medium",
+ "low"
+ ]
+ },
+ "reason": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "level",
+ "reason"
+ ],
+ "type": "object"
+ },
+ "modelSpread": {
+ "additionalProperties": false,
+ "properties": {
+ "fields": {
+ "items": {
+ "additionalProperties": false,
+ "properties": {
+ "label": {
+ "type": "string"
+ },
+ "rangeText": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "label",
+ "rangeText"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "level": {
+ "enum": [
+ "tight",
+ "moderate",
+ "wide"
+ ]
+ },
+ "summary": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "level",
+ "summary",
+ "fields"
+ ],
+ "type": "object"
+ }
+ },
+ "required": [],
+ "type": "object"
+ },
+ "windAvgMph": {
+ "type": "number"
+ },
+ "windDirection": {
+ "type": "string"
+ },
+ "windMaxMph": {
+ "type": "number"
+ }
+ },
+ "required": [
+ "date",
+ "overallRating",
+ "summitTempLowF",
+ "summitTempHighF",
+ "windMaxMph",
+ "windDirection",
+ "precipChancePercent",
+ "provenance",
+ "sunrise",
+ "sunset",
+ "sunriseAt",
+ "sunsetAt",
+ "moonPhase",
+ "moonIllumination",
+ "snowpackCondition",
+ "referencePoint",
+ "windAvgMph"
+ ],
+ "type": "object"
+ },
+ "maxItems": 5,
+ "type": "array"
+ },
+ "disclaimer": {
+ "type": "string"
+ },
+ "disclaimerText": {
+ "const": "This data is for informational purposes only. ClimbCast presents information, you manage risk. Ratings are decision-support heuristics, not advice. For any safety-critical decision, always consult the official source bulletin directly. Forecasts may contain errors and are not a substitute for sound human judgment. Weather and avalanche conditions can change rapidly and without warning. You are solely responsible for your decisions in the outdoors."
+ },
+ "lockedOutlook": {
+ "additionalProperties": false,
+ "properties": {
+ "lockedDayCount": {
+ "minimum": 1,
+ "type": "integer"
+ },
+ "maxHorizonDays": {
+ "const": 15
+ },
+ "note": {
+ "const": "This response covers days 1 to 5. Later days are published on climbcast.io."
+ },
+ "throughDate": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "lockedDayCount",
+ "throughDate",
+ "maxHorizonDays",
+ "note"
+ ],
+ "type": "object"
+ },
+ "objective": {
+ "additionalProperties": false,
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "slug": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "slug",
+ "name"
+ ],
+ "type": "object"
+ },
+ "permit": {
+ "additionalProperties": false,
+ "properties": {
+ "appliesTo": {
+ "enum": [
+ "route",
+ "objective"
+ ]
+ },
+ "fee": {
+ "type": "string"
+ },
+ "notes": {
+ "type": "string"
+ },
+ "required": {
+ "enum": [
+ "yes",
+ "no",
+ "seasonal",
+ "self-issue",
+ "unknown"
+ ]
+ },
+ "url": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "required",
+ "notes",
+ "appliesTo"
+ ],
+ "type": "object"
+ },
+ "route": {
+ "additionalProperties": false,
+ "properties": {
+ "activityMode": {
+ "enum": [
+ "mountaineering",
+ "skimo_splitboard",
+ "rock_climbing"
+ ]
+ },
+ "catalogGainFt": {
+ "type": "number"
+ },
+ "highPointElevationFt": {
+ "type": "number"
+ },
+ "id": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "supportedActivities": {
+ "items": {
+ "enum": [
+ "mountaineering",
+ "skimo_splitboard",
+ "rock_climbing"
+ ]
+ },
+ "type": "array"
+ }
+ },
+ "required": [
+ "id",
+ "name",
+ "catalogGainFt",
+ "activityMode",
+ "supportedActivities"
+ ],
+ "type": "object"
+ },
+ "source": {
+ "const": "ClimbCast"
+ },
+ "sourceUrl": {
+ "type": "string"
+ },
+ "sources": {
+ "items": {
+ "$ref": "#/$defs/source"
+ },
+ "type": "array"
+ },
+ "timeZone": {
+ "type": "string"
+ },
+ "trailheadAccess": {
+ "additionalProperties": false,
+ "properties": {
+ "drivingNotes": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "fetchedAt": {
+ "type": "string"
+ },
+ "passes": {
+ "items": {
+ "additionalProperties": false,
+ "properties": {
+ "dataFetchedAt": {
+ "type": "string"
+ },
+ "highway": {
+ "oneOf": [
+ {
+ "type": "string"
+ },
+ {
+ "additionalProperties": false,
+ "properties": {
+ "attribution": {
+ "type": "string"
+ },
+ "issuedAt": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "kind": {
+ "const": "third_party_quote"
+ },
+ "text": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "kind",
+ "text",
+ "attribution",
+ "issuedAt"
+ ],
+ "type": "object"
+ }
+ ]
+ },
+ "passName": {
+ "oneOf": [
+ {
+ "type": "string"
+ },
+ {
+ "additionalProperties": false,
+ "properties": {
+ "attribution": {
+ "type": "string"
+ },
+ "issuedAt": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "kind": {
+ "const": "third_party_quote"
+ },
+ "text": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "kind",
+ "text",
+ "attribution",
+ "issuedAt"
+ ],
+ "type": "object"
+ }
+ ]
+ },
+ "restrictedAreas": {
+ "items": {
+ "additionalProperties": false,
+ "properties": {
+ "name": {
+ "oneOf": [
+ {
+ "type": "string"
+ },
+ {
+ "additionalProperties": false,
+ "properties": {
+ "attribution": {
+ "type": "string"
+ },
+ "issuedAt": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "kind": {
+ "const": "third_party_quote"
+ },
+ "text": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "kind",
+ "text",
+ "attribution",
+ "issuedAt"
+ ],
+ "type": "object"
+ }
+ ]
+ },
+ "status": {
+ "enum": [
+ "open",
+ "closed",
+ "unknown"
+ ]
+ }
+ },
+ "required": [
+ "name",
+ "status"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "restrictions": {
+ "items": {
+ "oneOf": [
+ {
+ "type": "string"
+ },
+ {
+ "additionalProperties": false,
+ "properties": {
+ "attribution": {
+ "type": "string"
+ },
+ "issuedAt": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "kind": {
+ "const": "third_party_quote"
+ },
+ "text": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "kind",
+ "text",
+ "attribution",
+ "issuedAt"
+ ],
+ "type": "object"
+ }
+ ]
+ },
+ "type": "array"
+ },
+ "roadCondition": {
+ "oneOf": [
+ {
+ "type": "string"
+ },
+ {
+ "additionalProperties": false,
+ "properties": {
+ "attribution": {
+ "type": "string"
+ },
+ "issuedAt": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "kind": {
+ "const": "third_party_quote"
+ },
+ "text": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "kind",
+ "text",
+ "attribution",
+ "issuedAt"
+ ],
+ "type": "object"
+ }
+ ]
+ },
+ "source": {
+ "enum": [
+ "WSDOT",
+ "ODOT",
+ "DriveBC",
+ "Parks Canada"
+ ]
+ },
+ "sourceUrl": {
+ "type": "string"
+ },
+ "stale": {
+ "type": "boolean"
+ },
+ "temperatureF": {
+ "type": [
+ "number",
+ "null"
+ ]
+ },
+ "upstreamIssuedAt": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "passName",
+ "highway",
+ "roadCondition",
+ "restrictions",
+ "temperatureF",
+ "source",
+ "sourceUrl",
+ "stale"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "source": {
+ "type": "string"
+ },
+ "winterPermits": {
+ "items": {
+ "additionalProperties": false,
+ "properties": {
+ "passName": {
+ "oneOf": [
+ {
+ "type": "string"
+ },
+ {
+ "additionalProperties": false,
+ "properties": {
+ "attribution": {
+ "type": "string"
+ },
+ "issuedAt": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "kind": {
+ "const": "third_party_quote"
+ },
+ "text": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "kind",
+ "text",
+ "attribution",
+ "issuedAt"
+ ],
+ "type": "object"
+ }
+ ]
+ },
+ "restrictions": {
+ "items": {
+ "oneOf": [
+ {
+ "type": "string"
+ },
+ {
+ "additionalProperties": false,
+ "properties": {
+ "attribution": {
+ "type": "string"
+ },
+ "issuedAt": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "kind": {
+ "const": "third_party_quote"
+ },
+ "text": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "kind",
+ "text",
+ "attribution",
+ "issuedAt"
+ ],
+ "type": "object"
+ }
+ ]
+ },
+ "type": "array"
+ },
+ "roadCondition": {
+ "oneOf": [
+ {
+ "type": "string"
+ },
+ {
+ "additionalProperties": false,
+ "properties": {
+ "attribution": {
+ "type": "string"
+ },
+ "issuedAt": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "kind": {
+ "const": "third_party_quote"
+ },
+ "text": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "kind",
+ "text",
+ "attribution",
+ "issuedAt"
+ ],
+ "type": "object"
+ }
+ ]
+ },
+ "source": {
+ "const": "Parks Canada Rogers Pass Winter Permit System"
+ },
+ "sourceUrl": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "passName",
+ "roadCondition",
+ "restrictions",
+ "source",
+ "sourceUrl"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ }
+ },
+ "required": [
+ "source",
+ "passes",
+ "winterPermits",
+ "drivingNotes",
+ "fetchedAt"
+ ],
+ "type": "object"
+ },
+ "updatedAt": {
+ "type": "string"
+ },
+ "utcOffsetSeconds": {
+ "type": "number"
+ }
+ },
+ "required": [
+ "source",
+ "sourceUrl",
+ "disclaimer",
+ "objective",
+ "accuracyRegionId",
+ "updatedAt",
+ "sources",
+ "disclaimerText",
+ "route",
+ "days"
+ ],
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "properties": {
+ "disclaimerText": {
+ "const": "This data is for informational purposes only. ClimbCast presents information, you manage risk. Ratings are decision-support heuristics, not advice. For any safety-critical decision, always consult the official source bulletin directly. Forecasts may contain errors and are not a substitute for sound human judgment. Weather and avalanche conditions can change rapidly and without warning. You are solely responsible for your decisions in the outdoors."
+ },
+ "message": {
+ "type": "string"
+ },
+ "status": {
+ "const": "not_found"
+ },
+ "suggestions": {
+ "items": {
+ "additionalProperties": false,
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "slug": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "slug",
+ "name"
+ ],
+ "type": "object"
+ },
+ "maxItems": 3,
+ "type": "array"
+ },
+ "try": {
+ "const": "search_objectives"
+ }
+ },
+ "required": [
+ "status",
+ "message",
+ "try",
+ "suggestions",
+ "disclaimerText"
+ ],
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "properties": {
+ "disclaimerText": {
+ "const": "This data is for informational purposes only. ClimbCast presents information, you manage risk. Ratings are decision-support heuristics, not advice. For any safety-critical decision, always consult the official source bulletin directly. Forecasts may contain errors and are not a substitute for sound human judgment. Weather and avalanche conditions can change rapidly and without warning. You are solely responsible for your decisions in the outdoors."
+ },
+ "error": {
+ "const": "invalid_input"
+ },
+ "fields": {
+ "items": {
+ "additionalProperties": false,
+ "properties": {
+ "allowed": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "field": {
+ "type": "string"
+ },
+ "problem": {
+ "enum": [
+ "required",
+ "type",
+ "enum",
+ "length",
+ "pattern",
+ "range",
+ "format",
+ "not_in_window",
+ "unexpected"
+ ]
+ }
+ },
+ "required": [
+ "field",
+ "problem"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "message": {
+ "type": "string"
+ },
+ "requestId": {
+ "type": [
+ "string",
+ "null"
+ ]
+ }
+ },
+ "required": [
+ "error",
+ "message",
+ "requestId",
+ "disclaimerText",
+ "fields"
+ ],
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "properties": {
+ "disclaimerText": {
+ "const": "This data is for informational purposes only. ClimbCast presents information, you manage risk. Ratings are decision-support heuristics, not advice. For any safety-critical decision, always consult the official source bulletin directly. Forecasts may contain errors and are not a substitute for sound human judgment. Weather and avalanche conditions can change rapidly and without warning. You are solely responsible for your decisions in the outdoors."
+ },
+ "error": {
+ "enum": [
+ "MCP_BUSY",
+ "MCP_RESPONSE_TOO_LARGE",
+ "MCP_VOICE_GATE_FAILED",
+ "MCP_TOOL_FAILED",
+ "MCP_OUTPUT_INVALID",
+ "rate_limited",
+ "processing_limit",
+ "response_limit"
+ ]
+ },
+ "message": {
+ "type": "string"
+ },
+ "requestId": {
+ "type": [
+ "string",
+ "null"
+ ]
+ }
+ },
+ "required": [
+ "error",
+ "message",
+ "requestId",
+ "disclaimerText"
+ ],
+ "type": "object"
+ }
+]