Skip the install. Get this working in under 2 minutes.
Start a free trial on cloud.anythingmcp.com, add the WHOOP in one click, then point your AI client (Claude, ChatGPT, Copilot or Cursor) at the generated MCP endpoint. No Docker, no git clone, zero engineering experience required.
Summary
Read a WHOOP member's recovery, HRV, resting heart rate, sleep and naps with stages, day strain per cycle, workouts with heart rate zones, profile and body measurements through the WHOOP Developer API v2 with OAuth. Read-only.
Try asking
Example prompts for WHOOP
Click any prompt to copy it. Paste into Claude, ChatGPT, Cursor, Gemini, Copilot or OpenClaw to run it against this connector.
Claude is AI and can make mistakes. Please double-check responses.
💡 No install? Use cloud.anythingmcp.com directly. Sign in, click Connectors → WHOOP, paste your credentials, mint an MCP API key and you're done. No Docker, no
git clone, no local server.
WHOOP
Read a WHOOP member's recovery, HRV, resting heart rate, sleep and naps with stages, day strain per cycle, workouts with heart rate zones, profile and body measurements through the WHOOP Developer API v2 with OAuth. Read-only.
Setup
Setting up takes about 10 minutes, once. You need a WHOOP account.
- Open the WHOOP Developer Dashboard at https://developer-dashboard.whoop.com and sign in with a WHOOP account. Create a team when asked (a team can hold up to 5 apps).
- Click Create App. Under Scopes tick
read:profile,read:body_measurement,read:cycles,read:recovery,read:sleepandread:workout. The connector also asks foroffline, which WHOOP needs to issue a refresh token. - Under Redirect URIs add
https://cloud.anythingmcp.com/api/mcp-oauth/callbackon AnythingMCP Cloud, or<your AnythingMCP URL>/api/mcp-oauth/callbackwhen you host AnythingMCP yourself. - Save, and copy the Client ID and Client Secret into
WHOOP_CLIENT_IDandWHOOP_CLIENT_SECRET. Install the connector, click Authorize with Provider and allow access with the WHOOP account whose data the AI should read. - Run
whoop_get_profileto check the connection.
Access tokens last about an hour and are renewed automatically; WHOOP replaces the refresh token on every renewal.
What it reads: the connected member's profile and body measurements (height, weight, max heart rate); physiological cycles, where a cycle is one WHOOP day from waking up to waking up, with day strain, energy and heart rate; the recovery of each cycle with recovery score, HRV, resting heart rate and, on WHOOP 4.0 or newer, SpO2 and skin temperature; sleeps and naps with time per stage, sleep need, performance, consistency, efficiency and respiratory rate; and workouts with sport, strain, heart rate, energy, distance, altitude and time in each heart rate zone.
Finding a day: the AI lists cycles (the newest has no end while it is running) and goes from a cycle id to its recovery and its sleep. For trends it lists recoveries, sleeps or workouts between a start and an end.
Read-only: every tool only reads. The WHOOP API offers no way to write data, so there is nothing to confirm and no tool is switched off at install. Journal entries, the stress monitor, heart rate streams and WHOOP Coach are not part of the public API.
Formats: only records with score_state SCORED carry a score; PENDING_SCORE means WHOOP is still computing it, UNSCORABLE that it never will be (for example when the strap was not worn). Times are UTC, and timezone_offset is the member's local offset, which the AI applies before naming a local day. Durations ending in _milli are milliseconds. Strain is WHOOP's 0 to 21 scale, kilojoule is energy (divide by 4.184 for kilocalories), percentages are 0 to 100 and heart rates are beats per minute.
Limits: list tools return up to 25 records per call, newest first, with a next_token while more exist. WHOOP allows 100 requests per minute and 10,000 per day per app by default; over that it answers 429.
Common errors: 401 means the authorization expired or was revoked (click Authorize with Provider again), 403 or an empty answer for one kind of data usually means its scope was not granted, and 404 an unknown id.
Prerequisites: WHOOP_CLIENT_ID, WHOOP_CLIENT_SECRET
Install the connector locally
curl -fsSL https://raw.githubusercontent.com/HelpCode-ai/anythingmcp/main/docker-compose.quickstart.yml -o docker-compose.yml
printf 'JWT_SECRET=%s\nENCRYPTION_KEY=%s\n' "$(openssl rand -hex 32)" "$(openssl rand -hex 32)" > .env
docker compose up -d
Open http://localhost:3000/connectors/store, pick WHOOP and paste in the env vars listed under Prerequisites.
Available tools
| Tool | What it does |
|---|---|
whoop_get_profile | The signed-in WHOOP member: user_id, email, first and last name |
whoop_get_body_measurement | The member's body measurements as stored in WHOOP: height_meter, weight_kilogram and the max_heart_rate WHOOP calculated |
whoop_list_cycles | Physiological cycles (one WHOOP day, from waking to waking), newest first: id, start, end (missing for the current cycle), timezone_offset… |
whoop_get_cycle | One physiological cycle by id: start, end, score_state and score (strain, kilojoule, average and max heart rate) |
whoop_get_cycle_sleep | The main sleep that belongs to a cycle (the sleep before that WHOOP day), with stages, sleep need, performance, consistency and efficiency |
whoop_get_cycle_recovery | The recovery of a cycle: recovery_score (0 to 100 %), resting_heart_rate, hrv_rmssd_milli, and on WHOOP 4.0 or newer spo2_percentage and… |
whoop_list_recoveries | Recoveries, newest first (by the start of their cycle): cycle_id, sleep_id, score_state and score with recovery_score (0 to 100 %)… |
whoop_list_sleeps | Sleeps and naps, newest first: id (UUID), cycle_id, start, end, nap, score_state and score with time in bed and per stage (light, slow… |
whoop_get_sleep | One sleep or nap by its UUID, with the full score (stage summary, sleep need, performance, consistency, efficiency, respiratory rate) |
whoop_list_workouts | Workouts, newest first: id (UUID), sport_name, start, end, score_state and score with strain, average and max heart rate, kilojoule… |
whoop_get_workout | One workout by its UUID: sport, times, strain, heart rate, kilojoule, distance, altitude and heart rate zone durations |
Example prompts
- "What is my recovery score today, and how do my HRV and resting heart rate compare with my 30-day average?"
- "How long did I sleep each night this week, and how much of it was REM and slow wave sleep?"
- "List my workouts of the last two weeks with sport, strain and time in heart rate zones 4 and 5."
- "On mornings after a day strain above 15, how did my recovery look?"
- "Did I take any naps this month, and how long were they?"
Next steps
Was this guide helpful?