Skip to main content
Glama

WHOOP MCP Server

An MCP (Model Context Protocol) server that provides Claude Desktop with access to your WHOOP fitness tracker data, including recovery scores, sleep metrics, and strain data.

Features

  • Recovery Data: Get your daily recovery score, HRV, resting heart rate, and SpO2

  • Sleep Analysis: View sleep duration, stages (light/deep/REM), efficiency, and performance

  • Recovery Trends: Track your recovery over the past 7-14 days

  • Strain Metrics: Monitor daily strain, calories, and heart rate data

  • Workout History: View recent workouts with sport type, strain, calories, and HR zones

Related MCP server: WHOOP MCP Server

Prerequisites

  • Python 3.11+

  • uv package manager

  • A WHOOP membership and device

  • WHOOP Developer account (free)

Setup

1. Clone and Install

git clone https://github.com/JasonBates/whoop-mcp-server.git
cd whoop-mcp-server
uv sync

2. Create WHOOP Developer App

  1. Go to developer.whoop.com

  2. Sign in with your WHOOP account

  3. Create a new application:

    • App Name: "WHOOP MCP" (or your preference)

    • Redirect URI: http://localhost:8080/callback

  4. Note your Client ID and Client Secret

3. Configure Credentials

Create a .env file from the example:

cp .env.example .env

Edit .env and add your credentials:

WHOOP_CLIENT_ID=your_client_id_here
WHOOP_CLIENT_SECRET=your_client_secret_here

4. Authorize with WHOOP

Run the token acquisition script:

uv run python scripts/get_tokens.py

This will:

  • Open your browser to log in to WHOOP

  • Request authorization for the app

  • Save your access and refresh tokens to .env

  • Test the API connection

5. Configure Claude Desktop

Add the server to your Claude Desktop config at: ~/Library/Application Support/Claude/claude_desktop_config.json

{
  "mcpServers": {
    "whoop": {
      "command": "uv",
      "args": [
        "--directory",
        "/path/to/whoop-mcp-server",
        "run",
        "python",
        "-m",
        "whoop_mcp"
      ]
    }
  }
}

Replace /path/to/whoop-mcp-server with the full path where you cloned the repository.

6. Restart Claude Desktop

Quit and reopen Claude Desktop. You should see "whoop" in the MCP servers list.

Usage

Once configured, you can ask Claude things like:

  • "What's my WHOOP status today?" (uses the combined summary)

  • "How did I sleep last night?"

  • "Show me my recovery trend for the past week"

  • "What's my current strain?"

  • "Show me my recent workouts"

Available Tools

Tool

Description

get_today_summary

Today's recovery, sleep, and strain in one call

get_sleep_trend

Sleep history (default 7 days, unlimited)

get_recovery_trend

Recovery history (default 7 days, unlimited)

get_workouts

Workout history (default 5, unlimited)

Troubleshooting

"Authentication error: No access token found"

Run the token script: uv run python scripts/get_tokens.py

Tokens expired

The server automatically refreshes tokens, but if you encounter persistent auth errors, re-run the token script.

Multiple machines

Each machine must authorize separately with WHOOP. You cannot copy .env tokens between machines because the first API call on each session refreshes the token, which invalidates it on other machines. Run uv run python scripts/get_tokens.py on each machine you want to use.

Rate limiting

WHOOP API allows 100 requests/minute and 10,000/day. Normal usage is unlikely to hit these limits.

Development

# Test with MCP Inspector
npx @modelcontextprotocol/inspector uv run python -m whoop_mcp

License

MIT

Available Tools

4 tools
get_recovery_trendA

Get recovery scores for the last N days.

Args: days: Number of days to look back (default: 7, no limit)

Shows the trend of your recovery to help identify patterns.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/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 states 'Get recovery scores', indicating a read-only operation. However, it does not explicitly confirm no side effects or mention permissions, though the nature is clear.

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?

Three sentences with no fluff. The first sentence states the purpose, the second explains the parameter, and the third provides outcome context. Every sentence adds value.

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

Completeness5/5

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

Given the tool's low complexity (one optional parameter, no annotations, output schema present), the description covers purpose, parameter, and outcome. No gaps are apparent.

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

Parameters5/5

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

Schema coverage is 0%, so the description compensates fully. It explains the 'days' parameter as 'Number of days to look back (default: 7, no limit)', adding meaning beyond the schema's type and default.

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 recovery scores' and 'Shows the trend of your recovery', specifying the verb (get) and resource (recovery scores). It distinguishes from siblings like get_sleep_trend and get_workouts, which target different health metrics.

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

Usage Guidelines3/5

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

The description implies usage for trend analysis with 'to help identify patterns', but it does not explicitly state when to use this tool versus alternatives (e.g., get_today_summary might offer a snapshot). No exclusions or prerequisites are mentioned.

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

get_sleep_trendA

Get sleep data for the last N days.

Args: days: Number of days to look back (default: 7, no limit)

Shows sleep duration, efficiency, and performance trends.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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

