@indaco/garmin-personal-mcp 0.1.0 → 0.1.1
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 +55 -30
- package/dist/dashboard.html +1 -1
- package/dist/index.js +11 -11
- package/package.json +1 -1
- package/prompts/dashboard-setup.md +3 -3
package/README.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
garmin-personal-mcp
|
|
4
4
|
</h1>
|
|
5
5
|
|
|
6
|
-
<p align="center"><b>Your Garmin training in Claude, through the official Personal API. Read-only, nothing to install.</b></p>
|
|
6
|
+
<p align="center"><b>Your Garmin training in Claude, Codex or any MCP client, through the official Personal API. Read-only, nothing to install.</b></p>
|
|
7
7
|
|
|
8
8
|
<p align="center">
|
|
9
9
|
<a href="https://www.npmjs.com/package/@indaco/garmin-personal-mcp"><img src="https://img.shields.io/npm/v/@indaco/garmin-personal-mcp.svg" alt="npm version" /></a>
|
|
@@ -44,7 +44,7 @@ MCP server for the official Garmin Connect Personal API.
|
|
|
44
44
|
- **Recovery data**: HRV, sleep and heart rate.
|
|
45
45
|
- **Dashboard in less than a minute**: [training-dashboard](#training-dashboard) shows your
|
|
46
46
|
training load next to recovery, in widgets that you can move, resize, hide and add. You can also
|
|
47
|
-
[let
|
|
47
|
+
[let the assistant design the whole page](#presets-or-freeform).
|
|
48
48
|
- **Your layout stays**: [training-dashboard-update](#training-dashboard-update) adds only the
|
|
49
49
|
new data.
|
|
50
50
|
- **A page for you or for your coach**: [dashboard-setup](#dashboard-setup) makes a personal page,
|
|
@@ -52,9 +52,10 @@ MCP server for the official Garmin Connect Personal API.
|
|
|
52
52
|
data that you do not select is not in the file.
|
|
53
53
|
- **Extend it**: [dashboard-widget](#dashboard-widget) makes a new widget from your idea.
|
|
54
54
|
[dashboard-language](#dashboard-language) adds a language.
|
|
55
|
-
- **All stdio clients**: Claude Desktop, Claude Code and all other MCP clients that use
|
|
55
|
+
- **All stdio clients**: Claude Desktop, Claude Code, Codex and all other MCP clients that use
|
|
56
|
+
stdio. Tested with Claude Desktop and Claude Code.
|
|
56
57
|
|
|
57
|
-
With this server, you can ask
|
|
58
|
+
With this server, you can ask your assistant:
|
|
58
59
|
|
|
59
60
|
- "List my last 5 activities, with pace and heart rate."
|
|
60
61
|
- "Show the laps of my last run."
|
|
@@ -90,7 +91,7 @@ next to the keys that the file has, not in `preferences`:
|
|
|
90
91
|
"mcpServers": {
|
|
91
92
|
"garmin-personal": {
|
|
92
93
|
"command": "npx",
|
|
93
|
-
"args": ["-y", "@indaco/garmin-personal-mcp"]
|
|
94
|
+
"args": ["-y", "@indaco/garmin-personal-mcp@latest"]
|
|
94
95
|
}
|
|
95
96
|
}
|
|
96
97
|
}
|
|
@@ -101,13 +102,36 @@ Then quit Claude Desktop **fully**, including the tray icon, and start it again.
|
|
|
101
102
|
**Claude Code**: this command adds the server to all your projects:
|
|
102
103
|
|
|
103
104
|
```bash
|
|
104
|
-
claude mcp add garmin-personal --scope user -- npx -y @indaco/garmin-personal-mcp
|
|
105
|
+
claude mcp add garmin-personal --scope user -- npx -y @indaco/garmin-personal-mcp@latest
|
|
105
106
|
claude mcp list # garmin-personal: ... ✔ Connected
|
|
106
107
|
```
|
|
107
108
|
|
|
108
109
|
Use `--scope project` to write a `.mcp.json` file that you can share in the current repository.
|
|
109
110
|
|
|
110
|
-
|
|
111
|
+
**Codex**: this command adds the server:
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
codex mcp add garmin-personal -- npx -y @indaco/garmin-personal-mcp@latest
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
You can also add it to `~/.codex/config.toml`. The first `npx` download can take longer than the
|
|
118
|
+
default start time, so set a longer one:
|
|
119
|
+
|
|
120
|
+
```toml
|
|
121
|
+
[mcp_servers.garmin-personal]
|
|
122
|
+
command = "npx"
|
|
123
|
+
args = ["-y", "@indaco/garmin-personal-mcp@latest"]
|
|
124
|
+
startup_timeout_sec = 60
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
Codex does not send your shell environment to the server. Use the key file, or add
|
|
128
|
+
`env = { GARMIN_PERSONAL_API_KEY = "..." }` to the table.
|
|
129
|
+
|
|
130
|
+
**Other clients** (Gemini CLI, VS Code, Cursor and others): in the MCP configuration of the client,
|
|
131
|
+
set the command `npx` and the arguments `-y @indaco/garmin-personal-mcp@latest`. Some clients do not
|
|
132
|
+
show MCP prompts. In these clients, ask for the dashboard in your own words. The tools are the same.
|
|
133
|
+
|
|
134
|
+
### 3. Ask your assistant
|
|
111
135
|
|
|
112
136
|
Ask "list my last 5 activities". The first time that a garmin-personal tool asks for permission, answer
|
|
113
137
|
**Allow always** in Claude Desktop. In Claude Code, use `/permissions` and add `mcp__garmin-personal`.
|
|
@@ -124,8 +148,8 @@ Claude Desktop, they change after a full restart.
|
|
|
124
148
|
|
|
125
149
|
### training-dashboard
|
|
126
150
|
|
|
127
|
-
The server writes the dashboard page from its template, and
|
|
128
|
-
is one HTML file, `garmin-dashboard.html` in the data folder. It works offline.
|
|
151
|
+
The server writes the dashboard page from its template, and the assistant writes the coach notes.
|
|
152
|
+
The page is one HTML file, `garmin-dashboard.html` in the data folder. It works offline.
|
|
129
153
|
|
|
130
154
|
| Argument | Values | Default |
|
|
131
155
|
| -------- | --------------------------------- | -------- |
|
|
@@ -134,7 +158,7 @@ is one HTML file, `garmin-dashboard.html` in the data folder. It works offline.
|
|
|
134
158
|
|
|
135
159
|
- `preset` gives the built-in widgets on each board.
|
|
136
160
|
- `blank` gives empty boards: you add the widgets that you want.
|
|
137
|
-
- `freeform` lets
|
|
161
|
+
- `freeform` lets the assistant design the whole page. This takes much longer, and each page looks
|
|
138
162
|
different.
|
|
139
163
|
|
|
140
164
|
| Client | How to run it |
|
|
@@ -145,10 +169,10 @@ is one HTML file, `garmin-dashboard.html` in the data folder. It works offline.
|
|
|
145
169
|
In Claude Code, the arguments are in order and separated by spaces: first `weeks`, then `layout`.
|
|
146
170
|
You can also give only the layout: `/garmin-personal:training-dashboard freeform`.
|
|
147
171
|
|
|
148
|
-
|
|
149
|
-
your training, a Recovery board and a board for each sport, with 11 themes and English and
|
|
150
|
-
texts. It uses the training load, HR zones and training effect from Garmin. It labels each
|
|
151
|
-
that it calculates as an estimate, and a missing value shows as "n/a".
|
|
172
|
+
The assistant gives you the path of the page and the command to open it. The page has a board for
|
|
173
|
+
all your training, a Recovery board and a board for each sport, with 11 themes and English and
|
|
174
|
+
Italian texts. It uses the training load, HR zones and training effect from Garmin. It labels each
|
|
175
|
+
value that it calculates as an estimate, and a missing value shows as "n/a".
|
|
152
176
|
|
|
153
177
|
[The dashboard guide](guide/dashboard.md) tells what each board shows and how to change the layout.
|
|
154
178
|
[The widget catalogue](guide/widgets.md) lists every widget.
|
|
@@ -176,14 +200,14 @@ approximately 8.
|
|
|
176
200
|
|
|
177
201
|
### dashboard-setup
|
|
178
202
|
|
|
179
|
-
|
|
180
|
-
is for:
|
|
203
|
+
The assistant asks you some questions, then writes a page with your answers. First, it asks who the
|
|
204
|
+
page is for:
|
|
181
205
|
|
|
182
206
|
- **Personal**: a page for you, with all your data.
|
|
183
207
|
- **Shared**: a page for your coach or personal trainer. You select each type of data to include,
|
|
184
208
|
for example HR zones yes, fitness age and sleep no.
|
|
185
209
|
|
|
186
|
-
Then
|
|
210
|
+
Then the assistant asks for the file (any name or path), the title, the headline, the sports, the
|
|
187
211
|
languages and the themes. The server writes only the data that you select into the file. Other data
|
|
188
212
|
is not in the file, so you can send the file safely. A personal page and a shared page can be two
|
|
189
213
|
files side by side. Each page keeps its settings on each update. The argument `weeks` is optional
|
|
@@ -198,9 +222,9 @@ files side by side. Each page keeps its settings on each update. The argument `w
|
|
|
198
222
|
|
|
199
223
|
### dashboard-widget
|
|
200
224
|
|
|
201
|
-
This prompt makes a new widget from your idea, for example "my longest ride of each month".
|
|
202
|
-
writes a small widget, and `editDashboard` stores it in the page. The widget stays after
|
|
203
|
-
update. The argument `idea` is required. The argument `path` is optional: it is the file of the
|
|
225
|
+
This prompt makes a new widget from your idea, for example "my longest ride of each month". The
|
|
226
|
+
assistant writes a small widget, and `editDashboard` stores it in the page. The widget stays after
|
|
227
|
+
each update. The argument `idea` is required. The argument `path` is optional: it is the file of the
|
|
204
228
|
page, for example `coach.html`. In Claude Code:
|
|
205
229
|
`/garmin-personal:dashboard-widget my longest ride each month coach.html`. Reload the page to see
|
|
206
230
|
the widget.
|
|
@@ -208,12 +232,12 @@ the widget.
|
|
|
208
232
|
|
|
209
233
|
### dashboard-language
|
|
210
234
|
|
|
211
|
-
This prompt adds a language to the dashboard.
|
|
235
|
+
This prompt adds a language to the dashboard. The assistant translates the texts of the page, and
|
|
212
236
|
`editDashboard` stores them in the page. The argument `language` is optional: the default is the
|
|
213
237
|
language of the conversation. The argument `path` is optional: it is the file of the page, for
|
|
214
|
-
example `coach.html`. In Claude Code: `/garmin-personal:dashboard-language German coach.html`. A
|
|
215
|
-
without a translation shows in English. To remove an added language, ask
|
|
216
|
-
`editDashboard` with `removeLanguages`.
|
|
238
|
+
example `coach.html`. In Claude Code: `/garmin-personal:dashboard-language German coach.html`. A
|
|
239
|
+
text without a translation shows in English. To remove an added language, ask your assistant to
|
|
240
|
+
remove it: `editDashboard` with `removeLanguages`.
|
|
217
241
|
[Languages](guide/languages.md) tells more.
|
|
218
242
|
|
|
219
243
|
## Tools
|
|
@@ -265,7 +289,8 @@ log.
|
|
|
265
289
|
|
|
266
290
|
In many setup guides for Claude and Garmin, Claude reads the data and writes the whole dashboard
|
|
267
291
|
page. With a preset, the server writes the page from a tested template, and Claude writes only the
|
|
268
|
-
coach notes. My measurements for a first build
|
|
292
|
+
coach notes. My measurements for a first build, with Claude Code and Opus
|
|
293
|
+
(other clients and models give other times and costs):
|
|
269
294
|
|
|
270
295
|
| First build | Time | Cost |
|
|
271
296
|
| ---------------------- | ------------ | ------------ |
|
|
@@ -292,11 +317,11 @@ does not endorse this project, and the project has no affiliation with Garmin.
|
|
|
292
317
|
|
|
293
318
|
## Problems and solutions
|
|
294
319
|
|
|
295
|
-
| Problem | Solution
|
|
296
|
-
| ---------------------------------- |
|
|
297
|
-
| The server does not start | Make sure that Node.js is version 22 or later: `node --version`.
|
|
298
|
-
| Claude Desktop does not find `npx` | GUI apps do not read your shell profile. Use the absolute path of `npx` (`which npx`) as the `command`.
|
|
299
|
-
| Changes have no effect | The client keeps the old server process.
|
|
320
|
+
| Problem | Solution |
|
|
321
|
+
| ---------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- |
|
|
322
|
+
| The server does not start | Make sure that Node.js is version 22 or later: `node --version`. |
|
|
323
|
+
| Claude Desktop does not find `npx` | GUI apps do not read your shell profile. Use the absolute path of `npx` (`which npx`) as the `command`. |
|
|
324
|
+
| Changes have no effect | The client keeps the old server process. Restart the client: a new Claude Code session, or quit and start Claude Desktop again. |
|
|
300
325
|
|
|
301
326
|
[Problems and solutions](guide/troubleshooting.md) has more problems, the log files, and commands
|
|
302
327
|
that test the key and the server.
|