Skip to main content
Glama
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

Maintenance

ActivityStale
ResponsivenessNo issues