Guide

How to use Garmin’s Personal API with Claude and ChatGPT

Garmin now gives anyone a personal API key in seconds. Through an open source MCP server, Claude or ChatGPT can read every activity you ever recorded and the original files behind them. This guide covers what the key gives you, the setup, hosting it for your phone, and its limitations compared to hosted options.

Samuel KraftUpdated

Summary

  • Since October 2026 Garmin issues personal API keys from the Connect settings page. No application, no review, free.
  • The key reads your whole account: every activity, the original FIT files, and daily health back as far as the account goes.
  • It is read-only and personal. Nothing can be sent to the watch, and the key may only be used in tools you run yourself.
  • You need to run the server yourself, or host it if you want it on your phone.

What changed at Garmin

Garmin closed its Connect Developer program to new applicants in March 2026 and reopened it on 21 October with three tiers. Two are for companies: Starter, free for small user counts, and Enterprise, with negotiated pricing. The third is new. Personal gives one person a key to their own data, created in Garmin Connect’s settings in a few seconds, with no application to file.

Garmin published a Python client the same day, which is the only written list of the endpoints. There is no MCP server from Garmin. The one in this guide, garmin-personal-mcp, is an open source TypeScript server on the official MCP SDK, not affiliated with Garmin.

So with a personal key you can run your own Garmin MCP server and give Claude your data directly. The catch is that you run it: on your computer for Claude Desktop, or hosted somewhere you pay for if you want it on your phone or in ChatGPT.

Personal key or hosted connector

The alternative to running something yourself is a hosted connector: a service that connects to Garmin for you and gives Claude a URL. Shape is one. A personal key is yours alone and free on your own computer; a hosted connector works on your phone with nothing to run, brings in Apple Health and Wahoo, and sends workouts back to the watch.

Personal key, run yourselfHosted connector like Shape
Setup
A personal key you renew yearly, plus setting up the server
Sign in with Garmin, add a URL in Claude
Works on your phone
Only if you host it
Yes, and in ChatGPT
History
Everything on the account, however old
Last 30 days on connect, everything older from your Garmin export
FIT files
Yes
Yes
Workouts to the watch
No, read-only
Yes
New workouts
Fetched when Claude asks
Arrive as soon as the watch syncs
Apple Health and Wahoo
No, Garmin only
Yes, merged with Garmin
Maintenance
You keep the server running and up to date
None
Cost
Free on your computer, hosting costs extra for your phone
Subscription, with a 14-day free trial

Connect it to Claude

You need Node 20 or newer. The server runs on your computer and Claude talks to it over stdio, the same way Claude Desktop runs any local MCP server.

  1. 1

    Create a key

    Open Personal API in Garmin Connect settings and press Create. Pick 1 year, the longest option, so you only repeat this once a year. Copy the key; it is shown once.

  2. 2

    Add the server to Claude

    The key goes in as an environment variable. In Claude Code:

    claude mcp add garmin -e GARMIN_PERSONAL_API_KEY=YOUR_KEY -- npx -y garmin-personal-mcp

    In Claude Desktop, Cursor, Windsurf or Zed, add this to the client’s MCP config file:

    {
      "mcpServers": {
        "garmin": {
          "command": "npx",
          "args": ["-y", "garmin-personal-mcp"],
          "env": { "GARMIN_PERSONAL_API_KEY": "YOUR_KEY" }
        }
      }
    }

    Restart the client.

  3. 3

    Start a new chat and ask

    MCP servers are attached when a chat starts, so open a new one. Then try something like this.

    • How has my weekly running volume changed over the last three years?
    • Compare my resting heart rate and sleep this month with the same month last year.
    • Pull the FIT file for yesterday's ride and show me power and heart rate per lap.
    • Find every half marathon I've run and list the finish times.

What Claude can read

Activities
Every activity on the account, newest first, 50 per page, filtered by date range or sport. Each comes with distance, time, heart rate, power, training effect and cadence, so Claude can scan years without reading every field.
Recordings
The original FIT file, decoded: session totals, every lap, and a downsampled stream of heart rate, power, speed, cadence, altitude and position.
Daily health
Sleep with stages and score, overnight HRV, Body Battery, stress, steps, resting and all-day heart rate, pulse ox, hydration, weight, fitness age and heart rate zones.
Anything else on the API
A raw GET tool for paths Garmin adds later. Only paths on the Personal API's allowlist answer; the rest of Garmin Connect's web API returns 404.

The full tool list with every parameter is in the README.

Host it for your phone or ChatGPT

