{"_id":"@antnsn/hevy-mcp","_rev":"2-5bafeeb0f792bfc3e5086c9400647bb9","name":"@antnsn/hevy-mcp","dist-tags":{"latest":"0.1.1"},"versions":{"0.1.0":{"name":"@antnsn/hevy-mcp","version":"0.1.0","keywords":["mcp","hevy","fitness","workout"],"author":{"name":"Marius Antonsen"},"license":"MIT","_id":"@antnsn/hevy-mcp@0.1.0","maintainers":[{"name":"antnsn","email":"antonsen.marius@gmail.com"}],"homepage":"https://github.com/antnsn/hevy-mcp#readme","bugs":{"url":"https://github.com/antnsn/hevy-mcp/issues"},"bin":{"hevy-mcp":"dist/index.js"},"dist":{"shasum":"ceb29dffd08ea92b3de097c4789be7fbc8918ed0","tarball":"https://registry.npmjs.org/@antnsn/hevy-mcp/-/hevy-mcp-0.1.0.tgz","fileCount":5,"integrity":"sha512-sklXiTBCif5xTOa4iTO6jAvDkQHJ+W9JvHBEFRzB52uWDGqV63kSOhrJlXtU690/IuhteOVDsEYQAqPAZtLjnA==","signatures":[{"sig":"MEYCIQD7lX6vDEdMdbLf8ybJWHr4tEeHSYr3n912Z3hVGyP2+gIhAO6KknPOMRImzVG1f+ZM5y4Sy89FsUJozXVHZ+MKZR7f","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":24274},"main":"dist/index.js","type":"module","engines":{"node":">=18"},"gitHead":"64f5bc2121b80cd548855cb75c33672126b03d17","scripts":{"dev":"tsx src/index.ts","build":"tsc && chmod +x dist/index.js","start":"node dist/index.js","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"antnsn","email":"antonsen.marius@gmail.com"},"repository":{"url":"git+https://github.com/antnsn/hevy-mcp.git","type":"git"},"_npmVersion":"11.17.0","description":"MCP server for the Hevy workout tracker API","directories":{},"_nodeVersion":"26.4.0","dependencies":{"zod":"^3.24.0","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","typescript":"^5.7.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/hevy-mcp_0.1.0_1783369917575_0.2539235808807303","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@antnsn/hevy-mcp","version":"0.1.1","description":"MCP server for the Hevy workout tracker API","type":"module","repository":{"type":"git","url":"git+https://github.com/antnsn/hevy-mcp.git"},"homepage":"https://github.com/antnsn/hevy-mcp#readme","bugs":{"url":"https://github.com/antnsn/hevy-mcp/issues"},"author":{"name":"Marius Antonsen"},"publishConfig":{"access":"public"},"bin":{"hevy-mcp":"dist/index.js"},"main":"dist/index.js","scripts":{"build":"tsc && chmod +x dist/index.js","prepublishOnly":"npm run build","dev":"tsx src/index.ts","start":"node dist/index.js","typecheck":"tsc --noEmit"},"keywords":["mcp","hevy","fitness","workout"],"license":"MIT","engines":{"node":">=18"},"dependencies":{"@modelcontextprotocol/sdk":"^1.12.0","zod":"^3.24.0"},"devDependencies":{"@types/node":"^22.0.0","tsx":"^4.19.0","typescript":"^5.7.0"},"gitHead":"f41e792c2f79305799ed3c9008f27832f2e23be7","_id":"@antnsn/hevy-mcp@0.1.1","_nodeVersion":"26.4.0","_npmVersion":"11.17.0","dist":{"integrity":"sha512-vwxdzkTp/9OAKST1GKaKTYGqXiiAr2lJXjNJjjKWc5XEv3CWQ93SeQyOYgikmnLxukDoR+nG/GUDoy8IRB0qyA==","shasum":"0848e3b3b14abc7405abe84476ce0aa7ead0761e","tarball":"https://registry.npmjs.org/@antnsn/hevy-mcp/-/hevy-mcp-0.1.1.tgz","fileCount":5,"unpackedSize":25681,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCqx2bHC4F53p4dP1aON/bwhj0kJzYS8k5oMcq36Vdb/QIhANQeLf5B4/l/iOkH3hUzyuJNea6xQNZf48/mzDvWuyFv"}]},"_npmUser":{"name":"antnsn","email":"antonsen.marius@gmail.com"},"directories":{},"maintainers":[{"name":"antnsn","email":"antonsen.marius@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/hevy-mcp_0.1.1_1783370679617_0.9256471761714395"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-06T20:31:57.284Z","modified":"2026-07-06T20:44:39.860Z","0.1.0":"2026-07-06T20:31:57.715Z","0.1.1":"2026-07-06T20:44:39.751Z"},"bugs":{"url":"https://github.com/antnsn/hevy-mcp/issues"},"author":{"name":"Marius Antonsen"},"license":"MIT","homepage":"https://github.com/antnsn/hevy-mcp#readme","keywords":["mcp","hevy","fitness","workout"],"repository":{"type":"git","url":"git+https://github.com/antnsn/hevy-mcp.git"},"description":"MCP server for the Hevy workout tracker API","maintainers":[{"name":"antnsn","email":"antonsen.marius@gmail.com"}],"readme":"# hevy-mcp\n\nMCP (Model Context Protocol) server for the [Hevy](https://hevy.com) workout tracker API.\n\nLets Claude (or any MCP client) read and write your Hevy data: workouts, routines, exercise templates, routine folders, exercise history, and body measurements.\n\n**Requirements:** Node.js >= 18, a Hevy Pro account, and an API key from <https://hevy.com/settings?developer>.\n\n## Usage\n\n### `.mcp.json` (project-level, Claude Code)\n\nA `.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.\n\nStep by step:\n\n1. Create a file named `.mcp.json` in the root of your project (same folder as `.git`), or run:\n\n   ```bash\n   claude mcp add hevy --scope project -- npx -y @antnsn/hevy-mcp\n   ```\n\n   which creates/updates it for you.\n2. Make sure it contains:\n\n   ```json\n   {\n     \"mcpServers\": {\n       \"hevy\": {\n         \"command\": \"npx\",\n         \"args\": [\"-y\", \"@antnsn/hevy-mcp\"],\n         \"env\": {\n           \"HEVY_API_KEY\": \"${HEVY_API_KEY}\"\n         }\n       }\n     }\n   }\n   ```\n\n3. 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:\n\n   ```bash\n   export HEVY_API_KEY=your-api-key\n   ```\n\n4. 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`.\n\n### Claude Code (global)\n\n```bash\nclaude mcp add hevy -s user --env HEVY_API_KEY=your-api-key -- npx -y @antnsn/hevy-mcp\n```\n\n### Claude Desktop\n\nAdd to `claude_desktop_config.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"hevy\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@antnsn/hevy-mcp\"],\n      \"env\": {\n        \"HEVY_API_KEY\": \"your-api-key\"\n      }\n    }\n  }\n}\n```\n\n### Global install (alternative to npx)\n\nIf `npx` is slow or blocked in your environment — common on corporate machines with npm security policies (e.g. `allow-scripts` guards) — install once globally:\n\n```bash\nnpm install -g @antnsn/hevy-mcp\n```\n\nThen use `hevy-mcp` as the command in any of the configs above:\n\n```json\n{\n  \"mcpServers\": {\n    \"hevy\": {\n      \"command\": \"hevy-mcp\",\n      \"env\": {\n        \"HEVY_API_KEY\": \"${HEVY_API_KEY}\"\n      }\n    }\n  }\n}\n```\n\nNote: `${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\"`).\n\n## Tools\n\n| Tool | Description |\n|------|-------------|\n| `get-workouts` | Paginated list of workouts |\n| `get-workout` | Single workout by ID |\n| `get-workout-count` | Total workout count |\n| `get-workout-events` | Workout update/delete events since a date (sync) |\n| `create-workout` | Log a completed workout |\n| `update-workout` | Update a workout (full overwrite) |\n| `get-routines` | Paginated list of routines |\n| `get-routine` | Single routine by ID |\n| `create-routine` | Create a routine |\n| `update-routine` | Update a routine (full overwrite) |\n| `get-exercise-templates` | Paginated exercise templates |\n| `get-exercise-template` | Single exercise template by ID |\n| `create-exercise-template` | Create a custom exercise |\n| `get-routine-folders` | Paginated routine folders |\n| `get-routine-folder` | Single folder by ID |\n| `create-routine-folder` | Create a routine folder |\n| `get-exercise-history` | History for an exercise template (progress tracking) |\n| `get-body-measurements` | Paginated body measurements |\n| `get-body-measurement` | Body measurement by date |\n| `create-body-measurement` | Create a body measurement entry |\n| `update-body-measurement` | Update a body measurement (full overwrite) |\n| `get-user-info` | Authenticated user info |\n\n## Notes\n\n- The Hevy API is v0 (\"use at your own risk\" per Hevy's docs) — endpoints may change.\n- The API has **no delete endpoints**; anything created can only be deleted manually in the Hevy app.\n- `update-workout`, `update-routine`, and `update-body-measurement` overwrite the full record; fetch first, modify, then update.\n\n## Contributing\n\n### From source\n\n```bash\ngit clone https://github.com/antnsn/hevy-mcp.git\ncd hevy-mcp\nnpm install\nnpm run build\n```\n\nWhen running from a clone, the key can also live in a `.env` file in the project root (gitignored) instead of the environment:\n\n```bash\necho 'HEVY_API_KEY=your-api-key' > .env\nchmod 600 .env\n```\n\nThe 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.\n\n### Development\n\n```bash\nnpm run dev        # run from source via tsx\nnpm run typecheck  # type-check without emitting\n```\n\nTest interactively with the MCP Inspector (pass the key explicitly — the Inspector does not inherit your shell environment):\n\n```bash\nnpx @modelcontextprotocol/inspector -e HEVY_API_KEY=$HEVY_API_KEY node dist/index.js\n```\n\nThe 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).\n\nIssues and PRs welcome at <https://github.com/antnsn/hevy-mcp>.\n","readmeFilename":"README.md"}