Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
PORTNoHTTP server port3000
DB_PATHNoSQLite database path./whoop.db
MCP_MODENohttp for remote, stdio for localhttp
WHOOP_CLIENT_IDYesWhoop OAuth client ID
WHOOP_REDIRECT_URINoOAuth callback URLhttp://localhost:3000/callback
WHOOP_CLIENT_SECRETYesWhoop OAuth client secret

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
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
get_todayA

Returns the user's latest WHOOP status as Markdown, every value WHOOP sent: the most recent recovery (score %, Green/Yellow/Red zone, HRV in ms, resting heart rate, SpO2, skin temperature, whether WHOOP is still calibrating), last night's sleep (time asleep and in bed, awake and no-data time, light/deep/REM stages, sleep cycles, disturbances, performance, efficiency, consistency, respiratory rate, the sleep needed before it with its baseline, debt, strain and nap parts, and today's naps) and today's strain so far (0–21) with calories, heart rate and steps. Each section is dated. Use it first for questions like "how am I today?" or "should I train hard?". For more than one day, use get_recovery_trends, get_sleep_analysis, get_strain_history or get_workouts. When a newer version of this server is out, the answer ends with a one-line notice to pass on to the user. Read-only: it never changes the user's WHOOP data. It fetches the data live from WHOOP on every call and keeps no copy, so the answer is current; if WHOOP can't be reached, it says so. If WHOOP isn't connected yet, it returns a message asking to call get_auth_url.

get_recovery_trendsA

Returns daily recovery for the last days days (default 14), newest first, as a Markdown table: recovery score (%), HRV (ms), resting heart rate (bpm), SpO2 (%), skin temperature (°C) and whether WHOOP was still calibrating, for each of the user's local days, then averages over the days that have each value. Days WHOOP hasn't scored yet are listed as pending. Use it for patterns and comparisons, such as "how has my HRV changed this month?". For today alone, use get_today; for the sleep behind the numbers, use get_sleep_analysis. Set days to match the question: 7 for the last week, 30 for the last month, up to 90. Read-only: it never changes the user's WHOOP data. It fetches the data live from WHOOP on every call and keeps no copy, so the answer is current; if WHOOP can't be reached, it says so. If WHOOP isn't connected yet, it returns a message asking to call get_auth_url.

get_sleep_analysisA

Returns nightly sleep for the last days days (default 14), newest first, as Markdown tables: bed and wake time, time asleep (light, deep and REM), in bed, deep, REM, light and awake, performance (%) and efficiency (%); a details table with no-data time, sleep cycles, disturbances, consistency (%), respiratory rate and the sleep needed before each night (baseline, debt, strain, nap credit); a naps table; then averages over the nights that have each value. Nights WHOOP hasn't scored are listed as pending. Each night counts toward the day the user woke up. Use it for sleep patterns. For last night's stages, use get_today; for the recovery those nights produced, use get_recovery_trends. Set days to match the question: 7 for the last week, 30 for the last month, up to 90. Read-only: it never changes the user's WHOOP data. It fetches the data live from WHOOP on every call and keeps no copy, so the answer is current; if WHOOP can't be reached, it says so. If WHOOP isn't connected yet, it returns a message asking to call get_auth_url.

get_strain_historyA

Returns daily strain for the last days days (default 14), including today so far, newest first, as a Markdown table: WHOOP day strain (0–21, covering all activity that day), calories burned (kcal), average and max heart rate and steps, then averages; the day in progress is marked and left out of the averages. Days WHOOP hasn't scored yet are listed as pending. Use it for overall load and activity trends. For individual training sessions, use get_workouts; for how the body coped, use get_recovery_trends. Set days to match the question: 7 for the last week, 30 for the last month, up to 90. Read-only: it never changes the user's WHOOP data. It fetches the data live from WHOOP on every call and keeps no copy, so the answer is current; if WHOOP can't be reached, it says so. If WHOOP isn't connected yet, it returns a message asking to call get_auth_url.

get_workoutsA

Returns individual workouts from the last days days (default 14), newest first, as a Markdown table: local date and start time, activity, duration, strain (or "unscored" when WHOOP hasn't scored it), average and max heart rate, time in heart-rate zones 4–5 and calories; a details table with distance, elevation gain, altitude change, the share of heart-rate data recorded and time in each zone 0–5; then totals. Use it for questions about specific sessions or training volume; for whole-day strain including activity outside workouts, use get_strain_history. Set days to match the question: 7 for the last week, 30 for the last month, up to 90. Read-only: it never changes the user's WHOOP data. It fetches the data live from WHOOP on every call and keeps no copy, so the answer is current; if WHOOP can't be reached, it says so. If WHOOP isn't connected yet, it returns a message asking to call get_auth_url.

get_auth_urlA

Returns a one-time link that connects the user's WHOOP account to this server through WHOOP's own login. Use it when a data tool such as get_today says WHOOP isn't connected or its authorization expired. Give the link to the user to open in a browser: it works once and expires in 10 minutes. Once they have logged in, get_today and the other data tools work. It doesn't read any WHOOP data. A server running in stdio mode can't receive WHOOP's login, so there it returns setup instructions instead; a server whose WHOOP app isn't configured yet answers with the address of its set-up page.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

A4.8/5.0

Scored across 6 tools

Disambiguation5/5

Each tool targets a distinct data slice (today snapshot, recovery, sleep, strain, workouts, auth), and the descriptions explicitly cross-reference each other to steer selection (e.g. 'for today alone use get_today; for the sleep behind the numbers use get_sleep_analysis'). Boundaries between the single-day and trend tools are clearly spelled out, so misselection is unlikely.

Naming Consistency5/5

All six tools use a uniform snake_case get_* pattern (get_auth_url, get_today, get_recovery_trends, get_sleep_analysis, get_strain_history, get_workouts). The convention is predictable and readable throughout.

Tool Count5/5

Six tools is well-scoped for a read-only WHOOP data server: one auth helper, one current-status snapshot, and four trend/history tools. Each tool earns its place with no redundancy or filler.

Completeness4/5

The surface covers the core lifecycle of WHOOP data: auth, today's recovery/sleep/strain, and trend views for recovery, sleep, strain, and workouts. Minor gaps exist (e.g. no user profile/basic account info and no auth-revocation tool), but agents can work around these.

Maintenance

ActivityMaintained
ResponsivenessNo issues