whoop-mcp
README.md
# whoop-mcp
Local MCP server exposing your WHOOP data (recovery, sleep, strain, workouts) as tools for Claude.
## Setup
1. Create an app at the [WHOOP Developer Dashboard](https://developer-dashboard.whoop.com/apps/create).
- Redirect URI: `http://localhost:8934/callback`
- Scopes: `read:recovery`, `read:sleep`, `read:cycles`, `read:workout`, `read:profile`, `read:body_measurement`, `offline`
2. Install deps: `npm install`
3. Write your credentials to `~/.whoop-mcp/credentials.json` (mode 600):
```json
{ "client_id": "...", "client_secret": "..." }
```
(Keeping secrets out of shell history/process args — `auth.js` and `server.js` both read
`WHOOP_CLIENT_ID`/`WHOOP_CLIENT_SECRET` env vars first and fall back to this file.)
4. Authorize once: `node auth.js`. This opens your browser, you approve, and tokens are saved
to `~/.whoop-mcp/tokens.json`.
5. Register the server in `~/.claude/mcp.json`:
```json
"whoop": {
"command": "node",
"args": ["/Users/tinislavandreev/whoop-mcp/server.js"],
"env": {
"WHOOP_CLIENT_ID": "...",
"WHOOP_CLIENT_SECRET": "..."
}
}
```
6. Restart Claude so it picks up the new server.
## Tools
- `whoop_get_recovery(start?, end?, limit?)`
- `whoop_get_sleep(start?, end?, limit?)`
- `whoop_get_cycles(start?, end?, limit?)`
- `whoop_get_workouts(start?, end?, limit?)`
- `whoop_get_profile()`
- `whoop_get_body_measurement()`
- `whoop_get_daily_summary(date?)` — combined cycle + recovery + sleep for one day
This server cannot be deployed
Maintenance
ActivityStale
ResponsivenessNo issues