MCP server that exposes your Whoop fitness data (recovery, sleep, strain, workouts) to Claude for use as a daily training coach.
- Python 3.10+
- A Whoop Developer account with a registered application
- Your Whoop app's Client ID and Client Secret
- Go to developer.whoop.com and sign in
- Create a new application
- Set the Redirect URI to:
http://localhost:8080/callback - Enable these scopes:
read:recovery,read:cycles,read:sleep,read:profile,read:body_measurement- Note:
read:workoutandofflinemay not be available on all developer apps. The server handles missing scopes gracefully.
- Note:
- Note your Client ID and Client Secret
cd whoop-mcp
pip install -r requirements.txtExport your app credentials and run the setup script:
export WHOOP_CLIENT_ID="your-client-id"
export WHOOP_CLIENT_SECRET="your-client-secret"
python scripts/setup_auth.pyThis opens a browser to Whoop's authorization page. After you approve, tokens are encrypted and stored at ~/.whoop_mcp/. If the offline scope was granted, tokens refresh automatically. Otherwise, re-run this script when the token expires.
Add this to your Claude MCP configuration:
{
"mcpServers": {
"whoop": {
"command": "python",
"args": ["/absolute/path/to/whoop-mcp/src/whoop_server.py"],
"env": {
"WHOOP_CLIENT_ID": "your-client-id",
"WHOOP_CLIENT_SECRET": "your-client-secret"
}
}
}
}Replace /absolute/path/to/whoop-mcp with the actual path on your machine.
| Tool | Description |
|---|---|
whoop_check_auth |
Verify tokens are valid and not expired |
whoop_get_latest_recovery |
Most recent recovery score, HRV, resting HR, SpO2 |
whoop_get_recovery_range |
Recovery data for a date range |
whoop_get_latest_sleep |
Last sleep session with stage breakdown |
whoop_get_sleep_range |
Sleep data for a date range |
whoop_get_latest_strain |
Current cycle strain, avg/max HR, kilojoules |
whoop_get_strain_range |
Strain over past N days with average |
whoop_get_workouts |
Workouts with sport ID, strain, HR zones |
whoop_get_profile |
User profile and body measurements |
whoop_get_training_summary |
Aggregated coaching snapshot (start here) |
Once connected, you can ask Claude things like:
- "What was my recovery yesterday?"
- "How much strain did I accumulate last week?"
- "Am I trending toward overtraining?"
- "How has my HRV changed over the past two weeks?"
- "What were my sleep stages last night?"
- "Compare my strain to my recovery over the past 7 days."
- "Should I do a hard workout today?"
Start each session by calling whoop_get_training_summary for an overview of recovery status, recent strain load, sleep quality, and a training readiness assessment.
Tokens are stored encrypted at ~/.whoop_mcp/:
.encryption_key— Fernet encryption key (chmod 600)tokens.enc— Encrypted OAuth tokens (chmod 600)- Directory permissions: chmod 700
If token refresh fails, re-run python scripts/setup_auth.py.