@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 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 Claude design the whole page](#presets-or-freeform).
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 stdio.
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 Claude:
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
- ### 3. Ask Claude
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 Claude writes the coach notes. The page
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 Claude design the whole page. This takes much longer, and each page looks
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
- Claude gives you the path of the page and the command to open it. The page has a board for all
149
- your training, a Recovery board and a board for each sport, with 11 themes and English and Italian
150
- texts. It uses the training load, HR zones and training effect from Garmin. It labels each value
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
- Claude asks you some questions, then writes a page with your answers. First, it asks who the page
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 Claude asks for the file (any name or path), the title, the headline, the sports, the
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". Claude
202
- writes a small widget, and `editDashboard` stores it in the page. The widget stays after each
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. Claude translates the texts of the page, and
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 text
215
- without a translation shows in English. To remove an added language, ask Claude to remove it:
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. Start a new Claude Code session, or quit and start Claude Desktop again. |
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.