hevy-mcp 1.11.10 → 1.12.3
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 +24 -128
- package/dist/index.d.ts +45 -1
- package/dist/index.js +123 -270
- package/dist/index.js.map +1 -1
- package/package.json +9 -10
package/README.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# hevy-mcp: Model Context Protocol Server for Hevy Fitness API
|
|
2
2
|
|
|
3
|
-
[](https://opensource.org/licenses/MIT)
|
|
4
3
|
[](https://smithery.ai/server/@chrisdoc/hevy-mcp)
|
|
4
|
+
[](https://opensource.org/licenses/MIT)
|
|
5
5
|
|
|
6
6
|
A Model Context Protocol (MCP) server implementation that interfaces with the [Hevy fitness tracking app](https://www.hevyapp.com/) and its [API](https://api.hevyapp.com/docs/). This server enables AI assistants to access and manage workout data, routines, exercise templates, and more through the Hevy API (requires PRO subscription).
|
|
7
7
|
|
|
@@ -13,6 +13,8 @@ A Model Context Protocol (MCP) server implementation that interfaces with the [H
|
|
|
13
13
|
- **Folder Organization**: Manage routine folders
|
|
14
14
|
- **Webhook Subscriptions**: Create, view, and delete webhook subscriptions for workout events
|
|
15
15
|
|
|
16
|
+
> **Note:** HTTP transport and Docker images remain deprecated. Smithery deployment now uses the official TypeScript runtime flow (no Docker required), or you can run the server locally via stdio (e.g., `npx hevy-mcp`). Existing GHCR images remain available but are no longer updated.
|
|
17
|
+
|
|
16
18
|
## Prerequisites
|
|
17
19
|
|
|
18
20
|
- Node.js (v20 or higher)
|
|
@@ -21,12 +23,12 @@ A Model Context Protocol (MCP) server implementation that interfaces with the [H
|
|
|
21
23
|
|
|
22
24
|
## Installation
|
|
23
25
|
|
|
24
|
-
###
|
|
26
|
+
### Run via npx (recommended)
|
|
25
27
|
|
|
26
|
-
|
|
28
|
+
You can launch the server directly without cloning:
|
|
27
29
|
|
|
28
30
|
```bash
|
|
29
|
-
npx -y
|
|
31
|
+
HEVY_API_KEY=your_hevy_api_key_here npx -y hevy-mcp
|
|
30
32
|
```
|
|
31
33
|
|
|
32
34
|
### Manual Installation
|
|
@@ -37,9 +39,6 @@ cd hevy-mcp
|
|
|
37
39
|
|
|
38
40
|
# Install dependencies
|
|
39
41
|
corepack use pnpm@10.22.0
|
|
40
|
-
pnpm install
|
|
41
|
-
|
|
42
|
-
# Create .env file from sample
|
|
43
42
|
cp .env.sample .env
|
|
44
43
|
# Edit .env and add your Hevy API key
|
|
45
44
|
```
|
|
@@ -82,70 +81,30 @@ Replace `your_hevy_api_key_here` with your actual Hevy API key. If you prefer th
|
|
|
82
81
|
pnpm start -- --hevy-api-key=your_hevy_api_key_here
|
|
83
82
|
```
|
|
84
83
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
```bash
|
|
88
|
-
pnpm start -- --http --hevy-api-key=your_hevy_api_key_here
|
|
89
|
-
```
|
|
90
|
-
|
|
91
|
-
## Transport Modes
|
|
92
|
-
|
|
93
|
-
The MCP server supports two transport modes:
|
|
84
|
+
## Transport
|
|
94
85
|
|
|
95
|
-
###
|
|
86
|
+
### Deploy via Smithery (TypeScript runtime)
|
|
96
87
|
|
|
97
|
-
|
|
88
|
+
Smithery can bundle and host `hevy-mcp` without Docker by importing the exported `createServer` and `configSchema` from `src/index.ts`.
|
|
98
89
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
# or
|
|
102
|
-
node dist/index.js
|
|
103
|
-
```
|
|
90
|
+
1. Ensure dependencies are installed: `pnpm install`
|
|
91
|
+
2. Launch the Smithery playground locally:
|
|
104
92
|
|
|
105
|
-
|
|
93
|
+
```bash
|
|
94
|
+
pnpm run smithery:dev
|
|
95
|
+
```
|
|
106
96
|
|
|
107
|
-
The
|
|
108
|
-
```bash
|
|
109
|
-
# Start in HTTP mode (env var)
|
|
110
|
-
pnpm start -- --http
|
|
111
|
-
# Start in HTTP mode (CLI arg)
|
|
112
|
-
pnpm start -- --http --hevy-api-key=your_hevy_api_key_here
|
|
113
|
-
# Or using node directly
|
|
114
|
-
node dist/index.js --http --hevy-api-key=your_hevy_api_key_here
|
|
115
|
-
|
|
116
|
-
# Using environment variable
|
|
117
|
-
MCP_TRANSPORT=http pnpm start
|
|
118
|
-
```
|
|
97
|
+
The CLI will prompt for `HEVY_API_KEY`, invoke `createServer({ config })`, and open the Smithery MCP playground.
|
|
119
98
|
|
|
120
|
-
|
|
99
|
+
3. Build the deployable bundle:
|
|
121
100
|
|
|
122
|
-
|
|
101
|
+
```bash
|
|
102
|
+
pnpm run smithery:build
|
|
103
|
+
```
|
|
123
104
|
|
|
124
|
-
|
|
125
|
-
# Transport mode
|
|
126
|
-
MCP_TRANSPORT=http
|
|
127
|
-
|
|
128
|
-
# HTTP server configuration
|
|
129
|
-
MCP_HTTP_HOST=127.0.0.1
|
|
130
|
-
PORT=3000
|
|
131
|
-
|
|
132
|
-
# DNS rebinding protection (recommended for production)
|
|
133
|
-
MCP_DNS_REBINDING_PROTECTION=true
|
|
134
|
-
MCP_ALLOWED_HOSTS=127.0.0.1,localhost
|
|
135
|
-
```
|
|
105
|
+
4. Connect the repository to Smithery and trigger a deployment from their dashboard. Configuration is handled entirely through the exported Zod schema, so no additional `smithery.yaml` env mapping is required.
|
|
136
106
|
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
When running in HTTP mode, the following endpoints are available:
|
|
140
|
-
|
|
141
|
-
- `POST /mcp` - MCP client-to-server communication
|
|
142
|
-
- `GET /mcp` - Server-to-client notifications (SSE)
|
|
143
|
-
- `DELETE /mcp` - Session termination
|
|
144
|
-
- `GET /health` - Health check endpoint
|
|
145
|
-
|
|
146
|
-
#### Session Management
|
|
147
|
-
|
|
148
|
-
The HTTP transport includes session management for stateful connections. Each client session is identified by a unique session ID that must be included in the `mcp-session-id` header for subsequent requests.
|
|
107
|
+
hevy-mcp now runs exclusively over stdio, which works seamlessly with MCP-aware clients like Claude Desktop and Cursor. HTTP transport has been removed to simplify deployment.
|
|
149
108
|
|
|
150
109
|
## Usage
|
|
151
110
|
|
|
@@ -164,72 +123,9 @@ pnpm run build
|
|
|
164
123
|
pnpm start
|
|
165
124
|
```
|
|
166
125
|
|
|
167
|
-
### Docker
|
|
168
|
-
|
|
169
|
-
The project includes a Dockerfile for containerized deployments. Docker images are automatically built and pushed to GitHub Container Registry (GHCR) during the CI/CD process.
|
|
170
|
-
|
|
171
|
-
#### Using Pre-built Images
|
|
172
|
-
|
|
173
|
-
Pull and run the latest image:
|
|
174
|
-
|
|
175
|
-
```bash
|
|
176
|
-
docker run -d \
|
|
177
|
-
--name hevy-mcp \
|
|
178
|
-
-e HEVY_API_KEY=your_api_key_here \
|
|
179
|
-
-p 3000:3000 \
|
|
180
|
-
ghcr.io/chrisdoc/hevy-mcp:latest
|
|
181
|
-
|
|
182
|
-
# Or using CLI argument for the key (omit env var)
|
|
183
|
-
docker run -d \
|
|
184
|
-
--name hevy-mcp \
|
|
185
|
-
-p 3000:3000 \
|
|
186
|
-
ghcr.io/chrisdoc/hevy-mcp:latest \
|
|
187
|
-
hevy-api-key=your_api_key_here
|
|
188
|
-
```
|
|
189
|
-
|
|
190
|
-
#### Building Locally
|
|
191
|
-
|
|
192
|
-
```bash
|
|
193
|
-
# Build the image
|
|
194
|
-
docker build -t hevy-mcp .
|
|
195
|
-
|
|
196
|
-
# Run the container
|
|
197
|
-
docker run -d \
|
|
198
|
-
--name hevy-mcp \
|
|
199
|
-
-e HEVY_API_KEY=your_api_key_here \
|
|
200
|
-
-p 3000:3000 \
|
|
201
|
-
hevy-mcp
|
|
202
|
-
|
|
203
|
-
# Or with CLI argument
|
|
204
|
-
docker run -d \
|
|
205
|
-
--name hevy-mcp \
|
|
206
|
-
-p 3000:3000 \
|
|
207
|
-
hevy-mcp \
|
|
208
|
-
hevy-api-key=your_api_key_here
|
|
209
|
-
```
|
|
210
|
-
|
|
211
|
-
#### Docker Compose Example
|
|
212
|
-
|
|
213
|
-
```yaml
|
|
214
|
-
version: '3.8'
|
|
215
|
-
services:
|
|
216
|
-
hevy-mcp:
|
|
217
|
-
image: ghcr.io/chrisdoc/hevy-mcp:latest
|
|
218
|
-
environment:
|
|
219
|
-
- HEVY_API_KEY=your_api_key_here
|
|
220
|
-
- MCP_TRANSPORT=http
|
|
221
|
-
- MCP_HTTP_HOST=0.0.0.0
|
|
222
|
-
- PORT=3000
|
|
223
|
-
ports:
|
|
224
|
-
- "3000:3000"
|
|
225
|
-
restart: unless-stopped
|
|
226
|
-
```
|
|
227
|
-
|
|
228
|
-
#### Available Image Tags
|
|
126
|
+
### Docker (deprecated)
|
|
229
127
|
|
|
230
|
-
- `latest` -
|
|
231
|
-
- `main` - Latest development build from main branch
|
|
232
|
-
- `v1.8.8`, `v1.8`, `v1` - Semantic version tags for releases
|
|
128
|
+
Docker-based workflows have been retired so we can focus on the stdio-native experience. The bundled `Dockerfile` now exits with a clear message to prevent accidental builds, and `.dockerignore` simply documents the deprecation. Previously published images remain available on GHCR (for example `ghcr.io/chrisdoc/hevy-mcp:latest`), but they are **no longer updated**. For the best experience, run the server locally via `npx hevy-mcp` or your own Node.js runtime.
|
|
233
129
|
|
|
234
130
|
## Available MCP Tools
|
|
235
131
|
|
|
@@ -380,4 +276,4 @@ Contributions are welcome! Please feel free to submit a Pull Request. For major
|
|
|
380
276
|
## Acknowledgements
|
|
381
277
|
|
|
382
278
|
- [Model Context Protocol](https://github.com/modelcontextprotocol) for the MCP SDK
|
|
383
|
-
- [Hevy](https://www.hevyapp.com/) for their fitness tracking platform and API
|
|
279
|
+
- [Hevy](https://www.hevyapp.com/) for their fitness tracking platform and API
|
package/dist/index.d.ts
CHANGED
|
@@ -1 +1,45 @@
|
|
|
1
|
-
|
|
1
|
+
import * as _modelcontextprotocol_sdk_server from '@modelcontextprotocol/sdk/server';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
|
|
4
|
+
declare const serverConfigSchema: z.ZodObject<{
|
|
5
|
+
apiKey: z.ZodString;
|
|
6
|
+
}, "strip", z.ZodTypeAny, {
|
|
7
|
+
apiKey: string;
|
|
8
|
+
}, {
|
|
9
|
+
apiKey: string;
|
|
10
|
+
}>;
|
|
11
|
+
declare const configSchema: z.ZodObject<{
|
|
12
|
+
apiKey: z.ZodString;
|
|
13
|
+
}, "strip", z.ZodTypeAny, {
|
|
14
|
+
apiKey: string;
|
|
15
|
+
}, {
|
|
16
|
+
apiKey: string;
|
|
17
|
+
}>;
|
|
18
|
+
type ServerConfig = z.infer<typeof serverConfigSchema>;
|
|
19
|
+
declare function createServer({ config }: {
|
|
20
|
+
config: ServerConfig;
|
|
21
|
+
}): _modelcontextprotocol_sdk_server.Server<{
|
|
22
|
+
method: string;
|
|
23
|
+
params?: {
|
|
24
|
+
[x: string]: unknown;
|
|
25
|
+
_meta?: {
|
|
26
|
+
[x: string]: unknown;
|
|
27
|
+
progressToken?: string | number | undefined;
|
|
28
|
+
} | undefined;
|
|
29
|
+
} | undefined;
|
|
30
|
+
}, {
|
|
31
|
+
method: string;
|
|
32
|
+
params?: {
|
|
33
|
+
[x: string]: unknown;
|
|
34
|
+
_meta?: {
|
|
35
|
+
[x: string]: unknown;
|
|
36
|
+
} | undefined;
|
|
37
|
+
} | undefined;
|
|
38
|
+
}, {
|
|
39
|
+
[x: string]: unknown;
|
|
40
|
+
_meta?: {
|
|
41
|
+
[x: string]: unknown;
|
|
42
|
+
} | undefined;
|
|
43
|
+
}>;
|
|
44
|
+
|
|
45
|
+
export { configSchema, createServer as default };
|