Garmin Cache MCP Server
Enables multi-user Garmin Connect API with local SQLite caching, providing activity, daily summary, and heart rate data via MCP tools.
README
Garmin Cache System - Multi-user Setup Guide
Multi-user Garmin Connect API med lokal SQLite caching och MCP support.
Features
- ✅ Multi-user support - Flera Garmin-konton
- ✅ Auto-login från .env - Autentisera vid första start
- ✅ 2FA support - Skriv MFA-kod i terminalen
- ✅ Separata tokens - Varje användare har egen cache
- ✅ Local caching - Minimerar API-anrop
- ✅ MCP integration - Claude Desktop, Open WebUI, etc
Setup - 3 enkla steg
1️⃣ Klona och installera
git clone https://github.com/lddlinden/garmin-cache-system.git
cd garmin-cache-system
# Python
python3 -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -r requirements.txt
# Node.js (för MCP senare)
npm install
2️⃣ Skapa .env med dina användare
Kopiera .env.example och lägg till dina Garmin-konton:
cp .env.example .env
Redigera .env:
GARMIN_USERS=ana:ana@mail.se:PASSWORD1,john:john@mail.se:PASSWORD2
BACKEND_HOST=127.0.0.1
BACKEND_PORT=8000
Format: alias:email:password,alias:email:password
3️⃣ Starta backend (första gången)
python backend.py
Första gången:
============================================================
🔐 GARMIN FIRST-TIME SETUP
============================================================
📝 Registering ana (ana@mail.se)...
🔑 Authenticating ana...
📱 MFA code required (check email/authenticator): 123456
✅ ana ready!
📝 Registering john (john@mail.se)...
🔑 Authenticating john...
📱 MFA code required (check email/authenticator): 654321
✅ john ready!
============================================================
✨ Setup complete - Backend starting...
🚀 Starting backend on 127.0.0.1:8000
INFO: Uvicorn running on http://127.0.0.1:8000
Nästa gånger: Tokens är sparade, loggar in automatiskt!
Testa API
# Lista alla registrerade användare
curl http://localhost:8000/users
# Hämta aktiviteter för ana (user_id=1)
curl http://localhost:8000/activities/1?start=0&limit=5
# Hämta daglig summary
curl http://localhost:8000/daily-summary/1?date=2025-01-20
# Hjärtfrekvens
curl http://localhost:8000/heart-rate/1?date=2025-01-20
Databaskemata
-- Användare (sparas från .env)
CREATE TABLE garmin_users (
id INTEGER PRIMARY KEY,
alias VARCHAR UNIQUE, -- "ana", "john"
email VARCHAR UNIQUE, -- din@mail.se
password VARCHAR, -- krypterad senare?
authenticated INTEGER, -- 1=autentiserad
last_auth DATETIME
);
-- Cache (automatisk)
CREATE TABLE garmin_cache (
id INTEGER PRIMARY KEY,
user_id INTEGER,
cache_key VARCHAR, -- "activities_0_20"
data TEXT (JSON), -- komplett API response
created_at DATETIME,
expires_at DATETIME -- auto-purge
);
CREATE INDEX ix_user_key ON garmin_cache(user_id, cache_key);
Cache TTL
- Aktiviteter: 2 timmar
- Daglig summary: 24 timmar
- Hjärtfrekvens: 24 timmar
Ändra i backend.py:
service.get_or_fetch(..., ttl_hours=12) # 12 timmar istället
MCP Integration
Claude Desktop
- Starta backend (Terminal 1):
python backend.py
- Build MCP server (Terminal 2):
npm run build
- Lägg till i
~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"garmin": {
"command": "node",
"args": ["dist/mcp-server.js"],
"cwd": "/path/to/garmin-cache-system",
"env": {
"BACKEND_URL": "http://localhost:8000"
}
}
}
}
- Restart Claude Desktop
Open WebUI
Samma setup, bara andra config-fil.
Fil-struktur
garmin-cache-system/
├── backend.py ← FastAPI server
├── mcp-server.ts ← MCP TypeScript
├── .env.example ← Template
├── .env ← Din konfiguration (gitignore)
├── garmin_cache.db ← SQLite database
├── .garmin-cache/ ← Token-mappar per user
│ ├── 1/ ← Ana's tokens
│ └── 2/ ← John's tokens
└── requirements.txt ← Python deps
Felsökning
MFA inte triggad?
- Kontrollera att ditt Garmin-konto har 2FA aktiverat
- Väntande vid första autentiseringen - skriv MFA-koden från email
Fel: "User not authenticated"
# Rensa och starta om
rm garmin_cache.db
python backend.py
Check databas
sqlite3 garmin_cache.db
> SELECT alias, email, authenticated FROM garmin_users;
Nästa steg
- ✅ Backend körandes
- ⏳ Build MCP server:
npm run build - ⏳ Koppla till Claude Desktop / Open WebUI
- ⏳ Börja använda tools!
License
MIT
💡 Tips: Lägg .env i .gitignore (redan gjort) för att inte exponera lösenord!
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.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
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.