hevy-mcp 1.28.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -15,6 +15,7 @@ A Model Context Protocol (MCP) server implementation that interfaces with the [H
15
15
  - [Quick Start](#quick-start)
16
16
  - [Prerequisites](#prerequisites)
17
17
  - [Installation](#installation)
18
+ - [Run with Docker](#run-with-docker)
18
19
  - [Claude Desktop Configuration](#claude-desktop-configuration)
19
20
  - [Cursor Configuration](#cursor-configuration)
20
21
  - [Other MCP Clients (via add-mcp)](#other-mcp-clients-via-add-mcp)
@@ -39,10 +40,11 @@ A Model Context Protocol (MCP) server implementation that interfaces with the [H
39
40
 
40
41
  Pick the workflow that fits your setup:
41
42
 
42
- | Scenario | Command | Requirements |
43
- | :-------------------- | :------------------------------------------------------------------------------------------ | :------------------------- |
44
- | **One-off stdio run** | `HEVY_API_KEY=sk_live... npx -y hevy-mcp` or `HEVY_API_KEY=sk_live... bunx hevy-mcp@latest` | Node.js ≥ 20, Hevy API key |
45
- | **Local development** | `npm install && npm run build && npm start` | `.env` with `HEVY_API_KEY` |
43
+ | Scenario | Command | Requirements |
44
+ | :-------------------- | :-------------------------------------------------------------------------------------- | :------------------------- |
45
+ | **One-off stdio run** | `HEVY_API_KEY=your_key npx -y hevy-mcp` or `HEVY_API_KEY=your_key bunx hevy-mcp@latest` | Node.js ≥ 20, Hevy API key |
46
+ | **Docker stdio run** | `docker run -i --rm -e HEVY_API_KEY ghcr.io/chrisdoc/hevy-mcp:latest` | Docker, Hevy API key |
47
+ | **Local development** | `npm install && npm run build && npm start` | `.env` with `HEVY_API_KEY` |
46
48
 
47
49
  ---
48
50
 
@@ -51,6 +53,7 @@ Pick the workflow that fits your setup:
51
53
  - **Node.js**: v20 or higher (strongly recommended to use the exact version pinned in `.nvmrc`).
52
54
  - **npm**: v10 or higher.
53
55
  - **Bun** (optional): If you want to launch with `bunx`.
56
+ - **Docker** (optional): If you want an isolated container-based stdio setup.
54
57
  - **Hevy API key**: Required for all operations (available with Hevy PRO).
55
58
 
56
59
  ---
@@ -85,6 +88,26 @@ cp .env.sample .env
85
88
  # Edit .env and add your HEVY_API_KEY
86
89
  ```
87
90
 
91
+ ### Run with Docker
92
+
93
+ Official multi-platform images are published to GitHub Container Registry for
94
+ `linux/amd64` and `linux/arm64`:
95
+
96
+ ```bash
97
+ export HEVY_API_KEY=your_hevy_api_key_here
98
+ docker run -i --rm -e HEVY_API_KEY ghcr.io/chrisdoc/hevy-mcp:latest
99
+ ```
100
+
101
+ The server uses stdio, so `-i` keeps standard input open for the MCP client.
102
+ `--rm` removes the stopped container automatically. The `-e HEVY_API_KEY`
103
+ form forwards the variable from the host environment without putting the key
104
+ in the command arguments.
105
+
106
+ Use `latest` to follow the newest stable release. For reproducible deployments,
107
+ pin the exact version shown on the release, using a tag such as
108
+ `ghcr.io/chrisdoc/hevy-mcp:X.Y.Z`. Major (`:X`) and major.minor (`:X.Y`) tags
109
+ are also published for controlled automatic updates.
110
+
88
111
  ---
89
112
 
90
113
  ## 🔗 Integration
@@ -119,6 +142,41 @@ If you prefer Bun, swap the launcher fields:
119
142
  }
120
143
  ```
121
144
 
145
+ To run Claude Desktop through Docker instead, first create an environment file
146
+ outside the repository containing your real key:
147
+
148
+ ```dotenv
149
+ HEVY_API_KEY=replace_with_your_real_key
150
+ ```
151
+
152
+ Restrict access to that file where supported (for example,
153
+ `chmod 600 /absolute/path/to/hevy-mcp.env`), then use its absolute path in the
154
+ Claude Desktop configuration:
155
+
156
+ ```json
157
+ {
158
+ "mcpServers": {
159
+ "hevy-mcp": {
160
+ "command": "docker",
161
+ "args": [
162
+ "run",
163
+ "-i",
164
+ "--rm",
165
+ "--env-file",
166
+ "/absolute/path/to/hevy-mcp.env",
167
+ "ghcr.io/chrisdoc/hevy-mcp:latest"
168
+ ]
169
+ }
170
+ }
171
+ }
172
+ ```
173
+
174
+ This configuration runs the same stdio server inside the container; it does
175
+ not expose an HTTP port or start a detached service. Docker reads the key from
176
+ the environment file, so the Claude configuration does not replace an
177
+ inherited key with a placeholder. Replace `latest` with an exact version tag if
178
+ you want Claude Desktop to stay on a pinned release.
179
+
122
180
  ### Cursor Configuration
123
181
 
124
182
  Add this server under `"mcpServers"` in `~/.cursor/mcp.json`:
@@ -179,11 +237,18 @@ Supply your Hevy API key via the `HEVY_API_KEY` environment variable (in
179
237
  Set `HEVY_MCP_API_TIMEOUT` to override the default 30-second Hevy API request
180
238
  timeout. Its value is in milliseconds.
181
239
 
240
+ Set `HEVY_MCP_DEBUG=1` to emit verbose, privacy-bounded diagnostics to stderr.
241
+ Debug records include tool invocations and sanitized Hevy API response timing
242
+ and status details. Other values leave diagnostics disabled, and stdout remains
243
+ reserved for the MCP JSON-RPC stream.
244
+
182
245
  ```env
183
246
  # Example .env
184
247
  HEVY_API_KEY=your_hevy_api_key_here
185
248
  # Optional: customize Hevy API request timeout (milliseconds)
186
249
  HEVY_MCP_API_TIMEOUT=30000
250
+ # Optional: enable verbose stderr diagnostics (only the value 1 enables it)
251
+ HEVY_MCP_DEBUG=1
187
252
  ```
188
253
 
189
254
  ### 🧠 Exercise Template Cache Behavior
@@ -215,10 +280,11 @@ paging behavior explicit and avoid cross-page invalidation complexity.
215
280
  <details>
216
281
  <summary><strong>⚠️ Migration Note (v1.18.0)</strong></summary>
217
282
 
218
- As of **v1.18.0**, `hevy-mcp` removed both HTTP/SSE transport and Docker
219
- support.
283
+ As of **v1.18.0**, `hevy-mcp` removed HTTP/SSE transport and its previous
284
+ Docker packaging. Docker support is now available again for the stdio server.
220
285
 
221
- The supported path is stdio via `npx hevy-mcp`.
286
+ Both `npx hevy-mcp` and the official container image use stdio; HTTP ports and
287
+ detached-container deployment are not supported.
222
288
 
223
289
  </details>
224
290
 
package/dist/cli.mjs CHANGED
@@ -4,12 +4,12 @@
4
4
  (function() {
5
5
  try {
6
6
  var e = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof globalThis ? globalThis : "undefined" != typeof self ? self : {};
7
- e.SENTRY_RELEASE = { id: "hevy-mcp@1.28.0" };
7
+ e.SENTRY_RELEASE = { id: "hevy-mcp@2.0.0" };
8
8
  var n = new e.Error().stack;
9
9
  n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "03cf150f-6466-4ca3-9cf1-e423cc0e3cd2", e._sentryDebugIdIdentifier = "sentry-dbid-03cf150f-6466-4ca3-9cf1-e423cc0e3cd2");
10
10
  } catch (e) {}
11
11
  })();
12
- import { r as runServer } from "./src-J8OsyJcw.mjs";
12
+ import { r as runServer } from "./src-c3mB-R0m.mjs";
13
13
  //#region src/cli.ts
14
14
  runServer().catch((error) => {
15
15
  console.error("Fatal error in main():", error);
package/dist/index.d.mts CHANGED
@@ -14,7 +14,7 @@ declare function createServer({
14
14
  config
15
15
  }: {
16
16
  config: ServerConfig;
17
- }): McpServer;
17
+ }): Promise<McpServer>;
18
18
  declare function runServer(): Promise<void>;
19
19
  //#endregion
20
20
  export { configSchema, createServer, createServer as default, runServer };
package/dist/index.mjs CHANGED
@@ -4,10 +4,10 @@
4
4
  (function() {
5
5
  try {
6
6
  var e = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof globalThis ? globalThis : "undefined" != typeof self ? self : {};
7
- e.SENTRY_RELEASE = { id: "hevy-mcp@1.28.0" };
7
+ e.SENTRY_RELEASE = { id: "hevy-mcp@2.0.0" };
8
8
  var n = new e.Error().stack;
9
9
  n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "5b077b94-9ef8-4f24-a0b0-8dcfbf491be1", e._sentryDebugIdIdentifier = "sentry-dbid-5b077b94-9ef8-4f24-a0b0-8dcfbf491be1");
10
10
  } catch (e) {}
11
11
  })();
12
- import { n as createServer, r as runServer, t as configSchema } from "./src-J8OsyJcw.mjs";
12
+ import { n as createServer, r as runServer, t as configSchema } from "./src-c3mB-R0m.mjs";
13
13
  export { configSchema, createServer, createServer as default, runServer };