{"_id":"@abelhn/garmin-connect-mcp","_rev":"2-f9e11631aefdaccf99984449aa1ecfc6","name":"@abelhn/garmin-connect-mcp","dist-tags":{"latest":"1.1.1"},"versions":{"1.1.0":{"name":"@abelhn/garmin-connect-mcp","version":"1.1.0","keywords":["garmin","garmin-connect","mcp","model-context-protocol","fitness","health","claude"],"license":"MIT","_id":"@abelhn/garmin-connect-mcp@1.1.0","maintainers":[{"name":"abelhn","email":"abel.hn@gmail.com"}],"bin":{"garmin-connect-mcp":"build/index.js","garmin-connect-mcp-setup":"build/setup.js"},"dist":{"shasum":"e032fa788fc95d5925510ec8aec4ac06c565e347","tarball":"https://registry.npmjs.org/@abelhn/garmin-connect-mcp/-/garmin-connect-mcp-1.1.0.tgz","fileCount":5,"integrity":"sha512-QWUFeMdcaKieYkK7EiuLkY9CLQvH75bIQXLz9LL7Z6a7FiRoJRgNbDm3K9un7a+91YQnGNEJNcfCqIzE2YDm1A==","signatures":[{"sig":"MEQCIFID5Go02Xg/GriuafmbguhQJrRUKvy0Mc3samRb04I6AiAtKlg92HCmnRoGZHfpwMQSP+xavbdFZZtkIrSNXbzKuA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":96098},"type":"module","scripts":{"dev":"tsup --watch","build":"tsup","setup":"node build/setup.js","start":"node build/index.js","prepublishOnly":"tsup"},"_npmUser":{"name":"abelhn","email":"abel.hn@gmail.com"},"_npmVersion":"11.6.2","description":"MCP server for Garmin Connect - access fitness, health and training data","directories":{},"_nodeVersion":"24.11.1","dependencies":{"zod":"^3.24.2","axios":"^1.7.9","oauth-1.0a":"^2.2.6","tough-cookie":"^5.1.2","axios-cookiejar-support":"^5.0.5","@modelcontextprotocol/sdk":"^1.12.1"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","dotenv":"^17.3.1","vitest":"^4.0.18","typescript":"^5.7.3","@types/node":"^22.13.4","@types/tough-cookie":"^4.0.5"},"_npmOperationalInternal":{"tmp":"tmp/garmin-connect-mcp_1.1.0_1773410531314_0.7553125282362492","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@abelhn/garmin-connect-mcp","version":"1.1.1","description":"MCP server for Garmin Connect - access fitness, health and training data","type":"module","bin":{"garmin-connect-mcp":"build/index.js","garmin-connect-mcp-setup":"build/setup.js"},"scripts":{"build":"tsup","dev":"tsup --watch","start":"node build/index.js","setup":"node build/setup.js","prepublishOnly":"tsup"},"keywords":["garmin","garmin-connect","mcp","model-context-protocol","fitness","health","claude"],"license":"MIT","dependencies":{"@modelcontextprotocol/sdk":"^1.12.1","axios":"^1.7.9","axios-cookiejar-support":"^5.0.5","oauth-1.0a":"^2.2.6","tough-cookie":"^5.1.2","zod":"^3.24.2"},"devDependencies":{"@types/node":"^22.13.4","@types/tough-cookie":"^4.0.5","dotenv":"^17.3.1","tsup":"^8.5.1","typescript":"^5.7.3","vitest":"^4.0.18"},"_id":"@abelhn/garmin-connect-mcp@1.1.1","_nodeVersion":"24.11.1","_npmVersion":"11.6.2","dist":{"integrity":"sha512-Q9kPVBN37LsR4EOyfvyZ7Je+tYfRPADBktJ4HfBdlAlv5iWjM6uAjAEr5PKvYYexJWso56XeIWfDJxVAhAQReA==","shasum":"bd0430f3e0488dc6eea44f8c48f3c8fa499ac904","tarball":"https://registry.npmjs.org/@abelhn/garmin-connect-mcp/-/garmin-connect-mcp-1.1.1.tgz","fileCount":5,"unpackedSize":91774,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCGFFO4tIPCvnPl2ocSgf6hzhk0uAwebyfpEc1vKt58cQIgVkJc/Um4o/oZE9YuNLFTCh8RnWM99p0YfA2w/8tsxXE="}]},"_npmUser":{"name":"abelhn","email":"abel.hn@gmail.com"},"directories":{},"maintainers":[{"name":"abelhn","email":"abel.hn@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/garmin-connect-mcp_1.1.1_1773411943519_0.8275566722660983"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-13T14:02:11.258Z","modified":"2026-03-13T14:25:43.835Z","1.1.0":"2026-03-13T14:02:11.464Z","1.1.1":"2026-03-13T14:25:43.704Z"},"license":"MIT","keywords":["garmin","garmin-connect","mcp","model-context-protocol","fitness","health","claude"],"description":"MCP server for Garmin Connect - access fitness, health and training data","maintainers":[{"name":"abelhn","email":"abel.hn@gmail.com"}],"readme":"# garmin-connect-mcp\n\nMCP server for Garmin Connect. Access your fitness, health, and training data from Claude Code, Claude Desktop, Cursor, Windsurf, or any MCP client.\n\n**61 tools** across 7 categories: activities, daily health, trends, sleep, body composition, performance/training, and profile/devices.\n\nAPI endpoints and authentication flow based on [`python-garminconnect`](https://github.com/cyberjunky/python-garminconnect) by [cyberjunky](https://github.com/cyberjunky).\n\n## Requirements\n\n- Node.js 20+\n- A Garmin Connect account (email and password)\n\n## Installation\n\n### Claude Code\n\n```bash\nclaude mcp add garmin -e GARMIN_EMAIL=you@email.com -e GARMIN_PASSWORD=yourpass -- npx -y @nicolasvegam/garmin-connect-mcp\n```\n\n### Claude Desktop\n\nAdd to `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS) or `%APPDATA%\\Claude\\claude_desktop_config.json` (Windows):\n\n```json\n{\n  \"mcpServers\": {\n    \"garmin\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@nicolasvegam/garmin-connect-mcp\"],\n      \"env\": {\n        \"GARMIN_EMAIL\": \"you@email.com\",\n        \"GARMIN_PASSWORD\": \"yourpass\"\n      }\n    }\n  }\n}\n```\n\n### Cursor\n\nAdd to `.cursor/mcp.json` in your project root:\n\n```json\n{\n  \"mcpServers\": {\n    \"garmin\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@nicolasvegam/garmin-connect-mcp\"],\n      \"env\": {\n        \"GARMIN_EMAIL\": \"you@email.com\",\n        \"GARMIN_PASSWORD\": \"yourpass\"\n      }\n    }\n  }\n}\n```\n\n### Windsurf\n\nAdd to `~/.codeium/windsurf/mcp_config.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"garmin\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@nicolasvegam/garmin-connect-mcp\"],\n      \"env\": {\n        \"GARMIN_EMAIL\": \"you@email.com\",\n        \"GARMIN_PASSWORD\": \"yourpass\"\n      }\n    }\n  }\n}\n```\n\n### Any MCP Client\n\nRun the server with environment variables:\n\n```bash\nGARMIN_EMAIL=you@email.com GARMIN_PASSWORD=yourpass npx -y @nicolasvegam/garmin-connect-mcp\n```\n\nThe server communicates over stdio using the [Model Context Protocol](https://modelcontextprotocol.io/).\n\n## Available Tools\n\n### Activities (12 tools)\n| Tool | Description |\n|------|-------------|\n| `get_activities` | List recent activities with pagination |\n| `get_activities_by_date` | Search activities within a date range |\n| `get_last_activity` | Get the most recent activity |\n| `count_activities` | Get total number of activities |\n| `get_activity` | Summary data for a specific activity |\n| `get_activity_details` | Detailed metrics: HR, pace, elevation time series |\n| `get_activity_splits` | Per-km or per-mile split data |\n| `get_activity_weather` | Weather conditions during activity |\n| `get_activity_hr_zones` | Time in each heart rate zone |\n| `get_activity_exercise_sets` | Strength training sets (reps, weight) |\n| `get_activity_types` | All available activity types |\n| `get_progress_summary` | Fitness stats over a date range by activity type |\n\n### Daily Health (14 tools)\n| Tool | Description |\n|------|-------------|\n| `get_daily_summary` | Full daily summary (steps, calories, distance, etc.) |\n| `get_steps` | Step count for a date |\n| `get_steps_chart` | Intraday step data throughout the day |\n| `get_heart_rate` | Heart rate data (resting, max, zones, time series) |\n| `get_resting_heart_rate` | Resting heart rate for a date |\n| `get_stress` | Stress levels and time series |\n| `get_body_battery` | Body Battery energy levels (date range) |\n| `get_body_battery_events` | Battery charge/drain events for a day |\n| `get_respiration` | Breathing rate data |\n| `get_spo2` | Blood oxygen saturation |\n| `get_intensity_minutes` | Moderate/vigorous intensity minutes |\n| `get_floors` | Floors climbed chart data |\n| `get_hydration` | Daily hydration/water intake |\n| `get_daily_events` | Daily wellness events |\n\n### Trends (4 tools)\n| Tool | Description |\n|------|-------------|\n| `get_daily_steps_range` | Daily step counts over a date range |\n| `get_weekly_steps` | Weekly step aggregates |\n| `get_weekly_stress` | Weekly stress aggregates |\n| `get_weekly_intensity_minutes` | Weekly intensity minutes |\n\n### Sleep (2 tools)\n| Tool | Description |\n|------|-------------|\n| `get_sleep_data` | Sleep stages, score, bed/wake times |\n| `get_sleep_data_raw` | Raw sleep data with HR and SpO2 |\n\n### Body Composition (5 tools)\n| Tool | Description |\n|------|-------------|\n| `get_body_composition` | Weight, BMI, body fat %, muscle mass (date range) |\n| `get_latest_weight` | Most recent weight entry |\n| `get_daily_weigh_ins` | All weigh-ins for a date |\n| `get_weigh_ins` | Weigh-in records over a date range |\n| `get_blood_pressure` | Blood pressure readings (date range) |\n\n### Performance & Training (11 tools)\n| Tool | Description |\n|------|-------------|\n| `get_vo2max` | VO2 Max estimate (running/cycling) |\n| `get_training_readiness` | Training Readiness score |\n| `get_training_status` | Training status and load |\n| `get_hrv` | Heart Rate Variability |\n| `get_endurance_score` | Endurance fitness score |\n| `get_hill_score` | Climbing performance score |\n| `get_race_predictions` | 5K/10K/half/full marathon predictions |\n| `get_fitness_age` | Estimated fitness age |\n| `get_personal_records` | All personal records |\n| `get_lactate_threshold` | Lactate threshold HR and pace |\n| `get_cycling_ftp` | Functional Threshold Power (cycling) |\n\n### Profile & Devices (13 tools)\n| Tool | Description |\n|------|-------------|\n| `get_user_profile` | User social profile and preferences |\n| `get_user_settings` | User settings, measurement system, sleep schedule |\n| `get_devices` | Registered Garmin devices |\n| `get_device_settings` | Settings for a specific device |\n| `get_device_last_used` | Last used device info |\n| `get_primary_training_device` | Primary training device |\n| `get_device_solar_data` | Solar charging data |\n| `get_gear` | All tracked gear/equipment |\n| `get_gear_stats` | Usage stats for a gear item |\n| `get_goals` | Active goals and progress |\n| `get_earned_badges` | Earned badges and achievements |\n| `get_workouts` | Saved workouts |\n| `get_workout` | Specific workout by ID |\n\n## Authentication\n\nUses Garmin Connect credentials (email/password) via environment variables. OAuth tokens are cached in `~/.garmin-mcp/` to avoid re-authentication on each request.\n\n### MFA (Multi-Factor Authentication)\n\nIf your Garmin account has MFA enabled (required for devices with ECG capabilities), you need to run the interactive setup once before using the MCP server:\n\n```bash\nGARMIN_EMAIL='you@email.com' GARMIN_PASSWORD='yourpass' npx -y @nicolasvegam/garmin-connect-mcp setup\n```\n\nThis will:\n1. Log in to Garmin Connect\n2. Prompt you for the MFA code sent to your email or authenticator app\n3. Save OAuth tokens to `~/.garmin-mcp/`\n\nAfter setup, the MCP server will use the saved tokens automatically — no MFA prompt needed until the tokens expire. When they do, simply run the setup command again.\n\n## Development\n\n```bash\ngit clone https://github.com/Nicolasvegam/garmin-connect-mcp.git\ncd garmin-connect-mcp\nnpm install\nnpm run build\n```\n\nTo test locally:\n\n```bash\nGARMIN_EMAIL=you@email.com GARMIN_PASSWORD=yourpass npm start\n```\n\n## Credits\n\n- API endpoints and authentication flow based on [`python-garminconnect`](https://github.com/cyberjunky/python-garminconnect) by [cyberjunky](https://github.com/cyberjunky)\n\n## License\n\nMIT\n","readmeFilename":"README.md"}