Skip to main content
Glama
alacore

whoop-tracker-mcp-server

by alacore

Whoop MCP Server

A lightweight MCP (Model Context Protocol) server for integrating with the Whoop API v2. Built for use with Claude Desktop and other MCP clients.

Features

  • ๐Ÿ” OAuth 2.0 authentication with Whoop

  • ๐Ÿ”„ Automatic token refresh

  • ๐Ÿ“Š Access to all major Whoop data endpoints:

    • User profile and body measurements

    • Sleep, recovery, and cycle data

    • Workout information

  • ๐Ÿณ Docker support for easy deployment

  • ๐Ÿ’พ Persistent token storage

Related MCP server: WHOOP MCP Server

Quick Start

Prerequisites

Setup for Claude Desktop

Choose one of the two methods below to integrate with Claude Desktop. The MCP server runs as part of Claude Desktop - you don't need to start it separately.

Method 1: Using Node.js

  1. Clone and install:

    git clone https://github.com/alacore/whoop-tracker-mcp-server.git
    cd whoop-tracker-mcp-server
    pnpm install
  2. Build the server:

    pnpm run build
  3. Configure Claude Desktop - see Claude Desktop Configuration section below

Method 2: Using Docker

  1. Clone the repository:

    git clone https://github.com/alacore/whoop-tracker-mcp-server.git
    cd whoop-tracker-mcp-server
  2. Build Docker image:

    docker build -t whoop-mcp .
  3. Configure Claude Desktop - see Claude Desktop Configuration section below

Development Mode (Optional)

For testing the MCP server independently or during development:

  1. Configure environment:

    cp .env.example .env

    Edit .env with your Whoop OAuth credentials:

    WHOOP_CLIENT_ID=your_whoop_client_id
    WHOOP_CLIENT_SECRET=your_whoop_client_secret
    WHOOP_REDIRECT_URI=http://localhost:3000/callback
    WHOOP_SCOPES=offline read:profile read:body_measurement read:cycles read:recovery read:sleep read:workout
  2. Run in development mode:

    pnpm run dev

    Note: This runs the server standalone for testing. For actual use with Claude Desktop, follow the configuration instructions below.

Usage

Claude Desktop Configuration

Method 1: Direct Node.js Execution

Add to your Claude Desktop configuration (~/Library/Application Support/Claude/claude_desktop_config.json on macOS):

{
  "mcpServers": {
    "whoop": {
      "command": "node",
      "args": ["/path/to/whoop-tracker-mcp-server/dist/mcp-standalone.js"],
      "env": {
        "WHOOP_CLIENT_ID": "your_client_id",
        "WHOOP_CLIENT_SECRET": "your_client_secret",
        "WHOOP_REDIRECT_URI": "http://localhost:3000/callback",
        "WHOOP_SCOPES": "offline read:profile read:body_measurement read:cycles read:recovery read:sleep read:workout"
      }
    }
  }
}

Prerequisites:

  • Node.js >= 22.0.0 installed

  • Built server (pnpm run build)

  • Replace /path/to/whoop-tracker-mcp-server with your actual project path

Note: The offline scope in WHOOP_SCOPES is required to receive a refresh token during the OAuth2 flow, enabling automatic token renewal without re-authentication.

Method 2: Docker Container

First, build the Docker image:

# Build the Docker image
docker build -t whoop-mcp .

Then add to your Claude Desktop configuration:

{
  "mcpServers": {
    "whoop": {
      "command": "docker",
      "args": [
        "run",
        "--rm",
        "-i",
        "-e",
        "WHOOP_CLIENT_ID=your_client_id",
        "-e",
        "WHOOP_CLIENT_SECRET=your_client_secret",
        "-e",
        "WHOOP_REDIRECT_URI=http://localhost:3000/callback",
        "-e",
        "WHOOP_SCOPES=offline read:profile read:body_measurement read:cycles read:recovery read:sleep read:workout",
        "-v",
        "${HOME}/.whoop-mcp:/home/node/.whoop-mcp",
        "whoop-mcp"
      ]
    }
  }
}

