oci ghcr.io/rwestergren/hevy-mcp:0.1.6stdioMITupdated 4mo ago
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 upstream hevy-mcp npm package for local/stdio use in Claude Desktop, Cursor, etc.
What can you do with Hevy MCP (Remote)?
hevy-mcp-remote: Hosted / gateway-ready MCP for Hevy Fitness
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.
📋 Table of Contents
- Features
- Quick Start
- Prerequisites
- Installation
- Why hevy-mcp?
- Configuration
- Available MCP Tools
- Development & Contributing
🚀 Features
- Workout Management: Fetch, create, and update workouts.
- Routine Management: Access and manage workout routines.
- Exercise Templates: Browse available exercise templates with in-memory caching.
- Folder Organization: Manage routine folders.
- Webhook Subscriptions: Create, view, and delete webhook subscriptions for workout events.
🏁 Quick Start
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 |
🛠️ Prerequisites
- Node.js: v24 or higher (strongly recommended to use the exact version pinned in
.nvmrc). - npm: v10 or higher.
- Hevy API key: Required for all operations (available with Hevy PRO).
📦 Installation
Run via npx (Recommended)
You can launch the server directly without cloning:
HEVY_API_KEY=your_hevy_api_key_here npx -y hevy-mcp
Manual Installation
# Clone the repository
git clone https://github.com/chrisdoc/hevy-mcp.git
cd hevy-mcp
# Install dependencies
npm install
# Create .env and add your keys
cp .env.sample .env
# Edit .env and add your HEVY_API_KEY
🔗 Integration
Claude Desktop Configuration
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
{
"mcpServers": {
"hevy-mcp": {
"command": "npx",
"args": ["-y", "hevy-mcp"],
"env": {
"HEVY_API_KEY": "sk_live_your_key_here"
}
}
}
}
Cursor Configuration
Add this server under "mcpServers" in ~/.cursor/mcp.json:
{
"mcpServers": {
"hevy-mcp": {
"command": "npx",
"args": ["-y", "hevy-mcp"],
"env": {
"HEVY_API_KEY": "your-api-key-here"
}
}
}
}
✨ Why hevy-mcp?
- 🚀 High Performance: Built with the Oxc toolchain (
oxlint/oxfmt) for near-instant linting and formatting. - 🛡️ Type Safety: Fully type-safe implementation using Zod and Kubb-generated API clients.
- 📉 Observability: Built-in Sentry monitoring for error tracking and performance profiling.
- ⚡ Optimized: Includes in-memory caching for exercise templates to reduce API latency.
⚙️ Configuration
Supply your Hevy API key via:
- Environment Variable:
HEVY_API_KEY(in.envor system environment). - CLI Argument:
--hevy-api-key=your_key(after--in npm scripts).
# Example .env
HEVY_API_KEY=your_hevy_api_key_here
📡 Sentry Monitoring
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.
🐳 Running behind an MCP gateway (supergateway contract)
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:
- MCP streamable-HTTP on
0.0.0.0:$PORTat/mcp - Health endpoint at
/healthz - Stateful sessions (
Mcp-Session-Idhonored) HEVY_API_KEYis read from the container environment and passed to the spawned stdio child
Images are published to ghcr.io/rwestergren/hevy-mcp from main and from
any manually cut GitHub release. Build locally with:
docker build -t hevy-mcp:local .
docker run --rm -e HEVY_API_KEY=sk_live_... -p 8080:8080 hevy-mcp:local
curl http://localhost:8080/healthz
End users running hevy-mcp directly should use the stdio/npx flow above;
the Docker image is aimed at gateway operators, not individual clients.
🛠️ Available MCP Tools
| 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 |
👨💻 Development & Contributing
Quick Commands
- Build:
npm run build - Lint/Format:
npm run check(uses oxlint/oxfmt) - Unit Tests:
npx vitest run --exclude tests/integration/** - Full Test Suite:
npm test(requiresHEVY_API_KEY)
For a detailed senior engineer guide, please refer to AGENTS.md.
API Client Generation
The API client is automatically generated from the OpenAPI spec using Kubb:
npm run build:client
📄 License & Acknowledgements
- License: MIT
- Credits: Model Context Protocol, Hevy Fitness.
Contributions are welcome! Please open an issue or PR for any major changes.
Install
Add Hevy MCP (Remote) to your client. Pick the one you use.
claude mcp add ghcr-io-rwestergren-hevy-mcp-0-1-6 -- docker run -i --rm ghcr.io/rwestergren/hevy-mcp:0.1.6codex mcp add ghcr-io-rwestergren-hevy-mcp-0-1-6 -- docker run -i --rm ghcr.io/rwestergren/hevy-mcp:0.1.6amp mcp add ghcr-io-rwestergren-hevy-mcp-0-1-6 -- docker run -i --rm ghcr.io/rwestergren/hevy-mcp:0.1.6{
"mcpServers": {
"ghcr-io-rwestergren-hevy-mcp-0-1-6": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/rwestergren/hevy-mcp:0.1.6"
]
}
}
}Add to `claude_desktop_config.json`, then restart Claude Desktop.
{
"mcpServers": {
"ghcr-io-rwestergren-hevy-mcp-0-1-6": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/rwestergren/hevy-mcp:0.1.6"
]
}
}
}Add to `~/.cursor/mcp.json`, or `.cursor/mcp.json` for a single project.
code --add-mcp '{"name":"ghcr-io-rwestergren-hevy-mcp-0-1-6","command":"docker","args":["run","-i","--rm","ghcr.io/rwestergren/hevy-mcp:0.1.6"]}'Or add the block manually to `.vscode/mcp.json` under `servers`.
{
"mcpServers": {
"ghcr-io-rwestergren-hevy-mcp-0-1-6": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/rwestergren/hevy-mcp:0.1.6"
]
}
}
}Add to `~/.codeium/windsurf/mcp_config.json`.
{
"mcpServers": {
"ghcr-io-rwestergren-hevy-mcp-0-1-6": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/rwestergren/hevy-mcp:0.1.6"
]
}
}
}Add to `cline_mcp_settings.json` via the MCP Servers panel.
{
"mcpServers": {
"ghcr-io-rwestergren-hevy-mcp-0-1-6": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/rwestergren/hevy-mcp:0.1.6"
]
}
}
}Add to `~/.gemini/settings.json`.
{
"mcpServers": {
"ghcr-io-rwestergren-hevy-mcp-0-1-6": {
"type": "local",
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/rwestergren/hevy-mcp:0.1.6"
],
"tools": [
"*"
]
}
}
}Add to `~/.copilot/mcp-config.json`, or run `/mcp add` inside the CLI.
{
"context_servers": {
"ghcr-io-rwestergren-hevy-mcp-0-1-6": {
"command": {
"path": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/rwestergren/hevy-mcp:0.1.6"
]
}
}
}
}Add to your Zed `settings.json`.
docker run -i --rm ghcr.io/rwestergren/hevy-mcp:0.1.6Run `goose configure`, choose **Add Extension → Command-line Extension**, and paste this command.
Score
39 / 100
Incomplete
- Documentation25/25
- Maintenance13/25
- Trust13/20
- Capability0/15
- Install experience12/15
- Documents what it does and how to connect
- Has a resolvable package or endpoint
- Exposes at least one tool, prompt or resource
- README has substantive content
- Includes a code example
- Documents its configuration
- Mentions credentials or security posture
- Last commit 119 days ago
- Has a release history
- Repository is not archived
- Licensed MIT
- Namespace verified in the official MCP registry
- Claimed by its owner
- Published under an organisation
- 0 tool(s) documented
- Provides prompt templates
- Provides resources
- 12 documented install method(s)
- Published to a package registry
- Offers a hosted endpoint — no local install
Version history
| Versions | Published |
|---|---|
| 0.1.6Latest | May 5, 2026 |