Skip to main content
Glama
KaiTries

garmin-connect-mcp

by KaiTries

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
TZNoTime zone used to define "today". Alternative to GARMIN_MCP_TZ.
GARMIN_MCP_TZNoTime zone used to define "today". Defaults to the system time zone. TZ is also accepted.
GARMIN_MCP_HOSTNoHTTP bind host. Default is 127.0.0.1.
GARMIN_MCP_PORTNoHTTP bind port. Default is 8000.
GARMIN_KEY_EXPIRESNoAPI key expiry date in YYYY-MM-DD format; get_profile warns within 14 days.
GARMIN_MCP_TRANSPORTNoMCP transport to use: stdio or streamable-http. Default is stdio.
GARMIN_MCP_HTTP_TOKENNoBearer token for HTTP transport. Alternative to GARMIN_MCP_HTTP_TOKEN_FILE.
GARMIN_PERSONAL_API_KEYNoGarmin Personal API key. Alternative to GARMIN_PERSONAL_API_KEY_FILE or the default key file at ~/.config/garmin/connect-personal-api-key.
GARMIN_MCP_ALLOWED_HOSTSNoComma-separated Host names for DNS-rebinding protection when running behind a proxy.
GARMIN_MCP_HTTP_TOKEN_FILENoPath to a file containing the bearer token for HTTP transport. Alternative to GARMIN_MCP_HTTP_TOKEN.
GARMIN_MCP_REQUEST_TIMEOUTNoSeconds per Garmin request. Default is 30.
GARMIN_PERSONAL_API_KEY_FILENoPath to a file containing the Garmin Personal API key. Alternative to GARMIN_PERSONAL_API_KEY. Default key file is ~/.config/garmin/connect-personal-api-key.
GARMIN_MCP_ALLOW_UNAUTHENTICATEDNoSet to 1 to allow binding HTTP transport to a non-loopback address without a bearer token. Only use behind an authenticating reverse proxy.

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": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
get_recoveryA

Day-by-day recovery picture: sleep (duration, score, stages, bedtime), overnight HRV and its 7-day average, resting HR, stress, Body Battery and steps, plus range averages. Defaults to the last 7 days; at most 92 days per call.

get_day_detailA

Deeper look at one day: sleep score breakdown and Garmin's sleep insight, overnight HRV readings range, and the Body Battery events (sleep charge, activities, stress) that explain the day's drain. Defaults to today.

list_activitiesA

Activities newest first, one compact row each: duration, distance, pace/speed, HR, power, TSS/IF, training load, training effect and time in HR zones. Defaults to the last 30 days.

get_activityA

One activity in detail: summary metrics, the planned workout it followed, and (from the FIT file) each leg of a multisport session, every lap, and minutes per HR zone.

get_training_summaryA

Training volume per week (or month/day) split by sport: sessions, hours, distance, elevation, training load, TSS and HR-zone minutes. Computed by this server from the activity list. Defaults to the last 8 full ISO weeks including the current one.

get_body_compositionA

Weigh-ins per day (weight, body fat, muscle, water, BMI) and the range average. Defaults to the last 90 days.

get_nutritionA

Food log for one day from Garmin Connect nutrition (totals, goals, meals) plus hydration intake and estimated sweat loss. Defaults to today.

get_profileA

User settings relevant to interpreting data: units, time zone, training days and heart-rate zones per sport.

garmin_api_getA

Escape hatch: GET any Personal API path and return the JSON, squeezed (nulls and image/ID noise removed, long lists cut). Use only when no other tool covers the data, e.g. /usersummary-service/stats/stress/daily/{start}/{end}, /wellness-service/wellness/dailyHeartRate?date=…, /wellness-service/wellness/daily/spo2acclimation/{date}, /fitnessage-service/fitnessage/v2/{date}, /goal-service/goal/user/effective/weightgoal/{start}/{end}.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

A3.9/5.0

Scored across 9 tools

Disambiguation4/5

Most tools have clearly distinct purposes: list_activities vs get_activity, get_training_summary, get_body_composition, get_nutrition, and get_profile are easy to tell apart. The main overlap is get_recovery vs get_day_detail, since both surface sleep, HRV, and Body Battery data, though the range-vs-single-day distinction helps. garmin_api_get is an intentional escape hatch with explicit usage guidance.

Naming Consistency4/5

Eight of nine tools follow a consistent snake_case verb_noun pattern using get_ or list_ prefixes. garmin_api_get is a minor deviation, but it still uses snake_case and signals its special escape-hatch role. Overall naming is predictable and readable.

Tool Count5/5

Nine tools is well-scoped for a read-only Garmin Connect data server. Each tool covers a distinct data area—recovery, day detail, activities, training, body composition, nutrition, profile—and the escape hatch adds flexibility without bloating the set. No tool feels redundant or superfluous.

Completeness4/5

The surface covers the core health/fitness domains: recovery, sleep, HRV, activities, training load, body composition, nutrition, and profile. Minor gaps exist for less common metrics like SpO2, fitness age, and goals, but garmin_api_get provides a documented escape hatch for those cases. This is broadly complete for typical agent workflows.

Maintenance

ActivityMaintained
ResponsivenessNo issues