Skip to main content
Glama
pedrokehl

Garmin Connect MCP

by pedrokehl

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
GARMIN_API_KEYYesYour Garmin Connect Personal API key.
MCP_AUTH_TOKENYesA random secret of 24+ characters that MCP clients send as a bearer token to protect your endpoint.
MCP_OAUTH_CLIENT_IDNoOptional OAuth client ID for clients that cannot send a bearer header, such as Gemini or claude.ai.
MCP_OAUTH_CLIENT_SECRETNoOptional OAuth client secret used with MCP_OAUTH_CLIENT_ID.
MCP_OAUTH_REDIRECT_URISNoOptional allowed redirect URIs for OAuth connections.

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": true
}

Tools

Functions exposed to the LLM to take actions

NameDescription
garmin_get_user_settingsA

Get the user's Garmin Connect settings: displayName, timeZone, preferredLocale, measurementSystem (metric/statute), first day of week, date/time/number formats, heart rate and power display formats, hydration and glucose units, golf units, wheelchair mode and preferred training days. Call this first to learn the user's time zone (so you know what "today" is) and preferred units.

garmin_search_activitiesA

Search and list the user's recorded activities (runs, rides, swims, strength sessions, hikes, dives…), newest first by default. Returns an array of activity summaries with: activityId, activityName, description, startTimeLocal/startTimeGMT, activityType, eventType, distance (meters), duration / movingDuration / elapsedDuration (seconds), elevationGain/Loss (meters), averageSpeed/maxSpeed (m/s), calories, averageHR/maxHR (bpm), cadence, power, training effect and more. Use this first to find activity IDs, then call garmin_get_activity for splits and full detail, or garmin_download_activity_file for the original FIT file. All filters are optional and combined with AND. Paginate with start and limit.

garmin_get_activityA

Get the full detail of one activity: name, type, event type, time zone, device and metadata, the summary (distance m, duration s, speeds m/s, heart rate, power, cadence, calories, training effect, elevation), split/lap summaries, and dive or multisport info when relevant. Get the activityId from garmin_search_activities. Does not include per-second samples; use garmin_download_activity_file for the raw FIT data.

garmin_get_activity_workoutsA

List the structured workouts that were followed during an activity (workout name, sport, steps with targets, creation time). Returns an empty array when the activity was not a structured workout.

garmin_download_activity_fileA

Download the original file recorded by the device for an activity, usually a ZIP containing the .FIT file with every sample (GPS track, heart rate, power, cadence…). When running locally with GARMIN_DOWNLOAD_DIR set, the file is saved there and the path is returned. Otherwise the file is returned inline as a base64 embedded resource, up to 3 MB. For summaries, splits or metrics, prefer garmin_get_activity: it is much smaller.

garmin_get_daily_summaryA

Get the user's complete wellness summary for one day: total/active/BMR kilocalories, steps and step goal, distance (meters), floors climbed, intensity minutes (moderate/vigorous) and goal, highly active/active/sedentary/sleeping seconds, min/max/resting heart rate, stress averages and durations, Body Battery charged/drained/highest/lowest, SpO2 and respiration. Best single call for "how was my day?". For many days at once use garmin_get_daily_summaries.

garmin_get_daily_summariesA

Get daily wellness summaries (steps, calories, distance, intensity minutes, heart rate, stress, Body Battery, floors…) for every day in a range, returned as { data: [...] } with one entry per day. Maximum range: 365 days (Garmin documents 1 year). Each day is a large object, so a year of data is very long: prefer a few weeks or months per call unless the whole year is needed. For one day garmin_get_daily_summary is simpler.

garmin_get_stepsA

Get daily step totals for a date range: one entry per day with calendarDate, totalSteps, totalDistance (meters) and stepGoal. Maximum range: 28 days per request; split longer periods, or use garmin_get_daily_summaries (up to 365 days), which also includes steps.

garmin_get_stressA

Get daily stress statistics for a date range: one entry per day with calendarDate and a values map containing overallStressLevel (0–100) and restStressDuration, lowStressDuration, mediumStressDuration, highStressDuration (seconds). Stress is derived from heart rate variability. Maximum range: 28 days per request.

garmin_get_hydrationA

Get logged water intake per day: calendarDate, valueInML (consumed), goalInML, sweatLossInML (estimated from activities), activityIntakeInML and lastEntryTimestampLocal. Only has data if the user logs hydration in Garmin Connect. Maximum range: 31 days.

garmin_get_wellness_activitiesA

Get wellness activities (e.g. breathwork, meditation, relaxation and other non-fitness sessions recorded on the device) for a date range: name, type, notes, start/end timestamps, summary values and time in zones. Both dates are inclusive. Fitness activities such as runs or rides are not here; use garmin_search_activities for those.

garmin_get_sleepA

Get sleep data for one calendar date (the night ending on that morning): sleep start/end timestamps, sleepTimeSeconds, deepSleepSeconds, lightSleepSeconds, remSleepSeconds, awakeSleepSeconds, awakeCount, napTimeSeconds, sleep scores and feedback, average/lowest SpO2, respiration, avgHeartRate and avgSleepStress. Durations are in seconds. For several nights use garmin_get_sleep_summaries.

garmin_get_sleep_summariesA

Get one sleep summary per night for a date range, each with sleep start/end timestamps, sleepTimeSeconds, deepSleepSeconds, lightSleepSeconds, remSleepSeconds, awakeSleepSeconds, awakeCount, napTimeSeconds, sleep scores and feedback, average/lowest SpO2, respiration, avgHeartRate and avgSleepStress. Durations are in seconds. Maximum range: 31 days per request.

