MCP Server
Tools
All available MCP tools for the GymUp coaching platform.
| Tool | Description |
|---|
search_exercises | Search the exercise library by name, muscle group, type, or difficulty. Typo-tolerant name search. Pass detailed: true (ideally with limit: 1) for parsed muscles on a single exercise. |
| Tool | Description |
|---|
generate_basic_program | Validate and preview a training program without saving. Verifies exercise IDs, enriches with names, returns formatted program. Does not use athlete profile or coaching intelligence. Free users: 5 per day. |
| Tool | Description | Tier |
|---|
get_athlete_profile | Retrieve athlete profile: goals, training days, experience level, onboarding status. | Free |
save_athlete_profile | Save or update athlete profile: goals, weight, macros, measurements, training experience. Pass metrics_date to log historical weight without regressing the latest-state cache. | Free |
| Tool | Description |
|---|
generate_smart_program | Generate a fully personalized training program using the athlete's profile, history, periodization state, memories, and evidence-based coaching rules. Returns one program or a coordinated A/B pair (ab_rotation: true) plus a draft_id. Server-side generation — coaching guidelines never leave the server. To persist the program, call commit_program_draft (pass-by-reference). |
commit_program_draft | Persist a program draft (returned by generate_smart_program) to the athlete's calendar. Pass the draft_id verbatim — never reconstruct the payload. For A/B drafts, both programs are saved atomically with rotation_pair_id linkage. Drafts expire after 30 minutes. |
ask_coach | Ask the athlete's coach a fitness or training question (volume, RPE, deload, periodization, form, recovery, nutrition, programming). Server-side answer using evidence-based rules + the athlete's context. |
| Tool | Description | Tier |
|---|
get_program_history | Up to 5 recent program summaries (name, phase, dates, days_per_week, per-day exercise count). Metadata only — no per-exercise breakdown, no aggregates. | Free |
get_periodization_context | Current training phase state: last program end date, phase type, weeks since last deload, recent phase sequence. | Free |
analyze_training_data | Deterministic SQL aggregations over training history (no LLM). Metrics: weekly_sets_per_muscle, total_weekly_sets, rpe_avg, session_frequency, rest_days_avg, total_volume_load, e1rm_progression, pr_count, muscle_balance, training_days_count. group_by: `week | month |
get_fitness_index_trend | CTL-based Fitness Index (0-100, normalized vs all-time peak) — same metric as the Account-screen graph. summary returns peak / current / 12-month peak; detailed adds a downsampled time series (≤52 points). | Free |
get_activity_logs_raw | Raw completed-activity rows newest-first; each row inlines e1rm and volume_load. Filters: exercise_id, half-open [from, to), exercise_type, muscle, done. Pagination via cursor (ISO date). Default limit 200, max 1000. Use for any custom analytical question outside analyze_training_data's enum. | Free |
get_program_exercises_raw | Raw planned program-exercise rows; each row inlines phase_type, sets, e1rm_per_set, volume_load_planned. Filter by program_id, phase_type, date overlap, or muscle substring. | Free |
compute_e1rm | Brzycki estimated 1RM for hypothetical inputs. Accept { reps, weight } or { reps_array, weights_array }. Real-history e1rm is already inline on raw rows — do not call this for real history. | Free |
| Tool | Description | Tier |
|---|
save_user_program | Persist a USER-supplied program (PDF import, manually described workout). Full payload required. Not for AI-generated programs — those go through generate_smart_program → commit_program_draft. | Free |
update_program | Replace all exercises in an existing program. | Free |
modify_program_day | Replace exercises for a single day in an existing program. | Free |
delete_program | Hard-delete a program (activity logs persist since they link to exercise_id+date, not program_id). | Free |
| Tool | Description | Tier |
|---|
get_day_session | Program day exercises with prescribed reps/weights, estimated weights from history, rest times, and done flags. response_format: "concise" (default) omits media/tutorial/tips. | Free |
log_strength_activity | Save a strength workout log: sets of {reps, weight, rest?} for a given exercise and date. Auto-marks done = true (override with done: false). | Free |
log_cardio_activity | Save a cardio session log: duration_minutes for a given exercise and date. Auto-marks done = true. | Free |
set_exercise_done | Toggle the done flag on an existing log without touching weights. Use to uncheck a session. | Free |
delete_activity_log | Hard-delete an activity log for one exercise + date (different from setting done: false). | Free |
For reading workout history, use get_activity_logs_raw (custom queries) or analyze_training_data (aggregates) in the analytics section above.
| Tool | Description | Tier |
|---|
search_memories | List recent memories (no query) or semantic-search them (with query). | Free |
save_memory | Save a long-term athlete fact (preference, injury, constraint). | Free |
update_memory | Edit an existing memory by ID. | Free |
delete_memory | Hard-delete a memory by ID. | Free |
Every tool declares MCP standard annotations (spec 2025-06-18) so your client can prompt for confirmation, throttle, or filter:
readOnlyHint — true for all search_*, get_*, analyze_training_data, compute_e1rm, ask_coach, generate_smart_program, generate_basic_program.
destructiveHint — true for update_program, modify_program_day, update_memory, delete_program, delete_activity_log, delete_memory. Hosts that gate destructive calls (e.g. Claude Desktop's "Allow once / Always allow" prompt) will surface a confirmation for these.
openWorldHint — true only for ask_coach and generate_smart_program (LLM calls). Everything else operates on the athlete's own data.
idempotentHint — true for reads, replaces, deletes, upserts (save_athlete_profile), log writes (log_strength_activity, log_cardio_activity), and set_exercise_done. false for commit_program_draft, save_user_program, save_memory (each call creates a distinct row).