Power your agent
การติดตั้งจากผู้เผยแพร่ ไม่ใช่เอนด์พอยต์ของ PlugMCP
URL แบบรีโมตหรือคำสั่งบนเครื่องของคุณ? การติดตั้งสองแบบต่างกันอย่างไร
รันบน PlugMCP
A new server you create. It is not this listing's official endpoint. Use the publisher install when you want their URL and their credentials.
เปิดIt's YOUR data. Take it back. One command. All your Garmin data. Local SQLite + FIT files. Export to CSV, JSON, GPX, TCX. AI-ready via MCP.
Garmin makes it nearly impossible for individuals to access their own health data programmatically. There is no public API. The official "developer program" is restricted to approved businesses only. And in March 2026, Garmin deployed aggressive Cloudflare protections that broke every single community library — garth (deprecated), python-garminconnect (broken auth), and all downstream tools like Home Assistant integrations.
You paid for the hardware. You generated the data with your body. You should be able to access it.
This project gets your data out of Garmin Connect and into a local SQLite database where you own it and AI can analyze it through an MCP server for Claude Code.
50 tables, 10+ years of history, 45 MCP tools for AI analysis. Your data stays on your machine.
Nobody should buy Garmin products until they open their API to the people who paid for the hardware.
# macOS
brew install nrvim/tap/garmin-givemydata
# pip (Linux / Windows / macOS)
pip install garmin-givemydata
# or clone
git clone https://github.com/nrvim/garmin-givemydata.git
cd garmin-givemydata
bash setup.sh # macOS / Linux
setup.bat # Windows
garmin-givemydata # fetches all historical data + FIT files
First run prompts for credentials, launches a headless browser, and fetches your full history (~30 min for 10 years). After that, daily syncs take seconds.
Add the MCP server to Claude Code, Claude Desktop, or any MCP client. The config depends on how you installed:
Claude Code (one-liner) — registers the server at user scope so it's available in every project:
# pip / brew install
claude mcp add -s user garmin -- garmin-mcp
# git clone
claude mcp add -s user garmin \
-e GARMIN_DATA_DIR=/absolute/path/to/garmin-givemydata \
-- /absolute/path/to/garmin-givemydata/venv/bin/python \
/absolute/path/to/garmin-givemydata/run_mcp.py
Verify with claude mcp list. Skip the manual JSON below.
Homebrew or pip install — garmin-mcp is already in your PATH:
{
"mcpServers": {
"garmin": {
"command": "garmin-mcp"
}
}
}
Git clone — use absolute paths to the venv and set GARMIN_DATA_DIR so the MCP server finds your database:
{
"mcpServers": {
"garmin": {
"command": "/absolute/path/to/garmin-givemydata/venv/bin/python",
"args": ["/absolute/path/to/garmin-givemydata/run_mcp.py"],
"cwd": "/absolute/path/to/garmin-givemydata",
"env": {
"GARMIN_DATA_DIR": "/absolute/path/to/garmin-givemydata"
}
}
}
}
Note:
GARMIN_DATA_DIRtells the MCP server wheregarmin.dblives. Without it, the server falls back to~/.garmin-givemydata/which may not be where your data is if you cloned to a custom location.
Save this as:
.mcp.json in your project root, or ~/.claude/settings.json under mcpServers for global access~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows)Restart your client and run /mcp to approve the server. Then ask:
"How was my sleep this week?"
"Am I overtraining? Check my HRV and recovery"
"Compare my fitness this month vs last month"
"Give me a full sports medicine health check"
{
"mcpServers": {
"garmin": {
"command": "C:\\Users\\jane\\code\\garmin-givemydata\\venv\\Scripts\\python.exe",
"args": ["C:\\Users\\jane\\code\\garmin-givemydata\\run_mcp.py"],
"cwd": "C:\\Users\\jane\\code\\garmin-givemydata",
"env": {
"GARMIN_DATA_DIR": "C:\\Users\\jane\\code\\garmin-givemydata"
}
}
}
}
Any client supporting MCP stdio transport can connect. For pip/brew: garmin-mcp. For git clone:
/path/to/garmin-givemydata/venv/bin/python /path/to/garmin-givemydata/run_mcp.py
Important: Paths must be absolute — relative paths will not work.
The MCP server gives AI assistants deep access to your health data. Every tool returns data + context — not just numbers, but trend direction, anomaly flags, clinical thresholds, and goal attainment.
garmin-givemydata # smart sync (all data + FIT files)
garmin-givemydata --full # force full historical re-fetch
garmin-givemydata --days 90 # fetch last 90 days
garmin-givemydata --since 2025-01-01 # fetch from specific date
garmin-givemydata --profile health # health metrics only
garmin-givemydata --profile activities # activities + FIT files only
garmin-givemydata --profile sleep # sleep data only
garmin-givemydata --no-files # skip FIT file downloads
garmin-givemydata # parses trackpoints for newly downloaded FIT files by default
garmin-givemydata --no-trackpoints # skip trackpoint parsing during sync
garmin-givemydata --rebuild-trackpoints # full rebuild: reparse all downloaded FIT files
garmin-givemydata --status # check database contents
garmin-givemydata --fit-only --latest # latest FIT file
garmin-givemydata --fit-only --date 2026-03-30 # specific date
garmin-givemydata --fit-only --days 7 # last 7 days
garmin-givemydata --fit-only # all FIT files
garmin-givemydata --export ./output # CSV + JSON
garmin-givemydata --export-gpx ./gpx # GPX (for Strava, Komoot)
garmin-givemydata --export-tcx ./tcx # TCX (for TrainingPeaks)
garmin-givemydata --export-kml ./kml # KML (for Google Earth)
garmin-givemydata --export-laps ./laps # per-activity lap/split CSV
Uses SeleniumBase UC mode (undetected Chrome) for Cloudflare bypass. Requires Google Chrome installed.
Note: cf_clearance is bound to your IP address. If your IP changes, the session expires regardless of profile state. For unattended use, run on a machine with a stable egress IP.
garmin.db # SQLite database (all health + activity data)
browser_profile/ # Browser session (persists ~1 year)
.env # Garmin credentials
fit/ # Original FIT files (lossless)
garmin-givemydata/
├── garmin_givemydata.py # Main entry: smart sync (full or incremental)
├── garmin_client/ # SeleniumBase-based Garmin Connect client
│ ├── client.py # GarminClient (login, fetch, export)
│ └── endpoints.py # API endpoint definitions
├── garmin_mcp/ # MCP server + database layer
│ ├── db.py # SQLite schema (50 tables), upsert helpers
│ ├── server.py # FastMCP server with 45 tools
│ ├── export.py # CSV, JSON, GPX, TCX export
│ ├── import_json.py # JSON → SQLite bulk import
│ └── sync.py # Incremental sync engine
├── run_mcp.py # MCP server entry point
├── garmin.db # Your health data (SQLite, gitignored)
├── fit/ # Your activity files (FIT/ZIP, gitignored)
├── browser_profile/ # Browser session (gitignored)
└── pyproject.toml
Data flow:
Garmin Connect ──→ SQLite (health + activity metrics)
└─→ fit/ (original FIT files, lossless)
SQLite ──→ MCP server (AI queries via 45 tools)
├─→ CSV/JSON (--export)
└─→ GPX/TCX (--export-gpx, --export-tcx)
brew install [email protected]
cd garmin-givemydata
python3.12 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
# Chrome must be installed (https://www.google.com/chrome/)
cp .env.example .env
sudo apt update && sudo apt install python3.12 python3.12-venv
cd garmin-givemydata
python3.12 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
# Chrome must be installed (https://www.google.com/chrome/)
cp .env.example .env
sudo dnf install python3.12
cd garmin-givemydata
python3.12 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
# Chrome must be installed (https://www.google.com/chrome/)
cp .env.example .env
Install Python 3.10+ from python.org — check "Add to PATH".
cd garmin-givemydata
python -m venv venv
venv\Scripts\Activate.ps1
pip install -r requirements.txt
# Chrome must be installed (https://www.google.com/chrome/)
copy .env.example .env
If PowerShell blocks the activate script: Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
"Login failed": Delete the browser profile and run again. For pip/brew: rm -rf ~/.garmin-givemydata/browser_profile. For git clone: rm -rf browser_profile/.
Script crashed: Don't close the Chrome window manually. The tool handles shutdown — killing Chrome mid-run corrupts the profile. Run again (stale locks are auto-cleaned).
"Python not found": Make sure Python 3.10+ is on your PATH. macOS: brew install [email protected]. Ubuntu: sudo apt install python3.12 python3.12-venv.
ensurepip is not available / venv creation fails: Your system Python is missing the venv module. Install the matching package: sudo apt install python3.X-venv (replace X with your minor version — python3 --version to check). On Ubuntu with Python 3.14, that's python3.14-venv. The setup.sh script auto-detects Python but can't auto-install the venv package.
403 or session errors: Session expired (often from IP change — cf_clearance is IP-bound). Delete the browser profile and re-login.
Chrome doesn't open (Linux/SSH): Install Xvfb: sudo apt install xvfb. The tool auto-spawns Xvfb at 1920x1080 when no display is available, or use xvfb-run -a garmin-givemydata.
Session rot over SSH: Run under systemd-run --user --scope or tmux/screen so SSH disconnect doesn't SIGHUP the process. The tool installs signal handlers but a detached session is more reliable.
MCP server "failed to connect": Paths in .mcp.json must be absolute. Test: <path>/venv/bin/python <path>/run_mcp.py
Empty data for some metrics: Training readiness, HRV, body battery, endurance score, hill score, and race predictions require compatible devices (Fenix 7+, Forerunner 265+, Venu 3+, etc.).
Windows: "execution of scripts is disabled": Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
endpoints.py.Open an issue or submit a PR.
Article 20 — Right to Data Portability grants the right to receive personal data in a "structured, commonly used and machine-readable format." This covers raw sensor data (heart rate, sleep, steps, SpO2). Derived metrics (training readiness, fitness age) are covered under Article 15 — Right of Access.
Section 1798.100(d) requires businesses to provide personal information in a "readily useable format that allows the consumer to transmit this information from one entity to another entity without hindrance."
Article 3 explicitly requires IoT manufacturers to make data available "without undue delay, free of charge, and, where applicable, continuously and in real-time." A Garmin watch is an IoT device. The data it generates belongs to the user.
If Garmin provided an open API, this tool would not need to exist.
This tool is unofficial and not affiliated with Garmin. It accesses Garmin Connect using your own credentials to retrieve your own data. Use may violate Garmin's Terms of Service. You assume all risk and responsibility. See the full disclaimer for details.
AGPL-3.0 — Free to use, modify, and distribute. If you build a service using this code, you must keep it open source.
It's YOUR data. Take it back. Get your Garmin Connect data into a local SQLite database and AI ready (MCP server)
เครื่องมือ
ยังไม่มีรายการเครื่องมือ เซิร์ฟเวอร์แบบรีโมตจะได้รายการหลังการตรวจสอบสถานะครั้งแรก
FAQ
คัดลอกคอนฟิก stdio สำหรับ Cursor, Claude Desktop, Claude Code หรือ VS Code ได้ในหน้านี้ คอนฟิกนี้ใช้การติดตั้งของผู้เผยแพร่ ไม่ใช่พร็อกซีของ PlugMCP
ระเบียนนี้ไม่ได้ระบุตัวแปรสภาพแวดล้อมที่จำเป็น
Garmin Givemydata ทำงานแบบโลคัลผ่าน stdio
ตรวจสอบล่าสุดเมื่อ 2026-10-28 It's YOUR data. Take it back. Get your Garmin Connect data into a local SQLite database and AI ready (MCP server)