One tool registry. No shadow contract.

Browse the read and write capabilities exposed by the canonical Bulk Coach fitness MCP tool registry.

DIRECT ANSWER

Bulk Coach generates its public MCP catalogue from the same canonical tool registry used by the internal coach. Names, descriptions, input schemas and read/write classifications cannot be maintained as a separate marketing contract.

CANONICAL REGISTRY

21 current MCP tools

The public transport can expose a narrower list after permission checks. This source list cannot drift from the product registry.

searchExercisesread

Search the exercise catalogue

Search the shared exercise catalogue (plus the athlete's own custom exercises) by name, optionally filtered by equipment or a target muscle. Returns catalogue slugs to use in prescriptions.

getExerciseread

Get exercise detail

Fetch full detail for one exercise slug — muscles, equipment, instructions, setup cues, and equipment-matched substitutions.

getProfileread

Get the athlete's training profile

The athlete's onboarding brief: goal, date of birth, self-declared gender, training age, schedule, optional height and dated manual bodyweight baseline, assumed commercial-gym equipment, injuries, and what failed before. Read this before designing or adjusting workouts. Gender is for respectful address, not sex-based prescription rules. If fresh Apple Health data exists, prefer its bodyweight trend over the manual baseline for ongoing coaching.

getWeeklyScheduleread

Get the weekly workout schedule

The authoritative repeating week, derived directly from saved workouts with a weekday. Returns Monday-based day indexes, today's workout, and scheduled workouts in weekday order. Refresh this before answering schedule questions or changing a workout day.

listWorkoutsread

List the athlete's saved workouts

The athlete's saved workouts, each with one weekday or null when unscheduled. Archived workouts are excluded unless explicitly requested. Read this before creating or scheduling a workout so you do not invent duplicates.

getWorkoutread

Get one saved workout

Full detail for one saved workout: its blocks, exercise prescriptions, catalogue-backed names, and optional weekday. Read this before updateWorkout so your changes preserve the rest of the workout.

getWorkoutHistoryread

List recent workouts

The athlete's most recent workout sessions, newest first. Returns the canonical sessionId, ISO timestamps, and server-calculated durationMinutes and durationLabel. Always quote the provided duration and never calculate one from timestamps. Use getWorkoutDetail with sessionId for the sets within one session.

getWorkoutDetailread

Get one workout's sets

Full detail for one workout session: a compact session summary, exercises, and every logged set. The session summary includes server-calculated durationMinutes and durationLabel. Always use that duration instead of calculating from timestamps. sessionId must be the canonical sessionId returned by getWorkoutHistory, not a clientSessionId.

getSetHistoryread

Get set history for an exercise

Recent logged working sets for one exercise slug (newest first, warmups excluded) plus the athlete's best e1RM for it. Use this to ground any load or progression claim.

getWeeklyVolumeread

Get weekly training volume and streak

Hard-set volume per muscle for recent weeks, plus the athlete's current and longest training streak. Grounds volume and adherence claims.

startWorkoutwrite

Start a workout session

Start an in-progress session. With workoutId, copy the owned saved workout into an immutable prescription snapshot and return the session id and workout name. Omit workoutId only when the athlete explicitly requested an ad hoc or empty session. Do not call for a vague request such as 'Start a workout': first ask which saved workout or focus they want. Fails with active_session when a session is already in progress and invalid_reference when the workout is missing or not owned.

addExerciseToWorkoutwrite

Add an exercise to the active workout

Append an exercise (by catalogue slug) to the athlete's active workout session.

logWorkoutSetwrite

Log a set in the active workout

Record one completed set for an exercise in the athlete's active workout session. Weight is in kilograms. Provide RIR or RPE, not both.

amendWorkoutSetwrite

Amend a logged set

Correct an already-logged set, referenced by the clientSetId returned when it was logged. Only sets in the active session can be amended.

deleteWorkoutSetwrite

Delete a logged set

Remove an already-logged set, referenced by its clientSetId. Only sets in the active session can be deleted.

completeWorkoutwrite

Complete the active workout

Mark the athlete's active workout session complete. Optionally record a whole-session RPE (1–10) and notes.

abandonWorkoutwrite

Abandon the active workout

Abandon the athlete's active workout session without completing it.

createWorkoutwrite

Create a saved workout

Stage a new saved workout, optionally assigning it to a weekday. Leave dayIndex unset for an ad-hoc library workout. To replace the complete week, use replaceWeeklySchedule. To change a workout the athlete already has, use updateWorkout instead of creating a near-duplicate.

updateWorkoutwrite

Update a saved workout

Change one saved workout: rename it, add exercises, remove exercises, or replace its contents outright. The workout is shared, so this changes every weekday it is scheduled on and every future time the athlete starts it. Already-logged workouts keep what they recorded. Read getWorkout first so your changes preserve the rest of the workout.

setWorkoutDaywrite

Change a workout's weekday

Move one saved workout to a Monday-based weekday, or pass null to leave it unscheduled. If another workout occupies the destination, the workouts swap days; moving an unscheduled workout there leaves the displaced workout unscheduled.

replaceWeeklySchedulewrite

Replace the weekly workout schedule

Submit the complete desired repeating week. The server validates it atomically, updates workouts already on retained weekdays, creates workouts for added weekdays, and leaves removed workouts unscheduled. Use for onboarding and whole-week redesigns; use updateWorkout or setWorkoutDay for smaller changes.

Catalogue source

The live list below is rendered from packages/shared/src/tools.ts. Availability depends on the authenticated permission class and the athlete's active external-assistant grant.

Updated 7 August 2026Reviewed by James Wood, founder