Garmin Local MCP server
io.github.anup-shesh/garmin-local-mcp·v0.1.9·9 starsLocal-first Garmin data warehouse: sync once to SQLite, analyze trends and correlations offline.
9 stars141 downloads/wk
Reviews
Write oneNobody has reviewed Garmin Local yet.
If you have run it, two minutes of your experience saves the next person an afternoon.
Garmin Local tools (13)
write = sends, deletes, buys or postsRead from the package source without running it. The installed server may list more.
anomaliesOutlier days (>= z standard deviations from the range mean) and sustained streaks (5+ consecutive days on one side of it).
auth_statusCheck whether stored Garmin Connect tokens exist.
baselinesPersonal mean +/- sd band per metric over a trailing window (default 28 days; default metrics: resting_hr, hrv, sleep_score, skin_temp_dev_c, stress_avg, steps).
circadianEstimate when this user's body clock wants them to wake up, and test that estimate against their own Garmin history. Read-only: analyses synced sleep times locally and changes nothing.
correlatePearson/Spearman correlation between two metrics (default: last 30 days).
gapsMissing days per table plus unresolved sync errors (default: first synced date through yesterday).
get_activityFull stored summary row for one activity by id (from list_activities).
get_dayOne merged view of a single day (YYYY-MM-DD): wellness, sleep, HRV, training status, activities, and data-quality flags.
import_fitImport one manually exported Garmin wellness FIT bundle (folder of .fit files) - zero-auth offline ingest.
list_activitiesList recent activities newest-first as a compact table, filterable by type (e.g. 'running'), date range, and minimum distance.
query_metricsColumnar time series for one or more metrics (e.g. resting_hr, sleep_score, steps) between two dates.
syncFetch up to 60 days from Garmin Connect into the local store.
sync_statusShow local data coverage per table, last sync time, and pending sync errors.
Public scan report
scanner v0.1.10 · 2026-10-16 · same rubric, same numbers if you re-run it
- Code scan20 source files scanned25/25
- –Live reliabilityno gateway calls yet and no remote to proben/a
- –Tool poisoningtools not inspected (local package is not executed); not countedn/a
- Auth qualitylocal package, no credentials required12/15
- Maintenancelast push 12 days ago15/15
- Maintainer identityregistry namespace matches repository owner6/10
How Garmin Local compares
Against every graded Databases MCP server, from our own scans and uptime checks. Updated after each scan run.
- Safety score
- 89/100
- higher than 80% of 802 Databases servers
- Tools
- 13
- the typical Databases server has 8
- Tools that change things
- 0%
- typical: 9%. Fewer write tools means less an agent can break
- GitHub stars
- 9
- more than 79% of 602 Databases servers
- Downloads a week
- 141
- more than 65% of 330 Databases servers with a package
What its tools let an agent do: 10 read · 1 create · 2 change
Release history: 3 versions in the registry since 2026-09-03, latest 2026-10-04, typically one every 23 days.
Install Garmin Local in Claude Code, Cursor or VS Code
claude mcp add garmin-local-mcp -- uvx garmin-local-mcp
What the publisher says
From the Garmin Local repository's README, as published. We do not edit it. Read it on GitHub
<!-- mcp-name: io.github.anup-shesh/garmin-local-mcp -->
garmin-local-mcp
Local-first Garmin data warehouse with an analysis-grade MCP server. Sync once, analyze forever, even when the API is down.
Why another Garmin MCP?
Every existing Garmin MCP server follows the same design: a thin live wrapper around Garmin's rate-limited, unofficial API. Each question your AI assistant asks becomes one or more live API calls that return huge raw JSON blobs (a single raw sleep response runs 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 fetched yesterday.
This project inverts the architecture:
immutable raw JSON snapshots plus a SQLite database, in a directory you own.
- Sync once, analyze forever. Incremental sync into a local warehouse:
baselines, and anomaly detection are computed locally and returned as small columnar tables in a single tool call. Typical responses are under 2 KB, so nothing floods the model's context.
- Server-side analysis, compact responses. Trends, correlations, personal
over already-synced history keeps working.
- Offline resilience. An API breakage pauses new syncs only. Every query
wellness FIT messages (sleep score, HRV, skin temperature, sleep stages, naps) ingests manually exported bundles with no login at all. No other Garmin MCP ships this.
- A zero-auth fallback. A standalone decoder for Garmin's undocumented
- Curated tools. 12 composable tools, not 110.
Try it without a Garmin account
If you don't own a Garmin, or just want to see what the tools return before handing over credentials, seed a synthetic store:
pip install garmin-local-mcp
garmin-local-mcp --data-dir ~/.garmin-mcp-demo demo
garmin-local-mcp --data-dir ~/.garmin-mcp-demo serveThat generates 180 days across every table, then serves them over MCP. No login, no network, no account.
The data is generated rather than recorded, but it is not random. A latent recovery factor drives HRV up while resting heart rate goes down, training load raises the next day's resting heart rate, a six-day illness window sits in the middle of the range, and a few sleep nights are deliberately missing. So the analysis tools have something real to find:
syncstatus reports demostore: true on these stores, so an assistant can never present generated numbers as real measurements. The generator is deterministic — --seed reproduces a store exactly, and --days changes the range. demo refuses to overwrite a database it did not generate.
Quickstart
Requires Python 3.12+.
pip install garmin-local-mcpOr run it without installing, via uv:
Shortened. The full README is on GitHub.
Nothing above is checked by us. What we check is on the safety report.
Garmin Local: common questions
- Is Garmin Local MCP server safe?
- Yes, by our scan: it is graded A (89/100). Read the Garmin Local safety report
- How do I install Garmin Local?
- It runs on your machine. Copy the Claude Code, Cursor, VS Code or Claude Desktop config from the install section.
- Does Garmin Local need an API key?
- No secret keys are declared. It reads 1 setting from the environment.
- Is Garmin Local maintained?
- The last commit was 32 days ago (2026-10-04). The latest release is v0.1.9.
- What can I use instead of Garmin Local?
- Servers from other publishers that do the same job: Remem MCP server, open-memex MCP server and SAME - Stateless Agent Memory Engine MCP server. Compare all Garmin Local alternatives.
- How does Garmin Local compare with other Databases MCP servers?
- safety score 89/100 (higher than 80% of 802 Databases servers); tools 13 (the typical Databases server has 8); tools that change things 0% (typical: 9%. Fewer write tools means less an agent can break). Full comparison.
Alternatives to Garmin Local
Same job from other publishers: the closest match first, then the best rated.
- RememLocal-first automatic memory for Claude Code and Codex: capture, distill, recall from SQLite.not reviewedEstablishedB
- open-memexLocal-first memory for AI coding agents — Markdown + SQLite FTS5, shared across editors via MCP.not reviewedGrowingB
- SAME - Stateless Agent Memory EnginePersistent memory for AI coding agents. Local-first SQLite + vector search. 17 MCP tools.not reviewedGrowingB
- remem-mcp — Local-first MCP Memory + CodeGraph + WikiLocal-first memory for AI coding agents. Memory + CodeGraph + Wiki in one SQLite file.not reviewedGrowingB
- LoreConvoLocal-first persistent session memory for Claude Code and other agents. SQLite + FTS5, no cloud.not reviewedGrowingB