
Garmin Fitness
Let your coding agent query and sync your Garmin Connect metrics from InfluxDB when you ask about steps, sleep, HRV, heart rate, or workouts.
Install
npx skills add https://github.com/stratus-ss/garmin-influxdb --skill garmin-fitnessWhat is this skill?
- Routes five MCP tools: list_metrics, query_fitness_data, query_activities, delete_data, sync_garmin
- Aggregated queries need metric, range, and aggregation; activities support fields, limit, and activity_type filters
- sync_garmin defaults to ~30 days from the day after latest DB data through today at ~2.5s per day
- delete_data is permanent—skill requires explicit user confirmation before invocation
- Metric catalog in SKILL.md maps natural questions (steps, sleep, calories) to the right tool
Adoption & trust: 1 installs on skills.sh; 21 GitHub stars; trending (+100% hot-view momentum).
Recommended Skills
Microsoft Foundrymicrosoft/azure-skills
Azure Aimicrosoft/azure-skills
Azure Hosted Copilot Sdkmicrosoft/azure-skills
Lark Eventlarksuite/cli
Running Claude Code Via Litellm Copilotxixu-me/skills
Setup Matt Pocock Skillsmattpocock/skills
Journey fit
Primary fit
Canonical shelf is Operate because the skill is for ongoing personal fitness telemetry—listing metrics, aggregating ranges, and refreshing the time-series store—not for shipping a product feature. Monitoring fits querying health signals, spotting gaps in stored data, and pulling incremental syncs from Garmin Connect into the DB.
SKILL.md
READMESKILL.md - Garmin Fitness
# Garmin Fitness MCP ## Tool Routing ### "what measurements/metrics do you have?" / "what data is in the DB?" → `list_metrics()` — no arguments. Returns all measurement names. ### "how many steps did I get last week?" / "total steps this month" / "average heart rate over 7 days" → `query_fitness_data` — requires `metric`, `range`, `aggregation`. See Metric Catalog below. ### "show me my recent runs/workouts/activities" / "what did I do yesterday?" → `query_activities` — requires `range`, optional `fields`, `limit`, `activity_type`. ### "delete my sleep data for March" / "remove steps from last week" → `delete_data` — requires `measurement`, `range`. **Always confirm with the user before calling this.** Data is permanently deleted. ### "sync/pull new data from Garmin" / "refresh my fitness data" → `sync_garmin` — optional `start_date`, `end_date` (YYYY-MM-DD). Without dates, syncs from the day after the latest data in DB up to today (~30 days typical). **Each day takes ~2.5s due to Garmin rate-limiting.** Warn the user if syncing more than 14 days. ### "how far did I run this month?" / "total miles walked in March" / "total running time last week" → Use `query_fitness_data` with an Activity Field metric (`distance`, `duration`, `averageSpeed`, etc.) + `activity_type` filter + `aggregation="sum"`. Convert meters to miles (/ 1609.34) or seconds to hours (/ 3600) as needed. ## Metric Catalog Use these metric names exactly in `query_fitness_data(metric="...")`. Call `list_metrics()` only when the user asks what measurements exist or when a metric they expect is missing from the catalog. ### Daily Stats (one row per day) | Metric | Description | Unit hint | |--------|-------------|-----------| | `total_steps` | Daily step count | steps | | `total_burned_calories` | Calories burned | kcal | | `total_distance_meters` | Distance traveled | meters (→ miles via / 1609.34) | | `daily_step_goal` | Daily step goal | steps | | `highly_active_minutes` | Vigorous activity | seconds (→ hours via / 3600) | | `moderately_active_minutes` | Moderate activity | seconds (→ hours via / 3600) | | `sedentary_minutes` | Sedentary time | seconds (→ hours via / 3600) | ### Sleep | Metric | Description | |--------|-------------| | `total_sleep_minutes` | Total time asleep | | `light_sleep_minutes` | Light sleep | | `deep_sleep_minutes` | Deep sleep | | `awake_minutes` | Time awake after sleep onset | ### Heart Rate | Metric | Description | |--------|-------------| | `resting_heart_rate` | Resting HR | | `lowest_heart_rate` | Minimum HR that day | | `highest_heart_rate` | Maximum HR that day | ### Floors | Metric | Description | |--------|-------------| | `floors_ascended` | Floors climbed up | | `floors_descended` | Floors climbed down | ### HRV | Metric | Description | |--------|-------------| | `hrv_last_night_avg` | Last night's HRV average | | `hrv_weekly_avg` | Weekly HRV average | ### Activity Fields (per-activity, tagged with `activityType`) > **Note**: These metrics support `activity_type` filtering in `query_fitness_data`. Daily Stats, Sleep, Heart Rate, Floors, and HRV metrics do **not** have activity type tags -- `activity_type` is ignored for those. | Metric | Description | Unit hint | |--------|-------------|-----------| | `distance` | Activity distance | meters | | `duration` | Activity duration | seconds (→ hours via / 3600) | | `averageSpeed` | Avg speed | km/h (→ mph via × 0.621371) | | `maxSpeed` | Max speed | km/h | | `a