Skip to main content
Glama

whoop-mcp

What this is

A small server that runs on your own computer and lets Claude read your own WHOOP data: profile, recovery, sleep, workouts and daily cycles. It also includes a weekly_review prompt and a profile resource.

It follows the Model Context Protocol (MCP), the standard way Claude connects to outside tools.

This is a learning experiment. It is read-only, so it can't change anything in your WHOOP account. It is not affiliated with WHOOP or Anthropic.

Related MCP server: whoop-mcp

Privacy warning

This project handles personal health data.

  • Each person must use their own WHOOP developer app and their own WHOOP account.

  • Your credentials and tokens stay on your own machine.

  • Never commit or share .env or tokens.json. They give access to your WHOOP data. Both are already listed in .gitignore.

Requirements

  • Node.js 18 or higher

  • A WHOOP account

  • A WHOOP developer app (free, created at the WHOOP developer dashboard)

  • Claude Desktop

Setup

  1. Clone this repository and open a terminal in its folder.

  2. Run npm install.

  3. Create a WHOOP developer app in the WHOOP developer dashboard. Register this redirect URI exactly: http://localhost:3000/callback. Note the Client ID and Client Secret.

  4. Copy .env.example to .env and fill in the values:

    WHOOP_CLIENT_ID=your client id
    WHOOP_CLIENT_SECRET=your client secret
    WHOOP_REDIRECT_URI=http://localhost:3000/callback
  5. Run npm run auth. It prints a login link. Open it in your browser, approve access, and wait for "Login successful". This creates tokens.json.

  6. Run npm run build.

Connect to Claude Desktop

Open Claude Desktop's config file (Settings > Developer > Edit Config) and add this block. Replace the path with the full path to this project's dist/index.js on your machine:

{
  "mcpServers": {
    "whoop": {
      "command": "node",
      "args": ["/full/path/to/whoop-mcp/dist/index.js"]
    }
  }
}

On Windows, backslashes in the path must be doubled, for example C:\\Users\\you\\whoop-mcp\\dist\\index.js.

Then fully quit Claude Desktop (right-click its icon in the system tray and choose Quit, since closing the window isn't enough) and open it again.

Available tools, prompts and resources

Tools

  • ping: replies "pong"; use it to check the connection.

  • get_profile: your basic WHOOP profile.

  • get_recovery: daily recovery score, HRV and resting heart rate.

  • get_sleep: sleep performance, duration, efficiency and time in each stage.

  • get_workouts: sport, duration, strain and heart rate for each workout.

  • get_cycles: daily strain and average heart rate.

The four data tools take an optional days value (1 to 30, default 7).

Prompts

  • weekly_review: asks Claude to fetch your recent data and write a short review with one suggested change for next week. Optional days (default 7).

Resources

  • whoop://profile/summary: your WHOOP user ID and name, fetched live. It doesn't include your email.

Troubleshooting

  • Server doesn't show up in Claude: fully quit Claude Desktop from the tray and reopen it. Also check that the path in the config is correct.

  • 401 or "unauthorized" errors: your login has expired or was revoked. Run npm run auth again.

  • dist folder missing or "cannot find module": run npm run build.

  • Port 3000 already in use during npm run auth: close whatever is using port 3000 and try again. If you'd rather use another port, change it in the redirect URI in both .env and the WHOOP developer dashboard.

Notes

  • WHOOP rotates refresh tokens: each one works only once. The app rewrites tokens.json after every refresh, so don't delete or edit that file while it's running.

  • The offline scope, which allows refreshing, is requested in the login link that npm run auth generates. You don't need to set it in the WHOOP dashboard.

Available Tools

6 tools
get_cyclesA

Returns daily physiological cycles (day strain and average heart rate) for the last N days. Use it to see overall daily strain. strain is 0-21 on Whoop's logarithmic scale (0-9 light, 10-13 moderate, 14-17 high, 18-21 all-out); the latest cycle may still be in progress.

Inputs: days.

get_profileA

Returns the user's basic Whoop profile (user id, name, email). Use it to identify whose data is being read.

Inputs: no named parameters.

get_recoveryA

Returns daily recovery records (recovery score, HRV, resting heart rate, SpO2, skin temperature) for the last N days. Use it to see how recovered the user is. recovery_score_pct is 0-100% (0-33 red/low, 34-66 yellow/medium, 67-100 green/high).

Inputs: days.

get_sleepA

Returns sleep records (performance, duration, efficiency, time in each stage) for the last N days, including naps. Use it to analyze sleep quality and habits. sleep_performance_pct is 0-100% (actual sleep vs. sleep needed); efficiency is the share of time in bed spent asleep. Summary stats exclude naps.

Inputs: days.

get_workoutsA

Returns workout records (sport, duration, strain, average and max heart rate) for the last N days. Use it to review training activity. strain is 0-21 on Whoop's logarithmic scale (0-9 light, 10-13 moderate, 14-17 high, 18-21 all-out).

Inputs: days.

pingA

Returns pong

Inputs: no named parameters.

Tool Schema Changelog

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

Loading tool schema changelog…

    TDQS

    A4/5.0

    Scored across 6 tools

    Disambiguation5/5

    Each data tool targets a clearly distinct Whoop resource: profile, recovery, sleep, workouts, and daily cycles. The only potential overlap—strain in get_workouts vs. day strain in get_cycles—is well separated by descriptions as workout-level vs. daily physiological cycle data.

    Naming Consistency4/5

    Five of six tools follow a clean get_noun snake_case pattern: get_profile, get_recovery, get_sleep, get_workouts, get_cycles. The lone ping tool is a conventional health-check exception, but it is a minor deviation from the otherwise consistent naming scheme.

    Tool Count5/5

    Six tools are well-scoped for a focused Whoop data retrieval server. Each data tool maps to a distinct core resource, and ping is a lightweight utility that does not bloat the surface.

    Completeness5/5

    The tool set covers the main Whoop data domains: profile, recovery, sleep, workouts, and daily cycles. For a read-only health-data integration, this provides complete core coverage with no obvious dead ends.

    Maintenance

    ActivityMaintained
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers