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.
π‘ Paste into ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows)
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:
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>