Skip to main content
Glama

hevy-mcp

MCP (Model Context Protocol) server for the Hevy workout tracker API.

Lets Claude (or any MCP client) read and write your Hevy data: workouts, routines, exercise templates, routine folders, exercise history, and body measurements.

Requirements: Node.js >= 18, a Hevy Pro account, and an API key from https://hevy.com/settings?developer.

Usage

.mcp.json (project-level, Claude Code)

A .mcp.json file in a project's root directory makes MCP servers available to everyone who runs Claude Code inside that project — check it into git and the whole team gets the server automatically.

Step by step:

  1. Create a file named .mcp.json in the root of your project (same folder as .git), or run:

    claude mcp add hevy --scope project -- npx -y @antnsn/hevy-mcp

    which creates/updates it for you.

  2. Make sure it contains:

    {
      "mcpServers": {
        "hevy": {
          "command": "npx",
          "args": ["-y", "@antnsn/hevy-mcp"],
          "env": {
            "HEVY_API_KEY": "${HEVY_API_KEY}"
          }
        }
      }
    }
  3. Provide the key. ${HEVY_API_KEY} is expanded from your environment at launch, so the key never lives in the file (safe to commit). Export it in your shell profile or session:

    export HEVY_API_KEY=your-api-key
  4. Start (or restart) claude inside the project. First use prompts you to approve the project's MCP servers; approve and the hevy tools are available. Verify with /mcp.

Claude Code (global)

claude mcp add hevy -s user --env HEVY_API_KEY=your-api-key -- npx -y @antnsn/hevy-mcp

Claude Desktop

Add to claude_desktop_config.json:

{
  "mcpServers": {
    "hevy": {
      "command": "npx",
      "args": ["-y", "@antnsn/hevy-mcp"],
      "env": {
        "HEVY_API_KEY": "your-api-key"
      }
    }
  }
}

Global install (alternative to npx)

If npx is slow or blocked in your environment — common on corporate machines with npm security policies (e.g. allow-scripts guards) — install once globally:

npm install -g @antnsn/hevy-mcp

Then use hevy-mcp as the command in any of the configs above:

{
  "mcpServers": {
    "hevy": {
      "command": "hevy-mcp",
      "env": {
        "HEVY_API_KEY": "${HEVY_API_KEY}"
      }
    }
  }
}

Note: ${HEVY_API_KEY} interpolation only works in Claude Code's .mcp.json. Claude Desktop does not expand environment variables — put the literal key there ("HEVY_API_KEY": "your-api-key").

Related MCP server: hevy-mcp

Tools

Tool

Description

get-workouts

Paginated list of workouts

get-workout

Single workout by ID

get-workout-count

Total workout count

get-workout-events

Workout update/delete events since a date (sync)

create-workout

Log a completed workout

update-workout

Update a workout (full overwrite)

get-routines

Paginated list of routines

get-routine

Single routine by ID

create-routine

Create a routine

update-routine

Update a routine (full overwrite)

get-exercise-templates

Paginated exercise templates

get-exercise-template

Single exercise template by ID

create-exercise-template

Create a custom exercise

get-routine-folders

Paginated routine folders

get-routine-folder

Single folder by ID

create-routine-folder

Create a routine folder

get-exercise-history

History for an exercise template (progress tracking)

get-body-measurements

Paginated body measurements

get-body-measurement

Body measurement by date

create-body-measurement

Create a body measurement entry

update-body-measurement

Update a body measurement (full overwrite)

get-user-info

Authenticated user info

