MCP server for the official Whoop API v2: cycles, recovery, sleep, workouts, and profile data
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
One-click editor setup isnβt available for this listing yet β we donβt have a confirmed install command, and weβd rather show nothing than point your editor at the wrong package or host. Follow the projectβs own setup instructions, linked above.
Inspect callable tools, capabilities, and parameters exposed to AI agents by Whoop MCP Server.
get_profileSingle object: `user_id`, `email`, `first_name`, `last_name
get_body_measurementSingle object: `height_meter`, `weight_kilogram`, `max_heart_rate
get_cyclesArray of cycle records β one per physiological day: `start`/`end`, `score_state`, and `score` with day `strain`, `kilojoule`, `average_heart_rate`, `max_heart_rate
get_latest_cycleSingle cycle record (the current/most recent day)
get_recoveriesArray of recovery records β one per sleep: `cycle_id`, `sleep_id`, and `score` with `recovery_score` (0β100), `resting_heart_rate`, `hrv_rmssd_milli`, `spo2_percentage`, `skin_temp_celsius
get_recovery_for_cycleSingle recovery record for that cycle
MCP server for the official Whoop API v2, written in Go. Exposes cycles, recovery, sleep, workouts, and profile data as MCP tools.
All tools return JSON. Record shapes are the unmodified Whoop API v2 objects, so every field the API exposes is available to the model.
| Tool | Inputs | Returns |
|---|---|---|
get_profile | β | Single object: user_id, email, first_name, last_name |
get_body_measurement | β | Single object: height_meter, weight_kilogram, max_heart_rate |
get_cycles | start_date, end_date, limit (all optional) | Array of cycle records β one per physiological day: start/end, score_state, and score with day strain, kilojoule, average_heart_rate, max_heart_rate |
get_latest_cycle | β | Single cycle record (the current/most recent day) |
get_recoveries | start_date, end_date, limit (all optional) | Array of recovery records β one per sleep: cycle_id, sleep_id, and score with recovery_score (0β100), resting_heart_rate, hrv_rmssd_milli, spo2_percentage, skin_temp_celsius |
get_recovery_for_cycle | cycle_id (required) | Single recovery record for that cycle |
get_sleep | start_date, end_date, limit (all optional) | Array of sleep records: start/end, nap flag, and score with per-stage durations (light/SWS/REM/awake, in ms), respiratory_rate, sleep_performance_percentage, sleep_efficiency_percentage, sleep-need breakdown |
get_workouts | start_date, end_date, limit (all optional) | Array of workout records: sport_name, start/end, and score with workout strain, heart rates, kilojoule, distance_meter, altitude_gain_meter, time-in-zone durations (zone_durations, ms per HR zone) |
get_average_strain | days (optional, default 7) | Computed aggregate: {days, cycles_counted, average_strain} |
check_auth_status | β | {authenticated: bool} plus the profile on success or an error string on failure |
Notes:
YYYY-MM-DD; end_date is inclusive (internally mapped to the start of the next day, per the API's exclusive end semantics).next_token until limit records (default 25, max 100) are collected.get_average_strain for the built-in strain average).score_state can be SCORED, PENDING_SCORE, or UNSCORABLE β score is only present when SCORED.At developer.whoop.com, create an app with:
http://localhost:8719/callbackread:cycles, read:recovery, read:sleep, read:workout, read:profile, read:body_measurement, offlineNote the client ID and client secret.
Homebrew:
Or download a prebuilt binary from Releases, or:
Or build from source:
Opens a browser for the OAuth flow; the token is saved to
~/Library/Application Support/whoop-mcp/token.json (macOS) and refreshed
automatically thereafter (rotating refresh tokens).
Or for Claude Desktop, in claude_desktop_config.json:
Factual signals from GitHub, npm, and our automated checks β not a rating.
No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/whoop-mcp-server)<a href="https://allmcps.com/mcp/whoop-mcp-server"><img src="https://allmcps.com/api/badge/whoop-mcp-server?style=directory" alt="Whoop MCP Server on AllMCPs" /></a>