Skip to main content
Glama
Garmin Connect MCP

Garmin Connect MCP

by graiola

A personal, read-only MCP connector for the official Garmin Connect Personal API, supporting MCP over stdio and local Streamable HTTP. Built to help explore workouts and fitness trends—not to diagnose medical conditions.

Status: Implementation and synthetic local tests are available. The source is published at graiola/garmin-connect-mcp, but no live Garmin account, Secure MCP Tunnel, or ChatGPT connection has been verified. Never provide your Garmin API key in chat or commit it to the repository.

Available tools

Tool

Data returned

garmin_list_activities

Paginated activities, optionally filtered by date and type

garmin_get_activity

Raw activity summary and details

garmin_get_activity_workouts

Associated workouts, containing only fields actually returned by Garmin

garmin_get_health_range

Weight, steps, stress, sleep, HRV, Body Battery, and daily summaries

garmin_get_day_detail

Sleep, HRV, or heart-rate details for a day

garmin_connector_status

Capabilities, local date, and version; does not validate credentials

Dates are explicit (YYYY-MM-DD), with Europe/Rome as the default time zone. Health ranges are capped at 31 inclusive days, and activities at 50 per page. There are no Garmin write operations, deletions, workout planning, or uploads.

Strength-training limitation: Garmin's official workouts endpoint does not guarantee actual performed sets, edited exercise names, weights, or reps. This connector does not decode FIT files or fabricate missing data. Compare one of your own strength sessions against Garmin Connect before relying on it instead of a detailed export. Loads on different machines are not automatically comparable.

Related MCP server: garmin-mcp

Install (Linux/macOS)

Requires Python 3.11+ and HTTPS access to Garmin. From the repository root:

python3 -m venv .venv
source .venv/bin/activate
python -m pip install -e '.[dev]'
python -m pytest -q

requirements-tested.txt records the versions used in the original local tests. It is not a cross-platform lockfile; CI checks the declared dependency ranges.

Configure credentials locally

garmin-connect-mcp configure
garmin-connect-mcp doctor

configure securely prompts for your Garmin Personal API key without echoing it and creates two files outside the repository:

  • ~/.config/garmin-connect-mcp/api-key: your Garmin key.

  • ~/.config/garmin-connect-mcp/http-token: an independent random token for local HTTP.

Files use 0600 permissions on POSIX systems. Secret values are never printed. doctor checks authentication and performs one activity read, reporting only the outcome—not the activity data. If it fails, do not paste the key into chat.

Secret-manager alternatives are GARMIN_PERSONAL_API_KEY and GARMIN_PERSONAL_API_KEY_FILE (the explicit file takes precedence). GARMIN_MCP_ACCESS_TOKEN and GARMIN_MCP_ACCESS_TOKEN_FILE instead secure access to the connector's local HTTP server. Do not reuse the Garmin key as the MCP bearer token. .env files are not loaded automatically.

Connect to ChatGPT

GitHub hosts the source, not a running MCP server. You need a machine running the connector when you request data and a supported connection method for your ChatGPT account.

The recommended approach is an authenticated Secure MCP Tunnel. Your Garmin key stays on your own host, rather than being exposed through a public HTTP endpoint. This requires a tunnel_id, an independent OpenAI runtime key, and the appropriate account/workspace permissions; availability for your account has not been verified.

See the complete ChatGPT connection guide.

# After installing the official tunnel-client and creating your private tunnel:
./scripts/tunnel_stdio.sh tunnel_YOUR_ID

The script prompts locally for the OpenAI tunnel runtime key unless it is already in the environment. This is not the Garmin API key. It then configures, checks, and runs the tunnel in the foreground. In ChatGPT, use Plugins → + → Add custom MCP server → Connection: Tunnel.

For a local MCP/Codex client, run the stdio transport directly:

/path/to/garmin-connect-mcp/.venv/bin/garmin-connect-mcp stdio

To test local HTTP instead:

garmin-connect-mcp http --port 8765

It listens only on 127.0.0.1 and requires the independent bearer token. Never expose this mode through an unauthenticated public HTTP tunnel. It is not an OAuth authorization server.

Repository and security