Prerequisites:

  • Docker installed and running

  • Built Docker image (docker build -t whoop-mcp .)

Notes:

  • The -v flag mounts a local directory for persistent token storage across container restarts. First create the directory on your host machine (e.g., mkdir -p ~/.whoop-mcp), then mount it using the -v flag - this is where auth tokens will be stored

  • The offline scope in WHOOP_SCOPES is required to receive a refresh token during the OAuth2 flow, enabling automatic token renewal without re-authentication

Testing Your Setup

To test either configuration:

  1. Restart Claude Desktop after updating the configuration

  2. In Claude, use the Whoop tools:

    • Start with whoop_auth_url to begin authentication

    • Follow the OAuth flow to authorize

    • Use other tools like whoop_get_profile to verify access

Available MCP Tools

Authentication

  • whoop_auth_url - Generate OAuth authorization URL

  • whoop_exchange_token - Exchange auth code for access token

  • whoop_refresh_token - Refresh expired access token

Data Access

  • whoop_get_profile - Get user profile

  • whoop_get_body_measurement - Get body measurements

  • whoop_get_cycles - Get physiological cycles

  • whoop_get_recovery - Get recovery data

  • whoop_get_sleep - Get sleep data

  • whoop_get_workouts - Get workout data

Authentication Flow

  1. Use whoop_auth_url to get authorization URL

  2. Open URL in browser and authorize

  3. Copy the code parameter from callback URL

  4. Use whoop_exchange_token with the code

  5. Tokens are automatically saved and refreshed

Development

# Development with hot reload
pnpm run dev

# Build for production
pnpm run build

# Run built version
pnpm start

License

MIT

Available Tools

5 tools
whoop_get_cycle_by_idB

Get a specific cycle by ID

ParametersJSON Schema
NameRequiredDescriptionDefault
cycleIdYesCycle ID

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so the description must convey behavior. It only states a simple read operation without mentioning error handling, authentication, or rate limits. Minimal disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Extremely concise with one sentence. Front-loads the verb. However, could be slightly more descriptive about the return value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool, it is adequate but fails to describe the return value or any constraints. With no output schema, more context about what the cycle contains would be helpful.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% as the single parameter 'cycleId' is described. The description adds no additional meaning beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Get a specific cycle by ID' with a specific verb and resource. It distinguishes from sibling tools that focus on recovery, sleep, and workouts.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives, such as searching for cycles or using related recovery/sleep tools. Lacks context for selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

whoop_get_recoveryC

Get recovery data for a date range

ParametersJSON Schema
NameRequiredDescriptionDefault
endNoEnd datetime (ISO 8601)
limitNoLimit on number of recoveries (max 25)
startNoStart datetime (ISO 8601)
nextTokenNoToken for pagination

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must convey behavioral traits. It omits details about pagination (nextToken), the maximum limit of 25, or that multiple recoveries may be returned. The agent gains little insight into side effects or constraints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, concise and front-loaded. While it could include more context without becoming verbose, it wastes no words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given four parameters, no output schema, and no annotations, the description is insufficient. It does not explain pagination, limit defaults, or the output format, leaving significant gaps for an agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, with all four parameters described in the schema. The description adds no additional meaning beyond what the schema already includes, so it meets the baseline expectation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'get' and resource 'recovery data', specifying filtering by date range. However, it does not distinguish this tool from siblings like whoop_get_recovery_for_cycle, which also recovers data but for a specific cycle.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives. It does not mention that this is for date-range queries while cycle-specific tools exist, nor any prerequisites or limitations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

whoop_get_recovery_for_cycleA

Get recovery for a specific cycle

ParametersJSON Schema
NameRequiredDescriptionDefault
cycleIdYesCycle ID

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full responsibility. It correctly implies a read-only operation but does not disclose behaviors like error handling, return format, or rate limits. The description is minimal but not misleading.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that efficiently conveys the tool's purpose. There is no extraneous text, and every word contributes to understanding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (one required parameter, no output schema), the description is adequate but leaves room for improvement. It would benefit from mentioning the return value or typical usage context, as there is no output schema to supplement.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% for the single parameter 'cycleId', which is adequately described in the schema. The tool description adds no additional meaning beyond what the schema already provides, so the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Get') and the resource ('recovery for a specific cycle'). It is specific and distinct from sibling tools like 'whoop_get_recovery' (which may not be cycle-specific) and 'whoop_get_cycle_by_id' (which gets cycle info, not recovery).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives such as 'whoop_get_recovery' or other siblings. No context about prerequisites or preferred scenarios is given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

