A local-first Garmin data warehouse with an analysis-grade MCP server. Sync once, analyze forever, even when the API is down.
Most Garmin MCP servers are built the same way: a thin live wrapper around Garmin's rate-limited, unofficial API. Every question your AI assistant asks becomes one or more live calls that return huge raw JSON blobs, a single sleep response is around 230 KB. Multi-month questions like "how does my sleep correlate with training load?" are impractical, and when Garmin changes its auth (as it did in March 2026, breaking the whole ecosystem), those servers go completely dark, even for data they already pulled yesterday.
garmin-local-mcp inverts the architecture.
Once your history is synced, Claude can answer questions like these from the local warehouse in a call or two:
I wanted to actually reason over my own health data, not just glance at a dashboard. That means multi-month correlations and baselines an API wrapper can't practically deliver, and it means the data has to survive Garmin breaking its own auth. Owning a local copy turns my Garmin history into something I can query like a database, for as long as I keep it.
It's a Python package (pip install garmin-local-mcp). You log in once (MFA supported; tokens persist locally), backfill your history with a resumable, rate-limit-friendly sync, and register the server with any stdio MCP client. With Claude Code:
claude mcp add --scope user garmin -- garmin-local-mcp serve
Everything lives in one directory you own (~/.garmin-mcp by default). Only two of the twelve tools write anything, and only inside that directory. MIT licensed.