Skip to main content
Glama
diecoscai

@diecoscai/hevy-mcp

by diecoscai

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
HEVY_API_KEYYesHevy Pro API key (UUID v4). Required unless you ran `npx @diecoscai/hevy-mcp setup` which saves the key to a config file.
HEVY_MCP_ALLOW_WRITESNoSet to '1' to enable real POST/PUT calls. Any other value (including unset) keeps dry-run on.
HEVY_MCP_DISABLE_CACHENoSet to '1' to disable the in-memory exercise-template cache.
HEVY_MCP_CACHE_TTL_SECONDSNoCache TTL in seconds. Default 3600.3600

Capabilities

Features and capabilities supported by this server

CapabilityDetails
tools
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
hevy_get_user_info

Return the authenticated user (name, id, profile URL). Reads GET /v1/user/info. Requires a Hevy Pro api-key.

hevy_list_workouts

List workouts newest-first, paginated. Use this to discover workout ids; fetch a single full record with hevy_get_workout, or just the count with hevy_get_workout_count. pageSize is 1-10 (Hevy returns 400 for >10). Response envelope: { page, page_count, workouts: [...] }. Empty account returns workouts: []. No DELETE endpoint exists on the Hevy API.

hevy_get_workout

Fetch one workout by UUID. Returns the full record including exercises and sets.

hevy_get_workout_count

Return { workout_count }: the total number of workouts on the account.

hevy_get_workout_events

Delta sync feed: events newer than since (ISO-8601). Each event is either { type: "updated", workout } or { type: "deleted", id, deleted_at }. To incrementally sync a local cache: on first call pass since=1970-01-01T00:00:00Z, then for each subsequent call pass the timestamp of the newest event you have seen. This is the ONLY way to detect deletions — the Hevy API has no DELETE endpoint, so deleted workouts surface here and nowhere else. pageSize 1-10.

hevy_create_workout

Create a workout (POST /v1/workouts). Required: title, start_time (ISO-8601), end_time (ISO-8601), exercises[]. Each exercise needs an exercise_template_id — call hevy_search_exercise_templates to resolve it from a name, or hevy_get_exercise_template if you already know the id. Set types: warmup|normal|failure|dropset. RPE is null or one of 6, 7, 7.5, 8, 8.5, 9, 9.5, 10. Superset ids must be contiguous across adjacent exercises. rep_range is routines-only and is rejected here. Dry-run by default: returns { dry_run: true, executed: false, ... } unless the env var HEVY_MCP_ALLOW_WRITES=1 is set on the server process.

hevy_update_workout

Full replace of a workout (PUT /v1/workouts/{id}). Any field not re-sent is dropped — to preserve a field, send it back unchanged. Each exercise needs an exercise_template_id (find via hevy_list_exercise_templates or hevy_get_exercise_template). Dry-run by default: returns { dry_run: true, executed: false, ... } unless HEVY_MCP_ALLOW_WRITES=1 is set on the server process. No DELETE endpoint exists on the Hevy API.

hevy_list_routines

List routines. pageSize 1-10 (max enforced by server). Envelope: { page, page_count, routines }. No DELETE endpoint.

hevy_get_routine

Fetch one routine by UUID.

hevy_create_routine

Create a routine (POST /v1/routines). Required: title, exercises[]. Each exercise needs an exercise_template_id — call hevy_list_exercise_templates to find it. Optional folder_id (positive integer) places the routine in a folder (use hevy_list_routine_folders to discover folder ids). Set types: warmup|normal|failure|dropset. rep_range { start, end } is accepted on routine sets (NOT on workout sets). Dry-run by default: returns { dry_run: true, executed: false, ... } unless HEVY_MCP_ALLOW_WRITES=1 is set on the server process.

hevy_update_routine

Full replace of a routine (PUT /v1/routines/{id}). Omitted fields are dropped — to preserve a field, send it back unchanged. Each exercise needs an exercise_template_id (find via hevy_list_exercise_templates). Note: folder_id is NOT accepted on update; the Hevy API rejects it with 400. The routine's folder cannot be changed through this tool. Dry-run by default: returns { dry_run: true, executed: false, ... } unless HEVY_MCP_ALLOW_WRITES=1 is set on the server process.

hevy_list_routine_folders