No annotations provided, so description carries full burden. Discloses it shows sleep duration, efficiency, and performance trends. Adequate for a simple read operation, though could mention data freshness.

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?

Two concise sentences plus parameter doc. No fluff, front-loaded with purpose, efficient.

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

Completeness5/5

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

Output schema exists, so return values are covered. Description mentions key output fields (duration, efficiency, trends). Complete for a one-parameter tool.

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

Parameters5/5

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

Schema has 0% coverage, but description adds 'no limit' to the days parameter, clarifying scope beyond the default value. Essential behavioral detail.

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?

Clearly states it gets sleep data for last N days, specifying the resource (sleep data) and action (get). Distinguishes from siblings like get_recovery_trend by focusing on sleep trends.

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

Usage Guidelines3/5

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

Provides parameter details but no explicit when-to-use or when-not-to-use compared to siblings. Implied usage is for sleep trends over days, but no guidance on alternatives.

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

get_today_summaryA

Get today's complete WHOOP status: recovery, sleep, and strain in one call.

This is the recommended daily check-in tool. Returns:

  • Recovery score with HRV and resting heart rate

  • Last night's sleep duration and quality

  • Current strain level and calories burned

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

Discloses the returned data categories (recovery score, sleep duration, strain, etc.) without needing further detail, since no annotations are present. Could mention that it is a read-only operation, but the description adequately implies safety.

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?

Three concise sentences: first defines purpose, second recommends usage, third lists outputs. No wasted words; every sentence serves a purpose.

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

Completeness5/5

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

Given the presence of an output schema, the description provides sufficient context about what the tool returns. It covers the main use case completely for a daily check-in.

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

Parameters4/5

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

Tool has zero parameters and schema coverage is 100%. Baseline 4 for no parameters; description adds no parameter info but none is needed.

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 uses a specific verb 'Get' and resource 'today's complete WHOOP status: recovery, sleep, and strain in one call.' It clearly distinguishes from sibling tools like 'get_recovery_trend' and 'get_sleep_trend' which focus on individual metrics.

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

Usage Guidelines4/5

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

States 'This is the recommended daily check-in tool,' providing clear context for when to use it. Does not explicitly list when not to use or name alternatives, but the parenthetical mention of siblings implies those for detailed trends.

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

get_workoutsA

Get recent workouts with strain and heart rate data.

Args: limit: Number of workouts to return (default: 5, no limit)

Shows your recent activities including sport type, strain, duration, calories, and heart rate zones.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior2/5

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

No annotations provided, so the description carries the full burden. It does not explicitly state that this is a read-only operation, nor does it disclose any side effects, authorization requirements, or rate limits. While the nature of retrieving recent workouts suggests no side effects, the lack of explicit confirmation reduces transparency.

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 concise with two sentences plus an args section, all front-loaded with the core action. Every sentence adds value without redundancy. The structure is clear and easy to parse.

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

Completeness4/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 optional parameter, known return fields), the description covers the essential aspects. However, it does not specify ordering (e.g., most recent first) or any pagination details. An output schema exists, so return type details are not required, but missing ordering constraints could cause ambiguity.

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

Parameters4/5

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

The input schema has only the 'limit' parameter with a default value of 5. The description adds meaning by explaining it as 'Number of workouts to return (default: 5, no limit)' and clarifies that omitting the parameter returns 5 workouts. Since schema description coverage is 0%, this additional context is valuable.

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 recent workouts with strain and heart rate data.' and lists the specific data fields returned (sport type, strain, duration, calories, heart rate zones). This distinguishes it from sibling tools like get_recovery_trend, get_sleep_trend, and get_today_summary, which focus on different health metrics.

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 explicit guidance on when to use this tool versus siblings. The description implies it is for retrieving workout data, but does not state when not to use it or mention alternatives. For example, it could specify that for daily summaries or recovery data, one should use the respective sibling tools.

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

TDQS

A4.1/5.0
Disambiguation5/5

Each tool targets a distinct aspect of WHOOP data: recovery trend, sleep trend, today's summary, and workouts. There is no overlap between the tools.

Naming Consistency5/5

All tools follow a consistent verb_noun pattern (get_recovery_trend, get_sleep_trend, get_today_summary, get_workouts), making it easy to predict tool names.

Tool Count5/5

With 4 tools covering recovery, sleep, daily summary, and workouts, the set is well-scoped for a health data summary server. The number is appropriate for the domain.

Completeness3/5

Core daily metrics are covered, but missing historical strain trend, detailed HRV or heart rate data retrieval, and other WHOOP features like cycle tracking. Some gaps exist.

Maintenance

ActivityMaintained
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • -
    license
    Not graded
    quality
    Not graded
    maintenance
    Connects WHOOP fitness data to Claude Desktop, enabling natural language queries about workouts, recovery, sleep patterns, and health metrics while keeping data secure and private.
  • A
    license
    A
    quality
    C
    maintenance
    Gives Claude access to your WHOOP health data including recovery, sleep, workouts, cycles, body measurements, and profile via the WHOOP Developer API.
    7
    14
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/JasonBates/whoop-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server