The GitHub repository is currently public. Do not push any Garmin key, OpenAI token, personal health data, FIT export, or captured response. The scripts/publish_github.sh helper only bootstraps a new private repository and intentionally refuses to overwrite an existing one; it is not used for updates to this repository.

  • Only allowlisted official Garmin endpoints are called; no scraping, password login, reverse-engineered sessions, cookies, or arbitrary URLs.

  • Keys are exchanged for short-lived tokens when needed; tokens remain in memory. A 401 triggers at most one fresh exchange and retry.

  • Requests have bounded timeouts, concurrency, retries, and response sizes.

  • GPS coordinates and selected identifiers are filtered recursively. This is not full anonymization: activity names and free-form notes can contain personal information.

  • The connector does not independently send data to an LLM. When you call its tools from ChatGPT, responses pass through the connected services and chat.

  • Errors are sanitized; authorization headers and response bodies are not logged.

  • The lightweight, tools-only MCP transport does not implement persistent SSE, OAuth, resources, prompts, or experimental tasks.

  • Requests run on demand; there is no background monitoring or scraping.

Read SECURITY.md, the API contract, and the verification record. This is a single-user personal connector, not a multiuser or public health-data service.

Acceptance prompts after connecting

  1. "Show my three latest activities without making fitness conclusions."

  2. "Open activity X and show only measurements that are actually available."

  3. "Compare two swims, separating moving time, elapsed time, and rest."

  4. "Read my last 14 days of weigh-ins, preserve original units, and flag gaps."

Verify at least one activity against Garmin Connect. Passing local mocked tests does not prove real data accuracy or compatibility with your ChatGPT account.

Available Tools

6 tools
garmin_connector_statusA
Read-onlyIdempotent

Report connector capabilities and local date without contacting Garmin or revealing any key. This does not validate authentication or account coverage.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With readOnlyHint, idempotentHint and destructiveHint already declared, the description still adds real value: no network call to Garmin, no key exposure, and explicit limits (does not validate auth or account coverage). Minor tension with openWorldHint=true for a local-only operation, but not an outright contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the capability statement and followed by the key behavioral caveats. No filler or redundant restatement of the title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a no-parameter status tool, the description covers the essentials including safety-relevant behavior. The one gap is that it never indicates what the returned 'capabilities' consist of, and there is no output schema to fill that in.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Zero parameters, so there is nothing for the description to disambiguate; the baseline of 4 applies. Nothing in the description misleads about inputs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: reports connector capabilities and the local date. The clause 'without contacting Garmin' implicitly distinguishes it from the data-fetching siblings (garmin_get_activity, garmin_list_activities, etc.), though no sibling is named explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: an agent can infer this is a diagnostic/pre-flight check. The one guideline given is negative ('does not validate authentication or account coverage'), which usefully prevents misuse for auth checks, but there is no positive statement of when to call it over the sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

garmin_get_activityA
Read-onlyIdempotent

Read the original Garmin summary/details for an activity ID from garmin_list_activities. Preserve units, elapsed versus moving time, and session structure. Do not infer swimming continuity from average pace.

NameRequiredDescriptionDefault
activity_idYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. Beyond that, the description adds real behavioral context: the response is the 'original' Garmin data with units and elapsed-versus-moving-time semantics preserved, plus an explicit anti-inference rule about swimming continuity from average pace. It does not discuss error behavior for invalid IDs, which keeps it from a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, each earning its place: identity and provenance first, fidelity caveats second, anti-inference warning last. No filler or restatement of the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter read tool with full annotation coverage and no output schema, the description adequately conveys what comes back (details/summary) and how to interpret it. A brief note on failure modes for unknown IDs would make it fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one parameter and schema description coverage is 0%, so the description carries some burden. It usefully explains the provenance of activity_id ('from garmin_list_activities'), which the schema does not, but it adds nothing about the expected integer format or validity constraints.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a concrete verb and resource ('Read the original Garmin summary/details for an activity ID') and explicitly contrasts with the sibling garmin_list_activities as the source of the ID. An agent can distinguish this detail-fetch from the list, workouts, and day-detail siblings without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly implies when to use it: after garmin_list_activities, to fetch full details for one activity. It does not explicitly exclude siblings like garmin_get_activity_workouts or garmin_get_day_detail, so the boundary with those is left to inference, but the primary usage path is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

garmin_get_activity_workoutsB
Read-onlyIdempotent

Read Garmin's workouts associated with an activity. Availability and schema vary: this is NOT a guarantee of executed sets, edited exercise names, reps or weights. Return only what the API supplies; do not invent missing strength records.

