Skip to main content
Glama

WHOOP MCP Server

MCP server for WHOOP biometric data. Query recovery, strain, sleep, workouts, and heart rate from any MCP-compatible AI client.

Two Modes

  • Remote — Calls /api/whoop/stats on a deployed WHOOP-connected site (e.g., patrickwingert.com)

  • Direct — Talks to the WHOOP API directly with local OAuth + token storage

Both modes expose the same 11 tools through a shared interface.

Related MCP server: Whoop MCP Server

Setup

1. Build

npm install
npm run build

2. Configure Claude Code

Remote mode (uses an existing WHOOP-connected site):

{
  "mcpServers": {
    "whoop": {
      "command": "node",
      "args": ["/path/to/whoop-mcp-server/dist/index.js"],
      "env": {
        "WHOOP_MODE": "remote",
        "WHOOP_BASE_URL": "https://patrickwingert.com"
      }
    }
  }
}

Direct mode (standalone, talks to WHOOP API):

{
  "mcpServers": {
    "whoop": {
      "command": "node",
      "args": ["/path/to/whoop-mcp-server/dist/index.js"],
      "env": {
        "WHOOP_MODE": "direct",
        "WHOOP_CLIENT_ID": "your-client-id",
        "WHOOP_CLIENT_SECRET": "your-client-secret"
      }
    }
  }
}

3. Direct Mode — WHOOP Developer Setup

  1. Go to WHOOP Developer Portal

  2. Create a new application

  3. Set redirect URI to http://localhost:8787/callback

  4. Enable scopes: read:profile, read:recovery, read:cycles, read:workout, read:sleep, read:body_measurement

  5. Copy Client ID and Client Secret to your config

4. Direct Mode — OAuth Flow

On first use, the server will need OAuth tokens. The OAuth flow:

  1. Server starts a temporary listener on localhost:8787

  2. Open the generated authorization URL in your browser

  3. Authorize on WHOOP's site

  4. Tokens are stored in ~/.whoop-mcp/tokens.json (chmod 600)

  5. Tokens auto-refresh going forward

Tools

Tier 1 — Biometric Data (read-only)

Tool

Description

whoop_get_stats

Full biometric snapshot (recovery, strain, HR, sleep, workout)

whoop_get_recovery

Recovery score (0-100), resting HR, HRV, SpO2, skin temp

whoop_get_strain

Daily strain (0-21), kilojoules, average/max HR

whoop_get_workout

Latest workout: sport, duration, strain, HR zones, distance

whoop_get_heart_rate

Current HR with source context (resting/workout/decay)

whoop_get_sleep

Sleep performance, stages, efficiency, respiratory rate

whoop_get_sleep_need

Sleep need breakdown: baseline, debt, strain impact, nap offset

Tier 2 — Diagnostics

Tool

Description

whoop_check_health

Endpoint status, token expiry, connection state

whoop_get_cache_status

What's cached, staleness, TTL remaining

whoop_invalidate_cache

Force fresh data on next request

whoop_get_config

Current mode, target, scopes, cache TTL

All tools support response_format: markdown (default, human-readable) or json (structured data).

Environment Variables

Variable

Mode

Required

Description

WHOOP_MODE

Both

Yes

remote or direct

WHOOP_BASE_URL

Remote

Yes

Base URL of WHOOP-connected app

WHOOP_CLIENT_ID

Direct

Yes

From WHOOP developer dashboard

WHOOP_CLIENT_SECRET

Direct

Yes

From WHOOP developer dashboard

Local Storage (Direct Mode)

~/.whoop-mcp/
├── tokens.json      # OAuth tokens (chmod 600)
└── cache.json       # Cached API responses

Testing

# Test with MCP Inspector
npx @modelcontextprotocol/inspector node dist/index.js

Available Tools

16 tools
whoop_authorizeA

Start OAuth flow to connect a WHOOP account. Returns an authorization URL to open in your browser. Direct mode only.

Inputs: no named parameters.

whoop_check_healthB

Connection and endpoint health: status per endpoint, token expiry, connection state

Inputs: response_format.

whoop_get_cache_statusB

Cache freshness: cached data status, age, TTL remaining

Inputs: response_format.

whoop_get_configA

Server configuration: mode, base URL or API target, enabled scopes, cache TTL

Inputs: response_format.

whoop_get_heart_rateB

Current heart rate with context: HR value, source (live/decay/resting), resting HR baseline

Inputs: response_format.

whoop_get_recoveryB

Recovery score and details: score (0-100), resting HR, HRV, SpO2, skin temp

Inputs: response_format.

whoop_get_recovery_historyA

Recent recovery scores: daily recovery, resting HR, HRV, SpO2 trends over multiple days

Inputs: limit, response_format.

whoop_get_sleepB

Latest sleep data: performance %, stages, efficiency, respiratory rate, disturbances, nap flag

Inputs: include_stages, response_format.

whoop_get_sleep_historyB

Recent sleep data: performance, duration, efficiency, stages over multiple nights

Inputs: limit, response_format.

whoop_get_sleep_needC

Sleep need analysis: baseline need, sleep debt, strain-based need, nap offsets

Inputs: response_format.

whoop_get_statsB

Full biometric snapshot: recovery, strain, HR, HRV, SpO2, skin temp, sleep, latest workout

Inputs: response_format.

whoop_get_strainC

Daily strain: strain score (0-21), kilojoules, average and max heart rate

Inputs: response_format.

whoop_get_strain_historyA

Recent daily strain: strain scores, calories, heart rate trends over multiple days

Inputs: limit, response_format.

whoop_get_workoutB

Latest workout: sport, duration, strain, distance, heart rate zones, altitude

Inputs: include_zones, response_format.

whoop_get_workout_historyC

Recent workouts: sport, duration, strain, calories for multiple past workouts

Inputs: limit, response_format.

whoop_invalidate_cacheA

Force fresh data on next request by invalidating the cache

Inputs: no named parameters.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.5/5.0

    Scored across 16 tools

    Disambiguation4/5

    Most tools are clearly distinct by metric and time range, but whoop_get_stats overlaps with specific getters like whoop_get_recovery and whoop_get_sleep, which could cause an agent to misselect. The descriptions help, but the boundary between the aggregate and specific tools is slightly unclear.

    Naming Consistency5/5

    All tools follow a consistent whoop_get_<metric> pattern with snake_case and descriptive names. The pattern is uniform and predictable across the entire set.

    Tool Count4/5

    With 16 tools, the server is slightly above the typical 3-15 range but still remains well-scoped. Each tool has a distinct role in retrieving or managing WHOOP data, so the count feels reasonable rather than excessive.

    Completeness5/5

    The tool set comprehensively covers core WHOOP biometrics—recovery, strain, workout, sleep, and heart rate—with both current and historical data views. The inclusion of health, cache, and config management tools fills the operational gaps, leaving no significant missing operations for the domain.

    Maintenance

    ActivityInactive
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers