Skip to main content
Glama
README.md
# whoop-mcp

Lokaler MCP-Server für die [WHOOP API v2](https://developer.whoop.com/api/).
Läuft vollständig auf dem eigenen Rechner: Recovery, Schlaf, Strain und
Workouts stehen in Claude als Tools zur Verfügung, ein täglicher Sync legt eine
lokale Historie an und schreibt einen JSON-Export fürs eigene Dashboard.

## Was es kann

| Tool | Zweck |
| --- | --- |
| `whoop_summary` | Kombinierter Tagesüberblick aus Recovery, Schlaf und Strain |
| `whoop_recovery` | Recovery Score, HRV, Ruhepuls, SpO2, Hauttemperatur |
| `whoop_sleep` | Dauer, Schlafphasen, Performance, Konsistenz, Atemfrequenz |
| `whoop_cycles` | Tages-Strain, Kalorien, Ø- und Maximalpuls |
| `whoop_workouts` | Trainings mit Strain, HF-Zonen, Distanz, Kalorien |
| `whoop_body` | Größe, Gewicht, maximale Herzfrequenz |
| `whoop_history` | Langzeitauswertung aus der lokalen Datenbank, mit Trendvergleich |
| `whoop_sync` | Daten abrufen, lokal speichern, Export schreiben |

Einheiten werden alltagstauglich umgerechnet: Millisekunden zu Stunden,
Kilojoule zu Kilokalorien, Meter zu Kilometern. Die Rohantworten bleiben in der
Datenbank erhalten.

## Voraussetzungen

Eine App im [WHOOP Developer Dashboard](https://developer-dashboard.whoop.com)
mit dieser Redirect URL:

```
http://localhost:8765/callback
```

und diesen Scopes:

```
offline  read:recovery  read:cycles  read:sleep  read:workout
read:body_measurement  read:profile
```

`offline` ist zwingend erforderlich — ohne diesen Scope gibt WHOOP keinen
Refresh Token heraus und die Verbindung müsste stündlich erneuert werden.

## Installation

```bash
git clone https://github.com/d00ennis/whoop-mcp.git
cd whoop-mcp
python3 -m venv .venv
source .venv/bin/activate
pip install -e .
```

## Einrichtung

```bash
whoop-mcp setup     # Client ID und Secret hinterlegen (landen im Schlüsselbund)
whoop-mcp auth      # Browser öffnet sich, Zugriff einmal bestätigen
whoop-mcp sync      # erster Abruf, standardmäßig 90 Tage rückwirkend
whoop-mcp status    # Konfiguration und Datenbestand prüfen
```

## In Claude einbinden

In `~/Library/Application Support/Claude/claude_desktop_config.json`:

```json
{
  "mcpServers": {
    "whoop": {
      "command": "/PFAD/ZU/whoop-mcp/.venv/bin/whoop-mcp",
      "args": ["serve"]
    }
  }
}
```

Danach Claude neu starten.

## Täglicher Sync

Per `launchd` oder Cron, zum Beispiel jeden Morgen um 6:30 Uhr:

```
30 6 * * * /PFAD/ZU/whoop-mcp/.venv/bin/whoop-mcp sync >> ~/.whoop-mcp/sync.log 2>&1
```

## Wo die Daten liegen

| Was | Wo |
| --- | --- |
| Client ID, Secret, Tokens | macOS-Schlüsselbund (Dienst `whoop-mcp`) |
| Historie | `~/.whoop-mcp/whoop.db` (SQLite) |
| Export fürs Dashboard | `~/.whoop-mcp/whoop.json` |

Über `WHOOP_MCP_DATA_DIR` und `WHOOP_MCP_EXPORT_PATH` lassen sich Verzeichnis
und Exportpfad verlegen.

## Aufbau

```
config.py      Pfade, Scopes, Secret-Speicher (Schlüsselbund mit Datei-Fallback)
auth.py        OAuth-Flow, lokaler Callback-Server, Token-Rotation
client.py      HTTP-Client: Pagination, 401-Refresh, 429-Backoff
normalize.py   Rohantworten zu flachen Datensätzen mit sinnvollen Einheiten
aggregate.py   Tageszusammenführung, Durchschnitte, Trends
store.py       SQLite-Historie, idempotente Upserts
sync.py        Abgleich und JSON-Export
server.py      MCP-Tools
```

## Tests

```bash
pip install -e ".[dev]"
pytest
```

## Lizenz und Datenschutz

Private Nutzung. Es werden keine Daten an Dritte übertragen — siehe
[PRIVACY.md](PRIVACY.md).

TDQS

B3.4/5.0

Scored across 9 tools

Disambiguation5/5

Each tool targets a distinct data category (recovery, sleep, cycles, workouts, body, history) or operation (sync, Life-OS update), with clear descriptions that eliminate ambiguity. The summary tool provides an overarching view but does not overlap with specific metric tools.

Naming Consistency5/5

All tools follow the consistent pattern 'whoop_<descriptive_noun>', with only 'whoop_lifeos_update' using a compound noun, which is still uniform and predictable.

Tool Count5/5

With 9 tools, the set is well-scoped for a health/fitness MCP server, covering essential data retrieval, history, and synchronization without unnecessary bloat.

Completeness4/5

The domain of WHOOP data is well-covered: recovery, sleep, strain, workouts, body metrics, and historical trends are all present. Minor gaps like account info or raw intraday data might be missing, but core user needs are met.

Maintenance

ActivityStale
ResponsivenessNo issues