TrainHeroic
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| TRAINHEROIC_EMAIL | No | Email address for TrainHeroic account (used with password) | |
| TRAINHEROIC_PASSWORD | No | Password for TrainHeroic account | |
| TRAINHEROIC_SESSION_TOKEN | No | Session token obtained from browser DevTools |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_user_profileA | Get the current user's profile (name, ID, coach status, etc.). |
| get_team_infoA | Get the athlete's team memberships and license info (team IDs, program IDs, coaches). |
| get_workout_historyA | Get workout history for a date range. Dates must be YYYY-MM-DD. If omitted, defaults to the last By default (include_sets=False) each item is projected to a flat summary: id, workout_id, program_id, date, workout_title, feed_item_id, saved_workout_id, completed, workout_rating, rpe, notes. Use this for scanning history and finding sessions — it's intentionally small. Set include_sets=True only when you need set-level exercise data AND you are querying a narrow range (1-3 days). For full set data on a single known session, prefer get_workout_details(program_workout_id, program_id) instead. Set cache_bust=True to force a fresh API fetch for every day in the range, ignoring and overwriting any cached data regardless of TTL. |
| get_workout_detailsA | Get workout details for a specific program workout: exercises, prescribed vs. logged sets, and coaching notes. Pass the program_workout_id from get_workout_history.
To ensure the correct team is used, also pass program_id (the slim=True (the DEFAULT, and safe for small/local context windows) removes the
duplicated saved_workout_set_exercises array, per-exercise media (tips/video_url),
and the empty per-set param_N_* value slots. Each exercise is left with its title,
slim=False returns the full response (media fields still stripped). For the full per-set data of a SINGLE exercise without the whole session, use get_exercise_detail(program_workout_id, exercise_id) instead. |
| get_exercise_detailA | Get the full, un-slimmed per-set data for ONE exercise within a workout. Use this after a slim get_workout_details call when you need every logged set (all param_N_* values, prescribed vs. actual) for a specific exercise, without pulling the entire session. Reuses the cached workout-details response. Pass the exercise_id shown in the slim get_workout_details response, plus the same program_id/team_id you used there so the correct team is resolved. |
| get_exercise_statsB | Get stats for an exercise: last performance, personal record, and working max. stat_date is YYYY-MM-DD and defaults to today. Response includes isLift, lastPerformance (text, date, notes), personalRecord, and workingMax. |
| get_personal_recordsB | Get all personal records for an exercise, broken down by rep count. Each entry contains reps, weight, scaledWeight, units, and setNumber. |
| get_working_maxB | Get the current working max for a specific exercise. Response: {value, hasReferenceMaxExercise, referenceMaxExercise} |
| get_exercise_libraryB | Get the full exercise library for a team. Optionally filter by name with |
| get_circuit_libraryB | Get the circuit library for a team. Each circuit has id, title, instructions, prescription, and exerciseIds. |
| get_recent_exercisesA | Get the user's recently used exercises. |
| get_recent_circuitsA | Get the user's recently used circuits. |
| create_personal_sessionA | Create a new personal training session for a given date (YYYY-MM-DD). Returns {programWorkout: {id, programId, date, workoutId}, savedWorkout: {id}}. Use the returned workoutId with add_exercises_to_session and savedWorkout.id with log_workout. |
| add_exercises_to_sessionA | Add exercises to a personal workout session in order. exercise_ids: ordered list of exercise IDs to add (use get_exercise_library to look up IDs). Returns the created workout sets with full exercise details. |
| log_workoutB | Save/log a completed workout with results. saved_workout_id: from create_personal_session or get_workout_details. workout_id: the workout's workoutId. date_string: YYYY-MM-DD date of the session. blocks: list of block/set IDs that were completed. rpe: Rate of Perceived Exertion (1-10). workout_rating: numeric rating as string e.g. "8.0". |
| delete_sessionB | Delete a program workout / personal session by its ID. |
| get_workout_surveysA | Get pre/post workout surveys for one or more saved workout IDs. Returns a map of savedWorkoutId → survey data with Sleep, Mood, Energy, Soreness, Stress questions. |
| submit_surveyA | Submit a readiness/recovery survey answer for a workout. Question IDs: 8=Sleep, 9=Mood, 10=Energy, 11=Soreness, 12=Stress Answer IDs: 1=Awful/VeryPoor, 2=Poor, 3=Ok, 4=Good, 5=Excellent |
| get_workout_messagesA | Get the messaging stream and all comments for a workout. Returns {stream: {id, title, lastActivity, ...}, comments: [...]} where each comment has content, authorName, replies, and reactions. |
| get_workout_leaderboardB | Get the leaderboard for a specific program workout. Returns {workoutId, workoutTitle, date, tests, results, testStats, userResult}. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/cmagorian/trainheroicMcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server