Garmin Connect Personal API

io.github.DynamicsNinjaPublished by GitHub account DynamicsNinjav1.0.0Updated Oct 29, 2026

Read your Garmin sleep, HRV, steps, stress, Body Battery, and activities (unofficial)

VerifiedSTDIODesktop onlyLocation & LifestyleData & Analytics

Overview

AI-generated overview

Unofficial local MCP server that lets an assistant read your Garmin Connect sleep, HRV, steps, stress, Body Battery and activity data.

What you can do
  • Read sleep detail and nightly sleep summaries, HRV, heart rate and heart rate zones
  • Read daily steps, stress, hydration, Body Battery, SpO2 and combined daily summaries
  • Search activities and fetch activity details and workouts
  • Read weight measurements, weight goals, food logs, fitness age and profile settings
  • Read menstrual cycle summaries and wellness activity summaries
  • Call any other Personal API GET path through a generic request tool
When to use it
Useful when you want an assistant to answer questions about your own Garmin data, such as comparing sleep week over week, checking whether HRV is trending up, summarizing recent runs, or relating short sleep to stress.
Requirements
Runs locally as a stdio process via npx, so Node.js 20.4 or newer is needed. Requires a Garmin Connect Personal API key, supplied through the GARMIN_PERSONAL_API_KEY environment variable or saved in the key file under ~/.config/garmin. The key is exchanged for a bearer token that is cached locally.
Before you install
The API key is a personal credential; storing it in client config exposes it there, and the key file or environment variable should be protected. The server is read-only and cannot change your account, but it reads sensitive health data, including sleep, heart rate, HRV, weight, food logs and menstrual cycle data, which is sent from Garmin to whichever AI client you connect and is subject to that client's privacy terms. The project is unofficial and not affiliated with Garmin.

Installation

In SourceWeft

  1. Open Garmin Connect Personal API in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

Garmin Connect Personal API MCP Server

[npm] [License]

Unofficial. This is a community project. It isn't affiliated with or endorsed by Garmin.

An MCP server that lets Claude and other AI assistants read your Garmin Connect data through Garmin's official Personal API. Ask questions such as:

  • "How has my sleep been this week compared with last week?"
  • "Is my HRV trending up or down this month?"
  • "Summarize my last five runs."
  • "On days I slept less than 6 hours, what was my stress like?"

It's built on garmin-connect-personal-api-js and is read-only: it can't change anything in your account.

Setup

  1. Create a Personal API key on Garmin Connect.
  2. Add the server to your AI client, as shown below, with the key in GARMIN_PERSONAL_API_KEY. You need Node.js 20.4 or newer.

Claude Desktop

Open Settings → Developer → Edit Config and add:

json
{  "mcpServers": {    "garmin": {      "command": "npx",      "args": ["-y", "garmin-connect-personal-api-mcp"],      "env": {        "GARMIN_PERSONAL_API_KEY": "your-personal-api-key"      }    }  }}

Restart Claude Desktop afterward.

Claude Code

shell
claude mcp add garmin --env GARMIN_PERSONAL_API_KEY=your-personal-api-key -- npx -y garmin-connect-personal-api-mcp

Other MCP clients

Run npx -y garmin-connect-personal-api-mcp as a stdio server with GARMIN_PERSONAL_API_KEY set.

Keeping the key out of client config

Instead of the environment variable, you can save the key in ~/.config/garmin/connect-personal-api-key (on Windows, %USERPROFILE%\.config\garmin\connect-personal-api-key) and leave env out of the configuration. This is the same key file the gc-personal CLI uses.

Tools

ToolData
get_daily_sleep_summariesOne summary per night: duration, stages, sleep score
get_daily_sleepDetailed sleep for one night
get_daily_summariesDaily steps, calories, heart rate, stress, Body Battery, intensity minutes
get_daily_hrv, get_daily_hrv_summariesHeart rate variability for a night, or per night over a range
get_daily_heart_rate, get_heart_rate_zonesHeart rate samples for a day, and heart rate zones
get_daily_stress, get_daily_steps, get_daily_hydrationDaily statistics over a date range
get_daily_body_battery, get_daily_spo2Body Battery and SpO2
search_activities, get_activity, get_activity_workoutsActivities and their details
get_weight_measurements, get_effective_weight_goals, get_daily_food_logsWeight, goals, and nutrition
get_fitness_age, get_user_profile_settingsFitness age and profile settings
get_menstrual_cycle_summary, get_menstrual_cycle_day_viewMenstrual cycle data
get_wellness_activity_summariesWellness activity summaries
api_getAny other Personal API GET endpoint