garmin_get_heart_rateA

Get heart rate for one day: restingHeartRate, minHeartRate, maxHeartRate, lastSevenDaysAvgRestingHeartRate, abnormal-HR alerts, and heartRateValues, a time series of [timestamp, bpm] rows whose columns are described by heartRateValueDescriptors. The time series is large; for resting HR trends over many days prefer garmin_get_daily_summaries.

garmin_get_heart_rate_zonesA

Get the user's heart rate zone configuration, one entry per sport (default, running, cycling…): training method (%max HR, %HRR or %LTHR), zone1Floor..zone5Floor (bpm), and the max, resting and lactate threshold heart rates used.

garmin_get_hrvA

Get overnight HRV for one date: hrvSummary (weeklyAvg, lastNightAvg, lastNight5MinHigh, baseline, status: NONE, POOR, LOW, UNBALANCED, BALANCED or INVALID, feedbackPhrase) and hrvReadings (5-minute HRV values in ms during sleep), plus the sleep window timestamps. Requires a compatible watch worn overnight.

garmin_get_hrv_summariesA

Get one HRV summary per day for a date range (weeklyAvg, lastNightAvg, baseline, status, feedback), without the 5-minute readings. Use for HRV trends and recovery analysis.

garmin_get_body_batteryA

Get Body Battery (energy level 0–100) per day: charged and drained totals, a time series bodyBatteryValuesArray, feedback events and the activities that impacted it. Maximum range: 31 days. Set chunks to get the lowest and highest values of each part of the day instead of reading the full series.

garmin_get_spo2A

Get Pulse Ox (SpO2, %) for one day: averageSpO2, lowestSpO2, latestSpO2, lastSevenDaysAvgSpO2, avgSleepSpO2, single readings and hourly averages, plus altitude acclimation data. Requires a watch with Pulse Ox enabled.

garmin_get_fitness_ageA

Get the latest Fitness Age as of a date: chronologicalAge, fitnessAge, achievableFitnessAge, previousFitnessAge, and the components behind it (BMI or body fat, resting heart rate, vigorous activity days/minutes) with improvement targets.

garmin_get_weight_entriesA

Get every individual weigh-in in a date range (from Index scales, other smart scales or manual entries): date, timestampGMT, weight, bmi, bodyFat, bodyWater, boneMass, muscleMass, visceralFat, metabolicAge, physiqueRating and weightDelta (change since the previous weigh-in); weight, boneMass and muscleMass are in GRAMS (75000 = 75 kg); bodyFat and bodyWater are percentages; timestampGMT and date are epoch milliseconds. For one value per day plus the range average use garmin_get_weight_summary.

garmin_get_weight_summaryA

Get a weight summary for a date range: dailyWeightSummaries (latest weigh-in per day, or all of them with includeAll), totalAverage for the range, and the closest weigh-ins before (previousDateWeight) and after (nextDateWeight) the range; weight, boneMass and muscleMass are in GRAMS (75000 = 75 kg); bodyFat and bodyWater are percentages; timestampGMT and date are epoch milliseconds.

garmin_get_weight_goalsA

Get the user's weight goals in effect during a date range: userGoals (goalValue = target weight in GRAMS, category such as MANUAL or PREGNANCY, tracking period, start/end dates) and userGoalRanges (low/high target ranges, also in grams).

garmin_get_nutrition_logA

Get the user's food log for one day from Garmin Connect nutrition tracking: daily nutrition goals, totals of calories and nutrients consumed (protein, carbs, fat, fiber…), logged foods with serving sizes, and meal-by-meal details (breakfast, lunch, dinner, snacks). Only has data if the user logs food in Garmin Connect.

garmin_get_menstrual_cycle_summaryA

Women's health: get the menstrual cycle that contains a date: cycle start/end, dayInCycle, currentPhase and days until the next phase, period length, predicted cycle length, fertile window, predicted ovulation date, and pregnancy info (due date, week) when pregnancy tracking is on. Only has data if the user tracks their cycle in Garmin Connect.

garmin_get_menstrual_cycle_dayA

Women's health: detailed view of one day: the user's daily log (flow, symptoms, mood and other entries), the cycle summary for that day, and, during pregnancy tracking, weekly weight goal ranges and optionally baby movement (kick count) data.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

A4/5.0

Scored across 26 tools

Disambiguation4/5

Most tools are clearly separated by metric and resource, with explicit distinctions between singular/range variants and summary/detail variants. There is some intentional overlap between broad daily-summary tools and metric-specific tools, but the descriptions guide selection well.

Naming Consistency5/5

All tools use a consistent snake_case `garmin_` prefix followed by a clear action such as `get`, `search`, or `download`. The verb-noun pattern is predictable throughout, including range/detail variants.

Tool Count4/5

The set is slightly large at 26 tools, but the Garmin health/fitness domain is broad and most tools cover distinct metrics or lifecycle variants. It is heavy but reasonably scoped rather than bloated.

Completeness4/5

The read-only surface is extensive, covering sleep, activities, daily wellness, heart rate, HRV, body battery, weight, nutrition, and menstrual health. Some adjacent areas such as training status, VO2 max, devices, or workouts-as-a-list are missing, but core health-data retrieval is well covered.

Maintenance

ActivityMaintained
ResponsivenessNo issues