MCP Sports Coach
# MCP Sports Coach — Strava & Garmin
Serveur MCP (Model Context Protocol) qui connecte Claude aux comptes **Strava** et **Garmin Connect** pour analyser les activités sportives, le sommeil, la récupération et bien plus.
## Outils disponibles
### Strava
| Outil | Description |
|---|---|
| `authenticate` | Connexion OAuth Strava (à faire une seule fois) |
| `get_athlete` | Profil, ville, followers, FTP, poids |
| `get_recent_activities` | Dernières N activités (distance, durée, FC, D+) |
| `get_weekly_summary` | Volume, temps total et types d'activités de la semaine |
| `get_activity_detail` | Détail complet d'une activité par ID |
### Garmin Connect
| Outil | Description |
|---|---|
| `garmin_status` | Vérifie si le compte Garmin est connecté |
| `get_garmin_activities` | Dernières N activités Garmin |
| `get_garmin_sleep` | Données de sommeil (total, profond, REM, score) |
| `get_garmin_body_battery` | Body Battery sur N jours |
| `get_garmin_hrv` | Variabilité cardiaque (HRV) sur N jours |
## Installation
### Prérequis
- Python 3.12+
- [uv](https://docs.astral.sh/uv/) (gestionnaire de paquets)
- Un compte Strava avec une application enregistrée sur [strava.com/settings/api](https://www.strava.com/settings/api)
### 1. Cloner et installer
```bash
git clone https://github.com/Naten79/mcp-strava.git
cd mcp-strava
uv sync
```
### 2. Configurer les credentials Strava
Copier `.env.example` en `.env` et renseigner les credentials Strava :
```bash
cp .env.example .env
```
```env
STRAVA_CLIENT_ID=client_id
STRAVA_CLIENT_SECRET=client_secret
```
> Ces valeurs sont disponibles sur [strava.com/settings/api](https://www.strava.com/settings/api).
> Régler l'**Authorization Callback Domain** sur `localhost`.
### 3. (Optionnel) Authentifier Garmin
Lancer ce script une seule fois en terminal pour sauvegarder le token Garmin localement :
```bash
uv run garmin_login.py
```
Les identifiants Garmin ne transitent jamais par Claude.
### 4. Configurer Claude Desktop
Ajouter la configuration suivante dans `claude_desktop_config.json` :
```json
{
"mcpServers": {
"sports-coach": {
"command": "uv",
"args": ["run", "python", "strava_mcp.py"],
"cwd": "/chemin/vers/mcp-strava"
}
}
}
```
### 5. Authentifier Strava dans Claude
Au premier lancement, utiliser l'outil `authenticate` dans Claude. Une fenêtre Strava s'ouvre pour autoriser l'accès, puis le token est sauvegardé localement.
## Sécurité
- Le fichier `.env` (credentials API) n'est jamais commité
- Les tokens OAuth (`strava_token.json`, `garth_tokens/`) restent en local uniquement
- Les identifiants Garmin ne sont jamais envoyés à Claude, seulement au serveur Garmin
## Stack
- [MCP Python SDK](https://github.com/modelcontextprotocol/python-sdk) — FastMCP
- [httpx](https://www.python-httpx.org/) — requêtes HTTP async
- [garminconnect](https://github.com/cyberjunky/python-garminconnect) — API Garmin non-officielle
- [python-dotenv](https://github.com/theskumar/python-dotenv) — gestion des variables d'environnement
TDQS
Scored across 10 tools
All tools have clearly distinct purposes: authentication tools for Strava and Garmin are separate, and data retrieval tools target different entities (activities, athlete profile, Garmin metrics). No overlapping functionality.
Most tools follow the 'get_' prefix pattern, but 'authenticate' and 'garmin_status' break this pattern. Apart from that, naming is consistent and readable.
10 tools is well-scoped for a sports coach server that interfaces with two platforms, covering authentication, profile, recent activities, detailed activity, and various Garmin health metrics.
The tool set covers core functionalities (profile, activities, health metrics) but lacks features like historical trend analysis or Garmin activity detail beyond listing. Minor gaps exist but do not severely hinder usage.