Garmin Health Connect
# Garmin → ChatGPT MCP
Connect **Garmin Connect to ChatGPT** with a hosted MCP server and your own Garmin Personal API key. Ask about sleep, HRV, heart rate, Body Battery and activities through ChatGPT Developer Mode. **No local installation.**
Created by **[Nevo Nadav — נבו נדב](https://github.com/NevoNadav)**. [MIT licensed](LICENSE).
[Connect now](https://garmin-health-connect.nevo-nadav.chatgpt.site) · [Full setup guide](https://garmin-health-connect.nevo-nadav.chatgpt.site/guides/connect-garmin-to-chatgpt) · [עברית](docs/README.he.md) · [Privacy](PRIVACY.md)
## Connect Garmin to ChatGPT in three steps
### 1. Add the MCP connection
Enable Developer Mode in ChatGPT and create a custom MCP connection:
```text
https://garmin-health-connect.nevo-nadav.chatgpt.site/connect/mcp
```
| Setting | Value |
| --- | --- |
| Name | Garmin Health Connect |
| Authentication | **OAuth** |
| Client ID | Leave empty |
| Client Secret | Leave empty |
Select **Create** or **Connect**. Automatic client registration is supported.
### 2. Enter your Garmin key
The authorization window asks for your **Garmin Personal API key** and read-only consent. Get the key from [Garmin Connect → Settings → Personal API Key](https://connect.garmin.com/app/settings/personalApiToken), paste it into that window, and approve. You return to ChatGPT automatically.
Your Garmin password is not needed. Enter the key only in the authorization window, not in chat messages or connection URLs.
### 3. Ask about your data
Select the Garmin connection in your conversation when your client requires it. Start with known synced data:
> How did I sleep last night?
> Compare my sleep and HRV over the last seven days.
> Summarize my activities from the past week.
> Show my resting heart rate trend for the last two weeks.
Developer Mode availability depends on your ChatGPT client, plan and workspace. Garmin controls Personal API availability. Follow the [complete English guide](https://garmin-health-connect.nevo-nadav.chatgpt.site/guides/connect-garmin-to-chatgpt) or [המדריך בעברית](https://garmin-health-connect.nevo-nadav.chatgpt.site/he/guides/connect-garmin-to-chatgpt).
## What can it read?
| Data | Examples |
| --- | --- |
| Sleep | Duration, stages, scores and available metrics |
| HRV | Overnight readings and date-range trends |
| Heart rate | Resting rate, daily readings and zones |
| Body Battery | Daily reports and energy patterns |
| Wellness | Steps, stress, hydration, weight, SpO₂ and available metrics |
| Activities | Recent activities, activity details and recorded workout steps |
| Other supported data | Fitness age, nutrition and combined daily snapshots |
There are 15 read-only connection/data tools and one explicitly synthetic demo tool. See the [tool reference](docs/TOOLS.md). Availability depends on your device, account and sync. Missing data is not zero; readings are not medical diagnoses.
## How it works
```text
ChatGPT Developer Mode → OAuth window → Your Garmin key + consent
→ Encrypted per-connection storage → Read-only Garmin requests → Your conversation
```
The independent endpoint supports ChatGPT client metadata (CIMD), dynamic client registration (DCR), PKCE S256, issuer identification, resource binding, rotating refresh tokens and revocation. No approved Garmin application is required for this personal-key flow.
The separate `/mcp` endpoint serves the platform-managed Sites plugin. Use **`/connect/mcp`** for independent Developer Mode connections.
## Privacy and control
- Keys are encrypted at rest with AES-256-GCM and bound to the authorized connection.
- OAuth tokens are stored as hashes. The independent transport ignores caller-supplied identity headers.
- Health results are read on demand and are not persisted in the application database. Your AI provider receives the requested results under its policies.
- Ask your connected chat to manage Garmin to receive a private, ten-minute link for replacing or deleting your saved key.
- Deleting the saved key blocks subsequent reads. Revoke the key in Garmin Connect to invalidate all copies.
Operators, hosting and the AI provider remain trusted processors. Encryption is not end-to-end against the operator. Read [Privacy](PRIVACY.md) and [Security](SECURITY.md).
## Frequently asked questions
**Do I need Python?** No. Hosted users install no software. Development tools are only for contributors and independent operators.
**What goes in Client ID and Client Secret?** Leave both empty and choose OAuth. Enter the Garmin key in the subsequent window.
**The sign-in window did not open.** Open the connection settings and select Connect. Confirm the URL ends in `/connect/mcp` and OAuth is selected.
**Garmin rejected my key.** Copy an active Personal API key. It is different from a password or developer application credentials.
**Some data is missing.** Sync your device, check Garmin Connect and request a day with known data. Devices provide different measurements.
**Can I use another AI client?** The independent endpoint implements streamable HTTP MCP and OAuth for compatible clients with DCR. Guides and user testing focus on ChatGPT. Other clients must support the published OAuth discovery and PKCE requirements.
**Who created this?** [Nevo Nadav](https://github.com/NevoNadav). Preserve the MIT copyright notice and credit when adapting or sharing the project.
## Source and development
| Path | Contents |
| --- | --- |
| [hosted/](hosted/README.md) | Hosted Worker, OAuth, UI, D1 schema, migrations and tests |
| [docs/README.he.md](docs/README.he.md) | Hebrew quick start |
| [docs/TOOLS.md](docs/TOOLS.md) | Tool reference |
| [docs/CHATGPT_HOSTED.md](docs/CHATGPT_HOSTED.md) | Architecture and operator guide |
| [docs/SEO.md](docs/SEO.md) | Search metadata and indexing handoff |
| [src/](src/) | Earlier optional local Python implementation |
| [.github/workflows/ci.yml](.github/workflows/ci.yml) | Hosted and legacy checks |
For contributors:
```sh
git clone https://github.com/NevoNadav/Garmin-Connect-to-ChatGPT-MCP.git
cd Garmin-Connect-to-ChatGPT-MCP/hosted
npm ci
npm test
npm run build
```
The build bundles the Worker and a download of tracked source. The hosted application has no runtime package dependencies. See [Contributing](CONTRIBUTING.md) and the [operator guide](docs/CHATGPT_HOSTED.md). The [legacy Python guide](docs/SELF_HOSTED_V0_1.md) is separate and is not required by hosted users.
## Attribution and terms
**Garmin Health Connect / Garmin → ChatGPT MCP**
Created by **Nevo Nadav — נבו נדב**. Copyright © 2026 Nevo Nadav. [MIT license](LICENSE).
This independent project is not affiliated with Garmin or OpenAI. It uses Garmin's [official Personal API](https://developer.garmin.com/gc-developer-program/personal/personal-api/). Its [FAQ](https://developer.garmin.com/gc-developer-program/personal/personal-faq/) excludes commercial applications serving multiple end users from intended Personal API use. Garmin terms apply; no approval of shared or commercial use is claimed.
TDQS
Scored across 15 tools
The set has several overlapping read paths: garmin_daily_metrics can return summary, sleep, HRV, and more over ranges, while garmin_daily_summary, garmin_sleep, garmin_hrv, and garmin_health_snapshot cover similar metrics for single days or combined snapshots. Descriptions provide guidance, but an agent could still misselect between the umbrella, single-day, and snapshot tools.
All tools consistently use the garmin_ prefix with snake_case resource-oriented names. The singular/plural distinction between garmin_activity and garmin_activities is conventional and readable.
Fifteen tools is reasonable for the breadth of Garmin health data covered, sitting at the upper end of a well-scoped set. Some redundancy between aggregate and individual metric tools slightly weakens the sense that every tool earns its place.
The surface covers a broad read-only health domain: daily summaries, sleep, HRV, heart rate, body battery, SpO2, fitness age, activities, workouts, zones, nutrition, and connection status. Minor gaps exist, such as device/profile details or write/logging operations, but core health-reading workflows are well supported.