Read-only MCP server for the WHOOP API v2 — query and analyse your own recovery, sleep, strain and workout data from any MCP client
Strong foundation with 16 well-named, verb-prefixed tools and comprehensive descriptions (avg 180 chars). All tools have input schemas with typed parameters and descriptions. Tool annotations present (READ_ONLY, SYNCS_LOCAL_STORE). Key gaps: output schemas not explicitly documented in code; error handling guidance minimal; no pagination support despite potential for large result sets (e.g., whoop_timeseries could return hundreds of points). Analysis tools (summarize_metric, trend_metric, correlate_metrics) are well-designed with clear parameter constraints. Security posture strong (OAuth 2.0, token storage via keyring optional, no secrets in params).
Compare a metric between two groups of days (e.g., workout days vs rest days). Returns mean, stdev, count, and Cohen's d effect size for each group.
Pearson and Spearman correlation between two metrics over a date range, with optional lag sweep (default ±3 days). Returns correlation per lag, sample size, and refusal reasons.
Find maximal runs of consecutive days where a metric meets or misses a threshold. Returns streak direction, start/end dates, length, and mean value.
Rolling z-scores (standardized deviations from rolling mean) for one metric over a date range, with configurable window size.
Descriptive statistics (count, mean, stdev, min, max, median, days_missing) for one metric over a date range.
Least-squares trend (slope per day, r-squared, fit quality) and rolling means (7d, 30d, 90d) for one metric over a date range.
Output schemas not explicitly documented in source code. While tool descriptions mention return fields (e.g., 'Returns cycle_id, start/end times...'), formal JSON Schema output definitions are absent, forcing LLMs to infer structure.
No pagination or result-limiting parameters on tools that could return large datasets (whoop_timeseries, find_streaks, correlate_metrics with lag sweeps). Risk of context window exhaustion.
Error handling guidance minimal. Tools lack recovery hints (e.g., 'If sync fails, check whoop_data_coverage first'). No categorization of errors as retryable vs. fatal.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 62 | <=2025-11-25 | v2 |
Complete OAuth 2.0 login: exchange the authorization code for tokens and store them. Resolves the principal identity and links it to the WHOOP member.
Query cycles (physiological days) within a date range. Returns cycle_id, start/end times, and whether recovery/sleep/strain data is available for each.
Query what data the local store holds for the signed-in user: record counts per collection, date ranges, and last sync time. Answers from the persistent store, not a live WHOOP call.
Initiate OAuth 2.0 login against WHOOP. Prints the authorize URL; the caller pastes the redirect or extracts the code/state query parameters and calls whoop_complete_login with them.
Query recovery scores within a date range. Returns recovery_score, hrv_rmssd_milli, resting_heart_rate, and score_state for each cycle.
Query sleep records within a date range. Returns sleep_performance_percentage, sleep_efficiency_percentage, duration, and score_state for each cycle.
Query strain scores within a date range. Returns strain, kilojoules, and score_state for each cycle.
Incremental sync of the signed-in user's WHOOP data into the local store. Fetches only records newer than the last sync checkpoint, upserting them idempotently. Returns the number of records imported per collection.
Query a single metric (recovery_score, hrv, resting_heart_rate, sleep_performance, sleep_efficiency, or strain) within a date range. Returns every SCORED record with its value and cycle_id.
Query workout records within a date range. Returns sport, duration, kilojoules, and score_state for each workout.
whoop_login and whoop_sync lack explicit input schemas in visible code. Schemas inferred from docstrings only; no formal JSON Schema registration visible.
Tool composition could be tighter. whoop_data_coverage is a discovery tool but not mentioned in INSTRUCTIONS as a prerequisite for other tools. LLMs may not know to call it first.