{"name":"io.github.diecoscai/hevy-mcp","slug":"diecoscai-hevy-mcp","title":"Hevy MCP","description":"MCP server for the Hevy fitness API — spec-generated schemas, dry-run-safe writes, easy setup.","url":"https://mcp.market/server/diecoscai-hevy-mcp","rating":null,"grade":"A","score":92,"certified":false,"status":"active","category":"other","tags":[],"presence":{"score":25,"stars":0,"forks":0,"downloads_week":85,"last_push_at":"2026-09-07T09:55:09.000Z","license":"MIT"},"uptime":null,"claimed":false,"transport":"npm","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/diecoscai/hevy-mcp","website":null,"version":"0.5.0","remotes":[],"packages":[{"registryType":"npm","identifier":"@diecoscai/hevy-mcp","version":"0.5.0","transport":{"type":"stdio"}}],"tools":[{"name":"hevy_create_body_measurement","description":"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 r","write_action":true,"price_micros":0,"input_schema":null},{"name":"hevy_create_exercise_template","description":"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, glu","write_action":true,"price_micros":0,"input_schema":null},{"name":"hevy_create_routine","description":"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","write_action":true,"price_micros":0,"input_schema":null},{"name":"hevy_create_routine_folder","description":"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.","write_action":true,"price_micros":0,"input_schema":null},{"name":"hevy_create_workout","description":"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 conti","write_action":true,"price_micros":0,"input_schema":null},{"name":"hevy_get_body_measurement","description":"Fetch one body-measurements record by date (GET /v1/body_measurements/{date}). Returns 404 if no record exists for that date.","write_action":false,"price_micros":0,"input_schema":null},{"name":"hevy_get_exercise_history","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"hevy_get_exercise_template","description":"Fetch one exercise template by id. Accepts both 8-char uppercase hex (built-in) and lowercase UUID (custom).","write_action":false,"price_micros":0,"input_schema":null},{"name":"hevy_get_routine","description":"Fetch one routine by UUID.","write_action":false,"price_micros":0,"input_schema":null},{"name":"hevy_get_routine_folder","description":"Fetch one routine folder by its positive integer id.","write_action":false,"price_micros":0,"input_schema":null},{"name":"hevy_get_user_info","description":"Return the authenticated user (name, id, profile URL). Reads GET /v1/user/info. Requires a Hevy Pro api-key.","write_action":false,"price_micros":0,"input_schema":null},{"name":"hevy_get_workout","description":"Fetch one workout by UUID. Returns the full record including exercises and sets.","write_action":false,"price_micros":0,"input_schema":null},{"name":"hevy_get_workout_count","description":"Return { workout_count }: the total number of workouts on the account.","write_action":false,"price_micros":0,"input_schema":null},{"name":"hevy_get_workout_events","description":"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 dele","write_action":false,"price_micros":0,"input_schema":null},{"name":"hevy_list_body_measurements","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"hevy_list_exercise_templates","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"hevy_list_routine_folders","description":"List routine folders. pageSize 1-10. Envelope: { page, page_count, routine_folders }. No DELETE endpoint.","write_action":false,"price_micros":0,"input_schema":null},{"name":"hevy_list_routines","description":"List routines. pageSize 1-10 (max enforced by server). Envelope: { page, page_count, routines }. No DELETE endpoint.","write_action":false,"price_micros":0,"input_schema":null},{"name":"hevy_list_workouts","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"hevy_search_exercise_templates","description":"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 sc","write_action":false,"price_micros":0,"input_schema":null},{"name":"hevy_update_body_measurement","description":"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, ... } unles","write_action":true,"price_micros":0,"input_schema":null},{"name":"hevy_update_routine","description":"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: ","write_action":true,"price_micros":0,"input_schema":null},{"name":"hevy_update_workout","description":"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","write_action":true,"price_micros":0,"input_schema":null}],"scan":{"score":92,"grade":"A","scanned_at":"2026-09-27T17:07:34.048Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-27T17:07:34.222Z","components":{"code":{"score":25,"max":25,"notes":["121 source files scanned"]},"reliability":{"score":-1,"max":20,"notes":["no gateway calls yet and no remote to probe"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (local package is not executed); not counted"]},"auth":{"score":12,"max":15,"notes":["local package, no credentials required"]},"maintenance":{"score":15,"max":15,"notes":["last push 20 days ago"]},"identity":{"score":8,"max":10,"notes":["registry namespace matches repository owner","GitHub account older than a year"]}},"findings":[],"inputs":{"packages":[{"registryType":"npm","identifier":"@diecoscai/hevy-mcp","version":"0.5.0","found":true,"license":"MIT","hasInstallScripts":false,"dependencyCount":2,"publishedAt":"2026-05-22T17:21:30.068Z","repositoryUrl":"git+https://github.com/diecoscai/hevy-mcp.git","weeklyDownloads":85}],"repo":{"found":true,"owner":"diecoscai","repo":"hevy-mcp","archived":false,"pushedAt":"2026-09-07T09:55:09Z","stars":0,"forks":0,"openIssues":13,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/29894403?v=4","ownerCreatedAt":"2017-07-04T14:03:03Z","license":"MIT"},"icon":{"url":"https://avatars.githubusercontent.com/u/29894403?v=4&s=128","source":"github"},"presence":{"stars":0,"forks":0,"downloadsWeek":85,"license":"MIT","lastPushAt":"2026-09-07T09:55:09.000Z","score":25}}}},"grade_history":[],"reviews":[]}