garmin-local-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| GARMINTOKENS | No | Override the token store location (default <data_dir>/tokens) | |
| GARMIN_EMAIL | No | Optional, for non-interactive re-login; when set, login skips the prompts (MFA may still prompt if your account requires it) | |
| GARMIN_PASSWORD | No | Optional, for non-interactive re-login; when set, login skips the prompts (MFA may still prompt if your account requires it) | |
| GARMIN_MCP_DATA_DIR | No | Override the data directory (default ~/.garmin-mcp) |
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
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| auth_statusA | Check whether stored Garmin Connect tokens exist. Use before sync, or when a sync failed with an auth error. |
| syncB | Fetch up to 60 days from Garmin Connect into the local store. Default: last 30 days ending yesterday. Use for catch-ups; multi-month backfills belong in the CLI. |
| sync_statusA | Show local data coverage per table, last sync time, and pending sync errors. Use to see what date ranges are queryable. |
| get_dayA | One merged view of a single day (YYYY-MM-DD): wellness, sleep, HRV, training status, activities, and data-quality flags. Use for 'how was ' questions. |
| query_metricsA | Columnar time series for one or more metrics (e.g. resting_hr, sleep_score, steps) between two dates. Prefer weekly/monthly aggregate for ranges over ~60 days; stats=True adds mean/min/max/sd per metric. |
| correlateA | Pearson/Spearman correlation between two metrics (default: last 30 days). Positive lag_days pairs metric_a on day D with metric_b on D+lag;
scan_lags=True searches lags -7..+7 for the strongest relationship and
returns it with a Bonferroni-adjusted p-value; if that is >= 0.05, |
| baselinesA | Personal mean +/- sd band per metric over a trailing window (default 28 days; default metrics: resting_hr, hrv, sleep_score, skin_temp_dev_c, stress_avg, steps). Use to judge whether today's value is normal for this user. |
| anomaliesA | Outlier days (>= z standard deviations from the range mean) and sustained streaks (5+ consecutive days on one side of it). Default: last 30 days of the core wellness metrics. |
| list_activitiesA | List recent activities newest-first as a compact table, filterable by type (e.g. 'running'), date range, and minimum distance. truncated=true means more rows exist beyond the limit. |
| get_activityA | Full stored summary row for one activity by id (from list_activities). Summary fields only - no GPS or sample streams. |
| gapsB | Missing days per table plus unresolved sync errors (default: first synced date through yesterday). Use to find holes worth re-syncing before drawing conclusions. |
| import_fitA | Import one manually exported Garmin wellness FIT bundle (folder of .fit files) - zero-auth offline ingest. Existing API-sourced rows are never overwritten. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 12 tools
Each tool has a clearly distinct purpose: auth_status and sync_status are separate status checks, sync and import_fit bring in data via different channels, query_metrics and get_day operate at different granularities, and the analytic tools (anomalies, correlate, baselines) are conceptually separate. No two tools appear to do the same thing.
Naming is mixed: some tools follow a verb_noun pattern (get_day, list_activities, query_metrics, import_fit, get_activity), but others are bare verbs (sync, correlate), noun-only (anomalies, gaps, baselines), or compound nouns (auth_status, sync_status). The convention is readable but not consistently applied across the full set.
Twelve tools is right-sized for a local Garmin data store covering sync, import, query, and analysis. Each tool earns its place without redundancy, and the count stays within the well-scoped 3-15 range.
The surface covers core workflows well: data ingest (sync, import_fit), status (auth_status, sync_status, gaps), query (get_day, query_metrics, list_activities, get_activity), and analysis (anomalies, correlate, baselines). Minor gaps exist—no metric enumeration tool, no data deletion/update, and activity detail is deliberately summary-only—but these don't block the primary use case.