hevy-mcp 1.26.6 → 1.28.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
@@ -21,6 +21,7 @@ A Model Context Protocol (MCP) server implementation that interfaces with the [H
21
21
  - [Why hevy-mcp?](#why-hevy-mcp)
22
22
  - [Configuration](#configuration)
23
23
  - [Available MCP Tools](#available-mcp-tools)
24
+ - [Available MCP Resources](#available-mcp-resources)
24
25
  - [Development & Contributing](#development--contributing)
25
26
 
26
27
  ---
@@ -40,14 +41,14 @@ Pick the workflow that fits your setup:
40
41
 
41
42
  | Scenario | Command | Requirements |
42
43
  | :-------------------- | :------------------------------------------------------------------------------------------ | :------------------------- |
43
- | **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 ≥ 24, Hevy API key |
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 |
44
45
  | **Local development** | `npm install && npm run build && npm start` | `.env` with `HEVY_API_KEY` |
45
46
 
46
47
  ---
47
48
 
48
49
  ## 🛠️ Prerequisites
49
50
 
50
- - **Node.js**: v24 or higher (strongly recommended to use the exact version pinned in `.nvmrc`).
51
+ - **Node.js**: v20 or higher (strongly recommended to use the exact version pinned in `.nvmrc`).
51
52
  - **npm**: v10 or higher.
52
53
  - **Bun** (optional): If you want to launch with `bunx`.
53
54
  - **Hevy API key**: Required for all operations (available with Hevy PRO).
@@ -187,8 +188,8 @@ HEVY_MCP_API_TIMEOUT=30000
187
188
 
188
189
  ### 🧠 Exercise Template Cache Behavior
189
190
 
190
- `search-exercise-templates` now uses a shared in-memory async cache for the
191
- full exercise template catalog:
191
+ `search-exercise-templates` and the `hevy://exercise-templates` resource use a
192
+ shared in-memory async cache for the full exercise template catalog:
192
193
 
193
194
  - **TTL**: 5 minutes per cached catalog entry.
194
195
  - **Memory bound**: max 1 catalog entry (LRU bounded cache).
@@ -197,9 +198,8 @@ full exercise template catalog:
197
198
  - **Manual refresh**: set `refresh: true` in the tool input to invalidate the
198
199
  cached catalog and force a re-fetch from the Hevy API.
199
200
 
200
- This cache currently applies to `search-exercise-templates` only. Paginated
201
- `get-exercise-templates` requests still call the API directly to keep paging
202
- behavior explicit and avoid cross-page invalidation complexity.
201
+ Paginated `get-exercise-templates` requests still call the API directly to keep
202
+ paging behavior explicit and avoid cross-page invalidation complexity.
203
203
 
204
204
  ### 📡 Sentry Monitoring
205
205
 
@@ -240,6 +240,28 @@ The supported path is stdio via `npx hevy-mcp`.
240
240
  > folders, exercise templates, or body measurements, so `hevy-mcp` does not
241
241
  > provide delete tools for these resources.
242
242
 
243
+ ## 💬 Available MCP Prompts
244
+
245
+ | Prompt | Arguments | Guided workflow |
246
+ | :---------------------------- | :------------------------------------------------------------------------------------- | :---------------------------------------------------- |
247
+ | `analyze-workout-progress` | Optional `weeks` (1-12; defaults to `4` when omitted from a supplied arguments object) | Analyze recent workout and body-measurement trends. |
248
+ | `create-workout-from-routine` | `routineId`, `startTime` (UTC ISO seconds) | Record a completed workout using a routine as a plan. |
249
+
250
+ Compatibility note: with MCP SDK v1.29.0, clients using the default must send
251
+ `arguments: {}` because the SDK rejects requests that omit the entire
252
+ `arguments` object before prompt field defaults are evaluated.
253
+
254
+ ---
255
+
256
+ ## 📚 Available MCP Resources
257
+
258
+ | Name | URI |
259
+ | :------------------- | :-------------------------- |
260
+ | `user-profile` | `hevy://user` |
261
+ | `workout-count` | `hevy://workout-count` |
262
+ | `exercise-templates` | `hevy://exercise-templates` |
263
+ | `routine-folders` | `hevy://routine-folders` |
264
+
243
265
  ---
244
266
 
245
267
  ## 👨‍💻 Development & Contributing
@@ -249,7 +271,7 @@ The supported path is stdio via `npx hevy-mcp`.
249
271
  - **Build**: `npm run build`
250
272
  - **Lint/Format**: `npm run check` (uses oxlint/oxfmt)
251
273
  - **Type Check**: `npm run check:types`
252
- - **Unit Tests**: `npx vitest run --exclude tests/integration/**`
274
+ - **Unit Tests**: `npx vitest run --exclude 'tests/integration/**'`
253
275
  - **Full Test Suite**: `npm test` (requires `HEVY_API_KEY`)
254
276
  - **Changeset Check**: `npm run check:changeset`
255
277
 
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.26.6" };
7
+ e.SENTRY_RELEASE = { id: "hevy-mcp@1.28.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-B9KZiN70.mjs";
12
+ import { r as runServer } from "./src-J8OsyJcw.mjs";
13
13
  //#region src/cli.ts
14
14
  runServer().catch((error) => {
15
15
  console.error("Fatal error in main():", error);
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.26.6" };
7
+ e.SENTRY_RELEASE = { id: "hevy-mcp@1.28.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-B9KZiN70.mjs";
12
+ import { n as createServer, r as runServer, t as configSchema } from "./src-J8OsyJcw.mjs";
13
13
  export { configSchema, createServer, createServer as default, runServer };