@dynamicsninja/garminconnect-mcp 0.7.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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Ivan Ficko
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/NOTICE ADDED
@@ -0,0 +1,16 @@
1
+ garminconnect-js
2
+
3
+ This project began as a TypeScript port of two MIT-licensed Python projects, and
4
+ still derives substantial parts of its endpoint surface and auth flow from them:
5
+
6
+ python-garminconnect — https://github.com/cyberjunky/python-garminconnect
7
+ Copyright (c) Ron Klinkien and contributors
8
+
9
+ garth — https://github.com/matin/garth
10
+ Copyright (c) Matin Tamizi and contributors
11
+
12
+ The endpoint surface follows python-garminconnect. The SSO and OAuth flow
13
+ follows garth. Neither project is affiliated with this one.
14
+
15
+ Garmin and Garmin Connect are trademarks of Garmin Ltd. This project is not
16
+ affiliated with, endorsed by, or supported by Garmin.
package/README.md ADDED
@@ -0,0 +1,78 @@
1
+ # @dynamicsninja/garminconnect-mcp
2
+
3
+ Talk to Claude to create Garmin workouts, and read or manage the rest of your Garmin Connect data,
4
+ through an [MCP](https://modelcontextprotocol.io) server built on
5
+ [garminconnect-js](https://github.com/DynamicsNinja/garminconnect-js).
6
+
7
+ > "Make me a 6×400 m session at 5k pace with 2-minute jog recoveries, put it on Thursday, and send
8
+ > it to my watch."
9
+
10
+ Claude previews the workout, waits for your OK, saves it to your Garmin workout library, schedules
11
+ it, and pushes it to your device.
12
+
13
+ ## Set up
14
+
15
+ 1. **Sign in once** (in a terminal; your password never passes through Claude):
16
+
17
+ ```sh
18
+ npx @dynamicsninja/garminconnect-mcp login
19
+ ```
20
+
21
+ It asks for your Garmin email, password and, if enabled, your MFA code. The session is saved to
22
+ `~/.garminconnect-mcp/tokens` and renews itself as long as you use it at least once every 30 days.
23
+
24
+ 2. **Add it to Claude Desktop**: Settings → Developer → Edit Config, then in
25
+ `claude_desktop_config.json`:
26
+
27
+ ```json
28
+ {
29
+ "mcpServers": {
30
+ "garmin": { "command": "npx", "args": ["-y", "@dynamicsninja/garminconnect-mcp"] }
31
+ }
32
+ }
33
+ ```
34
+
35
+ On Windows, if Claude Desktop cannot start `npx`, use
36
+ `"command": "cmd", "args": ["/c", "npx", "-y", "@dynamicsninja/garminconnect-mcp"]`.
37
+
38
+ 3. Restart Claude Desktop.
39
+
40
+ ## What it can do
41
+
42
+ - **Workouts**: `preview_workout`, `create_workout`, `update_workout`, `search_exercises`, for every
43
+ sport the builder supports (running, cycling, swimming, strength, HIIT, yoga, pilates, mobility,
44
+ cardio, rucking, multi-sport). Workouts are checked before anything is sent: an unknown exercise
45
+ name or a malformed step is reported back to Claude with exactly where the problem is.
46
+ - **Everything else in garminconnect-js**: sleep, HRV, stress, training readiness and status, race
47
+ predictions, activities (list, details, download, upload files), gear, courses, devices, badges,
48
+ weigh-ins, and more. One tool per library method.
49
+
50
+ Tools that delete or overwrite data are marked destructive. Claude is told to confirm with you
51
+ before calling one, even if you've auto-approved the rest.
52
+
53
+ **Not exposed:** `logout` (it would delete your saved session), the raw-JSON workout uploads (the
54
+ checked `create_workout` replaces them), and the raw GraphQL passthrough unless you opt in.
55
+
56
+ ## Settings (environment variables)
57
+
58
+ | Variable | Default | Meaning |
59
+ |---|---|---|
60
+ | `GARMIN_MCP_TOKEN_DIR` | `~/.garminconnect-mcp/tokens` | Where the session is saved |
61
+ | `GARMIN_MCP_DOWNLOAD_DIR` | `~/Downloads/garmin` | Where downloaded files (FIT, GPX, …) go |
62
+ | `GARMIN_MCP_GROUPS` | all | Comma-separated tool groups: `wellness`, `activities`, `metrics`, `workouts`, `gear`, `courses`, `devices`, `badges-challenges`, `body-composition-weight`, `womens-health`, `golf`, `profile-and-misc`. The workout-builder tools are always on. Fewer groups means less of Claude's context used. |
63
+ | `GARMIN_MCP_ENABLE_GRAPHQL` | off | Set to `1` to expose `query_garmin_graphql` |
64
+
65
+ Set them under `"env"` in the Claude Desktop config entry.
66
+
67
+ If you set `GARMIN_MCP_TOKEN_DIR` in the Claude Desktop config, set the same value when running
68
+ `npx @dynamicsninja/garminconnect-mcp login` (e.g.
69
+ `GARMIN_MCP_TOKEN_DIR=/path/to/dir npx @dynamicsninja/garminconnect-mcp login`), or the server
70
+ won't find the session you signed in with.
71
+
72
+ ## Good to know
73
+
74
+ - Dates are calendar dates in UTC (`YYYY-MM-DD`).
75
+ - Everything runs on your machine. Your Garmin session stays in your token folder and is sent only
76
+ to Garmin.
77
+ - Garmin Connect's API is unofficial and can change; this server moves in lockstep with
78
+ garminconnect-js, and each release is tested against the library version it contains.