garmin-mcp-local
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| GARMIN_EMAIL | Yes | Your Garmin Connect email address. Used for authentication to Garmin's API. | |
| ALERT_EMAIL_TO | No | Optional: Email address to send failure alerts to. Leave unset to disable alerting. | |
| GARMIN_PASSWORD | Yes | Your Garmin Connect password. Used for authentication to Garmin's API. | |
| GARMIN_MAX_RETRIES | No | Optional: Maximum number of retries on rate limit or server errors. | |
| GARMIN_TOKEN_STORE | No | Optional: Path where the session token is cached. Defaults to a directory in the project. | |
| GARMIN_MIN_REQUEST_INTERVAL_SECONDS | No | Optional: Minimum delay between API requests for rate limiting. Default is likely 1 second. |
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 |
|---|---|
| list_activitiesA | List activities from the local cache, most recent first. |
| get_activity_detailA | Full detail for one activity: summary row + laps + HR/power zones + gear. |
| get_daily_health_metricsB | Daily steps/HR/stress/body battery/SpO2/respiration for a date range (inclusive, 'YYYY-MM-DD'). |
| get_sleepA | Nightly sleep stages + sleep score breakdown for a date range (inclusive, 'YYYY-MM-DD'). |
| get_training_trendsB | Training status, readiness, VO2max, load (ACWR), endurance/hill scores, and race predictions for a date range (inclusive, 'YYYY-MM-DD'). |
| get_sync_statusA | Recent sync_log entries -- what's been fetched, what failed/was rate-limited, and the current resume cursors for every category. Check this before trusting 'no data' as a real gap vs. a not-yet-synced range. |
| execute_sqlA | Run an ad hoc read-only SQL query against the local cache. Only SELECT/WITH/EXPLAIN/PRAGMA table_info statements are allowed. |
| sync_nowA | Explicitly hit the live Garmin API to pull new data since the last successful sync, for every category. Rate-limited; respects any active cooldown from a previous 429. Never called automatically by other tools. |
| backfill_batch_nowB | Run one controlled batch of API-driven backfill per category, walking further back into history than the bulk export (or a prior backfill run) reached. Call repeatedly to walk the full history without one giant fetch. |
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 9 tools
Each tool targets a distinct aspect of Garmin data: sync management, data retrieval for specific domains (activities, health, sleep, training), and direct SQL access. There is no functional overlap.
All tools use a consistent snake_case verb_noun pattern (e.g., get_sleep, list_activities, sync_now), with 'get' and 'list' as common prefixes, making the naming predictable.
9 tools is ideal for a Garmin data server: it covers core operations (sync, backfill, query) without being overwhelming or sparse. Each tool serves a clear purpose.
The set provides direct tools for activities, health metrics, sleep, and training trends, but lacks dedicated tools for backfilled categories like body composition or race predictions. However, the execute_sql tool allows ad hoc queries to fill these gaps.