WHOOP MCP Server
Click on "Deploy 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 MCP Servershow my recovery score from yesterday"
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
A Model Context Protocol (MCP) server that provides access to all WHOOP API endpoints. This server allows you to integrate WHOOP fitness and health data into your applications through the MCP standard.
Features
Complete WHOOP API Coverage: Access to all WHOOP v2 API endpoints
OAuth 2.0 Authentication: Secure authentication flow
User Data: Profile information and body measurements
Cycles: Physiological cycle data with strain and heart rate metrics
Recovery: Recovery scores, HRV, and resting heart rate data
Sleep: Detailed sleep analysis including stages and performance metrics
Workouts: Exercise data with strain, heart rate zones, and activity metrics
Pagination Support: Handle large datasets with pagination
TypeScript: Full type safety and IntelliSense support
Related MCP server: WHOOP MCP Server
Prerequisites
Node.js 18+
WHOOP Developer Account
WHOOP API credentials
Setup
1. Install Dependencies
npm install2. WHOOP API Setup
Go to the WHOOP Developer Platform
Create a new application
Note your
Client IDandClient SecretSet your redirect URI (e.g.,
http://localhost:3000/callback)
3. Environment Configuration
Copy the example environment file and configure your WHOOP credentials:
cp env.example .envEdit .env with your WHOOP API credentials:
# WHOOP API Configuration
WHOOP_CLIENT_ID=your_client_id_here
WHOOP_CLIENT_SECRET=your_client_secret_here
WHOOP_REDIRECT_URI=http://localhost:3000/callback
# MCP Server Configuration
MCP_SERVER_PORT=30014. Build and Run
# Build the project
npm run build
# Run the MCP server
npm start
# Or run in development mode
npm run devAuthentication Flow
The MCP server supports OAuth 2.0 authentication with WHOOP. Here's how to authenticate:
Get Authorization URL: Use the
whoop-get-authorization-urltool to get the OAuth URLUser Authorization: Direct users to the authorization URL
Copy Authorization Code: When WHOOP redirects you back, copy the authorization code from the URL
Share Code with Claude: IMPORTANT - You must copy and paste the authorization code directly to Claude in the chat
Exchange Code: Claude will use the
whoop-exchange-code-for-tokentool with the authorization codeSet Access Token: Claude will use the
whoop-set-access-tokentool to set the access token for API calls
⚠️ Important Note About Authorization Codes
When you complete the WHOOP authorization in your browser, you'll be redirected to a URL that contains an authorization code. You must copy this code and paste it directly into your chat with Claude. The code will look something like this in the URL:
http://localhost:3000/callback?code=ABC123XYZ789&scope=read:recovery%20read:cycles...Copy the code parameter value (e.g., ABC123XYZ789) and paste it in your chat with Claude. Claude will then use this code to exchange it for an access token and set up the connection to your WHOOP data.
Available Tools
User Tools
whoop-get-user-profile- Get basic user profile informationwhoop-get-user-body-measurements- Get body measurements (height, weight, max heart rate)whoop-revoke-user-access- Revoke user access token
Cycle Tools
whoop-get-cycle-by-id- Get specific cycle data by IDwhoop-get-cycle-collection- Get paginated list of cycleswhoop-get-sleep-for-cycle- Get sleep data for a specific cycle
Recovery Tools
whoop-get-recovery-collection- Get paginated recovery datawhoop-get-recovery-for-cycle- Get recovery data for a specific cycle
Sleep Tools
whoop-get-sleep-by-id- Get specific sleep record by IDwhoop-get-sleep-collection- Get paginated sleep records
Workout Tools
whoop-get-workout-by-id- Get specific workout record by IDwhoop-get-workout-collection- Get paginated workout records
OAuth Tools
whoop-get-authorization-url- Get OAuth authorization URLwhoop-exchange-code-for-token- Exchange authorization code for access tokenwhoop-refresh-token- Refresh access tokenwhoop-set-access-token- Set access token for API calls
Usage Examples
Getting User Profile
// First set your access token
await callTool('whoop-set-access-token', { accessToken: 'your_access_token' });
// Then get user profile
const profile = await callTool('whoop-get-user-profile', {});Getting Recent Cycles
const cycles = await callTool('whoop-get-cycle-collection', {
limit: 10,
start: '2024-01-01T00:00:00Z'
});Getting Sleep Data
const sleepData = await callTool('whoop-get-sleep-collection', {
limit: 5,
end: '2024-01-31T23:59:59Z'
});Getting Workout Data
const workouts = await callTool('whoop-get-workout-collection', {
limit: 10,
start: '2024-01-01T00:00:00Z'
});Data Types
The server provides comprehensive TypeScript types for all WHOOP API responses:
User Data: Profile information, body measurements
Cycles: Strain scores, heart rate data, kilojoule expenditure
Recovery: Recovery scores, HRV, resting heart rate, SpO2, skin temperature
Sleep: Sleep stages, performance metrics, respiratory rate, efficiency
Workouts: Activity strain, heart rate zones, distance, altitude data
Pagination
Most collection endpoints support pagination with the following parameters:
limit: Number of records to return (max 25)start: Start time filter (ISO 8601)end: End time filter (ISO 8601)nextToken: Token for next page
Error Handling
The MCP server includes comprehensive error handling:
Invalid credentials
Rate limiting
Network errors
Invalid parameters
Missing required fields
Development
Project Structure
src/
├── index.ts # Main entry point
├── mcp-server.ts # MCP server implementation
├── whoop-api.ts # WHOOP API client
└── types.ts # TypeScript type definitionsAvailable Scripts
npm run build- Build the TypeScript projectnpm start- Run the built servernpm run dev- Run in development mode with hot reloadnpm run watch- Watch for changes and rebuild
Adding New Endpoints
To add new WHOOP API endpoints:
Add the endpoint method to
WhoopApiClientinwhoop-api.tsAdd corresponding types to
types.tsAdd the tool definition and handler to
mcp-server.ts
WHOOP API Documentation
For detailed information about the WHOOP API, visit:
License
MIT License - see LICENSE file for details.
Support
For issues and questions:
Check the WHOOP API documentation
Review the error messages from the MCP server
Ensure your OAuth credentials are correctly configured
Verify your access token is valid and not expired
Migration Notice
IMPORTANT: WHOOP v2 API is now available and migration is required by October 1, 2025. The current v1 API and webhooks will be removed after this date. This MCP server uses the v2 API.
Available Tools
16 toolswhoop-exchange-code-for-tokenB
Exchange authorization code for access token
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | Authorization code from OAuth callback |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. The description only says 'exchange' with no details on side effects, error conditions, token storage, or idempotency. This insufficiently informs the agent.
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 extremely short and front-loaded, but it is underspecified. While it is concise, it lacks necessary details to be fully effective.
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 lack of an output schema, the description should clarify the return value (e.g., access token details). It does not mention error handling, token lifetime, or what the agent should do with the result. The tool is simple but the description is incomplete.
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 100% with a single parameter. The description adds no extra meaning beyond what the schema already provides for the parameter. Baseline 3 is appropriate as the schema does most of the work.
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 'exchange' and the resource 'authorization code for access token', which precisely defines the tool's function and distinguishes it from sibling tools like 'whoop-get-authorization-url' and 'whoop-refresh-token'.
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 the tool is used after obtaining an authorization code, but it does not explicitly state when to use it versus alternatives or provide any exclusion criteria. The usage context is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
whoop-get-authorization-urlB
Get the authorization URL for OAuth flow
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description must provide behavioral context. It only states it gets the URL, but omits important details such as whether user interaction is required, the need for a redirect URI, or any side effects like token caching.
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 extremely concise, a single sentence with no superfluous information. It is front-loaded and 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?
For a tool with no parameters and no output schema, the description is adequate but could be improved by specifying that the tool returns a URL and that the user must navigate to it to proceed with OAuth. Without this, the tool's role in the flow is partially ambiguous.
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 no parameters, so there is no need for additional parameter descriptions. Schema coverage is 100% by default. The description adds no extra parameter info, but none is required.
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's action ('Get') and resource ('authorization URL for OAuth flow'), making the purpose obvious. However, it does not explicitly differentiate from sibling OAuth tools like exchange-code-for-token, which slightly reduces clarity.
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 guidance is provided on when to use this tool vs. alternatives. For example, it is the first step in the OAuth flow but no mention of when to subsequently call exchange-code-for-token or other related tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
whoop-get-cycle-by-idC
Get the cycle for the specified ID
| Name | Required | Description | Default |
|---|---|---|---|
| cycleId | Yes | ID of the cycle to retrieve |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations and description does not disclose behavioral traits like authentication requirements, error handling, or potential side-effects. The 'Get' verb implies read-only, but this is not explicit.
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 concise sentence, but lacks structure (e.g., no title, no front-loading of key info). It is adequate but minimal.
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 simple GET-by-ID tool with no output schema and no annotations, the description omits necessary context such as return format, error behavior, and prerequisites (e.g., authentication). Incomplete for safe agent usage.
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 100%, and the description adds no new meaning beyond the schema's 'ID of the cycle to retrieve'. Baseline 3 is appropriate.
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 a cycle by ID, distinguishing it from collection tools like whoop-get-cycle-collection.
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 guidance on when to use this tool vs alternatives (e.g., get-cycle-collection). The agent must infer from the parameter and sibling names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
whoop-get-cycle-collectionA
Get all physiological cycles for a user, paginated
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Limit on the number of cycles returned (max 25) | |
| start | No | Return cycles that occurred after or during this time (ISO 8601) | |
| end | No | Return cycles that intersect this time or ended before this time (ISO 8601) | |
| nextToken | No | Next token from the previous response to get the next page |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description correctly implies a read-only operation ('Get') and discloses pagination behavior. It could be more explicit about being non-destructive, but the verb suffices.
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, concise sentence with no wasted words. It is front-loaded and efficiently conveys the tool's 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?
For a simple paginated list tool with well-documented parameters, the description is adequate. It lacks mention of authentication or prerequisites, but the sibling auth tools provide context.
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 100% (all parameters described in schema). The description adds no additional meaning beyond what the schema already provides, meeting the baseline for high 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 clearly states the verb 'Get', the resource 'all physiological cycles', and adds qualifiers 'for a user, paginated'. This distinguishes it from sibling tools like 'whoop-get-cycle-by-id' (single cycle) and other collection 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?
No explicit guidance on when to use this tool versus alternatives. The pagination hint implies usage for listing, but no conditions, prerequisites, or exclusions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
whoop-get-recovery-collectionB
Get all recovery data for a user, paginated
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Limit on the number of recovery records returned (max 25) | |
| start | No | Return recovery records that occurred after or during this time (ISO 8601) | |
| end | No | Return recovery records that intersect this time or ended before this time (ISO 8601) | |
| nextToken | No | Next token from the previous response to get the next page |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description should disclose behavioral traits. It only mentions pagination but omits authorization requirements, rate limits, data availability conditions, or whether the tool returns errors for empty results. The description is too sparse for a data retrieval tool.
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 sentence with no unnecessary words. It conveys the essential purpose and pagination feature without fluff.
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 four parameters, no output schema, and no annotations, the description is insufficient. It does not explain the return format, pagination behavior (e.g., how to use nextToken), or handle edge cases. The agent lacks information to fully understand the tool's behavior.
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?
All four parameters have descriptions in the schema (100% coverage), so the baseline is 3. The description adds only the word 'paginated', which hints at nextToken usage but does not enrich parameter meaning beyond the schema. No new semantics are provided.
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 action (get), resource (recovery data), scope (for a user), and feature (paginated). It distinguishes from sibling tools like 'whoop-get-recovery-for-cycle' which targets a specific cycle, and 'whoop-get-cycle-collection' which retrieves cycles, not recovery 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?
No guidance is provided on when to use this tool versus alternatives (e.g., 'whoop-get-recovery-for-cycle' for a specific cycle). There are no instructions on prerequisites, sequence, or exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
whoop-get-recovery-for-cycleB
Get recovery data for a specific cycle
| Name | Required | Description | Default |
|---|---|---|---|
| cycleId | Yes | ID of the cycle to get recovery data for |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must fully disclose behavior. It does not state that this is a read-only operation, whether authentication is required, or any side effects. The description is minimal and fails to add behavioral context.
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 extremely concise at one sentence with no fluff. However, it could be slightly improved by adding a brief note about prerequisites or output without sacrificing brevity.
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 simple retrieval tool with one parameter, the description is minimally adequate. It could mention that the cycleId must be obtained from 'whoop-get-cycle-collection' or 'whoop-get-cycle-by-id', and that the recovery data typically includes metrics like score, heart rate variability, etc., especially since there is no output schema.
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 100% with 'cycleId' described in the schema. The description adds no additional meaning beyond the schema, such as explaining how to obtain a valid cycleId or the expected format. Baseline 3 is appropriate when schema is complete.
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 'recovery data', and the scope 'for a specific cycle'. It distinguishes this tool from siblings like 'whoop-get-recovery-collection' (returns all recovery) and 'whoop-get-cycle-by-id' (returns cycle metadata).
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 guidance is provided on when to use this tool versus alternatives. For example, it does not mention that to retrieve recovery for multiple cycles, one should use 'whoop-get-recovery-collection' with cycle filters.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
whoop-get-sleep-by-idC
Get the sleep record for the specified ID
| Name | Required | Description | Default |
|---|---|---|---|
| sleepId | Yes | ID of the sleep record to retrieve |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries full burden. It only states the basic action, omitting any behavioral traits such as error handling, permission requirements, or performance characteristics. The agent gains no insight into side effects or limitations.
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 concise sentence with no wasted words. However, it is very brief and could benefit from additional context like output structure. The front-loading of the core action is good.
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 (1 parameter, no output schema, no nested objects), the description is minimally adequate. It lacks explanation of the return value or any prerequisites. With no output schema, the agent cannot anticipate the response structure.
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 100% (sleepId described in schema). The description adds no extra meaning beyond the schema. Baseline is 3; no additional value beyond the parameter name 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 verb 'Get' and the resource 'sleep record', with the scope 'for the specified ID'. This differentiates it from sibling tools like get-sleep-collection (list) and get-sleep-for-cycle (by cycle), though it could explicitly mention 'single' record for full clarity.
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 usage guidelines are provided. The description does not specify when to use this tool versus alternatives like get-sleep-collection or get-sleep-for-cycle. An agent must infer from the name and parameter, with no explicit guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
whoop-get-sleep-collectionB
Get all sleep records for a user, paginated
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Limit on the number of sleep records returned (max 25) | |
| start | No | Return sleep records that occurred after or during this time (ISO 8601) | |
| end | No | Return sleep records that intersect this time or ended before this time (ISO 8601) | |
| nextToken | No | Next token from the previous response to get the next page |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description only mentions pagination but lacks details on token usage, ordering, authentication, or side effects. It does not fully disclose behavioral traits.
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 concise sentence that gets to the point, but it sacrifices valuable usage and behavioral details.
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 4 parameters, no output schema, and no annotations, the description is too brief. It does not explain return format, pagination mechanics, or error behavior, leaving gaps for the agent.
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 100% description coverage, so baseline is 3. The tool description adds no additional meaning beyond the schema's parameter 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 action (Get), the resource (all sleep records), and the paginated nature, distinguishing it from sibling tools like whoop-get-sleep-by-id (single record) and whoop-get-sleep-for-cycle (sleep for a specific cycle).
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 retrieving the full collection but does not explicitly state when to use this tool versus alternatives like getting a single sleep record or sleep for a cycle.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
whoop-get-sleep-for-cycleB
Get sleep data for a specific cycle
| Name | Required | Description | Default |
|---|---|---|---|
| cycleId | Yes | ID of the cycle to get sleep data for |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden of behavioral disclosure. It only states 'Get sleep data' without explaining return format, data scope, authentication needs, or any side effects. For a read operation, basic transparency about what 'sleep data' includes is missing.
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 at 9 words, front-loading the action and resource. It is efficient but somewhat terse; a minor addition about what 'sleep data' entails would improve utility without sacrificing conciseness.
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 no output schema, the description should hint at the return value (e.g., fields, structure). It only says 'sleep data', which is vague. For a tool with a single parameter and no complex output, this lack of detail makes it incomplete for an agent to fully understand the response.
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 already describes the only parameter ('cycleId') with a clear description ('ID of the cycle to get sleep data for'). Since schema coverage is 100%, the baseline is 3. The top-level description adds no new meaning beyond the schema, so no adjustment is warranted.
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 action ('Get sleep data') and the resource ('for a specific cycle'). It effectively distinguishes from sibling tools like 'whoop-get-sleep-by-id' (sleep by sleep ID) and 'whoop-get-recovery-for-cycle' (recovery for cycle). The verb+resource combination is specific and unambiguous.
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 no guidance on when to use this tool versus alternatives such as 'whoop-get-sleep-collection' or 'whoop-get-sleep-by-id'. It does not mention prerequisites, limitations, or scenarios where this tool is preferred, leaving the agent to infer from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
whoop-get-user-body-measurementsA
Get body measurements (height, weight, max heart rate) for the authenticated user
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It indicates a read operation but does not disclose any behavioral traits such as rate limits, pagination, or error conditions. The description is truthful but minimal.
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 sentence that conveys the essential information with no wasted words. It is appropriately sized and front-loaded.
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 no parameters and no output schema, the description provides sufficient context for a simple data retrieval tool. It specifies the data returned but could optionally mention authentication requirements or data format, though these are implied.
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?
There are no parameters, so the schema coverage is 100% by default. The description does not need to add param semantics, and the baseline for 0 parameters is 4.
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' and the resource 'body measurements', listing specific measurements (height, weight, max heart rate). It distinguishes this tool from siblings like get-cycle, get-sleep, etc., which have different 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?
No guidance on when to use this tool versus alternatives. The description simply states what it does without any context on prerequisites or comparisons to other tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
whoop-get-user-profileA
Get basic user profile information (name, email) for the authenticated user
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It implies a read-only operation ('Get') and mentions it is for the authenticated user, but does not explicitly state behavioral traits such as non-destructiveness, authentication requirements, or any side effects. The description is adequate for a simple retrieval but could be more explicit.
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 sentence that is front-loaded with the main action ('Get basic user profile information') and includes key details. Every word is meaningful; there is no redundancy or filler.
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 no parameters, no output schema, and is a simple data retrieval operation, the description is fully complete. It tells the user exactly what the tool does and what data it returns. No additional details are necessary.
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 zero parameters, and the description covers the schema completely. The description adds value by specifying the returned fields (name, email), which is beyond what the empty schema provides. According to guidelines, a baseline of 4 is appropriate for zero parameters when description adds 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 uses a specific verb 'Get' and identifies the resource as 'basic user profile information' with explicit fields (name, email). It clearly differentiates from siblings like whoop-get-user-body-measurements by indicating this is for basic profile 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 does not provide explicit guidance on when to use this tool versus alternatives. While the lack of parameters makes usage straightforward, there is no mention of exclusions or context for when one would choose this over other tools like whoop-get-user-body-measurements. It meets the minimum viable standard but lacks proactive guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
whoop-get-workout-by-idB
Get the workout record for the specified ID
| Name | Required | Description | Default |
|---|---|---|---|
| workoutId | Yes | ID of the workout record to retrieve |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description should provide more behavioral context (e.g., requires authentication, returns 404 if not found). It only states the basic read action. Acceptable for a simple get, but lacks depth.
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 a single sentence stating the purpose. No redundant 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?
For a simple get-by-ID tool with one parameter, the description is minimally complete. However, adding context about when to prefer this over get-workout-collection and error handling would enhance completeness.
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 provides a clear description for the only parameter. The tool description does not add extra semantics beyond what the schema already covers. Baseline score of 3 is appropriate.
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 a specific verb ('Get') and resource ('workout record for the specified ID'), clearly distinguishing it from sibling tools that retrieve other resource types like cycles, sleep, or recovery.
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 usage guidelines provided. The description does not indicate when to use this single-record retrieval versus batch retrieval via get-workout-collection, nor any prerequisites or alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
whoop-get-workout-collectionA
Get all workout records for a user, paginated
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Limit on the number of workout records returned (max 25) | |
| start | No | Return workout records that occurred after or during this time (ISO 8601) | |
| end | No | Return workout records that intersect this time or ended before this time (ISO 8601) | |
| nextToken | No | Next token from the previous response to get the next page |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It mentions pagination, which hints at behavior, but lacks details on rate limits, authentication, or what happens if no records exist. Some transparency exists, but significant gaps remain.
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 that is clear and front-loaded. No wasted words, every part 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 tool has 4 optional parameters, no output schema, and no annotations, the description is somewhat complete but lacks details on return format or user context. It covers the core purpose but leaves some behavioral 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?
Schema description coverage is 100% (all four parameters have descriptions). The description does not add additional meaning to parameters beyond what is in the schema, so baseline 3 is appropriate.
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 'workout records', and the constraint 'paginated'. It differentiates from sibling tools like whoop-get-workout-by-id and other collection tools by specifying the action and resource.
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 alternatives are provided. The usage is implied by the tool name and input schema (paginated list), but no guidance on when to choose this over other workout-related tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
whoop-refresh-tokenB
Refresh access token using refresh token
| Name | Required | Description | Default |
|---|---|---|---|
| refreshToken | Yes | Refresh token to use for getting new access token |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description lacks disclosure of behavioral traits beyond the obvious. No annotations are provided, and the description does not mention side effects, token lifecycle, or whether the refresh token is consumed or rotated. For an OAuth token refresh, this is a notable omission.
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 extremely concise, using only five words to convey the essential purpose. Every word is meaningful, and there is 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 parameter, no output schema), the minimal description is borderline adequate. However, it could be improved by hinting at the return value (e.g., a new access token) or the typical flow (e.g., 'Call this when the access token expires'). It does not fully set expectations for the agent.
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 100% description coverage for the single parameter, so the description adds little value beyond what the schema already states. The tool description essentially repeats the schema's description, meeting the baseline but not exceeding it.
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's function: refreshing an access token using a refresh token. It uses a specific verb and resource, and distinguishes itself from sibling tools like whoop-exchange-code-for-token and whoop-set-access-token.
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 offers no guidance on when to use this tool versus alternatives. It does not specify prerequisites, such as having a valid refresh token, nor does it mention when to use exchange-code-for-token or set-access-token instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
whoop-revoke-user-accessB
Revoke the access token granted by the user
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of transparency. It only says 'revoke' which implies a destructive action, but lacks details on irreversibility, side effects, or required permissions.
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 sentence that efficiently conveys the core purpose. However, it could be slightly expanded to include context without being verbose.
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?
The description lacks information about the outcome, such as whether the revoke is synchronous, what the response contains, or if any state changes occur. Without an output schema, this gap is significant.
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 parameters and 100% coverage, so the description doesn't need to add param details. However, it could clarify how the token is identified (e.g., from stored state), which it does not.
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 revokes an access token, distinguishing it from sibling tools like whoop-exchange-code-for-token and whoop-refresh-token which handle token creation or refresh.
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 guidance on when to use this tool versus alternatives, nor any prerequisites or consequences. It simply states the action without context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
whoop-set-access-tokenC
Set the access token for API calls
| Name | Required | Description | Default |
|---|---|---|---|
| accessToken | Yes | Access token to use for API calls |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries full burden. It fails to disclose behavioral traits such as whether the token is stored persistently, overrides previous tokens, or is scoped to the session. This is critical for a state-changing 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 a single sentence that is concise and front-loaded. However, the brevity comes at the cost of missing important details.
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 simple setter tool with no output schema, the description is incomplete. It does not explain side effects, persistence, or error conditions, leaving the agent with insufficient context to use 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 coverage is 100% with one parameter 'accessToken' described identically in both schema and description. No additional meaning or context is added 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 clearly states the action 'set' and the resource 'access token', with a specific purpose distinct from sibling tools like exchange, refresh, or revoke.
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 guidance on when to use this tool versus alternatives such as whoop-exchange-code-for-token or whoop-refresh-token. The description does not explain the context for setting an access token.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
16 tool updates
- First observed
whoop-exchange-code-for-token - First observed
whoop-get-authorization-url - First observed
whoop-get-cycle-by-id - First observed
whoop-get-cycle-collection - First observed
whoop-get-recovery-collection - First observed
whoop-get-recovery-for-cycle - First observed
whoop-get-sleep-by-id - First observed
whoop-get-sleep-collection - First observed
whoop-get-sleep-for-cycle - First observed
whoop-get-user-body-measurements - First observed
whoop-get-user-profile - First observed
whoop-get-workout-by-id - First observed
whoop-get-workout-collection - First observed
whoop-refresh-token - First observed
whoop-revoke-user-access - First observed
whoop-set-access-token
TDQS
Scored across 16 tools
Most tools have distinct purposes targeting specific resources like cycles, sleep, workouts, recovery, and authentication. However, there is some potential overlap between collection tools (e.g., whoop-get-cycle-collection and whoop-get-recovery-collection) and their cycle-specific counterparts (e.g., whoop-get-recovery-for-cycle), which could cause minor confusion in selection.
All tools follow a consistent verb_noun pattern with the prefix 'whoop-' and clear action-object naming (e.g., whoop-get-cycle-by-id, whoop-refresh-token). The naming is uniform across all 16 tools, making them predictable and easy to understand.
With 16 tools, the count is slightly high but reasonable for a fitness/health API server covering authentication, user data, cycles, sleep, workouts, and recovery. It provides comprehensive coverage without being overly bloated, though it borders on the upper limit of typical scoping.
The tool set covers core CRUD-like operations for key resources (cycles, sleep, workouts, recovery) and includes essential authentication flows (OAuth, token management). Minor gaps exist, such as lack of update or delete operations for user data or workout records, but agents can likely work around these for most use cases.
Maintenance
Related MCP Connectors
WHOOP recovery, strain, sleep and workouts in Claude via official WHOOP OAuth. Free, open source.
Your WHOOP data in the assistant, read-only: recovery, sleep, strain, workouts, cycles and body meas
Read wearables and lab health data — sleep, activity, workouts, timeseries, lab tests and orders.
Connect your Oura Ring account securely in minutes. Enable authorized access to your sleep, activi…
Related MCP Servers
- AlicenseAqualityBmaintenanceEnables access to Withings Health API data including body measurements, activity tracking, sleep analysis, workouts, and heart rate monitoring through OAuth2 authentication.81MIT
- AlicenseAqualityDmaintenanceEnables LLMs to retrieve and analyze sleep, recovery, and physiological cycle data from the WHOOP API. It provides tools for accessing detailed metrics such as strain, HRV, and readiness scores through secure OAuth 2.0 authentication.47 npm1MIT
- FlicenseAqualityCmaintenanceEnables querying WHOOP fitness data including recovery, sleep, workouts, physiological cycles, and profile via the WHOOP API v2.117 npm-
- AlicenseBqualityDmaintenanceIntegrates with Whoop API v2 to access user profile, sleep, recovery, cycles, and workout data via natural language, with OAuth2 authentication and automatic token refresh.1415 npmMIT