Skip to content

lokranjanp/garminmcp

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

33 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Garmin MCP

MCP server that exposes Garmin Connect data (steps, sleep, stress, activities, etc.) via garth and fastMCP. Auth: set GARMIN_EMAIL and GARMIN_PASSWORD in env, or use a saved session at ~/.garth (or GARTH_SESSION_PATH).

MCP config

Use full path to uvx (e.g. which uvx). Example for Claude Desktop (~/Library/Application Support/Claude/claude_desktop_config.json) or Cursor:

{
  "mcpServers": {
    "garmin": {
      "command": "/Users/YOUR_USER/.local/bin/uvx",
      "args": ["--refresh", "--from", "git+https://github.com/lokranjanp/garminmcp", "garmin-mcp"],
      "env": {
        "GARMIN_EMAIL": "your-garmin-email@example.com",
        "GARMIN_PASSWORD": "your-password",

        "SMTP_HOST": "smtp.gmail.com",
        "SMTP_PORT": "587",
        "SMTP_USER": "your-email@gmail.com",
        "SMTP_PASSWORD": "your-app-password",
        "SMTP_TO": "recipient@example.com",
        "OUTPUT_DIR": "/Users/user.mac/garmin_data/",

        "LLM_API_BASE": "http://localhost:1234/v1",
        "LLM_API_KEY": "lm-studio",
        "LLM_MODEL": "your-loaded-model-name"
      }
    }
  }
}

From PyPI (if published): "args": ["garmin-mcp"].

Commands

uv sync                    # install from uv.lock
uv run garmin-mcp          # run server locally
uv lock                    # refresh lock after changing pyproject.toml

Tools (17 base + 3 opt-in)

# Tool Description
Utility
1 garmin_current_datetime Current date/time (local & UTC, ISO, weekday)
Auth
2 garmin_login Log in and save session to disk
3 garmin_resume_session Load saved session
User
4 garmin_user_profile Profile (display name, timezone, etc.)
5 garmin_user_settings Settings (units, preferences)
Metrics (daily/weekly series)
6 garmin_metric Fetch daily or weekly stat series. metric: steps, sleep, stress, hydration, intensity_minutes, hrv. period: daily or weekly. count: number of periods.
Detailed health data
7 garmin_data Fetch detailed data (single day or list). data_type: sleep, hrv, weight, body_battery_events, body_battery_stress. Use day for single-day or end_date+days for a range.
Activities
8 garmin_activities List activities (start, limit)
9 garmin_activity_details Full details for one activity by ID
10 garmin_activity_types List all activity types (type IDs and keys)
Biomarkers & summary
11 garmin_daily_summary One-day wellness: RHR, HR, stress, steps, SpO2, respiration, body battery, calories
12 garmin_resting_heart_rate Resting heart rate for a date range
13 garmin_summary_report Comprehensive biomarker + activity report (daily/weekly/biweekly/monthly)
Delivery
14 garmin_email_summary Generate summary report and send via SMTP email (HTML + plain-text)
Statistical analysis
15 garmin_stats Run a stats operation on numeric data. operation: describe, percentiles, correlation, trend, compare, moving_average, outliers.
Visualization (matplotlib)
16 garmin_viz Render a chart. chart_type: line, bar, scatter, histogram, pie, heatmap, multi_line. Returns file path + base64 PNG.
Raw API
17 garmin_connect_api Call any Connect API path (GET/POST)
LIDA / AI visualization (opt-in, requires LLM_API_KEY)
18 garmin_lida_visualize AI-driven chart generation -- auto-picks the best chart type
19 garmin_lida_goals Suggest N visualization goals for a dataset (EDA)
20 garmin_lida_explain Explain a visualization's code in natural language

Dates: use YYYY-MM-DD; omit end date for "today" where supported.

SMTP env vars (for delivery tools)

Variable Required Description
SMTP_HOST yes SMTP server (e.g. smtp.gmail.com)
SMTP_PORT no Port, default 587 (STARTTLS)
SMTP_USER yes Login username / email
SMTP_PASSWORD yes Password or app-password
SMTP_FROM no Sender address (defaults to SMTP_USER)
SMTP_TO no Default recipient(s), comma-separated
SMTP_USE_SSL no "true" for implicit SSL (port 465); default uses STARTTLS

LLM env vars (for LIDA visualization tools -- opt-in)

The 3 LIDA tools (garmin_lida_*) are only registered when LLM_API_KEY is set. If omitted, the server loads with 17 tools instead of 20, reducing context overhead for the AI client.

Variable Default Description
LLM_PROVIDER "openai" LLM provider for LIDA
LLM_API_BASE (none) Custom endpoint -- set to http://localhost:1234/v1 for LM Studio
LLM_API_KEY (none) API key (use "lm-studio" for LM Studio). Setting this enables LIDA tools.
LLM_MODEL "gpt-4o-mini" Model name (for LM Studio: whatever model is loaded)

Visualization output is saved to output/viz/ (or OUTPUT_DIR env var) and also returned as base64 PNG in the JSON response.

About

My personal MCP for understanding personal health and fitness trends through my Garmin Instinct 3

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages