WHOOP MCP Server
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@WHOOP MCP Server What was my recovery score this morning?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
WHOOP MCP Server
A Model Context Protocol server that gives Claude access to your WHOOP health data via the WHOOP Developer API (API v2).
Tools
Tool | Description |
| Start the OAuth 2.0 flow — call this once to connect your WHOOP account |
| Latest recovery score, HRV, resting heart rate, SpO2, skin temperature |
| Sleep duration, efficiency, stage breakdown, disturbances, respiratory rate |
| Recent workouts with strain, sport type, HR zones, calories |
| Physiological cycles (days) with strain and recovery summary |
| Height, weight, and max heart rate |
| Basic profile (name, email) |
Parameters: the data tools (get_recovery, get_sleep, get_workouts, get_cycles) accept optional filters:
limit— number of records to return (default 1 for recovery/sleep, 5 for workouts/cycles; max 25)start_date/end_date— ISO 8601 timestamps, e.g.2024-01-01T00:00:00.000Zinclude_naps—get_sleeponly; include nap records (defaultfalse)
get_body_measurements and get_profile take no parameters.
Related MCP server: whoop-mcp
Prerequisites
Node.js 18 or later
A WHOOP Developer account and OAuth app
Setup
1. Create a WHOOP Developer App
Go to https://developer.whoop.com/ and sign in.
Create a new application.
Add
http://localhost:8080/callbackas a Redirect URI (or use a custom port — just keep it consistent withWHOOP_REDIRECT_URI).Enable the following scopes on the app — the server requests all of them, and data tools will return empty or fail if any are missing:
offline(required — grants the refresh token so you only authenticate once)read:recoveryread:sleepread:workoutread:cyclesread:body_measurementread:profile
Copy your Client ID and Client Secret.
2. Install and build
git clone <this-repo>
cd whoop-mcp
npm install
npm run build3. Configure environment variables
cp .env.example .envEdit .env:
WHOOP_CLIENT_ID=your_client_id_here
WHOOP_CLIENT_SECRET=your_client_secret_here
WHOOP_REDIRECT_URI=http://localhost:8080/callbackSecurity note:
.envis never committed. Tokens are stored in~/.whoop-mcp-tokens.jsonwith600permissions (owner read/write only).
4. Add to Claude's MCP configuration
Claude Desktop (~/Library/Application Support/Claude/claude_desktop_config.json)
{
"mcpServers": {
"whoop": {
"command": "node",
"args": ["/absolute/path/to/whoop-mcp/dist/index.js"],
"env": {
"WHOOP_CLIENT_ID": "your_client_id_here",
"WHOOP_CLIENT_SECRET": "your_client_secret_here",
"WHOOP_REDIRECT_URI": "http://localhost:8080/callback"
}
}
}
}You can either set the env vars here or rely on a
.envfile in the project root (loaded bydotenv).
Claude Code (.claude/settings.json or via claude mcp add)
claude mcp add whoop node /absolute/path/to/whoop-mcp/dist/index.js \
-e WHOOP_CLIENT_ID=your_client_id \
-e WHOOP_CLIENT_SECRET=your_client_secret \
-e WHOOP_REDIRECT_URI=http://localhost:8080/callbackOr manually in .claude/settings.json:
{
"mcpServers": {
"whoop": {
"command": "node",
"args": ["/absolute/path/to/whoop-mcp/dist/index.js"],
"env": {
"WHOOP_CLIENT_ID": "...",
"WHOOP_CLIENT_SECRET": "...",
"WHOOP_REDIRECT_URI": "http://localhost:8080/callback"
}
}
}
}5. Authenticate
Once the server is running in Claude, call the authenticate tool:
You: Use the
authenticatetool to connect my WHOOP account.
Claude will display an authorization URL. Open it in your browser, approve access, and the tokens will be saved automatically to ~/.whoop-mcp-tokens.json.
Tokens refresh automatically — you only need to authenticate once.
Example prompts
What was my recovery score this morning?
Show me my last 7 days of sleep data.
How has my HRV trended over the past month?
What workouts did I do this week and what was my strain?
What are my body measurements on WHOOP?Token storage
Tokens are stored in
~/.whoop-mcp-tokens.json(or the path inWHOOP_TOKEN_FILE).The file is created with
0600permissions so only your user can read it.Access tokens are refreshed automatically 60 seconds before expiry using the stored refresh token.
Development
# Compile TypeScript in watch mode
npm run dev
# Run directly (after building)
npm startTroubleshooting
Problem | Fix |
| Ensure |
| Call the |
Port 8080 already in use | Change |
Token refresh fails | Delete |
Available Tools
7 toolsauthenticateA
Start the WHOOP OAuth 2.0 authorization flow. Returns a URL to open in your browser. Must be called before any data tool if you have not authenticated yet.
Inputs: no named parameters.
get_body_measurementsA
Get the user's body measurements: height, weight, and max heart rate.
Inputs: no named parameters.
get_cyclesA
Get WHOOP physiological cycles (days) with day strain, kilojoules, and heart rate summary.
Inputs: limit, end_date, start_date.
get_profileA
Get the user's basic WHOOP profile (name and email).
Inputs: no named parameters.
get_recoveryA
Get WHOOP recovery data including recovery score (0–100), HRV, resting heart rate, SpO2, and skin temperature.
Inputs: limit, end_date, start_date.
get_sleepA
Get WHOOP sleep data including duration, efficiency, sleep stage breakdown, disturbances, and respiratory rate.
Inputs: limit, end_date, start_date, include_naps.
get_workoutsA
Get recent WHOOP workouts with strain score, sport type, heart rate zones, kilojoules, and distance.
Inputs: limit, end_date, start_date.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 7 tools
Each tool targets a distinct data domain: authentication, recovery, sleep, workouts, cycles, body measurements, and profile. There is no meaningful overlap between these resource types, and the descriptions make the boundary between similar health metrics clear.
The data tools all follow a clean get_<resource> naming convention, making the tool surface highly predictable. authenticate is the only exception, but it is clearly a distinct action verb appropriate for the OAuth flow.
Seven tools is well-scoped for a read-only health data integration. Each tool represents a meaningful endpoint or data category, with no redundant or filler tools.
The server covers the main WHOOP data domains: recovery, sleep, workouts, daily cycles, body measurements, and user profile, plus the required authentication step. For a read-only personal health API, this is a complete and usable surface with no obvious dead ends.
Maintenance
Related MCP Connectors
WHOOP recovery, strain, sleep and workouts in Claude via official WHOOP OAuth. Free, open source.
Your WHOOP data in the assistant, read-only: recovery, sleep, strain, workouts, cycles and body meas
Garmin data in Claude & ChatGPT via the Garmin Health API. OAuth sign-in, no password sharing.
Connect Claude to your Intervals.icu watch data for fitness, workout review, and plan writing.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables Claude to read your Whoop recovery, sleep, cycle, and workout data through natural language queries.43 npmMIT
- FlicenseAqualityCmaintenanceProvides Claude Desktop with access to WHOOP fitness data including recovery, sleep, strain, and workouts.41-
- FlicenseAqualityDmaintenanceEnables Claude to read your WHOOP health data including recovery, sleep, strain, and workouts through the official WHOOP API, so you can ask natural language questions about your fitness metrics.7-
- AlicenseAqualityCmaintenanceEnables Claude to query personal WHOOP health data including recovery, sleep, strain, workouts, and profile via WHOOP's OAuth 2.0 REST API.621 npmMIT