whoop-mcp
This server connects your WHOOP data to AI assistants (Claude, ChatGPT, etc.) so you can ask health questions in plain English and get computed, data-driven answers.
Profile & Account
Retrieve your profile (name, email, biometrics)
Check connection status, re-authorize, and diagnose issues from within chat
Daily & Weekly Summaries
One-call snapshot of recovery, sleep, strain, and workouts for any day (supports natural language like "yesterday")
Monday-to-Sunday weekly report with averages and workout totals
Raw Record Retrieval
List and fetch individual recoveries, sleeps, workouts, and physiological cycles with full detail
Filter workouts by sport, include/exclude naps, and optionally return raw API records
Trends & Analytics
Recovery trends: recovery %, HRV, resting heart rate direction over 7–180 days
Sleep trends: duration, efficiency, consistency, and sleep debt
Strain & training load: daily strain stats and acute:chronic load ratio to avoid overtraining
Behavior correlations: how strain, sleep, and HRV affect next-morning recovery (with Pearson r)
Period comparison: side-by-side comparison of any two date ranges
Personal records & streaks: best/worst metrics and longest green-recovery streaks
Health overview: all-in-one view of today's status, trends, training load, records, and correlations
Sensor Data & Export
Minute-level heart rate and skin temperature streams for individual sleeps
Export your full WHOOP history to local JSON and CSV files (stored only on your machine)
Search & Fetch (Natural Language)
Search across your data with queries like "runs this month" or "sleep last week"
Fetch full records for any result by ID
The server runs locally, is read-only against WHOOP's API, stores tokens locally with strict permissions, and has no telemetry. Metrics like trends and ratios are computed server-side before AI interpretation for accuracy.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@whoop-mcphow did I sleep last week?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
whoop-mcp-server
Your WHOOP shows you charts. It can't answer "should I train hard today" or "what actually hurts my recovery". This server can.
It connects your WHOOP data to Claude, ChatGPT, and any MCP client. You ask in plain English. It computes the answer from your own records and lets the AI explain it.
You: should I train hard today?
AI: Recovery 81% (green). HRV trending up. Sleep debt cleared.
Your 7-day load is 0.94x your 28-day base.
You are conditioned for more.Runs on your machine. Read-only. The only network peer is api.prod.whoop.com. No telemetry. MIT.
What you need
A WHOOP account. Any membership works.
uv or pipx, to install one command line tool.
An MCP client: Claude Desktop, Claude Code, Cursor, Windsurf, VS Code, or ChatGPT.
One constraint to know before you start. WHOOP has no shared developer app, so during setup you create your own free one. It takes about two minutes of clicking, and it is the reason this is private by design: your tokens belong to your app, on your machine, and your health data never routes through anyone else's server. Including mine.
Related MCP server: WHOOP MCP Server
Set it up
Install the tool:
uv tool install whoop-mcp-server(pipx install whoop-mcp-server works the same.)
Then run the one command that does everything:
whoop-mcp-server setupHere is what happens, in order, so nothing surprises you:
Your WHOOP app. The wizard opens WHOOP's developer dashboard and tells you exactly what to click: create a team, create an app, enable every scope including
offline, set the redirect URL to exactlyhttp://localhost:8765/callback. The form requires a privacy policy URL. Use this repo's:https://github.com/rajdeepmondaldotcom/whoop-mcp-server/blob/main/PRIVACY.md. Copy the Client ID and Secret, paste them into the terminal. They're stored locally with 0600 permissions.Authorize. Your browser opens WHOOP's consent screen. Approve it. Tokens land in
~/.whoop-mcpand refresh themselves from then on. You never do this again.Proof. The wizard makes a live API call and prints your actual latest recovery. If anything is misconfigured, you find out here, in the terminal, not later in a chat window.
Your clients. It detects Claude Desktop, Cursor, Windsurf, VS Code, and Claude Code, and writes their configs for you. Existing config is backed up before any edit. If Claude Desktop is running, the wizard asks to quit it first, because Desktop silently overwrites config edits made while it's open. Then it launches the configured command once and confirms the server answers. "Done" means verified, not hopeful.
Restart your client. Ask it: "How did I sleep last night?" Then ask the better question: "Give me the full picture of my health this quarter."
Two useful asides. If you want to see the tools work before connecting anything, whoop-mcp-server serve --demo serves 150 days of realistic generated data through the same pipeline. And if anything misbehaves later, whoop-mcp-server doctor names what's wrong and the fix.
What you can ask
24 tools cover every public user-readable endpoint in WHOOP's API, plus the analysis layer that turns records into answers.
Ask | Tool behind it |
"Give me the full picture of my health" |
|
"How am I doing today?" |
|
"What actually affects my recovery?" |
|
"Am I overtraining?" |
|
"Is my HRV improving?" |
|
"Show my overnight heart rate curve" |
|
"This month vs last month?" |
|
"My records this year?" |
|
"Export everything" |
|
Week grids, raw records, profile |
|
"I have an old WHOOP activity id" |
|
Connection trouble |
|
Dates are plain English everywhere: yesterday, last 30 days, this week, 2 years ago, 2026-05.
ChatGPT's required search and fetch tools are implemented too, plus 4 resources and 4 ready-made prompts (morning_readiness, weekly_review, sleep_coach, training_planner).
More questions worth asking: docs/PROMPTS.md.
Works with
Client | Setup |
Claude Desktop |
|
Claude Code |
|
Cursor | auto via setup, or |
Windsurf | auto via setup |
VS Code | auto via setup, or |
ChatGPT | remote connector, see below |
Docker |
|
Any MCP client |
|
ChatGPT connects to remote MCP servers, so expose the HTTP transport and tunnel it:
whoop-mcp-server serve --transport http --port 8000 # endpoint: /mcp
ngrok http 8000Then in ChatGPT: Settings, Apps & Connectors, Advanced settings, enable Developer mode, create a connector with https://<your-tunnel>/mcp and no auth.
Be careful here: a no-auth tunnel means anyone with the URL can read your health data. Keep the URL private and the tunnel short-lived. Claude's stdio setup never exposes anything.
Why the answers hold up
The model is maybe 20% of this product. The other 80% is making the numbers right. Models are bad at arithmetic over 90 days of records, so this server computes first and lets the model explain.
Trend lines are fit to date-sorted series. WHOOP returns records newest-first. Fit arrival order instead and every trend reads backwards.
Direction respects what the metric means. Rising HRV is improvement. Rising resting heart rate is not.
Records land on calendar days using their own timezone offset. A sleep belongs to the morning you woke up, even when you travel.
WHOOP rotates both OAuth tokens on every refresh. Refreshes here are serialized, saved before use, and shared across concurrent requests. Re-running auth rescues a live server without a restart.
The client honors WHOOP's rate-limit headers, retries with backoff, and caps pagination. When a result is truncated or approximate, the output says so instead of pretending it's complete.
What it can't do: WHOOP's public API has no endpoints yet for Peak features like the stress monitor and healthspan. When WHOOP ships them, they land here. The overnight sensor stream isn't enabled for every account, and the tool reports that instead of failing. Bulk export intentionally fetches the collection endpoints; raw sleep streams are available per sleep with get_sleep_stream(include_raw=true).
105 tests, all offline against a faked WHOOP API. CI on Python 3.10 to 3.13.
CLI
whoop-mcp-server setup Guided setup: app, authorize, auto-configure clients
whoop-mcp-server serve Run the server (--demo, --transport stdio|http|sse, --host, --port)
whoop-mcp-server status Config and token state
whoop-mcp-server doctor Diagnose setup and connectivity
whoop-mcp-server auth Scriptable OAuth flow
whoop-mcp-server logout Delete tokens (--revoke also revokes at WHOOP)Configuration
Nothing required after whoop-mcp-server setup. Overrides, in priority order: process env, ./.env, ~/.whoop-mcp/.env, ~/.whoop-mcp/config.json.
Variable | Default | Purpose |
| none | WHOOP app credentials |
|
| Must exactly match the dashboard |
| off |
|
|
| Tokens, config, exports |
| system zone | IANA timezone for "today" and week bounds |
|
| Seconds |
|
| Logs go to stderr. stdout belongs to MCP |
| none | Static token for testing, no refresh |
Privacy
Read-only against WHOOP. Tokens stored locally with 0600 permissions. The only writes are local files you ask for (export_data) and the OAuth flow you trigger. One thing worth knowing: aggregates like trends and correlations can reveal more about you than single records. Connect this only to AI clients you trust with health data. Full policy: PRIVACY.md. Vulnerabilities: SECURITY.md.
Contributing
uv venv && uv pip install -e ".[dev]" && pytest && ruff check .The whole test suite runs offline. CONTRIBUTING.md lists the invariants that keep the data honest. The short version of the architecture: client.py talks to WHOOP, transform.py cleans the records, summaries.py and analytics.py do the math, server.py exposes the tools. oauth.py and tokens.py own auth. demo.py is the generated account.
Troubleshooting
Symptom | Fix |
"WHOOP authorization required" |
|
Redirect fails after consent | The dashboard redirect URI must be exactly |
| Enable all read scopes plus |
Tools missing in a client | Re-run |
No recovery shown today | WHOOP scores it after you wake and sync. The summary says so |
Sleep stream "not available" | WHOOP doesn't expose it for every account. Nightly summaries still work |
Anything else |
|
License
MIT. See LICENSE. Not affiliated with or endorsed by WHOOP. WHOOP is a trademark of WHOOP, Inc.
Available Tools
24 toolscompare_periodsCompare periodsARead-only
Compare two date ranges across recovery, HRV, resting heart rate, sleep, strain, calories, and workout count - with per-metric change, percent change, and an improved/declined/unchanged assessment. Period A is the baseline; period B is compared against it.
All four arguments accept: today | yesterday | N days ago | last week |
this month | YYYY-MM-DD | ISO datetime. Example: compare "last month" to
"this month" by using the same expression for a period's start and end.
| Name | Required | Description | Default |
|---|---|---|---|
| period_a_start | Yes | ||
| period_a_end | Yes | ||
| period_b_start | Yes | ||
| period_b_end | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral context beyond the readOnlyHint annotation by detailing the output (per-metric change, percent change, improved/declined/unchanged assessment). No contradiction with annotations; readOnlyHint is consistent with a read-only comparison operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise paragraphs. The first paragraph states purpose and output, the second explains date format and usage. No unnecessary words; every sentence adds value. Front-loaded with key information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of 4 required string parameters with flexible date formats and the presence of an output schema, the description provides sufficient context: it explains the date format variety, the baseline logic, and the metrics covered. No gaps for an AI agent to correctly invoke the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, but the description explains that all four parameters accept the same flexible date expressions (e.g., 'today', 'yesterday', 'last week') and provides an example. This adds significant meaning beyond the bare schema, though per-parameter specifics could be more explicit.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool compares two date ranges across specific health metrics and provides per-metric change, percent change, and an assessment. This distinguishes it from sibling tools like 'get_daily_summary' and 'get_health_overview' which do not perform comparisons.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains that Period A is the baseline and Period B is compared against it, and provides examples of acceptable date expressions (e.g., 'last week', 'YYYY-MM-DD') and a usage example ('compare last month to this month'). It does not explicitly mention when not to use or compare to alternative tools, but the guidance is clear for typical use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
connect_whoop_accountConnect WHOOP accountA
Connect or re-authorize the user's WHOOP account from inside the chat: opens the WHOOP consent page in the user's browser on this machine and waits up to 3 minutes for them to approve. Only call this when the user explicitly asks to connect, reconnect, or fix authorization. Requires WHOOP app credentials to be configured already (otherwise it returns setup steps instead of opening anything).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses browser interaction, 3-minute wait, and fallback behavior if credentials missing. Annotations add context but description provides crucial behavioral details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with key action and conditions, no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers trigger, behavior, timeout, and prerequisites. Return value not described but output schema exists to cover that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters, so description need not add param info. Baseline 4 applies because schema coverage is 100% and no param details are needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool connects or re-authorizes a WHOOP account, using specific verbs. Distinguishes from sibling data retrieval and analysis tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to call: only when user asks to connect, reconnect, or fix authorization. Also notes prerequisite of configured WHOOP credentials.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_dataExport all WHOOP dataA
Export every WHOOP record in a date range to local files on this machine: data.json (complete transformed dataset, plus raw API records when include_raw is true), daily_summary.csv (one row per day), and workouts.csv. Nothing is uploaded anywhere. Returns the file paths and record counts. Large ranges can take a minute or two.
`start`/`end` accept: N years ago | N months ago | YYYY-MM-DD | ISO datetime.
| Name | Required | Description | Default |
|---|---|---|---|
| start | No | 2 years ago | |
| end | No | today | |
| include_raw | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Explicitly states no data is uploaded, describes output files and their contents, and warns about processing time. Annotations are consistent; adds safety and scope details beyond structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise with no filler. Front-loaded with action and outputs, then safety, then parameter details. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given three parameters, existing output schema (implied by description), and sibling context, the description covers all needed information for an agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description fully explains each parameter: date formats for start/end and purpose of include_raw. This compensates entirely for schema's lack of documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description specifies the exact action (export), the resource (WHOOP records in date range), and the output (three local files). It clearly distinguishes from sibling getter tools that fetch single items or summaries.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context for date parameters and performance warning for large ranges. While it doesn't explicitly state when not to use, the description implies this is for bulk exports, contrasting with sibling tools for single queries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fetchFetch WHOOP documentARead-only
Fetch the full document for an id returned by search. Supported id
forms: day:YYYY-MM-DD, sleep:, workout:, cycle:,
recovery:, profile.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description's job is to add context beyond that. It does so by specifying supported id forms (day, sleep, workout, etc.), but does not disclose error handling, permissions, or response behavior. The value added is moderate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description consists of two short sentences with no extraneous information. It front-loads the core purpose and provides the critical id format details efficiently, earning each word's place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema available, the description does not need to explain return values. It sufficiently covers the tool's purpose, input, and usage context. Minor omission: no mention of prerequisites or error conditions, but for a simple fetch with readOnlyHint, this is nearly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 0% schema description coverage, the description fully compensates by detailing all valid id formats: 'day:YYYY-MM-DD, sleep:<uuid>, workout:<uuid>, cycle:<int>, recovery:<cycle_int>, profile.' This adds crucial meaning beyond the schema's type 'string' alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool fetches a full document for an id returned by `search`, with specific verb ('fetch') and resource ('WHOOP document'). It distinguishes itself by being a generic fetcher for any id, setting it apart from the many get_* sibling tools that target specific document types.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides context by saying to use ids from `search` and lists supported id formats, but it does not explicitly state when to use this tool versus alternatives like get_workout or get_sleep. No exclusions or when-not-to-use guidance is given, making it adequate but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_activity_mappingActivity ID mappingARead-only
Map a legacy WHOOP v1 activity id to its v2 UUID. Useful when older exports, links, or integrations refer to an activity by v1_id.
| Name | Required | Description | Default |
|---|---|---|---|
| activity_v1_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description aligns with this by describing a mapping operation. No additional behavioral details are added beyond what annotations provide, but there is no contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, front-loads the purpose and usage context, and contains no redundant information. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the single parameter and existence of an output schema (not shown but noted), the description adequately covers the tool's purpose and use case, though it does not detail the output format.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds meaning to the parameter 'activity_v1_id' by explaining it is a legacy WHOOP v1 identifier, and states the result is a v2 UUID, which compensates for the 0% schema description coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'Map a legacy WHOOP v1 activity id to its v2 UUID', clearly identifying the verb (map) and resource (activity id), and distinguishes from sibling tools which focus on other data retrieval or analysis.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: 'Useful when older exports, links, or integrations refer to an activity by v1_id', indicating when to use the tool, though it does not explicitly mention when not to use it or suggest alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_connection_statusWHOOP connection statusARead-only
Whether this server is connected to a WHOOP account: app credentials, token state and expiry, granted scopes, and a live API check. Call this first when WHOOP data tools fail.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses behavioral traits beyond the readOnlyHint annotation: lists specific checks (app credentials, token state/expiry, granted scopes, live API check). No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two succinct sentences: first describes what the tool does, second gives usage guidance. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters, an output schema exists (implied), annotations are present, and description covers both purpose and usage. Tool is simple and fully specified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so schema coverage is 100%. Description adds no param info, but none is needed. Baseline score of 4 is appropriate for zero-parameter tools.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Describes exactly what it checks (credentials, token state, scopes, live API) and distinguishes itself with the specific instruction to call it first when WHOOP data tools fail, making its purpose clear and distinct from sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance on when to use ('call this first when WHOOP data tools fail'), but does not mention when not to use or list alternatives among siblings, though the context is already strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_correlationsBehavior correlationsARead-only
How the user's metrics move together day-to-day (7-180 day window): strain vs next-morning recovery, sleep duration vs recovery, sleep consistency vs recovery, strain vs that night's sleep, HRV vs recovery. Pearson r with strength labels and plain-English interpretations - correlation, not causation.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint true, so no mutation concerns. The description adds behavioral context: day-to-day analysis, Pearson r, strength labels, plain-English interpretations. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph that front-loads the main purpose and lists correlations. It is concise with no extraneous words. Could be structured with bullet points for readability, but not necessary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the existence of an output schema (not shown), the description does not need to detail return format. It provides enough context on the nature of correlations and interpretation. The missing parameter link reduces completeness slightly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter 'days' has default 90 and no schema description (0% coverage). The description mentions '7-180 day window' but does not explicitly state that the parameter controls the window length. This is a gap for a single-parameter tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool computes how user metrics move together day-to-day over a 7-180 day window. It lists specific correlations (strain vs recovery, etc.) and distinguishes from sibling trend tools like get_recovery_trends which show individual trends, not relationships.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives the time window and includes a caution ('correlation, not causation'). It implies usage for understanding pairwise relationships between metrics, but does not explicitly contrast with sibling tools. Slightly improved by stating when to use alternatives like get_recovery_trends.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_cycleCycle by idARead-only
Get one cycle by id, optionally with the recovery and sleep that belong to it (WHOOP links each recovery and primary sleep to a cycle). Set include_raw=true to also attach WHOOP's untouched API records.
| Name | Required | Description | Default |
|---|---|---|---|
| cycle_id | Yes | ||
| include_recovery | No | ||
| include_sleep | No | ||
| include_raw | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description confirms the read-only behavior (consistent with readOnlyHint annotation) and explains the optional parameters' effects, including the include_raw flag for raw API records. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the main purpose, no unnecessary words. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 4 parameters, an output schema exists, and annotations are provided, the description fully covers the key behavior and optional features. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description compensates by explaining three parameters: include_recovery, include_sleep, and include_raw. It adds context beyond the schema titles, though cycle_id is not explicitly described (but is clear from context).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'get', the resource 'one cycle by id', and the optional inclusions of recovery and sleep. This distinguishes it from sibling tools like 'get_cycles' (plural) and others that fetch different data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to include recovery, sleep, and raw data, providing context on WHOOP's data relationships. However, it does not explicitly state when to use this tool vs. alternatives like 'get_cycles', though the singular nature implies it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_cyclesList cyclesARead-only
List physiological cycles (WHOOP's wake-to-wake "days"): day strain, calories, heart rate. Newest first; the newest cycle is usually still in progress.
Defaults to the last 14 days when no range is given. `start`/`end` accept:
today | yesterday | N days ago | last week | YYYY-MM-DD | ISO datetime.
| Name | Required | Description | Default |
|---|---|---|---|
| start | No | ||
| end | No | ||
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description adds value by noting the newest cycle is usually in progress and the default date range. It does not contradict annotations and provides behavioral context beyond the structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with two sentences in the first paragraph and a second paragraph for parameter details. It is front-loaded with purpose and ordering, then parameter guidance, with no unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists (return values likely documented there), the description covers purpose, ordering, default range, and parameter formats completely. It is sufficient for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It thoroughly explains the accepted formats for start and end parameters, adding significant meaning. However, the limit parameter is not described, leaving a small gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists physiological cycles (WHOOP's wake-to-wake days) with specific data fields (strain, calories, heart rate) and ordering (newest first). It distinguishes from sibling tools like get_cycle (singular) and get_daily_summary (daily aggregates).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description specifies default behavior (last 14 days) and explains accepted date formats for start/end parameters. While it doesn't explicitly state when not to use or compare with alternatives, the context implies it's for listing multiple cycles, and the parameter guidance is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_daily_summaryDaily summaryARead-only
One day of WHOOP data in a single call: recovery score, sleep, day strain, and workouts, with a one-line summary. The best first tool for "how am I doing" or "how did I sleep" questions.
`day` accepts: today | yesterday | N days ago | YYYY-MM-DD.
| Name | Required | Description | Default |
|---|---|---|---|
| day | No | today |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds context by listing the data components returned, but readOnlyHint already indicates no destructive behavior. The description does not cover other behavioral aspects like auth requirements or rate limits, so score 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loaded with the core purpose and key information. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 sufficiently covers the tool's inputs and outputs. It explains the parameter format and lists the data types returned. For a single-parameter tool, it is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description compensates well by detailing the day parameter's accepted formats: 'today | yesterday | N days ago | YYYY-MM-DD'. However, it could be more exhaustive (e.g., range or relative days).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves one day of WHOOP data with specific components (recovery, sleep, strain, workouts, summary). It also distinguishes itself as the best first tool for common queries, setting it apart from sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly recommends this tool for 'how am I doing' or 'how did I sleep' questions, providing clear guidance on when to use it. It also explains the day parameter format. However, it does not explicitly mention when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_health_overviewHealth overviewARead-only
The holistic everything-at-once view (7-180 day window): today's status, recovery/sleep/strain trend directions, training load, personal records and streaks, and the strongest behavior-physiology correlations. The best first call for "give me the full picture of my health".
| Name | Required | Description | Default |
|---|---|---|---|
| days | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true. The description adds the specific window (7-180 days) and the content (trends, correlations, etc.), providing meaningful behavior context beyond annotations. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no wasted words. Front-loaded with purpose, then details content. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with one optional parameter and existing output schema, the description provides sufficient context: window range, content types, and recommended usage. Complete for an agent to understand what the tool returns.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter 'days' with default 90, but schema description coverage is 0%. The description implies the parameter controls the window with '7-180 day window', but does not explicitly mention the parameter name, default, or that it's optional. Partially compensates for missing schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool provides a holistic overview of health metrics (status, trends, training load, personal records, correlations) over a 7-180 day window. It uses specific verbs and distinguishes itself from sibling tools by calling it the 'best first call' for a full picture.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says it's the best first call for 'give me the full picture of my health', indicating when to use. Does not explicitly list alternatives or when not to use, but the context of sibling tools like get_recovery_trends implies specificity. Slight improvement possible.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_personal_recordsPersonal records & streaksARead-only
Bests, worsts, and streaks over a window (7-180 days): best/worst recovery, highest HRV, lowest resting heart rate, longest sleep, highest strain day, biggest workout, green-recovery streaks, and totals.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true and openWorldHint=false, and the description adds behavioral context by listing the types of records (best/worst recovery, HRV, etc.) and the valid window range (7-180 days). This provides value beyond the annotations, though it does not detail output structure or computation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, readable sentence that front-loads the key action and lists examples. It is efficient with no wasted words, though a slightly more structured format could improve scannability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the single optional parameter and the existence of an output schema, the description provides a good overview of the tool's capabilities (window, types of records). It is complete enough for an agent to understand what the tool returns and how to use it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage for the 'days' parameter. The description clarifies its purpose as the window size and specifies the allowed range (7-180 days), adding meaning beyond the schema's 'Days' label.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it retrieves 'bests, worsts, and streaks' over a customizable window (7-180 days) and lists specific examples like recovery, HRV, sleep, strain, etc. This distinguishes it from sibling tools like get_recoveries or get_sleeps, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for viewing aggregated personal records and streaks, but does not explicitly state when to prefer this over specific sibling tools (e.g., get_recoveries) or when not to use it. Usage context is implied but not fully clarified.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_profileWHOOP profileARead-only
Get the user's WHOOP profile and body measurements (name, email, height, weight, max heart rate). Set include_raw=true to also attach WHOOP's untouched profile and body-measurement records.
| Name | Required | Description | Default |
|---|---|---|---|
| include_raw | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, confirming safety. The description adds that include_raw=true attaches raw records, providing some behavioral context beyond annotations. However, it lacks details on authentication requirements, rate limits, or response size.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly written sentences with no unnecessary words. First sentence covers purpose and data returned; second sentence explains the optional parameter. Highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 param) and presence of an output schema, the description covers essential usage. Could be slightly improved by explicitly stating the return includes standard profile fields, but overall complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 0% schema description coverage, the description explains the sole parameter include_raw: setting it to true attaches untouched profile and body-measurement records. This adds clear semantics beyond the schema's default value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves the user's WHOOP profile and body measurements, listing specific fields (name, email, height, weight, max heart rate). This distinguishes it from sibling tools like get_cycle or get_sleep that focus on other resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for fetching profile info, but provides no explicit guidance on when to use this tool versus alternatives like fetch or get_connection_status. No exclusions or alternative suggestions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recoveriesList recoveriesARead-only
List recovery records (recovery %, HRV, resting heart rate, SpO2, skin temperature), newest first.
Defaults to the last 14 days when no range is given. `start`/`end` accept:
today | yesterday | N days ago | last week | YYYY-MM-DD | ISO datetime.
| Name | Required | Description | Default |
|---|---|---|---|
| start | No | ||
| end | No | ||
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description adds behavioral context: it returns specific metrics, orders newest first, and defaults to a 14-day range. No contradiction exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with essential information front-loaded: the action, resource, fields, ordering, and defaults. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the existence of an output schema, return values need not be explained. However, with 0% schema coverage and 3 parameters, the description should mention the limit parameter and possible pagination. The default 14-day range is useful but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description explains the start and end parameters with concrete allowed values (today, yesterday, etc.), which are not in the schema. However, the limit parameter is not described, and with 0% schema coverage, this is a gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists recovery records with specific metrics (recovery %, HRV, etc.) and specifies newest-first ordering. While it doesn't explicitly differentiate from sibling tools like get_recovery_trends, the focus on individual records is implied.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides default behavior (last 14 days) and acceptable date formats for start/end. However, it lacks guidance on when to use this tool over alternatives (e.g., get_recovery_trends) and doesn't mention the limit parameter's role or limitations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recovery_trendsRecovery trendsARead-only
Recovery trends over a window (7-180 days): statistics, trend direction, and unusual days for recovery %, HRV, and resting heart rate, plus a daily table. Trend directions account for metric polarity (rising HRV is good, rising resting heart rate is not).
| Name | Required | Description | Default |
|---|---|---|---|
| days | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it readOnlyHint=true. The description adds that trend directions account for metric polarity (rising HRV good, rising RHR bad), which is useful behavioral context beyond annotations. Still lacks details on edge cases like days outside 7-180.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no waste. Front-loaded with purpose and immediately provides specifics. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists (not shown), the description covers the key aspects: metrics, window, polarity. Could mention the return format lightly, but overall sufficient for a one-param trend tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter (days), and schema description coverage is 0%. The description implicitly documents the valid range (7-180 days) but does not mention the default of 30 days, which is in the schema. For a single parameter with no enums, this is adequate compensation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description lists specific metrics (recovery %, HRV, resting heart rate) and outputs (statistics, trend direction, unusual days, daily table), distinguishing it from siblings like get_recoveries which likely returns raw recovery points.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or when-not-to-use guidance. The description implies it's for aggregated trend analysis over a window, but does not mention alternatives like get_recoveries for raw data.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sleepSleep by idARead-only
Get one sleep record by its UUID (from get_sleeps or a recovery's sleep_id). Set include_raw=true to also attach WHOOP's untouched API record.
| Name | Required | Description | Default |
|---|---|---|---|
| sleep_id | Yes | ||
| include_raw | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark readOnlyHint=true. Description adds value by explaining the include_raw parameter attaches the raw WHOOP record, beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no wasted words. Front-loaded with primary purpose, then optional behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given output schema exists and low complexity, description sufficiently covers ID sourcing and optional raw data retrieval. Complete for a get-by-id tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema coverage, the description fully explains both parameters: sleep_id as UUID from specific sources, include_raw as attaching raw record. Compensates completely.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'Get one sleep record by its UUID' with specific resource and identification method. Distinguishes from sibling tools like get_sleeps.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context on sourcing the UUID (from get_sleeps or recovery's sleep_id) and optional include_raw parameter, but does not explicitly state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sleepsList sleepsARead-only
List sleep records (duration, stages, efficiency, performance, sleep debt), newest first.
Defaults to the last 14 days when no range is given. `start`/`end` accept:
today | yesterday | N days ago | last week | YYYY-MM-DD | ISO datetime.
| Name | Required | Description | Default |
|---|---|---|---|
| start | No | ||
| end | No | ||
| include_naps | No | ||
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds behavioral details beyond annotations: sorting (newest first), default range, and accepted date formats. Annotations declare readOnlyHint=true, and description is consistent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences front-load purpose, then provide usage details. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, parameters, defaults, and ordering. Output schema exists. Could mention sibling tools for more context, but within scope it is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but description adds significant meaning for start/end parameters with accepted formats. However, include_naps and limit are not explained beyond their names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the verb (List) and resource (sleep records) and lists included fields. However, it does not explicitly differentiate from sibling tools like get_sleep or get_sleep_stream.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides default behavior (last 14 days) and acceptable date formats, but no explicit guidance on when to use this tool vs alternatives like get_sleep or search.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sleep_streamSleep sensor streamARead-only
Minute-level overnight sensor data for one sleep: heart rate and skin temperature curves (downsampled to resolution_minutes buckets) plus overnight stats like the lowest heart rate and when it happened. Get the sleep_id from get_sleeps, get_daily_summary, or a recovery record. WHOOP does not expose this stream for every account/app - if unavailable, a clear note is returned instead of an error. Set include_raw=true to also attach WHOOP's untouched stream payload.
| Name | Required | Description | Default |
|---|---|---|---|
| sleep_id | Yes | ||
| resolution_minutes | No | ||
| include_raw | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds value beyond readOnlyHint by detailing the return data (heart rate, skin temperature, lowest heart rate, timestamp) and the behavior when the stream is unavailable. It also mentions the include_raw option. A slight deduction for not explicitly stating that it is a single-record operation (one sleep), but that is implied.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with no redundant sentences. It front-loads the core purpose, then provides sourcing, availability note, and optional parameter guidance in a logical order.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (3 parameters, output schema exists), the description covers input sourcing, parameter behavior, return data summary, and an edge case (unavailable stream). It is complete and self-contained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 0% schema description coverage, the description explains each parameter: sleep_id source, resolution_minutes as 'downsampled to resolution_minutes buckets', and include_raw as attaching the untouched payload. This fully compensates for the schema's lack of descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it provides 'minute-level overnight sensor data for one sleep' with heart rate and skin temperature curves, plus stats. It also specifies how to obtain the sleep_id, distinguishing it from sibling tools like get_sleeps or get_daily_summary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Get the sleep_id from get_sleeps, get_daily_summary, or a recovery record' and notes that the stream may not be available for all accounts, with a clear note returned instead of an error. This provides when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sleep_trendsSleep trendsARead-only
Sleep trends over a window (7-180 days): hours slept, performance, efficiency, consistency, and sleep debt - statistics, trend directions, unusual nights, and a nightly table. Naps are counted but excluded from nightly averages.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, indicating a safe read operation. The description adds behavioral details: naps are counted but excluded from nightly averages, and the window range is 7-180 days. This goes beyond annotations to inform agents about data handling constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences: the first front-loads the main purpose and covered metrics, the second adds a crucial detail about nap handling. Every part is informative with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the single optional parameter with default, the presence of an output schema, and annotations, the description covers all key aspects: metrics included, window range, and nap handling. No significant gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, but the description compensates by explaining that the 'days' parameter defines the window length (7-180 days). This adds essential meaning beyond the schema's default value and type.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves sleep trends over a window (7-180 days) and lists specific metrics (hours slept, performance, efficiency, consistency, sleep debt, statistics, trend directions, unusual nights, nightly table). It distinguishes from sibling tools like get_sleep, get_sleeps, get_sleep_stream which are for single entries, multiple entries, or raw data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for aggregated trend analysis over a period but does not explicitly state when to use this tool versus alternatives like get_sleep (single night) or compare_periods. The context is clear but lacks explicit when-not or exclusion statements.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_strain_trendsStrain & training loadARead-only
Strain and training-load trends over a window (7-180 days): daily strain statistics, calories, workout totals by sport, and the acute:chronic load ratio (7-day vs 28-day average strain) when enough data exists.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description adds behavioral context by specifying the returned data elements and the condition for the acute:chronic load ratio ('when enough data exists'). No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence efficiently communicates all essential information: what the tool does, the data window, and specific data returned. No extraneous words, front-loaded with key purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that an output schema exists (not shown but indicated), the description does not need to detail return structure. It covers the tool's purpose, parameter range, and a conditional aspect. Slightly more context about prerequisites or data source could be added, but overall sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With schema description coverage at 0%, the description adds meaning by specifying the valid range ('7-180 days') for the 'days' parameter, which is absent from the schema (only default and type). This clarifies usage beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses specific verbs and nouns: 'Strain and training-load trends' with a defined window, and lists all data components (daily strain, calories, workout totals, acute:chronic ratio). It clearly distinguishes from sibling tools like get_recovery_trends and get_sleep_trends by focusing on strain and load.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for trend analysis over a customizable time window (7-180 days), but does not explicitly state when to use this tool versus alternatives such as get_daily_summary or get_correlations. No when-not-to-use or exclusion criteria are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_weekly_reportWeekly reportARead-only
Monday-to-Sunday report: a per-day grid of recovery, sleep, and strain, plus weekly averages and workout totals.
`week_of` accepts: this week | last week | YYYY-MM-DD (any day in the
target week).
| Name | Required | Description | Default |
|---|---|---|---|
| week_of | No | this week |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, so no destructive behavior. The description adds detail on output structure (per-day grid, weekly averages, workout totals) beyond annotations, but does not mention other behavioral aspects like pagination or rate limits, which are not needed given the simple read-only nature.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (two sentences plus a parameter note), front-loading the core purpose. Every sentence adds value with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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, read-only, output schema exists), the description sufficiently covers what the tool does, its output content, and how to use the parameter. No gaps remain for the agent to make an informed call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage, but the description explicitly explains the 'week_of' parameter with acceptable formats ('this week', 'last week', 'YYYY-MM-DD'), adding essential meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it produces a 'Monday-to-Sunday report' with specific metrics (recovery, sleep, strain, weekly averages, workout totals), distinguishing it from siblings like get_daily_summary or get_sleep. The verb 'get' and resource 'weekly report' are well-defined.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear parameter guidance ('week_of' accepts specific values), and the weekly nature implies use for weekly overviews. However, it does not explicitly state when to use this tool versus related siblings like get_recoveries or get_sleep_trends.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_workoutWorkout by idARead-only
Get one workout by its UUID (from get_workouts). Set include_raw=true to also attach WHOOP's untouched API record.
| Name | Required | Description | Default |
|---|---|---|---|
| workout_id | Yes | ||
| include_raw | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true. Description adds useful behavioral info: the effect of 'include_raw' parameter (attaches raw API record). No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two efficient sentences, no fluff, front-loaded purpose. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema covers return format. Description explains single-item retrieval and raw data option. Does not mention error handling or missing UUID scenarios, but overall adequate for a simple read tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 0% description coverage. Description explains 'include_raw' parameter's effect, but does not describe 'workout_id' format or constraints beyond being a UUID. Partial compensation for schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Get one workout by its UUID', specifying verb, resource, and identifier. Distinguishes from sibling 'get_workouts' by referencing it as the source for UUID.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Indicates that the UUID comes from 'get_workouts', implying proper usage flow. Does not explicitly state when not to use, but context is clear. A slight gap in excluding alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_workoutsList workoutsARead-only
List workouts (sport, strain, calories, heart rate, distance, HR zones), newest first. Optionally filter by sport name (substring match, e.g. "run").
Defaults to the last 30 days when no range is given. `start`/`end` accept:
today | yesterday | N days ago | last week | YYYY-MM-DD | ISO datetime.
| Name | Required | Description | Default |
|---|---|---|---|
| start | No | ||
| end | No | ||
| sport | No | ||
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description correctly implies no side effects. It adds value by specifying default time range, ordering, and filter semantics, which go beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (4 efficient lines) and front-loaded with purpose. Every sentence adds value; no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the 4 parameters, the description covers start, end, and sport well but omits 'limit'. An output schema exists but is not provided; the description does not need to cover return values, but the missing limit parameter is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description explains start/end date formats and sport substring matching. It does not mention the 'limit' parameter, which is present in the schema with a default. Overall, it compensates well for the missing schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists workouts with specific fields (sport, strain, calories, heart rate, distance, HR zones) and sorts newest first. It distinguishes from sibling tools like 'get_workout' (singular) and other data-retrieval tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use: to list workouts with optional sport filter and date range. It provides default behavior (last 30 days) and date format options. However, it does not explicitly mention when not to use or suggest alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searchSearch WHOOP dataARead-only
Search WHOOP data with a natural-language query (e.g. "sleep last week",
"runs this month", "recovery yesterday"). Returns matching day summaries,
workouts, and sleeps as documents whose ids can be passed to fetch.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, description adds that it returns documents with IDs that can be passed to fetch, providing context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single-paragraph description is efficient, front-loaded, and no unnecessary words. Slightly verbose but acceptable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given output schema existence and many sibling tools, description fully explains return type and integration with fetch tool, making it complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema coverage, description compensates by clarifying that query is a natural-language string and gives examples, though lacks formal constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states tool performs search across WHOOP data using natural-language queries, with examples. It distinguishes from sibling tools which are specific getters.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implicitly suggests use for broad queries, mentions returned documents can be fetched, but does not explicitly state when to use versus alternative specific getters.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Every tool has a clearly distinct purpose, from listing records to retrieving specific ones, trends, correlations, and exports. Even similar tools like get_daily_summary and get_health_overview serve different scopes.
All tools follow a consistent verb_noun snake_case pattern (e.g., get_sleeps, get_recovery_trends, export_data), with no mixing of conventions or vague verbs.
24 tools is slightly above the typical range but justified by the need to cover multiple data types (recovery, sleep, strain, workouts) and provide analytical tools like compare_periods and get_correlations. Each tool serves a specific need without redundancy.
The tool surface covers all major WHOOP data types (profile, recovery, sleep, strain, workout, cycle) with listing, detail, trends, comparisons, and export. No obvious gaps for a read-only health tracking server.
Maintenance
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
WHOOP recovery, strain, sleep and workouts in Claude via official WHOOP OAuth. Free, open source.
Garmin data in Claude & ChatGPT via the Garmin Health API. OAuth sign-in, no password sharing.
Connect Claude to your Intervals.icu watch data for fitness, workout review, and plan writing.
Your WHOOP data in the assistant, read-only: recovery, sleep, strain, workouts, cycles and body meas
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceConnects WHOOP fitness data to Claude Desktop, enabling natural language queries about workouts, recovery, sleep patterns, and physiological cycles with secure OAuth authentication and local data storage.16327MIT
- -licenseNot gradedqualityNot gradedmaintenanceConnects WHOOP fitness data to Claude Desktop, enabling natural language queries about workouts, recovery, sleep patterns, and health metrics while keeping data secure and private.
- AlicenseNot gradedqualityDmaintenanceExposes Whoop fitness data (recovery, sleep, strain, workouts) to Claude for use as a daily training coach, enabling natural language queries about your health metrics and training readiness.MIT
- AlicenseNot gradedqualityCmaintenanceEnables Claude to read your Whoop recovery, sleep, cycle, and workout data through natural language queries.163MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/rajdeepmondaldotcom/whoop-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server