whoop_get_sleep_for_cycleC

Get sleep for a specific cycle

ParametersJSON Schema
NameRequiredDescriptionDefault
cycleIdYesCycle ID

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, and the description does not disclose any behavioral traits such as side effects, permissions, or rate limits. It only restates the tool's purpose.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very short (4 words) and to the point, but it sacrifices useful details. It is acceptable for a simple tool but could be more informative.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and minimal description, the tool lacks context about return values, required permissions, or typical use cases. Incomplete for a data retrieval tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with a basic description of 'Cycle ID'. The tool description adds no additional meaning beyond the schema, so baseline score of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'get' and resource 'sleep for a specific cycle', distinguishing it from siblings like whoop_get_cycle_by_id and whoop_get_recovery_for_cycle. However, it could elaborate on what sleep data is returned.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives, nor any prerequisites or exclusions. It lacks any usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

whoop_get_workoutsC

Get workout data for a date range

ParametersJSON Schema
NameRequiredDescriptionDefault
endNoEnd datetime (ISO 8601)
limitNoLimit on number of workouts (max 25)
startNoStart datetime (ISO 8601)
nextTokenNoToken for pagination

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, and the description does not disclose behavioral traits such as pagination (nextToken), rate limits, or whether it is read-only. Minimal transparency beyond the implied read operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, concise and to the point. However, it is somewhat terse given the tool has 4 parameters and pagination, so a slightly more structured description would improve clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema is provided, and the description does not indicate what data fields are returned or how pagination works. For a tool with multiple parameters and pagination, this is insufficient context for an agent to use effectively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with descriptions for all 4 parameters. The tool description adds no additional meaning beyond what the schema provides, so baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves workout data for a date range, with a specific verb and resource. While it doesn't explicitly distinguish from siblings, siblings are for different entities (cycles, recovery, sleep), so purpose is clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives. Sibling tools have different purposes, but no explicit when-to-use or when-not-to-use instructions are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

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

  1. 5 tool updatesv1.0.1
    • First observedwhoop_get_cycle_by_id
    • First observedwhoop_get_recovery
    • First observedwhoop_get_recovery_for_cycle
    • First observedwhoop_get_sleep_for_cycle
    • First observedwhoop_get_workouts

TDQS

B3.3/5.0

Scored across 5 tools

Disambiguation4/5

Tools are mostly distinct: cycles, recovery (two variants but scoped differently), sleep, and workouts. The two recovery tools could cause minor confusion, but descriptions clarify date range vs. cycle-specific.

Naming Consistency5/5

All tools follow a consistent 'whoop_get_<resource>' pattern with qualifiers like 'by_id' or 'for_cycle'. No mixed conventions or irregular verbs.

Tool Count5/5

With 5 tools covering core fitness metrics (cycles, recovery, sleep, workouts), the count is well-scoped and not excessive or sparse for the server's apparent purpose.

Completeness3/5

The set covers key read operations, but notably lacks a tool to list cycles (e.g., 'get_cycles'), which agents would need to obtain cycle IDs for other tools. This gap could hinder some workflows.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    F
    maintenance
    Enables access to WHOOP fitness and health data through all WHOOP v2 API endpoints. Supports OAuth 2.0 authentication and provides comprehensive access to user profiles, physiological cycles, recovery metrics, sleep analysis, and workout data.
    16
    289 npm
    16
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Enables LLMs to retrieve and analyze sleep, recovery, and physiological cycle data from the WHOOP API. It provides tools for accessing detailed metrics such as strain, HRV, and readiness scores through secure OAuth 2.0 authentication.
    4
    8 npm
    1
    MIT