The full upstream README, mirrored here for reference. Install config, tool schemas, adoption signals, and an original overview live on the Hevy MCP (Remote) listing page.
Fork notice. This is an independently-maintained fork of
chrisdoc/hevy-mcp, repackaged for multi-tenant MCP gateways. It ships the same Hevy tools wrapped in supergateway as an OCI image that speaks MCP streamable-HTTP over HTTP, instead of stdio. Use the upstreamhevy-mcpnpm package for local/stdio use in Claude Desktop, Cursor, etc.
A Model Context Protocol (MCP) server for the Hevy fitness tracking app, packaged as a supergateway-wrapped OCI image for hosting behind an MCP gateway. Exposes MCP streamable-HTTP on /mcp and health on /healthz; reads HEVY_API_KEY from the container environment.
Pick the workflow that fits your setup:
| Scenario | Command | Requirements |
|---|---|---|
| One-off stdio run | HEVY_API_KEY=sk_live... npx -y hevy-mcp | Node.js ≥ 24, Hevy API key |
| Local development | npm install && npm run build && npm start | .env with HEVY_API_KEY |
.nvmrc).You can launch the server directly without cloning:
To use this server with Claude Desktop, add the following to your claude_desktop_config.json:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
Add this server under "mcpServers" in ~/.cursor/mcp.json:
oxlint/oxfmt) for near-instant linting and formatting.Supply your Hevy API key via:
HEVY_API_KEY (in .env or system environment).--hevy-api-key=your_key (after -- in npm scripts).hevy-mcp includes Sentry monitoring to observe errors and usage in production. It initializes @sentry/node with tracing enabled and PII collection disabled by default.
The MCP server itself speaks stdio only. For multi-tenant gateway
deployments (e.g. mcp-gateway-poc),
this repo ships a Dockerfile that wraps the stdio binary with
supergateway so a single
container exposes MCP streamable-HTTP.
The image follows the same contract every gateway-hosted MCP uses:
0.0.0.0:$PORT at /mcp/healthzMcp-Session-Id honored)HEVY_API_KEY is read from the container environment and passed to the
spawned stdio childImages are published to ghcr.io/rwestergren/hevy-mcp from main and from
any manually cut GitHub release. Build locally with:
End users running hevy-mcp directly should use the stdio/npx flow above;
the Docker image is aimed at gateway operators, not individual clients.
| Category | Tools |
|---|---|
| Workouts | get-workouts, get-workout, create-workout, update-workout, get-workout-count, get-workout-events |
| Routines | get-routines, get-routine-by-id, create-routine, update-routine |
| Templates | get-exercise-templates, get-exercise-template, search-exercise-templates |
| Folders | get-routine-folders, get-routine-folder, create-routine-folder |
| Webhooks | get-webhook-subscription, create-webhook-subscription, delete-webhook-subscription |
npm run buildnpm run check (uses oxlint/oxfmt)npx vitest run --exclude tests/integration/**npm test (requires HEVY_API_KEY)For a detailed senior engineer guide, please refer to AGENTS.md.
The API client is automatically generated from the OpenAPI spec using Kubb:
Contributions are welcome! Please open an issue or PR for any major changes.