Dates use YYYY-MM-DD and default to today. Date ranges are inclusive.

How it works

The server exchanges your API key for a bearer token and caches it in ~/.config/garmin/connect-personal-api-bearer-token.json, shared with the gc-personal CLI. Tokens are renewed before they expire, and a rejected token is replaced automatically.

Your data goes from Garmin to the AI client you connect, so it's subject to that client's privacy terms.

License

Apache 2.0. See LICENSE.

Source: mcp/README.md at commit 339f39f

Tools

24

search_activities

Activities

Get activities. Returns summaries with activityId, name, type, start time, distance, duration, and heart rate. Use activityId with get_activity for full details.

ParameterslimitstartendDatestartDateactivityType

get_daily_stress

Daily Stress

Get daily stress.

ParametersendDatestartDate

get_daily_steps

Daily Steps

Get daily steps.

ParametersendDatestartDate

get_daily_hydration

Daily Hydration

Get daily hydration.

ParametersendDatestartDate

get_effective_weight_goals

Effective Weight Goals

Get effective weight goals.

ParametersendDatestartDate

get_weight_measurements

Weight Measurements

Get weight measurements.

ParametersendDatestartDate

get_daily_food_logs

Food Logs

Get food logs.

Parametersdate

get_user_profile_settings

User Profile Settings

Get user profile settings. Includes units, time zone, and date format, which help interpret other responses.

Takes no parameters.

get_daily_sleep

Daily Sleep

Get daily sleep. Detailed sleep for one night, including stages, scores, and overnight readings.

Parametersdate

get_daily_sleep_summaries

Daily Sleep Summaries

Get daily sleep summaries. One summary per night, including duration, stages, and sleep score. Prefer this over get_daily_sleep for trends.

ParametersendDatestartDate

get_daily_body_battery

Daily Body Battery

Get daily body battery.

ParameterschunksendDatestartDate

get_daily_summaries

User Daily Summaries

Get user daily summaries. One summary per day with steps, calories, heart rate, stress, Body Battery, intensity minutes, and respiration. Use the same start and end date for a single day.

ParametersendDatestartDate

get_daily_heart_rate

Daily Heart Rate

Get daily heart rate. All heart rate samples for one day; the response can be large.

Parametersdate

get_daily_hrv

Daily HRV

Get heart rate variability (HRV) summary and readings for a calendar date.

Parametersdate

get_daily_hrv_summaries

Daily HRV Summaries

Get daily heart rate variability (HRV) summaries for an inclusive date range. One HRV summary per night with weekly average, baseline, and status.

ParametersendDatestartDate

get_heart_rate_zones

Heart Rate Zones

Get heart rate zones.

Takes no parameters.

get_menstrual_cycle_summary

Menstrual Cycle Summary

Get menstrual cycle summary.

Parametersdate

get_menstrual_cycle_day_view

Menstrual Cycle Day View

Get menstrual cycle day view.

ParametersdatetodayDate

get_fitness_age

Fitness Age

Get fitness age.

Parametersdate

get_daily_spo2

Daily SpO2

Get daily spo2.

Parametersdate

get_wellness_activity_summaries

Wellness Activity Summaries

Get wellness activity summaries.

ParametersendDatestartDate

get_activity

Activity Details

Get activity details.

ParametersactivityIdrequired

get_activity_workouts

Activity Workouts

Get activity workouts.

ParametersactivityIdrequired

api_get

Personal API GET

GET any Personal API path that has no dedicated tool, such as one from the Personal API Swagger documentation. The path starts with a slash, for example /usersummary-service/stats/steps/daily/2026-10-01/2026-10-07.

Parameterspathrequiredparams

Version history

1
  1. v1.0.0LatestOct 23, 2026

Score

90% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts
  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts