{"id":45084656,"url":"https://github.com/eddmann/garmin-connect-mcp","last_synced_at":"2026-02-19T15:36:05.394Z","repository":{"id":319110774,"uuid":"1074439371","full_name":"eddmann/garmin-connect-mcp","owner":"eddmann","description":"MCP server enabling LLMs to interact with Garmin Connect - activities, health metrics, sleep data, and training analysis","archived":false,"fork":false,"pushed_at":"2025-11-04T14:58:53.000Z","size":463,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-11-04T16:21:49.622Z","etag":null,"topics":["activity-tracking","claude","fitness","garmin","garmin-connect","health","health-metrics","llm","mcp","model-context-protocol","sleep-tracking","training-analysis"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/eddmann.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-10-11T19:43:42.000Z","updated_at":"2025-11-04T14:58:57.000Z","dependencies_parsed_at":"2025-11-03T08:07:20.334Z","dependency_job_id":null,"html_url":"https://github.com/eddmann/garmin-connect-mcp","commit_stats":null,"previous_names":["eddmann/garmin-connect-mcp"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/eddmann/garmin-connect-mcp","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eddmann%2Fgarmin-connect-mcp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eddmann%2Fgarmin-connect-mcp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eddmann%2Fgarmin-connect-mcp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eddmann%2Fgarmin-connect-mcp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/eddmann","download_url":"https://codeload.github.com/eddmann/garmin-connect-mcp/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eddmann%2Fgarmin-connect-mcp/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29620144,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-19T13:04:20.082Z","status":"ssl_error","status_checked_at":"2026-02-19T13:03:33.775Z","response_time":117,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["activity-tracking","claude","fitness","garmin","garmin-connect","health","health-metrics","llm","mcp","model-context-protocol","sleep-tracking","training-analysis"],"created_at":"2026-02-19T15:36:04.668Z","updated_at":"2026-02-19T15:36:05.383Z","avatar_url":"https://github.com/eddmann.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Garmin Connect MCP Server\n\n![Garmin Connect MCP Server](docs/heading.png)\n\nA Model Context Protocol (MCP) server for Garmin Connect integration. Access your activities, health data, training metrics, and more through Claude and other LLMs.\n\n[![Python 3.11+](https://img.shields.io/badge/python-3.11+-blue.svg)](https://www.python.org/downloads/)\n\n## Overview\n\nThis MCP server provides 22 tools to interact with your Garmin Connect account, organized into 8 categories:\n\n- Activities (3 tools) - Query activities and view detailed metrics\n- Analysis (2 tools) - Compare activities and find similar workouts\n- Health \u0026 Wellness (4 tools) - Access health metrics, sleep, heart rate, and activity data\n- Training (3 tools) - Analyze training periods and performance trends\n- User Profile (1 tool) - Access profile, statistics, and personal records\n- Challenges \u0026 Goals (2 tools) - Track goals, PRs, badges, and challenges\n- Devices \u0026 Gear (2 tools) - Manage devices and equipment\n- Weight Management (2 tools) - Track weight data\n- Other (3 tools) - Workouts, manual data entry, women's health tracking\n\nAdditionally, the server provides:\n\n- 3 MCP Resources - Athlete profile, training readiness, and daily health for ongoing context\n- 6 MCP Prompts - Templates for common queries (training analysis, sleep quality, readiness checks, activity analysis, run comparison, health summary)\n\n## Prerequisites\n\n- Python 3.11+ and [uv](https://github.com/astral-sh/uv), OR\n- Docker\n\n## Installation \u0026 Setup\n\n### How Authentication Works\n\n1. Credential Authentication - First run authenticates with email/password\n2. MFA Support - If MFA is enabled, you'll be prompted for your code (interactive stdin)\n3. Token Storage - OAuth tokens saved to `~/.garminconnect/` and automatically refreshed\n4. Persistence - Tokens persist across runs (UV on host, Docker requires volume mount)\n\n### Option 1: Using UV\n\n```bash\n# Install dependencies\ncd garmin-connect-mcp\nuv sync\n```\n\nThen configure credentials using one of these methods:\n\n#### Interactive Setup\n\n```bash\nuv run garmin-connect-mcp-auth\n```\n\nThis will prompt for your credentials and save them to `.env`.\n\n#### Manual Setup\n\nCreate a `.env` file manually:\n\n```bash\nGARMIN_EMAIL=your-email@example.com\nGARMIN_PASSWORD=your-password\n```\n\n### Option 2: Using Docker\n\n```bash\n# Pull the image\ndocker pull ghcr.io/eddmann/garmin-connect-mcp:latest\n```\n\nThen configure credentials using one of these methods:\n\n#### Interactive Setup\n\n```bash\n# Create the env file first (Docker will create it as a directory if it doesn't exist)\ntouch garmin-connect-mcp.env\n\n# Run the setup script\ndocker run -it --rm \\\n  -v \"/ABSOLUTE/PATH/TO/garmin-connect-mcp.env:/app/.env\" \\\n  --entrypoint= \\\n  ghcr.io/eddmann/garmin-connect-mcp:latest \\\n  python -m garmin_connect_mcp.scripts.setup_auth\n```\n\nThis will prompt for your credentials and save them to `garmin-connect-mcp.env`.\n\n#### Manual Setup\n\nCreate a `garmin-connect-mcp.env` file manually in your current directory:\n\n```bash\nGARMIN_EMAIL=your-email@example.com\nGARMIN_PASSWORD=your-password\n```\n\n#### MFA Support for Docker\n\nIf you have MFA enabled on your Garmin account:\n\n- The server will prompt for your MFA code on first run (requires `-it` flags for interactive input)\n- **Important**: Without token persistence, you'll need to enter your MFA code on every container restart\n- **Recommended**: Mount the token directory as a volume to persist tokens and avoid repeated MFA prompts\n\nTo persist tokens across Docker runs, create a directory for tokens and mount it:\n\n```bash\n# Create token directory on host\nmkdir -p ~/.garminconnect-docker\n\n# Then use this directory in your Docker configuration (see Claude Desktop Configuration below)\n```\n\n## Claude Desktop Configuration\n\nAdd to your configuration file:\n\n- macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`\n- Windows: `%APPDATA%\\Claude\\claude_desktop_config.json`\n\n### Using UV\n\n```json\n{\n  \"mcpServers\": {\n    \"garmin\": {\n      \"command\": \"uv\",\n      \"args\": [\n        \"run\",\n        \"--directory\",\n        \"/ABSOLUTE/PATH/TO/garmin-connect-mcp\",\n        \"garmin-connect-mcp\"\n      ]\n    }\n  }\n}\n```\n\n### Using Docker\n\n#### Without Token Persistence (MFA required on every restart)\n\n```json\n{\n  \"mcpServers\": {\n    \"garmin\": {\n      \"command\": \"docker\",\n      \"args\": [\n        \"run\",\n        \"-i\",\n        \"--rm\",\n        \"-v\",\n        \"/ABSOLUTE/PATH/TO/garmin-connect-mcp.env:/app/.env\",\n        \"ghcr.io/eddmann/garmin-connect-mcp:latest\"\n      ]\n    }\n  }\n}\n```\n\n#### With Token Persistence (Recommended for MFA users)\n\n```json\n{\n  \"mcpServers\": {\n    \"garmin\": {\n      \"command\": \"docker\",\n      \"args\": [\n        \"run\",\n        \"-i\",\n        \"--rm\",\n        \"-v\",\n        \"/ABSOLUTE/PATH/TO/garmin-connect-mcp.env:/app/.env\",\n        \"-v\",\n        \"/ABSOLUTE/PATH/TO/.garminconnect-docker:/root/.garminconnect\",\n        \"ghcr.io/eddmann/garmin-connect-mcp:latest\"\n      ]\n    }\n  }\n}\n```\n\nReplace `/ABSOLUTE/PATH/TO/.garminconnect-docker` with the absolute path to your token directory. On Windows, use something like `C:\\\\Users\\\\YOUR_USERNAME\\\\.garminconnect-docker`.\n\n## Usage\n\nAsk Claude to interact with your Garmin data using natural language. The server provides tools, resources, and prompt templates to help you get started.\n\n### Quick Start with MCP Prompts\n\nUse built-in prompt templates for common queries (available via prompt suggestions in Claude):\n\n- `analyze-recent-training` - Analyze my training over the past 30 days\n- `sleep-quality-report` - Analyze sleep quality with recommendations\n- `training-readiness-check` - Check if I'm ready to train hard today\n- `activity-deep-dive` - Deep dive into a specific activity\n- `compare-recent-runs` - Compare recent runs to track progress\n- `health-summary` - Show comprehensive health overview\n\n### Activities\n\n```\n\"Show me my runs from the last 30 days\"\n\"Get details for my half marathon yesterday including splits and heart rate zones\"\n\"Show me the comments on my latest cycling activity\"\n```\n\n### Training Analysis\n\n```\n\"Analyze my training over the past 30 days\"\n\"Compare my last three 10K runs\"\n\"Find runs similar to my tempo workout from last week\"\n```\n\n### Health \u0026 Wellness\n\n```\n\"How did I sleep last night?\"\n\"What's my Body Battery level today?\"\n\"Show me my stress levels and recovery status\"\n\"Am I ready to train hard today?\"\n```\n\n_Note: The athlete profile resource (`garmin://athlete/profile`) and daily health resource (`garmin://health/today`) automatically provide ongoing context._\n\n### Performance Metrics\n\n```\n\"What's my VO2 max trend?\"\n\"Show me my training readiness and recent stats\"\n```\n\n_Note: List-returning tools use cursor-based pagination with default limits (10 items for activities, 7 for health data)._\n\n## Available Tools\n\n### Activities (3 tools)\n\n| Tool                   | Description                                                            |\n| ---------------------- | ---------------------------------------------------------------------- |\n| `query-activities`     | Query activities with pagination (by ID, date range, or specific date) |\n| `get-activity-details` | Get comprehensive activity details (splits, weather, HR zones, gear)   |\n| `get-activity-social`  | Get social details for an activity (likes, comments, kudos)            |\n\n### Analysis (2 tools)\n\n| Tool                      | Description                                     |\n| ------------------------- | ----------------------------------------------- |\n| `compare-activities`      | Compare 2-5 activities side-by-side             |\n| `find-similar-activities` | Find activities similar to a reference activity |\n\n### Health \u0026 Wellness (4 tools)\n\n| Tool                     | Description                                                                   |\n| ------------------------ | ----------------------------------------------------------------------------- |\n| `query-health-summary`   | Query daily health summaries with pagination (stats, readiness, Body Battery) |\n| `query-sleep-data`       | Query sleep data with stages, scores, and HRV                                 |\n| `query-heart-rate-data`  | Query heart rate data with resting HR                                         |\n| `query-activity-metrics` | Query activity metrics (steps, stress, respiration, SpO2, etc.)               |\n\n### Training (3 tools)\n\n| Tool                      | Description                                                         |\n| ------------------------- | ------------------------------------------------------------------- |\n| `analyze-training-period` | Analyze training over a time period with insights                   |\n| `get-performance-metrics` | Get performance metrics (VO2 max, hill score, endurance, HRV, etc.) |\n| `get-training-effect`     | Get training effect and progress summary                            |\n\n### User Profile (1 tool)\n\n| Tool               | Description                                          |\n| ------------------ | ---------------------------------------------------- |\n| `get-user-profile` | Get comprehensive athlete profile with stats and PRs |\n\n### Challenges \u0026 Goals (2 tools)\n\n| Tool                      | Description                                         |\n| ------------------------- | --------------------------------------------------- |\n| `query-goals-and-records` | Query goals, personal records, and race predictions |\n| `query-challenges`        | Query challenges and badges (by status and type)    |\n\n### Devices \u0026 Gear (2 tools)\n\n| Tool            | Description                                                  |\n| --------------- | ------------------------------------------------------------ |\n| `query-devices` | Query device information (with settings, solar data, alarms) |\n| `query-gear`    | Query gear and equipment (with defaults and usage stats)     |\n\n### Weight Management (2 tools)\n\n| Tool                 | Description                         |\n| -------------------- | ----------------------------------- |\n| `query-weight-data`  | Query weight data for date or range |\n| `manage-weight-data` | Add or delete weight entries        |\n\n### Other (3 tools)\n\n| Tool                  | Description                                      |\n| --------------------- | ------------------------------------------------ |\n| `manage-workouts`     | Workout management (list, get, download, upload) |\n| `log-health-data`     | Log body composition, blood pressure, hydration  |\n| `query-womens-health` | Query pregnancy and menstrual cycle data         |\n\n## MCP Resources\n\nResources provide ongoing context to the LLM without requiring explicit tool calls:\n\n| Resource                      | Description                                        |\n| ----------------------------- | -------------------------------------------------- |\n| `garmin://athlete/profile`    | Athlete profile with stats, zones, and PRs         |\n| `garmin://training/readiness` | Current training readiness and Body Battery        |\n| `garmin://health/today`       | Today's health snapshot (steps, sleep, stress, HR) |\n\n## MCP Prompts\n\nPrompt templates for common queries (accessible via prompt suggestion in Claude):\n\n| Prompt                     | Description                                         |\n| -------------------------- | --------------------------------------------------- |\n| `analyze-recent-training`  | Analyze training over a specified period            |\n| `sleep-quality-report`     | Sleep quality analysis with recommendations         |\n| `training-readiness-check` | Check if ready to train hard today                  |\n| `activity-deep-dive`       | Deep dive into a specific activity with all metrics |\n| `compare-recent-runs`      | Compare recent runs to identify trends              |\n| `health-summary`           | Comprehensive health overview                       |\n\n## License\n\nMIT License - see [LICENSE](LICENSE) file for details\n\n## Disclaimer\n\nThis project is not affiliated with, endorsed by, or sponsored by Garmin Ltd. or any of its affiliates. All product names, logos, and brands are property of their respective owners.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feddmann%2Fgarmin-connect-mcp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feddmann%2Fgarmin-connect-mcp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feddmann%2Fgarmin-connect-mcp/lists"}