Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
WHOOPMCP_CACHENoCache responses on diskfalse
WHOOPMCP_SCOPESNoSpace-separated scope listall read scopes + offline
WHOOP_CLIENT_IDYesOAuth client ID from the WHOOP dashboard
WHOOPMCP_TIMEOUTNoPer-request timeout, seconds30
WHOOPMCP_STATE_DIRNoToken and cache location~/.local/state/whoopmcp
WHOOP_REDIRECT_URIYesMust match a registered redirect URL exactly
WHOOP_CLIENT_SECRETYesOAuth client secret
WHOOPMCP_TOKEN_BACKENDNofile or keyringfile

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
whoop_auth_statusA

Report whether a valid WHOOP token is held, its scopes and its expiry.

Call this first when a data tool fails; it distinguishes "never logged in" from "token expired" from "scope not granted".

whoop_loginA

Return a URL the user must open in a browser to authorise this server.

The user completes the WHOOP consent screen, is redirected to the configured redirect URI, and then passes the code and state query parameters back via whoop_complete_login.

whoop_complete_loginA

Finish a login using the code and state from the redirect URL.

Args: code: The code query parameter from the redirect. state: The state query parameter from the redirect. It is verified against the pending login before the code is used.

whoop_logoutA

Delete the locally stored WHOOP token.

This does not revoke the grant at WHOOP; do that from the WHOOP app under Settings if you want the authorisation itself withdrawn.

get_profileA

Return the user's WHOOP profile: user id, email, first and last name.

get_body_measurementA

Return height in metres, weight in kilograms and max heart rate in bpm.

list_recoveriesA

List recovery records: recovery score (%), HRV (ms) and resting heart rate (bpm).

Args: start: ISO 8601 start of the range, e.g. "2026-07-01T00:00:00Z". Defaults, with end, to the last 7 days when both are omitted. end: ISO 8601 end of the range. limit: Records to return, capped at 25 per page by WHOOP. next_token: Cursor from a previous truncated response, to continue that page.

list_sleepsA

List sleep records: performance (%), efficiency, and stage durations in milliseconds.

Args: start: ISO 8601 start of the range. Defaults, with end, to the last 7 days when both are omitted. end: ISO 8601 end of the range. limit: Records to return, capped at 25 per page by WHOOP. next_token: Cursor from a previous truncated response, to continue that page. detail: "summary" (default) omits the per-stage sleep-duration breakdown to keep the response small; "full" includes it under "stage_durations", with the units declared once in a top-level "units" key.

list_cyclesA

List physiological cycles: day strain (0-21), average and max heart rate, kilojoules.

A cycle is WHOOP's notion of a day, bounded by sleep rather than by midnight, and is the key other records join on.

Args: start: ISO 8601 start of the range. Defaults, with end, to the last 7 days when both are omitted. end: ISO 8601 end of the range. limit: Records to return, capped at 25 per page by WHOOP. next_token: Cursor from a previous truncated response, to continue that page.

list_workoutsA

List workouts: sport, strain, average and max heart rate, and heart-rate zone durations.

Args: start: ISO 8601 start of the range. Defaults, with end, to the last 7 days when both are omitted. end: ISO 8601 end of the range. limit: Records to return, capped at 25 per page by WHOOP. next_token: Cursor from a previous truncated response, to continue that page. detail: "summary" (default) omits the per-zone heart-rate duration breakdown to keep the response small; "full" includes it under "zone_durations", with the units declared once in a top-level "units" key.

get_sleepA

Return a single sleep by its v2 UUID.

get_workoutA

Return a single workout by its v2 UUID.

summarize_periodA

Summarise recovery, sleep and strain over a date range.

Returns mean, standard deviation, median, min and max for each metric, along with the number of scored records behind each figure and days_missing -- how many calendar days in the range have no scored record for that metric, a coverage gap rather than a record count.

Args: start: ISO 8601 start of the range. end: ISO 8601 end of the range.

metric_trendA

Compute the direction and rate of change of one metric over a range.

Args: metric: One of "recovery_score", "hrv", "resting_heart_rate", "sleep_performance", "sleep_efficiency", "strain". start: ISO 8601 start of the range. end: ISO 8601 end of the range.

Returns the least-squares slope in metric units per day. A slope is a description of the window requested, not a forecast. Also returns an r² fit-quality figure for that slope -- both as the number and as a word ("strong"/"moderate"/"weak"/"negligible") -- and 7/30/90-day rolling means of the metric over calendar days.

correlate_metricsA

Correlate two metrics over a range, sweeping a range of day-offsets.

Joins the two metrics by UTC calendar date rather than by cycle, and reports Pearson's r and Spearman's rho at every lag from -lag_days to +lag_days (inclusive), each with its own sample size. A positive lag means metric_a's date precedes metric_b's by that many days -- metric_a "leads". A lag whose surviving pairs fall below 8 is reported as refused rather than omitted.

Correlation here is descriptive, not causal: WHOOP daily samples are autocorrelated (today's recovery is not independent of yesterday's), so do not read a strong r at some lag as proof that one metric drives the other, and do not treat a handful of weeks as a stable finding.

Args: metric_a: First metric name, as in metric_trend. metric_b: Second metric name. start: ISO 8601 start of the range. end: ISO 8601 end of the range. lag_days: Sweep radius in days (default 3, capped at 14); the sweep covers every integer lag from -lag_days to +lag_days.

Raises: ValueError: if lag_days is negative.

compare_periodsA

Compare every summary metric between a baseline period and a later one.

Useful for "did the training block change anything" questions. Returns both periods' summaries and the delta, with sample sizes.

Args: baseline_start: ISO 8601 start of the baseline period. baseline_end: ISO 8601 end of the baseline period. comparison_start: ISO 8601 start of the comparison period. comparison_end: ISO 8601 end of the comparison period.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

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/kurok/whoopmcp'

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