Garmin Connect x MCP · no developer app required

Your watch knows the pattern. Your agent can finally read it.

Garmin MCP hands processed Garmin Connect signals — sleep, HRV, Body Battery, stress, training readiness, respiration, SpO2 and activities — to Claude, Cursor, Windsurf, Hermes, OpenClaw and any MCP-compatible agent.

npx -y garmin-mcp-unofficial setup

No Garmin developer app. No token pasted into chat. Login happens locally; tokens stay under ~/.garmin-mcp.

72readiness
Sleep7h 10mstages + score
HRV48 msbalanced trend
Body Battery54pacing signal
No appno Garmin OAuth setup
Local-firsttokens under ~/.garmin-mcp
34 toolssleep, HRV, stress, activities
Agent-readyClaude, Cursor, Hermes, OpenClaw

What actually happens

Garmin is not Strava. The right flow is simpler.

Most people expect to create a developer app. For Garmin personal use, that is usually the wrong mental model: official Garmin Health API access is partner-approved. This MCP uses local Garmin Connect authentication and keeps the sensitive pieces on your machine.

Expected

Create a developer app

OAuth client id, client secret, redirect URI, scopes, callback debugging.

Not needed here.
After login

Agents call tools

Start with garmin_connection_status, then garmin_daily_summary or garmin_weekly_summary.

No raw dump by default.

Human x agent handoff

One person logs in. The agent does the rest.

The project is designed so a non-technical Garmin user only has one sensitive job: type credentials locally. Everything else can be delegated to an agent with a clear manifest and doctor output.

HumanTypes Garmin login locally

No password, MFA code, token or private raw payload should be pasted into chat.

CLICreates config, token file and Python helper

Setup is config-only; auth handles login; doctor explains the exact next step.

AgentChecks status before summaries

Agents are guided to call manifest, connection status, then daily or weekly summaries.

For humans

One local login. Then your agent can reason over Garmin.

The setup step only writes local MCP configuration. The auth step is separate on purpose, so users understand exactly when Garmin credentials are requested.

01

Install setup

Create local config and MCP client snippets. This step does not ask for your Garmin password.

npx -y garmin-mcp-unofficial setup
03

Run doctor

npx -y garmin-mcp-unofficial doctor
npx -y garmin-mcp-unofficial doctor --client hermes

If doctor says ready, start your MCP client and call garmin_daily_summary.

First successful pull

What users should expect to see.

connectionready=truetoken exists, permissions 600
dailysummarysleep, heart, HRV, stress when available
activitiesrecent workoutsduration, calories, heart-rate zones
confidenceexplicitmissing Body Battery or sparse HRV is called out

The toolbelt

Processed health signals, shaped for agents.

Built for useful reasoning first: broad endpoint coverage plus daily and weekly summaries that turn Garmin data into grounded actions.

RecoveryHRV, Body Battery, stress, respiration, SpO2 and training readiness when your device supports them.
SleepDuration, stages, sleep score, awake/deep/REM context and missing-data confidence.
MovementSteps, calories, distance, floors, intensity minutes and daily movement summaries.
ActivitiesRecent workouts, activity details, splits, weather and heart-rate zones by activity id.
Body logsWeight range and hydration endpoints where Garmin Connect has data.
Agent summariesDaily diagnostic and weekly trend review with bottlenecks, actions and explicit safety limits.

For agents

A manifest that teaches agents the safe path.

Agents should call garmin_agent_manifest and garmin_connection_status first. Hermes gets direct tool names, pinned package guidance and reload instructions so it does not restart the gateway for normal Garmin access.

Install the unofficial Garmin MCP server for me.
Repo: https://github.com/davidmosiah/garminmcp
Run setup, auth --install-helper and doctor.
Never ask me to paste Garmin passwords or tokens.
Start with garmin_connection_status, then garmin_daily_summary.

Privacy dossier

Designed around health data being sensitive.

This bridge is read-only by design and local-first by default. Raw mode exists for debugging, but agents are instructed to prefer summary or structured payloads unless the user explicitly asks for raw.

0600token files are user-readable only
localGarmin password is not stored by MCP
opt-inraw payloads require explicit mode
auditgarmin_privacy_audit reports posture

Open source

Give Garmin users an agent-native health bridge.