Read-only WHOOP v2 data for MCP clients, with local SQLite cache and CSV/JSONL/Parquet exports.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
We haven't yet run this listing's install command through our automated sandbox check. This isn't a red flag β we're steadily working through the catalog.
π‘ Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
Inspect callable tools, capabilities, and parameters exposed to AI agents by Whoop MCP.
get_whoop_auth_statusReport OAuth token status. Call first if other tools return `AUTH_FAILED`.
get_whoop_profileAuthenticated user's WHOOP profile (name, email).
get_whoop_body_measurementLatest body measurements: height, weight, max HR.
list_whoop_cyclesPhysiological cycles in a time window.
get_whoop_cycleOne cycle by integer ID.
get_whoop_cycle_sleepSleep record tied to a given cycle.
A local Model Context Protocol (MCP) server that gives an LLM read-only
access to your WHOOP fitness data. Authentication is direct OAuth against
your own WHOOP developer app β there is no third-party proxy in the path.
All records are mirrored into a local SQLite cache at
~/.whoop-mcp-server/whoop.db, and no data ever leaves your machine
except for the authenticated calls the server itself makes to the WHOOP
v2 API.
Current version: 0.8.5 β see CHANGELOG.md.
Pre-1.0 status. The API surface (tool names, response shapes, error codes) is stabilizing but not frozen. Breaking changes may land in
0.xminor bumps during dogfooding. Patch bumps (0.8.x) are bugfix-only. 1.0.0 will be cut when the surface has been stable for 2+ weeks of real use. Pin the minor version in CI if you're building on top of this.
Just want to try it? Copy the prompt in docs/AGENT_INSTALL_PROMPT.md, paste it into Claude Code / Claude Desktop / Cursor / Windsurf, and your agent will do the install end-to-end.
Building on this repo? Start with AGENTS.md and docs/ARCHITECTURE.md β they're the load-bearing conventions and one-page system map.
The WHOOP MCP Server is a small Python process that speaks MCP over stdio.
It exposes WHOOP v2 data (profile, body measurement, cycles, recoveries,
sleeps, workouts) to any MCP-capable client β primarily Claude Desktop and
Claude Code. The server is read-only. It authenticates with WHOOP using an
OAuth app you register yourself, so your tokens never travel through a
third-party server. The WHOOP records you fetch are written to a local
SQLite cache (mode 0o600) so subsequent reads are free and offline, and
the cache file never leaves your machine.
No clone, no venv, no absolute paths. Don't have uv? Install it once:
curl -LsSf https://astral.sh/uv/install.sh | sh (or brew install uv).
Paste the prompt in docs/AGENT_INSTALL_PROMPT.md into any MCP-aware agent (Claude Code, Claude Desktop, Cursor, Windsurf, Zed, Aider). The agent will run the install for you.
Then register with -- /abs/path/to/whoop-mcp/.venv/bin/python /abs/path/to/whoop-mcp/src/whoop_mcp_server.py.
For Claude Desktop, add the equivalent entry to
~/Library/Application Support/Claude/claude_desktop_config.json (macOS),
pointing command at the venv Python and args at src/whoop_mcp_server.py.
Run ./scripts/fresh_install_check.sh if you want a clean-env smoke
of the install path end-to-end (minus the browser OAuth flow).
Once the server is registered, try these prompts:
sync_whoop() and reports per-resource counts.get_whoop_daily_summary(date="YYYY-MM-DD") and shows a
joined cycle + recovery + primary sleep + workouts record.~/whoop-workouts.csv."
Claude calls export_whoop(kind="workouts", format="csv", path="...").Bundled with the repo: skills/whoop-insights.
Install (one command):
That fetches the latest skill from this repo's main branch and drops
it where Claude Code (and Cursor / Windsurf / Zed) auto-discovers
user-scope skills. Restart your MCP client session and ask:
"How am I doing? Run the whoop-insights skill." "Generate my weekly WHOOP report." "Am I overtraining? Check the last 30 days."
The skill pulls 30 days from the cache, computes personal baselines (HRV, recovery, sleep, strain), flags anomalies with evidence, runs two correlations (sleepβnext-day-recovery, strainβnext-day-recovery), and optionally generates a self-contained HTML dashboard with Chart.js visualizations. Every claim cites a specific date and a specific number β the skill is instructed never to fabricate.
For repo-native developers iterating on the skill itself:
whoop-mcp-install-skills --source ./skills installs from your local
working tree instead of GitHub.
17 tools. All list tools accept start / end as ISO-8601 and auto-paginate.
Every read tool takes fresh: bool = False β pass True to bypass the
cache and hit the WHOOP API, write-through to cache, and return the live
response. Errors are returned as a structured {"error": {...}} envelope;
tools never raise.
| Tool | What it does | Key parameters |
|---|---|---|
get_whoop_auth_status | Report OAuth token status. Call first if other tools return AUTH_FAILED. | β |
get_whoop_profile | Authenticated user's WHOOP profile (name, email). | fresh |
get_whoop_body_measurement | Latest body measurements: height, weight, max HR. | fresh |
list_whoop_cycles | Physiological cycles in a time window. | start, end, limit, fresh |
get_whoop_cycle | One cycle by integer ID. | cycle_id, fresh |
get_whoop_cycle_sleep | Sleep record tied to a given cycle. | cycle_id, fresh |
get_whoop_cycle_recovery | Recovery record tied to a given cycle. | cycle_id, fresh |
list_whoop_recoveries | Recoveries (HRV / RHR / recovery score) in a window. | start, end, limit, fresh |
list_whoop_sleeps | Sleep activities incl. naps in a window. | start, end, limit, fresh |
get_whoop_sleep | One sleep activity by UUID. | sleep_id, fresh |
list_whoop_workouts | Workouts with zone durations (seconds). | start, end, limit, fresh |
get_whoop_workout | One workout by UUID. | workout_id, fresh |
get_whoop_daily_summary | Joined cycle + recovery + primary sleep + workouts for a UTC date. | date |
sync_whoop | Refresh cache from WHOOP API. Idempotent, incremental by default. | full, since, resources |
get_whoop_events | Chronological "what's new" feed across cached resources. | since, until, resources, limit |
export_whoop | Dump cached records to CSV / JSONL / Parquet. | kind, format, path, start, end, overwrite |
health_check | Composite status (auth, API, cache, schema). Never raises. | live |
Error codes: AUTH_FAILED, RATE_LIMITED, NOT_FOUND, UPSTREAM_ERROR,
VALIDATION_ERROR, CACHE_ERROR, CACHE_EMPTY, FILE_EXISTS,
EXPORT_ERROR, SYNC_ERROR.
The cache is also exposed as read-only MCP resources, so the client can browse date slices without invoking a tool.
| URI | Content |
|---|---|
whoop://db/cycles/{start}/{end} | Cached cycles in [start, end) (dates YYYY-MM-DD). |
whoop://db/recoveries/{start}/{end} | Cached recoveries. |
whoop://db/sleeps/{start}/{end} | Cached sleeps (including naps). |
whoop://db/workouts/{start}/{end} | Cached workouts. |
whoop://db/profile | Latest profile snapshot. |
whoop://db/body_measurement | Latest body_measurement snapshot. |
whoop://db/sync_runs/{limit} | Most recent sync audit rows. |
whoop://db/events/{since} | Event feed since since, until = now. |
whoop://db/events/{since}/{until} | Event feed for explicit window. |
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)<a href="https://allmcps.com/mcp/whoop-mcp"><img src="https://allmcps.com/api/badge/whoop-mcp?style=directory" alt="Whoop MCP on AllMCPs" /></a>