Garmin Read-Only MCP

Garmin Read-Only MCP

A read-only MCP server that synchronizes Garmin Connect summaries into a local SQLite cache and provides tools to query daily activity, recent activities, and recovery data.

Category
访问服务器

README

Garmin Read-Only MCP

A deliberately narrow Garmin Connect integration for local use with Hermes Agent. It synchronizes selected Garmin summaries into an owner-only SQLite cache, then serves only that normalized cache through three read-only MCP tools.

This project uses the community-maintained python-garminconnect client and undocumented Garmin Connect endpoints. It is not affiliated with or supported by Garmin. Endpoints may change, and automated access may carry account or terms-of-use risk. The official Garmin Connect Developer Program remains the preferred route for approved business integrations.

Security model

The design separates network access from the MCP process:

  1. garmin-readonly-auth performs a one-time interactive login in a local terminal. Password and MFA input are hidden and never accepted as command arguments.
  2. garmin-readonly-sync loads reusable local session material, fetches a bounded date window, strips upstream fields, and writes normalized summaries to SQLite.
  3. garmin-readonly-mcp imports neither the Garmin client nor session material. It reads only the normalized SQLite cache and refuses caches that are symlinks, non-regular, not owned by the current user, or accessible by group/other users.

The default state directory is:

~/.local/share/garmin-readonly-mcp/
├── tokens/          # Garmin session material, mode 0700/0600
└── cache.sqlite3    # normalized cache, mode 0600

Set the non-secret GARMIN_READONLY_HOME environment variable to use another root. Never place the state directory inside the repository.

Data scope

The cache and MCP expose only:

  • Daily total, active, and BMR/resting calories
  • Steps and resting heart rate when available
  • Activity type, start time, duration, distance, and calories
  • Sleep duration/score, Body Battery, nightly HRV/status, and training readiness when available

They deliberately exclude:

  • Garmin profile and social data
  • Account identifiers and activity IDs
  • Device details
  • GPS coordinates, routes, and FIT/GPX/TCX files
  • Weight and body composition
  • Raw Garmin responses
  • Upload, update, schedule, or deletion operations
  • Generic or arbitrary Garmin API access

Garmin calorie values are activity context, not a command to increase food intake.

Requirements

  • Linux or another Unix-like environment with private file permissions
  • Python 3.12+
  • uv
  • A Garmin Connect account

Install

git clone https://github.com/alexpomsft/garmin-readonly-mcp.git
cd garmin-readonly-mcp
uv sync --frozen

Authenticate locally

Run this in a private local terminal—not Telegram, chat, shell history, or a shared screen:

uv run garmin-readonly-auth

The command asks locally for email, hidden password, and hidden MFA if Garmin requires it. It stores reusable session material but not the password.

Synchronize

The default synchronizes today and yesterday:

uv run garmin-readonly-sync

A bounded historical window can be requested:

uv run garmin-readonly-sync --end-date 2026-08-18 --days 14

--days must be between 1 and 31. Provider errors are replaced with a fixed public message so raw Garmin responses and authentication details are not echoed.

Run the MCP server

After at least one successful synchronization:

uv run garmin-readonly-mcp

The stdio server exposes exactly:

  • get_daily_activity(date: YYYY-MM-DD)
  • get_recent_activities(days: 1..31 = 7)
  • get_recovery_summary(date: YYYY-MM-DD)

Tool schemas reject undeclared arguments.

Connect to Hermes Agent

Use Hermes' MCP command rather than editing config.yaml manually:

hermes mcp add garmin-readonly \
  --command /absolute/path/to/garmin-readonly-mcp/.venv/bin/garmin-readonly-mcp
hermes mcp test garmin-readonly

Restart Hermes after adding the server so its tools are discovered. No credentials or session-token paths are passed to the MCP configuration; it uses the private default state root. If GARMIN_READONLY_HOME is customized, pass only that non-secret setting with hermes mcp add ... --env GARMIN_READONLY_HOME=/private/path.

Development and verification

uv sync --frozen
uv run pytest --cov=garmin_readonly_mcp --cov-report=term-missing
uv run ruff check .
uv run mypy src tests
uv run pip-audit

The implementation was developed with failing tests first. CI runs the same test, lint, type-check, and dependency-audit gates.

Limitations

  • Garmin Connect endpoints are reverse-engineered and can break without notice.
  • Garmin may rate-limit, challenge, or lock automated clients.
  • Some recovery fields are unavailable on some devices or dates and return null.
  • The local cache is a snapshot; schedule garmin-readonly-sync separately if fresher data is needed.
  • This project does not automatically modify calorie targets or provide medical advice.

See SECURITY.md for credential handling and vulnerability reporting.

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选