List routine folders. pageSize 1-10. Envelope: { page, page_count, routine_folders }. No DELETE endpoint.

hevy_get_routine_folder

Fetch one routine folder by its positive integer id.

hevy_create_routine_folder

Create a routine folder (POST /v1/routine_folders). Takes only title. The new folder is inserted at index 0; existing folders shift down by one. There is no update or delete tool for folders — once created, the title is fixed. Dry-run by default: returns { dry_run: true, executed: false, ... } unless HEVY_MCP_ALLOW_WRITES=1 is set on the server process.

hevy_list_exercise_templates

List exercise templates (built-in + custom). Envelope: { page, page_count, exercise_templates }. pageSize is 1-100 — this is the ONE endpoint with a larger cap; every other list is capped at 10. Built-in ids are 8-char uppercase hex; custom ids are lowercase UUIDs.

hevy_search_exercise_templates

Find exercise templates by name. Paginates the full catalog (built-in + custom) and returns templates whose title contains the query, case-insensitive. Use this to resolve an exercise_template_id from a human name (e.g. "bench press") before composing a workout or routine. Response: { query, total_matches, exercise_templates: [...], truncated }. total_matches counts every match across the pages scanned; the scan stops after 30 pages of 100 — if the catalog is larger, truncated is true and total_matches is a lower bound. The catalog is cached for an hour.

hevy_get_exercise_template

Fetch one exercise template by id. Accepts both 8-char uppercase hex (built-in) and lowercase UUID (custom).

hevy_create_exercise_template

Create a custom exercise template (POST /v1/exercise_templates). Required: title, exercise_type, muscle_group, equipment_category. exercise_type enum (8): weight_reps, reps_only, bodyweight_reps, bodyweight_assisted_reps, duration, weight_duration, distance_duration, short_distance_weight. muscle_group enum (20): abdominals, shoulders, biceps, triceps, forearms, quadriceps, hamstrings, calves, glutes, abductors, adductors, lats, upper_back, traps, lower_back, chest, cardio, neck, full_body, other. equipment_category enum (9): none, barbell, dumbbell, kettlebell, machine, plate, resistance_band, suspension, other. other_muscles is an optional array of muscle_group values. Dry-run by default: returns { dry_run: true, executed: false, ... } unless HEVY_MCP_ALLOW_WRITES=1 is set on the server process.

hevy_get_exercise_history

List every logged set for the given exercise template (one row per set, includes warmups/dropsets/failures). Two filter modes, combinable: pagination via page (1-indexed) and pageSize (1-10), and date-range filtering via start_date / end_date (ISO-8601 datetimes). Without start_date/end_date, results span all time, newest-first.

hevy_list_body_measurements

List body measurements (GET /v1/body_measurements). Envelope: { page, page_count, body_measurements }. pageSize 1-10. Records are keyed by date (YYYY-MM-DD), not by id. No DELETE endpoint exists.

hevy_create_body_measurement

Create one body-measurements record (POST /v1/body_measurements). Required: date (YYYY-MM-DD). All metric fields are optional and nullable: weight_kg, lean_mass_kg, fat_percent, neck_cm, shoulder_cm, chest_cm, left_bicep_cm, right_bicep_cm, left_forearm_cm, right_forearm_cm, abdomen, waist, hips, left_thigh, right_thigh, left_calf, right_calf. If a record already exists for that date, the server returns 409 — use hevy_update_body_measurement instead. Dry-run by default: returns { dry_run: true, executed: false, ... } unless HEVY_MCP_ALLOW_WRITES=1 is set on the server process.

hevy_get_body_measurement

Fetch one body-measurements record by date (GET /v1/body_measurements/{date}). Returns 404 if no record exists for that date.

hevy_update_body_measurement

Full replace of the body-measurements record for a date (PUT /v1/body_measurements/{date}). FULL REPLACE — any metric field NOT sent in body_measurement is overwritten to NULL on the server. To "update just one metric": call hevy_get_body_measurement for that date first, modify the metric you want, then send ALL fields back. Dry-run by default: returns { dry_run: true, executed: false, ... } unless HEVY_MCP_ALLOW_WRITES=1 is set on the server process.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

Latest Blog Posts

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/diecoscai/hevy-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server