> ## Documentation Index
> Fetch the complete documentation index at: https://docs.fitsociety.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Workout V2

> Company MCP reference for workout plans, exercises, sessions, performance, presets, and equipment.

The `workout_v2` company module exposes non-WOD Workout V2 data and workflows.
Client-specific tools verify the active company-client relationship and enforce
the applicable workout and performance history windows.

| Key                     | Value                                                       |
| :---------------------- | :---------------------------------------------------------- |
| **Module key**          | `workout_v2`                                                |
| **Sensitivity**         | `health`                                                    |
| **Consent required**    | `healthDataConsent`                                         |
| **Feature requirement** | Workout V2; equipment tools also require Training Equipment |

## Read tools

### `list_workout_plans`

Lists company-owned, non-WOD plan templates. Optional filters are `search`,
`status`, `language`, `page`, and `limit`.

### `get_workout_plan`

Returns a template or accessible assigned plan with visible day summaries.
Requires `planId`; `language` is optional.

### `get_workout_plan_day`

Returns one visible plan day with ordered exercise targets and setup fields.
Requires `planId` and `planMomentId`; `language` is optional.

### `search_workout_exercises`

Searches system, FITsociety, and company-owned exercises visible to the active
company. Filters include `search`, `primaryMuscle`, `equipment`, `difficulty`,
`visibility`, `language`, `page`, and `limit`.

### `get_workout_exercise`

Returns one visible exercise. Requires `exerciseId`; `language` is optional.

### `list_client_workout_plans`

Lists current non-WOD plans assigned to an accessible client. Requires
`clientId`; optional fields are `status`, `language`, `page`, and `limit`.

### `list_workout_sessions`

Lists an accessible client's sessions with optional status and date filters.
Requires `clientId`; optional fields are `status`, `dateFrom`, `dateTo`, `page`,
and `limit`. A date range cannot exceed 366 days.

### `get_workout_session`

Returns one session and its bounded ordered performance records. Requires
`clientId` and `sessionId`.

### `get_workout_machine_preset`

Returns effective setup fields using coach, company, and system precedence.
Requires `exerciseId`.

### `get_workout_equipment_profile`

Returns the company's gym profile or an accessible client's home profile.
Requires `ownerType` (`company` or `client`); use `clientId` for a client owner.

## Write tools

All write tools require explicit grant approval and
`params._meta.idempotencyKey`. See [Connection & Protocol](/mcp/connection) for
the durable replay contract.

### `assign_workout_plan` **`Write`**

Assigns all visible days, or a selected `planMomentIds` subset, from a company
template. Requires `clientId` and `templatePlanId`; `language` is optional.

### `start_workout_session` **`Write`**

Starts or resumes a plan-day session, or starts a freestyle session. Requires
`clientId`; `planId`, `planMomentId`, and `language` are optional.

### `log_workout_performance` **`Write`**

Upserts sets for one exercise in an active session. Requires `clientId`,
`sessionId`, `exerciseId`, and `sets`; optional fields include performance and
plan-exercise IDs, notes, rest, completion, setup values, and RPE display state.

### `complete_workout_session` **`Write`**

Completes a session through the terminal session workflow. Requires `clientId`
and `sessionId`; `notes` is optional. Durable replay prevents duplicate XP.

### `update_workout_machine_preset` **`Write`**

Merges up to eight setup-field edits into a company- or coach-scoped preset.
Requires `exerciseId`, `scope`, and `setupFields`.

### `update_workout_equipment_profile` **`Write`**

Replaces selected equipment for the company gym or an accessible client's home.
Requires `ownerType` and `selectedItems`; use `clientId` for a client owner.

## Natural Language Examples

* *"Which workout plans are assigned to this client?"*
* *"Assign the strength foundation plan to client 64b64c0f2f5f4c0012345678 starting next week."*
* *"Show me the exercise history from this client's last workout session."*
* *"Log 3 sets of 10 squats at 80 kg for today's session."*

## JSON-RPC Call Example

```json theme={null}
{
  "jsonrpc": "2.0",
  "id": "workout-v2-1",
  "method": "tools/call",
  "params": {
    "name": "list_workout_sessions",
    "arguments": {
      "clientId": "64b64c0f2f5f4c0012345678",
      "status": "completed",
      "limit": 25
    }
  }
}
```