NameRequiredDescriptionDefault
activity_idYes

TDQS

B3.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive and openWorld, so the safety profile is covered. The description adds genuinely useful context beyond that: availability and schema vary, and the result is not a guarantee of executed sets, edited exercise names, reps or weights. That warns the agent about sparse or inconsistent payloads in a way annotations cannot.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the purpose before the caveats. The closing 'do not invent missing strength records' is an agent instruction that is slightly out of place for a definition but still earns its place as a data-integrity warning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the burden of explaining what comes back. It does say workouts are returned and may be incomplete, but gives no sense of response shape or what happens when an activity has no associated workouts. Adequate for a simple one-parameter read, but not complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the single required parameter, activity_id, carries no description in the schema. The description only implies the id refers to an activity; it does not say where to obtain it (e.g., from garmin_list_activities) or what format is expected. With one parameter and no coverage, the description should compensate and largely does not.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: read Garmin workouts tied to an activity. That resource is clearly distinct from the sibling tools (list_activities, get_activity, get_day_detail), so an agent can tell which one fetches workout data. It stops short of naming a sibling explicitly, which keeps it from a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied rather than stated: use it to fetch workouts for one activity id. The description spends its guidance budget on data-quality caveats (varying availability and schema) rather than when to choose this over garmin_get_activity. No explicit exclusions or alternatives are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

garmin_get_day_detailA
Read-onlyIdempotent

Read original sleep, HRV or heart-rate data for one explicit calendar date. A missing measurement is not zero. HRV/heart rate alone cannot diagnose recovery or health.

NameRequiredDescriptionDefault
dateYes
metricYes

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive, open-world behavior, so safety is covered; the description adds genuinely new semantics on top of that. 'A missing measurement is not zero' discloses data-sparsity behavior that an agent would otherwise misread, and the diagnostic caveat sets interpretation limits. It still says nothing about return shape or units.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences with the core purpose front-loaded, followed by two caveats. Every sentence is short and the caution lines do real work, though the diagnostic disclaimer sits close to boilerplate.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter read tool the description is adequate, but there is no output schema and the description never indicates what a day-detail payload contains (sleep stages vs. HRV samples, units, granularity). An agent knows how to call it but not what to expect back.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the load; it clarifies that the date must be an explicit single calendar date and enumerates the three metrics matching the enum. Beyond that, it adds no format, timezone, or selection detail for the two required parameters, so the gain is modest for self-evident names.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource ('Read original sleep, HRV or heart-rate data') and constrains scope to 'one explicit calendar date', which implicitly separates it from the range-based sibling garmin_get_health_range. It does not name that sibling outright, so the differentiation is inferred rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: the single-date phrasing hints that this is the tool for one day's raw values rather than a range, but no explicit when-to-use or when-not-to-use statement is given, and no alternative tool is named. The remaining sentences are interpretive caveats rather than routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

garmin_get_health_rangeA
Read-onlyIdempotent

Read weight (including BIA estimates if supplied), steps, stress, sleep summaries, HRV summaries, Body Battery, or daily summaries over at most 31 inclusive calendar days. Preserve original units; values are device estimates, not diagnoses or proof of muscle gain/loss.

NameRequiredDescriptionDefault
metricYes
end_dateYes
start_dateYes

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive, and openWorld, so the safety profile is covered. The description still contributes real behavioral context beyond them: the hard 31-day boundary, the unit-preservation contract, and the caveat that values are device estimates rather than diagnoses. It stops short of describing what happens when the range exceeds 31 days or how partial data days are handled.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two dense, front-loaded sentences: scope and limits first, interpretive caveats second. The metric enumeration largely restates the schema enum, which is mild redundancy, but no sentence is filler and the 31-day constraint is placed where an agent will see it.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only, three-required-parameter tool with an enum, the scope and caveats are adequate to call it correctly. With no output schema, the description still says nothing about the shape of returned data or how the seven metric families differ in what they yield, which is the main remaining gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden, and it does add nuance over the bare enum by explaining weight includes BIA estimates if supplied and that sleep/HRV figures are summaries. It adds nothing about date semantics — ordering, inclusivity of endpoints, timezone, or missing-day handling — and does not distinguish what 'daily_summary' aggregates relative to the individual metrics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb (Read) plus the exact resources (weight, steps, stress, sleep, HRV, Body Battery, daily summaries) and bounds the operation to at most 31 inclusive calendar days, so an agent knows exactly what it retrieves. It does not name or contrast any sibling, such as garmin_get_day_detail for a single day, leaving the range-vs-day split implicit despite the range constraint hinting at it.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 31-calendar-day cap functions as an implied usage rule and signals this is a multi-day range reader rather than a single-day lookup. However, there is no explicit when-to-use or when-not-to-use guidance and no mention of garmin_get_day_detail as the single-day alternative, so routing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

