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 +30 -8
- package/dist/cli.mjs +2 -2
- package/dist/index.mjs +2 -2
- package/dist/{src-B9KZiN70.mjs → src-J8OsyJcw.mjs} +994 -404
- package/dist/src-J8OsyJcw.mjs.map +1 -0
- package/package.json +1 -1
- package/dist/src-B9KZiN70.mjs.map +0 -1
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 ≥
|
|
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**:
|
|
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`
|
|
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
|
-
|
|
201
|
-
|
|
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.
|
|
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-
|
|
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.
|
|
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-
|
|
12
|
+
import { n as createServer, r as runServer, t as configSchema } from "./src-J8OsyJcw.mjs";
|
|
13
13
|
export { configSchema, createServer, createServer as default, runServer };
|