whoop-mcp
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 give me a weekly review of my WHOOP data"
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
What this is
A small server that runs on your own computer and lets Claude read your own WHOOP data: profile, recovery, sleep, workouts and daily cycles. It also includes a weekly_review prompt and a profile resource.
It follows the Model Context Protocol (MCP), the standard way Claude connects to outside tools.
This is a learning experiment. It is read-only, so it can't change anything in your WHOOP account. It is not affiliated with WHOOP or Anthropic.
Related MCP server: whoop-mcp
Privacy warning
This project handles personal health data.
Each person must use their own WHOOP developer app and their own WHOOP account.
Your credentials and tokens stay on your own machine.
Never commit or share
.envortokens.json. They give access to your WHOOP data. Both are already listed in.gitignore.
Requirements
Node.js 18 or higher
A WHOOP account
A WHOOP developer app (free, created at the WHOOP developer dashboard)
Claude Desktop
Setup
Clone this repository and open a terminal in its folder.
Run
npm install.Create a WHOOP developer app in the WHOOP developer dashboard. Register this redirect URI exactly:
http://localhost:3000/callback. Note the Client ID and Client Secret.Copy
.env.exampleto.envand fill in the values:WHOOP_CLIENT_ID=your client id WHOOP_CLIENT_SECRET=your client secret WHOOP_REDIRECT_URI=http://localhost:3000/callbackRun
npm run auth. It prints a login link. Open it in your browser, approve access, and wait for "Login successful". This createstokens.json.Run
npm run build.
Connect to Claude Desktop
Open Claude Desktop's config file (Settings > Developer > Edit Config) and add this block. Replace the path with the full path to this project's dist/index.js on your machine:
{
"mcpServers": {
"whoop": {
"command": "node",
"args": ["/full/path/to/whoop-mcp/dist/index.js"]
}
}
}On Windows, backslashes in the path must be doubled, for example C:\\Users\\you\\whoop-mcp\\dist\\index.js.
Then fully quit Claude Desktop (right-click its icon in the system tray and choose Quit, since closing the window isn't enough) and open it again.
Available tools, prompts and resources
Tools
ping: replies "pong"; use it to check the connection.get_profile: your basic WHOOP profile.get_recovery: daily recovery score, HRV and resting heart rate.get_sleep: sleep performance, duration, efficiency and time in each stage.get_workouts: sport, duration, strain and heart rate for each workout.get_cycles: daily strain and average heart rate.
The four data tools take an optional days value (1 to 30, default 7).
Prompts
weekly_review: asks Claude to fetch your recent data and write a short review with one suggested change for next week. Optionaldays(default 7).
Resources
whoop://profile/summary: your WHOOP user ID and name, fetched live. It doesn't include your email.
Troubleshooting
Server doesn't show up in Claude: fully quit Claude Desktop from the tray and reopen it. Also check that the path in the config is correct.
401 or "unauthorized" errors: your login has expired or was revoked. Run
npm run authagain.distfolder missing or "cannot find module": runnpm run build.Port 3000 already in use during
npm run auth: close whatever is using port 3000 and try again. If you'd rather use another port, change it in the redirect URI in both.envand the WHOOP developer dashboard.
Notes
WHOOP rotates refresh tokens: each one works only once. The app rewrites
tokens.jsonafter every refresh, so don't delete or edit that file while it's running.The
offlinescope, which allows refreshing, is requested in the login link thatnpm run authgenerates. You don't need to set it in the WHOOP dashboard.
Available Tools
6 toolsget_cyclesA
Returns daily physiological cycles (day strain and average heart rate) for the last N days. Use it to see overall daily strain. strain is 0-21 on Whoop's logarithmic scale (0-9 light, 10-13 moderate, 14-17 high, 18-21 all-out); the latest cycle may still be in progress.
Inputs: days.
get_profileA
Returns the user's basic Whoop profile (user id, name, email). Use it to identify whose data is being read.
Inputs: no named parameters.
get_recoveryA
Returns daily recovery records (recovery score, HRV, resting heart rate, SpO2, skin temperature) for the last N days. Use it to see how recovered the user is. recovery_score_pct is 0-100% (0-33 red/low, 34-66 yellow/medium, 67-100 green/high).
Inputs: days.
get_sleepA
Returns sleep records (performance, duration, efficiency, time in each stage) for the last N days, including naps. Use it to analyze sleep quality and habits. sleep_performance_pct is 0-100% (actual sleep vs. sleep needed); efficiency is the share of time in bed spent asleep. Summary stats exclude naps.
Inputs: days.
get_workoutsA
Returns workout records (sport, duration, strain, average and max heart rate) for the last N days. Use it to review training activity. strain is 0-21 on Whoop's logarithmic scale (0-9 light, 10-13 moderate, 14-17 high, 18-21 all-out).
Inputs: days.
pingA
Returns pong
Inputs: no named parameters.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 6 tools
Each data tool targets a clearly distinct Whoop resource: profile, recovery, sleep, workouts, and daily cycles. The only potential overlap—strain in get_workouts vs. day strain in get_cycles—is well separated by descriptions as workout-level vs. daily physiological cycle data.
Five of six tools follow a clean get_noun snake_case pattern: get_profile, get_recovery, get_sleep, get_workouts, get_cycles. The lone ping tool is a conventional health-check exception, but it is a minor deviation from the otherwise consistent naming scheme.
Six tools are well-scoped for a focused Whoop data retrieval server. Each data tool maps to a distinct core resource, and ping is a lightweight utility that does not bloat the surface.
The tool set covers the main Whoop data domains: profile, recovery, sleep, workouts, and daily cycles. For a read-only health-data integration, this provides complete core coverage with no obvious dead ends.
Maintenance
Related MCP Connectors
WHOOP recovery, strain, sleep and workouts in Claude via official WHOOP OAuth. Free, open source.
Connect Claude to your Intervals.icu watch data for fitness, workout review, and plan writing.
Read WHOOP recovery, sleep, cycles, workouts and body measurements.
Your WHOOP data in the assistant, read-only: recovery, sleep, strain, workouts, cycles and body meas
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables Claude to read your Whoop recovery, sleep, cycle, and workout data through natural language queries.63 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.617 npmMIT