Whoop MCP Server
Whoop MCP Server
A Model Context Protocol (MCP) server that connects your Whoop health data to Claude. Designed to be hosted remotely and used as a custom connector in Claude.ai.
Built using the Whoop Developer API v2.
Features
Recovery Data: Daily recovery scores, HRV, resting heart rate, SpO2, skin temperature
Sleep Analysis: Sleep duration, stages, efficiency, performance, respiratory rate
Strain Tracking: Daily strain scores, calories burned, heart rate zones
Workout History: All logged workouts with detailed metrics
Auto-Sync: Automatically keeps data fresh with smart sync logic
90-Day History: Maintains local cache of your health data for trend analysis
MCP Tools
Tool | Description |
| Morning briefing with recovery, sleep, and strain |
| Recovery patterns over time with HRV/RHR |
| Sleep quality trends and stage breakdowns |
| Training load and calorie trends |
| Manually trigger a data sync |
| Get authorization URL for Whoop connection |
Setup
1. Create a Whoop Developer App
Go to developer.whoop.com
Create a new application
Note your Client ID and Client Secret
Set the redirect URI to your deployed server's callback URL (e.g.,
https://your-app.railway.app/callback)
2. Deploy to Railway
Fork/push this repo to GitHub
Create a new project on Railway
Connect your GitHub repo
Add environment variables:
WHOOP_CLIENT_ID: Your Whoop app client IDWHOOP_CLIENT_SECRET: Your Whoop app client secretWHOOP_REDIRECT_URI:https://your-app.railway.app/callback
Add a volume mounted at
/datafor persistent SQLite storageDeploy!
3. Authorize with Whoop
Visit
https://your-app.railway.app/healthto verify it's runningThe first time you use the
get_auth_urltool in Claude, it will provide an authorization linkVisit the link, log in to Whoop, and authorize the app
You'll be redirected back and the initial 90-day sync will begin
4. Connect to Claude
Go to Claude.ai settings → Connectors
Click "Add custom connector"
Enter:
Name: Whoop
Remote MCP server URL:
https://your-app.railway.app/mcp
Use it in any chat!
Local Development
# Install dependencies
npm install
# Create .env file
cat > .env << EOF
WHOOP_CLIENT_ID=your_client_id
WHOOP_CLIENT_SECRET=your_client_secret
WHOOP_REDIRECT_URI=http://localhost:3000/callback
MCP_MODE=http
EOF
# Run in development mode
npm run devEnvironment Variables
Variable | Description | Default |
| Whoop OAuth client ID | Required |
| Whoop OAuth client secret | Required |
| OAuth callback URL |
|
| SQLite database path |
|
| HTTP server port |
|
|
|
|
Architecture
┌─────────────────────────────────────────────────┐
│ Whoop MCP Server │
│ │
│ ┌─────────────┐ ┌──────────────────┐ │
│ │ MCP Server │◄────►│ SQLite Database │ │
│ │ (HTTP) │ │ - cycles │ │
│ └─────────────┘ │ - recovery │ │
│ │ │ - sleep │ │
│ │ │ - workouts │ │
│ ▼ │ - tokens │ │
│ ┌─────────────┐ └──────────────────┘ │
│ │ Whoop API │ │
│ │ Client │ │
│ └─────────────┘ │
└─────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────┐
│ Claude.ai (Custom Connector) │
│ "Hey, what's my recovery today?" │
└─────────────────────────────────────────────────┘API Endpoints Used
This server uses the following Whoop API v2 endpoints:
GET /v2/user/profile/basic- User profileGET /v2/user/measurement/body- Body measurementsGET /v2/cycle- Physiological cycles (strain data)GET /v2/recovery- Recovery scoresGET /v2/activity/sleep- Sleep recordsGET /v2/activity/workout- Workout records
License
MIT - See LICENSE for details.