daniels_calculate_vdot
Calculate VDOT to assess aerobic capacity for runners using distance and time inputs based on Jack Daniels' methodology.
Instructions
Calculate VDOT according to Jack Daniels.
Args: distance: Distance in meters. time: Time in seconds.
Returns: dict: vdot (float): The calculated VDOT value, representing the runner's aerobic capacity based on the input distance and time.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| distance | Yes | ||
| time | Yes |
Implementation Reference
- src/running_formulas_mcp/server.py:37-57 (handler)MCP tool handler for daniels_calculate_vdot, including input validation, schema via docstring/type hints, and registration via @mcp.tool decorator. Delegates to core formula.def daniels_calculate_vdot(distance: float, time: float) -> dict: """ Calculate VDOT according to Jack Daniels. Args: distance: Distance in meters. time: Time in seconds. Returns: dict: vdot (float): The calculated VDOT value, representing the runner's aerobic capacity based on the input distance and time. """ if distance <= 0: raise ValueError("Distance must be positive") if time <= 0: raise ValueError("Time must be positive") vdot = calculate_vdot_from_performance(distance, time) return { "vdot": round(vdot, 1) }
- Core helper function implementing the exact Jack Daniels VDOT calculation formula from race performance.def calculate_vdot_from_performance(distance: float, time: float) -> float: """ Calculate VDOT from distance and time using Jack Daniels' formula. Args: distance: Distance in meters. time: Time in seconds. Returns: float: The calculated VDOT value. """ t_min = time / 60 v = distance / t_min vo2 = -4.6 + 0.182258 * v + 0.000104 * v * v vo2max = 0.8 + 0.1894393 * math.exp(-0.012778 * t_min) + 0.2989558 * math.exp(-0.1932605 * t_min) return vo2 / vo2max