Tool tree
gradeNot graded
list_pitch_sessionsAnswer
Lists the pitch analyses available in this browser, with pitcher handedness, camera view, frame count, and whether each has been analysed yet. Start here: every other tool addresses a pitch by the sessionId returned from this list.
View tool JSON
{
"name": "list_pitch_sessions",
"kind": "answer",
"impl": "imperative",
"description": "Lists the pitch analyses available in this browser, with pitcher handedness, camera view, frame count, and whether each has been analysed yet. Start here: every other tool addresses a pitch by the sessionId returned from this list.",
"inputSchema": {
"type": "object",
"properties": {},
"additionalProperties": false
}
}get_session_overviewAnswer
Returns what is on screen right now: the loaded pitch, the frame the viewer is scrubbed to, the joint in focus, the camera plane, which overlays are on, which events were detected, and how many notes are pinned. This is live browser state — call it before discussing anything so your words match what the human sees.
View tool JSON
{
"name": "get_session_overview",
"kind": "answer",
"impl": "imperative",
"description": "Returns what is on screen right now: the loaded pitch, the frame the viewer is scrubbed to, the joint in focus, the camera plane, which overlays are on, which events were detected, and how many notes are pinned. This is live browser state — call it before discussing anything so your words match what the human sees.",
"inputSchema": {
"type": "object",
"properties": {
"sessionId": {
"type": "string",
"description": "Defaults to the pitch currently on screen."
}
},
"additionalProperties": false
}
}get_phase_eventsAnswer
Returns the three detected pitching events — lead foot contact, maximum external rotation, and ball release — with frame number, video timestamp, the signal each was detected from, its confidence, and whether a human corrected it. Every other measurement is anchored to these frames, so read them before interpreting any angle.
View tool JSON
{
"name": "get_phase_events",
"kind": "answer",
"impl": "imperative",
"description": "Returns the three detected pitching events — lead foot contact, maximum external rotation, and ball release — with frame number, video timestamp, the signal each was detected from, its confidence, and whether a human corrected it. Every other measurement is anchored to these frames, so read them before interpreting any angle.",
"inputSchema": {
"type": "object",
"properties": {
"sessionId": {
"type": "string",
"description": "Defaults to the pitch currently on screen."
}
},
"additionalProperties": false
}
}get_kinematics_at_eventAnswer
Returns the joint angles measured at one pitching event (foot_contact | max_external_rotation | ball_release), each with its value in degrees, the published reference range where one exists, whether it sits inside that range, and its measurement confidence. One call gives a complete reference-anchored snapshot of that instant.
View tool JSON
{
"name": "get_kinematics_at_event",
"kind": "answer",
"impl": "imperative",
"description": "Returns the joint angles measured at one pitching event (foot_contact | max_external_rotation | ball_release), each with its value in degrees, the published reference range where one exists, whether it sits inside that range, and its measurement confidence. One call gives a complete reference-anchored snapshot of that instant.",
"inputSchema": {
"type": "object",
"properties": {
"event": {
"type": "string",
"enum": [
"foot_contact",
"max_external_rotation",
"ball_release"
],
"description": "Which pitching event to measure at."
},
"sessionId": {
"type": "string",
"description": "Defaults to the pitch currently on screen."
}
},
"required": [
"event"
],
"additionalProperties": false
}
}get_joint_angle_seriesAnswer
Returns one joint angle sampled across the pitch, so you can reason about the shape of the movement rather than a single instant — when the peak happens and how sharp it is. Optionally restrict the window to between two events. Downsampled to maxPoints (default 40); the reported peak still comes from the full-resolution series.
View tool JSON
{
"name": "get_joint_angle_series",
"kind": "answer",
"impl": "imperative",
"description": "Returns one joint angle sampled across the pitch, so you can reason about the shape of the movement rather than a single instant — when the peak happens and how sharp it is. Optionally restrict the window to between two events. Downsampled to maxPoints (default 40); the reported peak still comes from the full-resolution series.",
"inputSchema": {
"type": "object",
"properties": {
"joint": {
"type": "string",
"enum": [
"lead_knee_flexion",
"trail_knee_flexion",
"lead_hip_flexion",
"elbow_flexion",
"shoulder_abduction",
"shoulder_external_rotation",
"shoulder_horizontal_abduction",
"trunk_forward_tilt",
"trunk_lateral_tilt",
"hip_shoulder_separation",
"lead_foot_angle"
],
"description": "Which angle to trace, e.g. shoulder_external_rotation or lead_knee_flexion."
},
"fromEvent": {
"type": "string",
"enum": [
"foot_contact",
"max_external_rotation",
"ball_release"
],
"description": "Window start. Default: clip start."
},
"toEvent": {
"type": "string",
"enum": [
"foot_contact",
"max_external_rotation",
"ball_release"
],
"description": "Window end. Default: clip end."
},
"maxPoints": {
"type": "integer",
"description": "Samples to return, 5–120. Default 40, which keeps the response inside the output budget."
},
"sessionId": {
"type": "string",
"description": "Defaults to the pitch currently on screen."
}
},
"required": [
"joint"
],
"additionalProperties": false
}
}get_kinematic_sequenceAnswer
Returns a partial four-segment order: pelvis, trunk, upper arm and forearm peak angular speed. It is not a published full five-segment kinematic sequence or a quality score. Read literatureNote before judging the order: a different order is common and is not by itself a fault.
View tool JSON
{
"name": "get_kinematic_sequence",
"kind": "answer",
"impl": "imperative",
"description": "Returns a partial four-segment order: pelvis, trunk, upper arm and forearm peak angular speed. It is not a published full five-segment kinematic sequence or a quality score. Read literatureNote before judging the order: a different order is common and is not by itself a fault.",
"inputSchema": {
"type": "object",
"properties": {
"sessionId": {
"type": "string",
"description": "Defaults to the pitch currently on screen."
}
},
"additionalProperties": false
}
}get_metric_definitionAnswer
Explains one biomechanical metric: what it measures in plain language, exactly how this app computes it, its published reference ranges with citations, and the limits of measuring it from single-camera video. Use it before quoting any range — it is the only source of reference numbers here, and it also explains which quantities this reconstruction cannot produce at all.
View tool JSON
{
"name": "get_metric_definition",
"kind": "answer",
"impl": "imperative",
"description": "Explains one biomechanical metric: what it measures in plain language, exactly how this app computes it, its published reference ranges with citations, and the limits of measuring it from single-camera video. Use it before quoting any range — it is the only source of reference numbers here, and it also explains which quantities this reconstruction cannot produce at all.",
"inputSchema": {
"type": "object",
"properties": {
"metric": {
"type": "string",
"description": "A metric name, e.g. hip_shoulder_separation, or a quantity you want to check is measurable."
}
},
"required": [
"metric"
],
"additionalProperties": false
}
}compare_to_referenceAction
Answers plain-English questions such as “what stands out?” or “where did I mess up?” by comparing only construct-compatible angles, ranking observations, checking event reliability, and suggesting the existing viewer tools that can show the relevant moment and body part. It never treats a deviation as a diagnosis or proven cause.
View tool JSON
{
"name": "compare_to_reference",
"kind": "act",
"impl": "imperative",
"description": "Answers plain-English questions such as “what stands out?” or “where did I mess up?” by comparing only construct-compatible angles, ranking observations, checking event reliability, and suggesting the existing viewer tools that can show the relevant moment and body part. It never treats a deviation as a diagnosis or proven cause.",
"inputSchema": {
"type": "object",
"properties": {
"event": {
"type": "string",
"enum": [
"foot_contact",
"max_external_rotation",
"ball_release"
],
"description": "Restrict to one event. Default: all three."
},
"includeWithinRange": {
"type": "boolean",
"description": "Also return metrics that sit inside their range. Default false."
},
"sessionId": {
"type": "string",
"description": "Defaults to the pitch currently on screen."
}
},
"additionalProperties": false
}
}compare_pitchesAction
Compares two analysed sessions metric by metric at the same events and returns descriptive differences. It must not imply improvement or change between attempts unless athlete identity and capture comparability are established outside this data contract. The second session is analysed without changing the human view; read meta.caveats.
View tool JSON
{
"name": "compare_pitches",
"kind": "act",
"impl": "imperative",
"description": "Compares two analysed sessions metric by metric at the same events and returns descriptive differences. It must not imply improvement or change between attempts unless athlete identity and capture comparability are established outside this data contract. The second session is analysed without changing the human view; read meta.caveats.",
"inputSchema": {
"type": "object",
"properties": {
"sessionIdA": {
"type": "string",
"description": "Baseline pitch. Defaults to the pitch on screen."
},
"sessionIdB": {
"type": "string",
"description": "Pitch to compare against the baseline."
},
"event": {
"type": "string",
"enum": [
"foot_contact",
"max_external_rotation",
"ball_release"
],
"description": "Restrict to one event. Default: all three."
}
},
"additionalProperties": false
}
}seek_to_eventAction
Scrubs the 3D viewer to a named pitching event or to a specific frame, so the human is looking at the exact moment you are describing. Pass either event or frame, not both. The viewer moves before this returns.
View tool JSON
{
"name": "seek_to_event",
"kind": "act",
"impl": "imperative",
"description": "Scrubs the 3D viewer to a named pitching event or to a specific frame, so the human is looking at the exact moment you are describing. Pass either event or frame, not both. The viewer moves before this returns.",
"inputSchema": {
"type": "object",
"properties": {
"event": {
"type": "string",
"enum": [
"foot_contact",
"max_external_rotation",
"ball_release"
],
"description": "Move to this detected event."
},
"frame": {
"type": "integer",
"description": "Move to this frame index instead of an event."
}
},
"additionalProperties": false
}
}focus_jointAction
Highlights a joint or segment in the 3D viewer, turns on its angle readout, and rotates the camera to the plane where that angle actually reads true — side-on for flexion, front-on for elevation, overhead for rotation. Accepts coaching names like "front knee", "throwing shoulder" or "trunk", and resolves handedness for you.
View tool JSON
{
"name": "focus_joint",
"kind": "act",
"impl": "imperative",
"description": "Highlights a joint or segment in the 3D viewer, turns on its angle readout, and rotates the camera to the plane where that angle actually reads true — side-on for flexion, front-on for elevation, overhead for rotation. Accepts coaching names like \"front knee\", \"throwing shoulder\" or \"trunk\", and resolves handedness for you.",
"inputSchema": {
"type": "object",
"properties": {
"joint": {
"type": "string",
"description": "What to look at, e.g. lead_knee, throwing_shoulder, trunk, pelvis, lead_foot."
},
"cameraPlane": {
"type": "string",
"enum": [
"auto",
"sagittal",
"frontal",
"transverse",
"free"
],
"description": "Camera viewpoint. \"auto\" picks the plane the joint's angles live in."
}
},
"required": [
"joint"
],
"additionalProperties": false
}
}set_overlayAction
Turns one 3D viewer overlay on or off so you can stage the visual evidence for a point instead of describing it: segment_frames (anatomical triads), axial_dial (shoulder rotation dial), angle_readouts (numeric labels), motion_trail (throwing-hand path), event_markers (timeline markers).
View tool JSON
{
"name": "set_overlay",
"kind": "act",
"impl": "imperative",
"description": "Turns one 3D viewer overlay on or off so you can stage the visual evidence for a point instead of describing it: segment_frames (anatomical triads), axial_dial (shoulder rotation dial), angle_readouts (numeric labels), motion_trail (throwing-hand path), event_markers (timeline markers).",
"inputSchema": {
"type": "object",
"properties": {
"overlay": {
"type": "string",
"enum": [
"segment_frames",
"axial_dial",
"angle_readouts",
"motion_trail",
"event_markers"
],
"description": "Which overlay to change."
},
"enabled": {
"type": "boolean",
"description": "true to show it, false to hide it."
}
},
"required": [
"overlay",
"enabled"
],
"additionalProperties": false
}
}annotate_frameAction
Pins a short labelled note to a frame and joint in the 3D viewer, where it stays visible to the human as part of the analysis and survives scrubbing. Use it to leave your observations where they belong — on the moment they describe. Give a frame or an event, and keep the label under 80 characters.
View tool JSON
{
"name": "annotate_frame",
"kind": "act",
"impl": "imperative",
"description": "Pins a short labelled note to a frame and joint in the 3D viewer, where it stays visible to the human as part of the analysis and survives scrubbing. Use it to leave your observations where they belong — on the moment they describe. Give a frame or an event, and keep the label under 80 characters.",
"inputSchema": {
"type": "object",
"properties": {
"frame": {
"type": "integer",
"description": "Frame to pin the note to."
},
"event": {
"type": "string",
"enum": [
"foot_contact",
"max_external_rotation",
"ball_release"
],
"description": "Pin at this event instead of a frame."
},
"joint": {
"type": "string",
"description": "Optional anchor, e.g. lead_knee or throwing_shoulder."
},
"label": {
"type": "string",
"description": "The note. Max 80 characters; longer text is truncated."
},
"severity": {
"type": "string",
"enum": [
"info",
"attention"
],
"description": "Default \"info\"."
}
},
"required": [
"label"
],
"additionalProperties": false
}
}