garmin_list_activitiesA
Read-onlyIdempotent

Read a page of Garmin activities. Use offset/limit for pagination; stop when fewer than limit records are returned. Dates use the account's calendar dates. activity_type is Garmin's type key (e.g. running, lap_swimming, strength_training), not an exercise name. No inferred fitness conclusions.

NameRequiredDescriptionDefault
limitNo
offsetNo
end_dateNo
start_dateNo
activity_typeNo

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover safety (readOnly, idempotent, non-destructive), so the description's added value is in semantics: dates are the account's calendar dates, activity_type is Garmin's key rather than an exercise name, and results must not be turned into inferred fitness conclusions. That last constraint is a genuine behavioral rule an agent could otherwise violate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Five short sentences, front-loaded with the purpose, then pagination mechanics, then two disambiguation notes and one behavioral constraint. No filler and nothing repeated from the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description never indicates what a returned activity record contains, so the agent cannot anticipate the response shape. Date-bound inclusivity and the limit cap are also left out, though the pagination termination rule is a helpful substitute for a documented response envelope.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description has to carry the burden, and it does for four of five parameters: offset/limit for pagination, start_date/end_date as account calendar dates, and activity_type as a Garmin type key with concrete examples. It does not mention the limit ceiling of 50, the defaults, or whether date bounds are inclusive.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource, 'Read a page of Garmin activities,' which makes clear this is a paginated list operation. 'A page of' implicitly distinguishes it from the single-record sibling garmin_get_activity, though the description never names alternatives explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Pagination usage is spelled out well: use offset/limit and stop when fewer than limit records come back. However, there is no explicit guidance on when to choose this tool over garmin_get_activity or garmin_get_activity_workouts, so the agent must infer the routing from 'a page of' alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 6 tool updatesv0.1.0
    • First observedgarmin_connector_status
    • First observedgarmin_get_activity
    • First observedgarmin_get_activity_workouts
    • First observedgarmin_get_day_detail
    • First observedgarmin_get_health_range
    • First observedgarmin_list_activities

TDQS

A3.7/5.0

Scored across 6 tools

Disambiguation4/5

Most tools map to distinct resources/actions (list vs. get activity, workouts tied to an activity, connector status). The only real overlap is between garmin_get_health_range and garmin_get_day_detail, since both can return sleep/HRV data for a single day; the descriptions distinguish summaries from original per-date data, which mostly resolves it.

Naming Consistency4/5

All names share the garmin_ prefix and follow a verb_noun pattern (get_activity, list_activities, get_health_range, get_day_detail). garmin_connector_status is a minor deviation lacking a verb, but it is still clearly readable and predictable.

Tool Count4/5

Six tools is a lean, well-scoped surface for a read-only Garmin data connector, and each tool covers a distinct access pattern. Slightly thin, but no tool feels redundant.

Completeness4/5

The core read lifecycle is covered: status, activity listing/pagination, activity details, activity workouts, and ranged/per-day health metrics. Minor gaps exist (no explicit workout library, device/profile info, or dedicated splits/streams access), but agents can work around them via garmin_get_activity.

Maintenance

ActivityMaintained
ResponsivenessSyncing

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    Connects MCP clients to Garmin Connect data, enabling queries about activities, sleep, heart rate, body battery, and training status.
    16
    2
    MIT
  • A
    license
    B
    quality
    B
    maintenance
    Enables retrieval of Garmin Connect data such as activities, sleep, heart rate, and body battery levels using unofficial API through MCP tools.
    4
    MIT
  • F
    license
    A
    quality
    D
    maintenance
    Provides read-only access to your Garmin Connect health data, including sleep, HRV, body battery, stress, training readiness, and activities, through an MCP server.
    2
    14
    -