Hevy MCP Server
The Hevy MCP Server gives AI assistants access to your Hevy workout data, enabling full read/write management of your fitness tracking.
Workouts: List (paginated), count, get details by ID, create new workouts (exercises, sets, reps, weight, duration), update existing workouts, and get workout events (updates/deletes since a given date) for syncing.
Routines: List, get details, create, and update routines (including rep ranges, rest times, supersets). Organize routines into folders — list, get, create, and rename them.
Exercise Library: Browse the full exercise library with muscle group and equipment info, get details on a specific exercise, and track progress for any exercise via its full training history.
Body Measurements: List measurements (weight, body fat %, etc.) over time, retrieve measurements for a specific date, and log or update measurements.
User Info: Retrieve your Hevy profile (username, join date, etc.).
Provides tools for accessing and managing Hevy workout data, including listing, creating, and updating workouts, managing routines and folders, retrieving exercise templates and history, and logging body measurements.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Hevy MCP Server list my workouts from last week"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Hevy MCP Server
An MCP server that gives AI assistants (Claude, etc.) access to your Hevy workout data via the Model Context Protocol.
Supports both Streamable HTTP (for Claude web/mobile/desktop connector UI with OAuth) and SSE (for Claude Desktop config / CLI).
Deploy
Option 1 — Railway (recommended, free tier available)
Fork this repo and connect it to a new Railway project
In the Railway dashboard, go to your service → Variables and add:
Variable
Value
HEVY_API_KEYYour Hevy API key (from hevy.com/settings?developer)
MCP_AUTH_TOKENA secret token — run
openssl rand -hex 32to generate oneMCP_TRANSPORTsseSERVER_BASE_URLYour Railway public URL (set after generating a domain below)
Go to Settings → Networking → Generate Domain, enter port
3847, click Generate DomainCopy the generated URL and update
SERVER_BASE_URLto match — Railway will redeploy automaticallyCheck Deploy Logs for
Hevy MCP server running
Token persistence on Railway: OAuth tokens are stored in
DATA_DIR(defaults to/data). On Railway's free tier the filesystem is ephemeral — tokens won't survive redeploys and users will need to re-authorize. To persist tokens, add a Railway volume mounted at/dataand setDATA_DIR=/data.
Option 2 — Docker (self-hosted)
git clone https://github.com/karlhsueh/hevyapp-mcp.git
cd hevyapp-mcp
cp .env.example .env
# Edit .env with your values
docker compose up -dVerify:
curl http://localhost:3847/health
# {"status":"ok","server":"hevyapp-mcp"}Expose remotely with Cloudflare Tunnel or any reverse proxy pointing at localhost:3847.
The included docker-compose.yml mounts a named volume at /data for OAuth token persistence across container restarts.
Option 3 — Fly.io (free tier available)
Install the Fly CLI and run
fly auth loginFrom the repo root:
fly launch(accept defaults)Set secrets:
fly secrets set \ HEVY_API_KEY=your-key \ MCP_AUTH_TOKEN=your-token \ MCP_TRANSPORT=sse \ SERVER_BASE_URL=https://your-app.fly.dev \ DATA_DIR=/dataAdd a volume for token persistence:
fly volumes create mcp_data --size 1Mount the volume by adding to
fly.toml:[mounts] source = "mcp_data" destination = "/data"Deploy:
fly deploy
Related MCP server: hevy-mcp-server
Connect to Claude
Claude web / mobile / desktop (connector UI) — OAuth
The server implements OAuth 2.0 so Claude can authenticate without any config files.
In Claude, open Settings → Integrations (web/mobile) or Preferences → Integrations (desktop)
Click Add custom integration
Enter your server URL (e.g.
https://your-app.up.railway.app)Claude opens a browser window — enter your
MCP_AUTH_TOKENDone
Claude Desktop (config file)
Add to ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"hevy": {
"type": "sse",
"url": "https://your-server/sse",
"headers": {
"Authorization": "Bearer your-secret-token"
}
}
}
}Claude Code (CLI)
claude mcp add hevy --transport sse https://your-server/sse \
--header "Authorization: Bearer your-secret-token"Available tools
Tool | What it does |
| List workouts (paginated) |
| Total workout count |
| Single workout details |
| Changes since a date (for sync) |
| Log a new workout |
| Edit an existing workout |
| Your profile |
| List saved routines |
| Single routine |
| Manage routines |
| Full exercise library |
| Single exercise info |
| Progress over time for any exercise |
| Routine folder list |
| Manage folders |
| Weight/body fat history |
| Measurements for a date |
| Log body measurements |
Updating
git pull
docker compose up -d --buildLogs
docker compose logs -f hevyapp-mcpAvailable Tools
21 toolscreate_routineC
Create a new workout routine
Inputs: routine (required).
create_routine_folderC
Create a new routine folder to organize routines
Inputs: title (required).
create_workoutC
Log a new workout in Hevy
Inputs: workout (required).
get_body_measurement_by_dateC
Get body measurements for a specific date
Inputs: date (required).
get_body_measurementsC
Get a paginated list of body measurements (weight, body fat %, etc.) over time
Inputs: page, pageSize.
get_exercise_historyB
Get the training history for a specific exercise (all sets across all workouts), great for tracking progress
Inputs: exerciseTemplateId (required), page, pageSize.
get_exercise_templateC
Get a specific exercise template by ID
Inputs: exerciseTemplateId (required).
get_exercise_templatesB
Get the exercise library — all available exercises with their IDs, muscle groups, and equipment
Inputs: page, pageSize.
get_routineA
Get a single routine by ID with all exercises and sets
Inputs: routineId (required).
get_routine_folderC
Get a specific routine folder by ID
Inputs: folderId (required).
get_routine_foldersC
Get a list of routine folders
Inputs: page, pageSize.
get_routinesB
Get a paginated list of saved workout routines
Inputs: page, pageSize.
get_user_infoA
Get the current Hevy user's profile info (username, join date, etc.)
Inputs: no named parameters.
get_workoutA
Get full details of a single workout by ID
Inputs: workoutId (required).
get_workout_countA
Get the total number of workouts logged in Hevy
Inputs: no named parameters.
get_workout_eventsB
Get workout events (updates/deletes) since a given date, useful for syncing local caches
Inputs: since (required), page, pageSize.
get_workoutsB
Get a paginated list of workouts from Hevy
Inputs: page, pageSize.
update_routineC
Update an existing routine
Inputs: routine (required), routineId (required).
update_routine_folderC
Rename a routine folder
Inputs: title (required), folderId (required).
update_workoutC
Update an existing workout in Hevy
Inputs: workout (required), workoutId (required).
upsert_body_measurementC
Create or update body measurements for a specific date
Inputs: date (required), measurement (required).
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 21 tools
Each tool targets a distinct resource and action. Workout-related tools are differentiated by purpose (listing, counting, events, details). Exercise and measurement tools are similarly distinct.
All tool names follow a consistent verb_noun pattern in snake_case (e.g., create_routine, get_workouts, upsert_body_measurement). No mixing of conventions.
21 tools is slightly above the ideal range but still reasonable for a fitness app covering routines, folders, exercises, workouts, and measurements. Each tool serves a clear purpose.
Covers create, read, update, and upsert for key resources, but notably missing delete operations (e.g., delete_routine, delete_workout, delete_body_measurement). Also lacks search/filter tools. Notable gap.
Maintenance
Related MCP Connectors
Create Hevy routines and analyze your training from chat. Unofficial; BYO Hevy PRO API key.
Your Garmin, Oura, WHOOP, Hevy and 35 more fitness apps, queryable from your own AI.
Your strength-training data for any AI assistant: workouts, progress, muscle volume, routines.
Agent-first strength-training platform across iOS, Web & MCP: read & write workouts, PRs & plans.
Related MCP Servers
- AlicenseAqualityAmaintenanceA 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).233,965 npm541MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI assistants to interact with the Hevy fitness tracking API for logging workouts, managing routines, and tracking fitness progress.16 npm34MIT
- AlicenseBqualityDmaintenanceEnables AI agents to interact with the Hevy Workout Tracker API to manage workouts, routines, exercises, and user data.2316 npmMIT
- AlicenseNot gradedqualityNot gradedmaintenanceA Model Context Protocol (MCP) server that provides AI assistants with access to the Hevy fitness tracking API. This allows you to log workouts, manage routines, browse exercises, and track your fitness progress directly through AI chat interfaces.16 npmMIT