The stdio setup only exists on the computer it runs on. The Claude mobile app and ChatGPT connect to servers over HTTPS, so for those you run the server somewhere with a public address. The HTTP mode is stateless, which means it works on serverless hosts as well as on a box you own.

On a VPS, a home server or a Raspberry Pi:

MCP_BEARER_TOKEN=$(openssl rand -hex 32) \ MCP_HOST=0.0.0.0 \ GARMIN_PERSONAL_API_KEY=... \ npx -y garmin-personal-mcp --http 3333

Put TLS in front and give the client the URL plus the bearer token. On Vercel, Railway, Render or Fly, import the repository, set the same two variables, deploy; the endpoint is /mcp on all of them. The token is not optional: without it, anyone who finds the URL can read your health data.

Limitations

One person, by contract
Garmin's Personal API terms make the key personal to you, for tools you run for your own use. Running your own copy is fine. A service that collects other people's keys is not, which is also why no hosted product can be built on it.
The key expires
Thirty days to a year, chosen when you create it. There is no renewal from code. Once a year you make a new key in Garmin Connect and update GARMIN_PERSONAL_API_KEY in your client’s config.
Nothing is pushed
The server only looks when Claude asks. A run you finished a minute ago is there as soon as the watch has synced, but nothing arrives on its own, and there are no webhooks.
Nothing goes to the watch
The token's scopes are read-only. Claude can plan a workout in the chat, but it cannot put it on your Garmin through this API.
Short windows for health data
Daily summaries and HRV summaries accept up to 180 days per call, sleep summaries and Body Battery 28, stress and steps 7. Longer ranges get an empty 400 from Garmin. The server checks first and tells Claude the limit, so it splits the range.
Unpublished rate limits
Garmin's terms say limits can change at any time without notice.
Undocumented shapes
The endpoints are the ones behind the Garmin Connect web app, listed by Garmin's own Python client. Field names can change when Garmin ships a new Connect release.

Troubleshooting

Every tool fails with “Token exchange failed: HTTP 401”
The key is wrong or has expired. Create a new one in Garmin Connect, replace GARMIN_PERSONAL_API_KEY in your client’s config, restart the client and start a new chat. Keys last at most a year.
A health tool answers with a 400 or 500 and no message
The date range is longer than Garmin allows for that endpoint, or the page is larger than 60 items. Ask for a shorter range; the limits are on each tool’s description.
Claude says it has no Garmin tools
Start a new conversation. MCP servers are attached when a chat starts. In Claude Code, run claude mcp list and check the server is there and shows connected.
The server starts but exits at once
It could not find a key. Check that GARMIN_PERSONAL_API_KEY is set in the server’s env block in your client’s config. A key file at ~/.config/garmin/connect-personal-api-key works too.
A raw path returns 404
The Personal API only answers an allowlist of about two dozen paths. Other Garmin Connect endpoints exist on the web app but are not exposed here.

Questions

Yes, for your own data. The Personal tier exists for exactly this: one person, their own account, tools they run themselves. Garmin publishes a Python client for it. What the terms forbid is sharing the key or building a service on other people’s keys.

No. Garmin publishes the Personal API and a Python client. garmin-personal-mcp is an open source MCP server over that API, not affiliated with Garmin.

To the first activity on the account. The activity list pages 50 at a time, and each activity’s original FIT file can be downloaded, however old. Daily health data is also available for old dates, in windows of 7 to 180 days per call depending on the endpoint.

Not by itself. The default setup runs on your computer and only that computer’s Claude can see it. For the Claude mobile app or ChatGPT you run the server somewhere with a public HTTPS address and a bearer token; the project’s README covers Vercel, Railway and a plain VPS. If you would rather not host anything, Shape is a hosted connector: one connection works in the Claude iOS app, on claude.ai and in ChatGPT, with nothing to run.

No. The Personal API is read-only. Writing workouts to a Garmin device needs the Training API, which is only on Garmin’s partner tiers. That is what training platforms such as Shape use.

From Garmin to the server you run, then to the AI client you connected. The server stores nothing except a bearer token cache on your machine. What the AI provider does with the conversation is governed by that provider’s terms.

You can. It is a command-line tool that prints JSON; this is the same endpoints exposed as MCP tools, written in TypeScript, with a decoder for FIT files and guards for Garmin’s range limits. Both can read the key from the same file, so they coexist.
Shape on iPhoneApple Watch
Shape Calendar

This reads your Garmin.
Shape writes to it too.

Let Claude plan your training and Shape sends every workout to your watch. Garmin, Apple Health and Wahoo in Claude and ChatGPT, nothing to install, and a beautiful iOS app and web interface.

Download on the App Store

The hosted route, step by step