Garmin MCP
MCP server that exposes Garmin Connect health and activity data (steps, sleep, stress, activities, etc.) via tools for querying, analysis, and visualization.
README
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.
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
Neon Database
MCP server for interacting with Neon Management API and databases
E2B
Using MCP to run code via e2b.
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.