Notes

  • The Hevy API is v0 ("use at your own risk" per Hevy's docs) — endpoints may change.

  • The API has no delete endpoints; anything created can only be deleted manually in the Hevy app.

  • update-workout, update-routine, and update-body-measurement overwrite the full record; fetch first, modify, then update.

Contributing

From source

git clone https://github.com/antnsn/hevy-mcp.git
cd hevy-mcp
npm install
npm run build

When running from a clone, the key can also live in a .env file in the project root (gitignored) instead of the environment:

echo 'HEVY_API_KEY=your-api-key' > .env
chmod 600 .env

The repo's .mcp.json then picks the server up automatically when running claude inside the repo. Note: the .env file only works for clones — the npm-installed package looks for it next to its own install location, so use the env config shown above instead.

Development

npm run dev        # run from source via tsx
npm run typecheck  # type-check without emitting

Test interactively with the MCP Inspector (pass the key explicitly — the Inspector does not inherit your shell environment):

npx @modelcontextprotocol/inspector -e HEVY_API_KEY=$HEVY_API_KEY node dist/index.js

The upstream OpenAPI spec is vendored at docs-openapi.json, extracted from the Swagger UI at https://api.hevyapp.com/docs/ (the spec is embedded in swagger-ui-init.js; there is no standalone spec URL).

Issues and PRs welcome at https://github.com/antnsn/hevy-mcp.

Available Tools

22 tools
create-body-measurementCreate body measurementA

Create a body measurement entry for a given date (all measurement fields optional; weights/masses in kg, girths in cm). Fails with 409 if an entry already exists for that date.

Inputs: date (required), hips, waist, abdomen, +14 more.

create-exercise-templateCreate custom exercise templateC

Create a new custom exercise template.

Inputs: title (required), muscle_group (required), exercise_type (required), equipment_category (required), +1 more.

create-routineCreate routineA

Create a new workout routine (a plan, not a logged workout).

Inputs: title (required), exercises (required), notes, folder_id.

create-routine-folderCreate routine folderB

Create a new routine folder. The folder is created at index 0 and all other folders shift down.

Inputs: title (required).

create-workoutCreate workoutB

Log a new (completed) workout with exercises and sets.

Inputs: title (required), end_time (required), exercises (required), start_time (required), +2 more.

get-body-measurementGet body measurement by dateA

Get a single body measurement entry by date.

Inputs: date (required).

get-body-measurementsGet body measurementsA

Get a paginated list of body measurements (weight, body fat, girths).

Inputs: page, pageSize.

get-exercise-historyGet exercise historyA

Get logged history for a specific exercise template, optionally filtered by date range. Useful for progress tracking (weights, reps over time).

Inputs: exerciseTemplateId (required), end_date, start_date.

get-exercise-templateGet exercise templateB

Get a single exercise template by ID.

Inputs: exerciseTemplateId (required).

get-exercise-templatesGet exercise templatesA

Get a paginated list of exercise templates (built-in and custom) available on the account.

Inputs: page, pageSize.

get-routineGet routineA

Get a routine by its ID.

Inputs: routineId (required).

get-routine-folderGet routine folderB

Get a single routine folder by ID.

Inputs: folderId (required).

get-routine-foldersGet routine foldersB

Get a paginated list of routine folders on the account.

Inputs: page, pageSize.

get-routinesGet routinesC

Get a paginated list of routines.

Inputs: page, pageSize.

get-user-infoGet user infoA

Get info about the authenticated Hevy user.

Inputs: no named parameters.

get-workoutGet workoutA

Get a single workout's complete details by its ID.

Inputs: workoutId (required).

get-workout-countGet workout countA

Get the total number of workouts on the account.

Inputs: no named parameters.

get-workout-eventsGet workout eventsA

Get a paged list of workout events (updates or deletes) since a given date. Useful for syncing workout changes.

Inputs: page, since, pageSize.

get-workoutsGet workoutsA

Get a paginated list of workouts (most recent first).

Inputs: page, pageSize.

update-body-measurementUpdate body measurementA

Update an existing body measurement entry for a date. All fields are overwritten — omitted fields are cleared.

Inputs: date (required), hips, waist, abdomen, +14 more.

update-routineUpdate routineA

Update an existing routine by ID. The full routine is overwritten.

Inputs: title (required), exercises (required), routineId (required), notes.

update-workoutUpdate workoutB

Update an existing workout by ID. The full workout is overwritten.

Inputs: title (required), end_time (required), exercises (required), workoutId (required), +3 more.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    B3.4/5.0

    Scored across 22 tools

    Disambiguation5/5

    Each tool has a clearly distinct purpose covering different resources (workouts, routines, folders, exercise templates, body measurements, user info) and actions (create, get, update, plus specialized queries like events and history). No two tools are ambiguous.

    Naming Consistency5/5

    All tool names follow a consistent verb_noun pattern in snake_case (e.g., create_workout, get_exercise_template, update_body_measurement). There are no deviations or mixed conventions.

    Tool Count4/5

    22 tools is on the high side but justified by the broad scope of fitness tracking (workouts, routines, exercises, measurements, account info, syncing). Each tool serves a distinct purpose, and the count is within a reasonable range for a comprehensive MCP server.

    Completeness2/5

    The set covers create, read, and update operations for most resources, but delete operations are entirely missing (no delete_workout, delete_routine, delete_body_measurement, etc.). This is a significant gap that would cause agent failures when cleanup or removal is needed.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      A
      quality
      A
      maintenance
      A Model Context Protocol (MCP) server implementation that interfaces with the Hevy fitness tracking app and its API. This server enables AI assistants to access and manage workout data, routines, exercise templates, and more through the Hevy API (requires PRO subscription).
      23
      2,642 npm
      536
      MIT
    • A
      license
      A
      quality
      C
      maintenance
      An MCP server that interfaces with the Hevy fitness tracking API, enabling AI assistants to manage workouts, routines, exercise templates, and more via natural language.
      26
      2,642 npm
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      MCP server for the Hevy workout tracker that enables users to query training history, log workouts, and manage routines via natural language.
      MIT
    • A
      license
      A
      quality
      D
      maintenance
      MCP server for the Hevy fitness tracking app, enabling management of workouts, routines, exercise templates, folders, and webhooks through AI assistants.
      25
      2,642 npm
      MIT