WHOOP MCP by usefulapi
Read WHOOP recovery, sleep, cycles, workouts and body measurements.
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"whoop": {
"url": "https://whoop.usefulapi.io/mcp"
}
}
}Remote endpoints
https://whoop.usefulapi.io/mcpstreamable-httpWhat it can do
Tool inventory
Tools (10)
🟢whoop_get_profile
The current user's basic WHOOP profile (user id, email, first name, last name). WHOOP REST: GET /v2/user/profile/basic. Scope: read:profile.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢whoop_body_measurement
The user's body measurements (height in meters, weight in kilograms, max heart rate). WHOOP REST: GET /v2/user/measurement/body. Scope: read:body_measurement.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢whoop_list_cycles(limit, start, end, nextToken)
List the user's physiological cycles (a WHOOP 'day', ~24h anchored to sleep), most recent first. Each cycle carries a score with day strain, kilojoules burned, and average/max heart rate. Paginated (limit/nextToken) and filterable by created-time window (start/end). WHOOP REST: GET /v2/cycle. Scope: read:cycles.
Input Schema
{
"type": "object",
"properties": {
"limit": {
"description": "Max records to return per page (1–25, default 10).",
"type": "integer",
"minimum": 1,
"maximum": 25
},
"start": {
"description": "Return records created at/after this ISO 8601 datetime, e.g. 2024-01-01T00:00:00.000Z.",
"type": "string"
},
"end": {
"description": "Return records created before this ISO 8601 datetime, e.g. 2024-02-01T00:00:00.000Z.",
"type": "string"
},
"nextToken": {
"description": "Pagination cursor: pass the `next_token` from a previous response to fetch the next page.",
"type": "string"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢whoop_get_cycle(cycleId)
Get a single physiological cycle by its id (strain, kilojoules, average/max heart rate, start/end). WHOOP REST: GET /v2/cycle/{cycleId}. Scope: read:cycles.
Input Schema
{
"type": "object",
"properties": {
"cycleId": {
"type": "string",
"minLength": 1,
"description": "The cycle id (an integer, e.g. from whoop_list_cycles)."
}
},
"required": [
"cycleId"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢whoop_get_cycle_recovery(cycleId)
Get the recovery scored for a specific cycle (recovery %, resting heart rate, HRV RMSSD, SpO2 %, skin temperature). WHOOP REST: GET /v2/cycle/{cycleId}/recovery. Scope: read:recovery.
Input Schema
{
"type": "object",
"properties": {
"cycleId": {
"type": "string",
"minLength": 1,
"description": "The cycle id (an integer, e.g. from whoop_list_cycles)."
}
},
"required": [
"cycleId"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢whoop_list_recoveries(limit, start, end, nextToken)
List the user's recoveries, most recent first. Each recovery scores how ready the body is (recovery %, resting heart rate, HRV RMSSD, SpO2 %, skin temperature) and links to its cycle and sleep. Paginated (limit/nextToken) and filterable by created-time window (start/end). WHOOP REST: GET /v2/recovery. Scope: read:recovery.
Input Schema
{
"type": "object",
"properties": {
"limit": {
"description": "Max records to return per page (1–25, default 10).",
"type": "integer",
"minimum": 1,
"maximum": 25
},
"start": {
"description": "Return records created at/after this ISO 8601 datetime, e.g. 2024-01-01T00:00:00.000Z.",
"type": "string"
},
"end": {
"description": "Return records created before this ISO 8601 datetime, e.g. 2024-02-01T00:00:00.000Z.",
"type": "string"
},
"nextToken": {
"description": "Pagination cursor: pass the `next_token` from a previous response to fetch the next page.",
"type": "string"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢whoop_list_sleep(limit, start, end, nextToken)
List the user's sleep activities, most recent first. Each carries a score with sleep-stage summary, sleep needed, respiratory rate, and sleep performance %. Paginated (limit/nextToken) and filterable by created-time window (start/end). WHOOP REST: GET /v2/activity/sleep. Scope: read:sleep.
Input Schema
{
"type": "object",
"properties": {
"limit": {
"description": "Max records to return per page (1–25, default 10).",
"type": "integer",
"minimum": 1,
"maximum": 25
},
"start": {
"description": "Return records created at/after this ISO 8601 datetime, e.g. 2024-01-01T00:00:00.000Z.",
"type": "string"
},
"end": {
"description": "Return records created before this ISO 8601 datetime, e.g. 2024-02-01T00:00:00.000Z.",
"type": "string"
},
"nextToken": {
"description": "Pagination cursor: pass the `next_token` from a previous response to fetch the next page.",
"type": "string"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢whoop_get_sleep(sleepId)
Get a single sleep activity by its id (stage summary, sleep needed, respiratory rate, sleep performance %, start/end). WHOOP REST: GET /v2/activity/sleep/{sleepId}. Scope: read:sleep.
Input Schema
{
"type": "object",
"properties": {
"sleepId": {
"type": "string",
"minLength": 1,
"description": "The sleep id (a UUID, e.g. from whoop_list_sleep)."
}
},
"required": [
"sleepId"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢whoop_list_workouts(limit, start, end, nextToken)
List the user's workouts, most recent first. Each carries a score with strain, average/max heart rate, distance (meters), and per-heart-rate-zone durations. Paginated (limit/nextToken) and filterable by created-time window (start/end). WHOOP REST: GET /v2/activity/workout. Scope: read:workout.
Input Schema
{
"type": "object",
"properties": {
"limit": {
"description": "Max records to return per page (1–25, default 10).",
"type": "integer",
"minimum": 1,
"maximum": 25
},
"start": {
"description": "Return records created at/after this ISO 8601 datetime, e.g. 2024-01-01T00:00:00.000Z.",
"type": "string"
},
"end": {
"description": "Return records created before this ISO 8601 datetime, e.g. 2024-02-01T00:00:00.000Z.",
"type": "string"
},
"nextToken": {
"description": "Pagination cursor: pass the `next_token` from a previous response to fetch the next page.",
"type": "string"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢whoop_get_workout(workoutId)
Get a single workout by its id (sport, strain, average/max heart rate, distance, zone durations, start/end). WHOOP REST: GET /v2/activity/workout/{workoutId}. Scope: read:workout.
Input Schema
{
"type": "object",
"properties": {
"workoutId": {
"type": "string",
"minLength": 1,
"description": "The workout id (a UUID, e.g. from whoop_list_workouts)."
}
},
"required": [
"workoutId"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Community
Evidence