Connects Claude to the WHOOP API for querying your biometric data. Exposes eight tools covering recovery scores, HRV, sleep stages, day strain, workout history, and trend analysis over configurable windows. Runs locally with OAuth2 setup, stores refresh tokens in your home directory, and auto-refreshes on subsequent runs. You'd reach for this when you want conversational access to your fitness data without opening the app, or to correlate recovery patterns with training load over time. Works alongside other health MCP servers like Oura for cross-device comparisons. Setup requires creating a WHOOP developer app and running a one-time auth flow that saves credentials locally.
A Model Context Protocol (MCP) server that gives Claude access to your WHOOP biometric data — recovery, sleep, strain, and workouts.
Ask Claude things like:
This app accesses your WHOOP data locally on your device. No data is sent to any third-party server.
| Tool | What it returns |
|---|---|
get_recovery | Recovery score, HRV, resting HR, SpO2 |
get_sleep | Sleep duration, stages (light/deep/REM), efficiency, respiratory rate |
get_strain | Day strain score, avg/max HR, calories |
get_latest_workout | Most recent workout — sport, duration, strain, HR zones |
get_recovery_trend | Recovery scores over N days (default 7) |
get_sleep_trend | Sleep data over N days (default 7) |
get_workout_history | Recent workout history (default 5) |
get_profile | Profile + body measurements |
whoop-mcp (or anything)http://localhost:8080/callbackofflinenpm install -g @souravpn/whoop-mcp
This opens your browser, you log into WHOOP, and your tokens are saved to ~/.whoop-mcp-tokens.json:
WHOOP_CLIENT_ID=your_id WHOOP_CLIENT_SECRET=your_secret whoop-mcp-auth-setup
You only need to do this once. The server will auto-refresh tokens after that.
Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS):
{
"mcpServers": {
"whoop": {
"command": "@souravpn/whoop-mcp",
"env": {
"WHOOP_CLIENT_ID": "your_client_id",
"WHOOP_CLIENT_SECRET": "your_client_secret"
}
}
}
}
Restart Claude Desktop. You should see a green "running" badge in Settings → Developer.
Open a new chat and ask:
How's my recovery today?
Daily check-in:
What's my recovery, sleep, and strain for today?
Trend analysis:
How has my HRV trended over the past 7 days?
Workout correlation:
Look at my workouts this week and my recovery scores
the day after each one. Is there a pattern?
Full briefing:
Give me a complete health briefing — recovery, last
night's sleep breakdown, and any workouts from yesterday
If you also use Oura Ring, you can run both MCP servers together and ask Claude to cross-reference:
{
"mcpServers": {
"whoop": {
"command": "/path/to/whoop-mcp",
"env": { "WHOOP_ACCESS_TOKEN": "your_whoop_token" }
},
"oura": {
"command": "/path/to/oura-mcp",
"env": { "OURA_ACCESS_TOKEN": "your_oura_token" }
}
}
}
Then ask:
Compare my WHOOP and Oura HRV readings for this week.
Do they agree? Which is trending higher?
git clone https://github.com/yourusername/whoop-mcp
cd whoop-mcp
npm install
npm run build
# Test locally
WHOOP_ACCESS_TOKEN=your_token node dist/index.js
whoop-mcp/
├── src/
│ ├── index.ts # MCP server + tool definitions
│ └── whoop.ts # WHOOP API client + formatters
├── package.json
├── tsconfig.json
└── README.md
PRs welcome. Some ideas for extension:
MIT
Built with the MCP TypeScript SDK and the WHOOP Developer API.
WHOOP_CLIENT_ID*OAuth2 Client ID from your WHOOP developer app at developer-dashboard.whoop.com
WHOOP_CLIENT_SECRET*secretOAuth2 Client Secret from your WHOOP developer app. Run whoop-mcp-auth-setup once to complete OAuth flow.
com.mcparmory/google-sheets
domdomegg/google-sheets-mcp
henilcalagiya/google-sheets-mcp
cct15/war-dashboard-data
moooonad/mcp-google-sheets-full
io.github.br0ski777/csv-to-json