whoop-mcp-resilient
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-resilientHow was my recovery and sleep last night?"
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-resilient
An MCP server that gives Claude (and other MCP clients) read-only access to your WHOOP data: recovery, HRV, sleep, strain, workouts, cycles, trends and period comparisons.
Based on whoop-ai-mcp by Shashank Mishra (MIT). This is an independent fork, not affiliated with the original project or with WHOOP. It keeps the original's 16 tools and adds reliability, correctness and efficiency fixes found while running it daily against a real account. Full credit for the original design goes to the upstream author.
Why this fork
The original server works well on a good day. These are the failures that made it unusable on a bad one, all reproduced against the live WHOOP API and fixed with tests:
Problem | What users saw | Fix |
WHOOP's origin intermittently returns HTTP 500 while other requests succeed | Random tool failures | Retries 5xx and network errors/timeouts (not just 429) with jittered exponential backoff |
Parallel 401s each refreshed the token; WHOOP rotates refresh tokens, so all but one got a dead token | A session that "dies" until the app is restarted | Single-flight refresh, adopts a newer token another process already saved, recovers from a lost refresh race, atomic token file writes |
WHOOP sends |
| Contracts accept WHOOP's nulls; last page no longer reported as truncated |
WHOOP's v2 API returns 404 for date-only values like | Silent failures when the model passes a plain date | Plain dates expand to the full UTC day |
| Validation errors on natural requests | Accepts the same relative expressions as the other tools |
Errors were generic ("unexpected error", "retry later or verify authorization") | The model couldn't tell an outage from a bad date | Clear messages: WHOOP outage vs rate limit vs auth vs invalid date (with accepted formats). Response bodies are still never exposed |
Pretty-printed JSON in every tool result | ~28% of every response was whitespace | Compact JSON (same data, ~28% fewer tokens, measured on real responses) |
Opt-in telemetry pointed at the original author's collector | Users of a fork reporting to someone else's dashboard | No built-in endpoint. Telemetry is only offered if you configure your own |
Related MCP server: WHOOP MCP Server
Setup
Create a WHOOP developer app at developer.whoop.com and add the redirect URI
http://localhost:3000/callback. Note its Client ID and Client Secret.Add the server to your MCP client. For Claude Desktop (
~/Library/Application Support/Claude/claude_desktop_config.jsonon macOS):
{
"mcpServers": {
"whoop": {
"command": "npx",
"args": ["-y", "github:dssolutions-mx/whoop-mcp-resilient"],
"env": {
"WHOOP_CLIENT_ID": "your_client_id",
"WHOOP_CLIENT_SECRET": "your_client_secret"
}
}
}
}For Claude Code:
claude mcp add whoop -e WHOOP_CLIENT_ID=your_client_id -e WHOOP_CLIENT_SECRET=your_client_secret -- npx -y github:dssolutions-mx/whoop-mcp-resilientRestart the client. On first use a browser window opens to authorize with WHOOP. Tokens are cached at
~/.whoop-mcp/tokens.json(mode0600) and refresh automatically.
Port 3000 is only used for the few seconds of that first browser authorization. If something else is running on it, stop it for that moment.
Run from a local clone instead
git clone https://github.com/dssolutions-mx/whoop-mcp-resilient.git
cd whoop-mcp-resilient
npm ci
npm run buildThen use "command": "node" with "args": ["/absolute/path/to/whoop-mcp-resilient/dist/index.js"].
Tools
get_today, get_calendar, get_weekly_summary, compare_periods, get_trend, get_baselines, get_sleep_debt, get_recovery_collection, get_sleep_collection, get_workout_collection, get_cycle_collection, get_sleep_by_id, get_workout_by_id, get_cycle_by_id, get_profile, get_body_measurement.
Date parameters accept ISO 8601 (2026-09-15, 2026-09-15T06:00:00Z) or relative expressions: today, yesterday, last 7 days, this week, last week, last month, 2026-09.
Prefer the composite tools (get_today, get_calendar, get_weekly_summary) when you can. They bundle several data types into one call.
Development
npm ci
npm test # 898 tests
npm run typecheck
npm run lintSee CHANGELOG.md for the full list of changes relative to upstream v0.8.2.
License
MIT. See LICENSE: it retains the original copyright notice for whoop-ai-mcp alongside the notice for this fork's modifications.
This server cannot be deployed
Maintenance
Related MCP Connectors
Your WHOOP data in the assistant, read-only: recovery, sleep, strain, workouts, cycles and body meas
WHOOP recovery, strain, sleep and workouts in Claude via official WHOOP OAuth. Free, open source.
Multi-tenant hosted MCP server for Oura Ring — 21 read-only tools, OAuth per user.
Read wearables and lab health data — sleep, activity, workouts, timeseries, lab tests and orders.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceIntegrates WHOOP biometric data into Claude and other MCP-compatible applications, providing access to sleep analysis, recovery metrics, strain tracking, and biological age data through natural language queries.6 npm13MIT
- AlicenseAqualityDmaintenanceExposes WHOOP recovery, sleep, strain, and workout metrics to MCP-compatible AI assistants using OAuth 2.0 authentication, enabling daily wellbeing snapshots, trend analysis, and workload recommendations.6426 npmMIT
- AlicenseAqualityDmaintenanceMCP server providing read access to WHOOP biometric data including recovery, sleep, strain, and workouts.161MIT
- AlicenseAqualityDmaintenanceEnables querying WHOOP biometric data (recovery, strain, sleep, workouts, heart rate) from any MCP-compatible AI client, supporting remote and direct modes.16426 npmMIT