{
  "object": "semipro.demo_output",
  "recorded_at": "2026-08-15T02:35:48.893Z",
  "source": {
    "gpx": "https://semipro.coach/examples/semipro-demo-course.gpx",
    "endpoint": "https://api.semipro.coach/mcp",
    "tool": "analyse_event_route",
    "synthetic_course": true,
    "navigable_route": false
  },
  "note": "Curated excerpt from a successful live public MCP response. The downloadable script prints the complete response.",
  "analysis": {
    "object": "semipro.event_demand_analysis",
    "contract_version": "semipro_event_demand_v1",
    "analysis_version": "route-demands-v2+lens1-v1",
    "capability": "event.demand",
    "id": null,
    "public_url": null,
    "event": {
      "name": "SEMIPRO Synthetic Demo Course",
      "type": "road_race",
      "course_format": "point_to_point"
    },
    "route": {
      "distance_km": 63.93,
      "elevation_gain_m": 1029,
      "elevation_loss_m": 852,
      "min_elevation_m": 77,
      "max_elevation_m": 584,
      "terrain_mix": {
        "climbing_pct": 33,
        "flat_pct": 45,
        "descending_pct": 22,
        "total_climbs": 2,
        "longest_climb_km": 10.7
      },
      "elevation_profile": [
        {
          "distance_km": 0,
          "elevation_m": 77
        },
        {
          "distance_km": 4.66,
          "elevation_m": 89
        },
        {
          "distance_km": 9.17,
          "elevation_m": 124
        },
        {
          "distance_km": 13.57,
          "elevation_m": 292
        },
        {
          "distance_km": 18.04,
          "elevation_m": 472
        },
        {
          "distance_km": 22.69,
          "elevation_m": 420
        },
        {
          "distance_km": 27.44,
          "elevation_m": 158
        },
        {
          "distance_km": 32.1,
          "elevation_m": 122
        },
        {
          "distance_km": 36.58,
          "elevation_m": 166
        },
        {
          "distance_km": 40.95,
          "elevation_m": 144
        },
        {
          "distance_km": 45.42,
          "elevation_m": 380
        },
        {
          "distance_km": 50.08,
          "elevation_m": 584
        },
        {
          "distance_km": 54.81,
          "elevation_m": 325
        },
        {
          "distance_km": 59.45,
          "elevation_m": 209
        },
        {
          "distance_km": 63.93,
          "elevation_m": 253
        }
      ]
    },
    "judgement": {
      "course_character": "Hilly route over 64 km. The course is shaped by one main sustained climb. 1029 m total climbing.",
      "primary_demand": "sustained climbing ability on the key ascent",
      "secondary_demand": "staying organised into the finishing section",
      "suits_rider_type": "climber / strong all-rounder",
      "estimated_duration_band": "~2.5h-4h",
      "what_matters_most": "The main climb is the defining section. What matters most is how much of the route leads into it, and what is left for the final kilometres after it."
    },
    "decisive_climbs": [
      {
        "anchor": true,
        "name": "Climb 2",
        "start_km": 40.5,
        "end_km": 49.6,
        "length_km": 9.1,
        "elevation_gain_m": 452,
        "avg_gradient_pct": 5,
        "peak_gradient_200m_pct": 6,
        "category": "Cat 2",
        "race_score": 557.07
      },
      {
        "anchor": false,
        "name": "Climb 1",
        "start_km": 8.7,
        "end_km": 19.4,
        "length_km": 10.7,
        "elevation_gain_m": 411,
        "avg_gradient_pct": 3.8,
        "peak_gradient_200m_pct": 4.1,
        "category": "Cat 2",
        "race_score": 97.47
      }
    ],
    "critical_segments": [
      {
        "name": "Main climb",
        "why": "10.7 km of sustained climbing around 8.7 km"
      },
      {
        "name": "Finishing section",
        "why": "Final 7.6 km after the main pressure points"
      }
    ],
    "evidence": {
      "source": "user-supplied GPX",
      "route_engine": "SEMIPRO Route Engine",
      "derived_only": true,
      "raw_gpx_retained": false
    },
    "uncertainty": [
      "GPX elevation and route quality depend on the source file.",
      "Demand analysis describes the course, not an individual athlete or race outcome.",
      "No wind forecast was included."
    ]
  }
}
