健康数据协议服务器

Whoop MCP服务器提供对Whoop健康和健身数据的访问,使Claude等AI助手能够提供个性化的健康建议。

  • by benhursenabathi
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 benhursenabathi/whoop-mcp-server

使用说明

Whoop MCP服务器

MCP(模型上下文协议)服务器,可访问您的Whoop健康和健身数据,使Claude和其他人工智能助手能够为您提供个性化的健康建议。

新来的? 结账 HOW_TO_USE.md 获取分步设置指南。

特性

  • 恢复数据:获取您的恢复评分、心率变异性、静息心率、血氧饱和度和皮肤温度
  • 睡眠分析:详细的睡眠阶段(轻度、快速眼动、深度)、睡眠表现、效率和呼吸频率
  • 训练跟踪:压力评分、燃烧的卡路里、心率区域、距离和海拔高度
  • 每日压力:累积的每日压力和能量消耗
  • 健康概述:将恢复、睡眠和压力与个性化建议相结合
  • 轮廓和身体测量:用户资料和身体测量数据

先决条件

  1. Whoop设备:您需要一个活跃的Whoop会员
  2. Whoop开发者账户:在以下位置创建应用程序 developer.hop.com
  3. Node.js 18+:需要运行服务器

设置

1.创建Whoop开发者应用程序

  1. 首选 developer-dashboard.whoop.com
  2. 创建新应用程序
  3. 将重定向URL设置为 http://localhost:8080/callback
  4. 注意你的 客户端ID 和 客户端密钥
  5. 请求以下范围:
    • read:recovery
    • read:cycles
    • read:workout
    • read:sleep
    • read:profile
    • read:body_measurement
    • offline (用于刷新令牌)

2.安装MCP服务器

cd whoop-mcp-server
npm install
npm run build

3.获取您的初始代币(一次性)

运行令牌助手脚本:

node get-tokens.mjs

按照提示操作:

  1. 输入您的客户端ID和客户端密码
  2. 在浏览器中打开授权URL
  3. 授权应用程序并从重定向URL复制代码
  4. 脚本将输出您的初始令牌

4.配置克劳德桌面

将以下内容添加到您的Claude Desktop配置文件中:

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json 视窗: %APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "whoop": {
      "command": "node",
      "args": ["/path/to/whoop-mcp-server/dist/index.js"],
      "env": {
        "WHOOP_CLIENT_ID": "your-client-id",
        "WHOOP_CLIENT_SECRET": "your-client-secret",
        "WHOOP_ACCESS_TOKEN": "your-initial-access-token",
        "WHOOP_REFRESH_TOKEN": "your-initial-refresh-token"
      }
    }
  }
}

5.首次使用和代币持久性

在第一次API调用时,服务器将:

  1. 使用配置中的初始令牌
  2. 将它们保存到 tokens.json 在服务器目录中
  3. 过期时自动刷新

初始设置后,您可以删除 WHOOP_ACCESS_TOKEN 和 WHOOP_REFRESH_TOKEN 从你的配置。服务器只需要:

{
  "mcpServers": {
    "whoop": {
      "command": "node",
      "args": ["/path/to/whoop-mcp-server/dist/index.js"],
      "env": {
        "WHOOP_CLIENT_ID": "your-client-id",
        "WHOOP_CLIENT_SECRET": "your-client-secret"
      }
    }
  }
}

令牌架构

┌─────────────────────────────────────────────────────────────────┐
│                         STARTUP                                 │
├─────────────────────────────────────────────────────────────────┤
│  Claude Desktop starts → WHOOP MCP server launches              │
│                              │                                  │
│                              ▼                                  │
│                   Check for tokens.json                         │
│                        /          \                             │
│                    Found          Not Found                     │
│                      │                │                         │
│                      ▼                ▼                         │
│              Use persisted      Use env vars                    │
│                tokens          (initial setup)                  │
│                      \              /                           │
│                       ▼            ▼                            │
│                    Token loaded in memory                       │
└─────────────────────────────────────────────────────────────────┘

┌─────────────────────────────────────────────────────────────────┐
│                       ON API CALL                               │
├─────────────────────────────────────────────────────────────────┤
│  You ask "get my recovery" → check token expiry                 │
│                              │                                  │
│                     Token expired?                              │
│                        /          \                             │
│                      YES          NO                            │
│                       │            │                            │
│                       ▼            │                            │
│              Refresh via WHOOP     │                            │
│              API (uses client      │                            │
│              credentials +         │                            │
│              refresh token)        │                            │
│                       │            │                            │
│                       ▼            │                            │
│              Save new tokens       │                            │
│              to tokens.json        │                            │
│                       \           /                             │
│                        ▼         ▼                              │
│                   Make API call with valid token                │
└─────────────────────────────────────────────────────────────────┘

关键文件:

  • tokens.json -持久令牌(自动创建,重新启动后仍然有效)
  • dist/index.js -MCP服务器

什么是自动的:

  • 令牌过期时刷新
  • 将新令牌保存到磁盘
  • 重新启动时加载令牌

需要手动操作的内容:

  • 初始OAuth设置(一次性)
  • 如果未使用30-90天(刷新令牌过期),则重新进行身份验证

可用工具

whoop_get_profile

获取您的Whoop用户资料(姓名、电子邮件、用户ID)。

whoop_get_body_measurements

获取你的身体测量数据(身高、体重、最大心率)。

whoop_get_recovery

获取恢复数据,包括恢复评分、心率变异性、静息心率、血氧饱和度。

参数:

  • limit (1-25,默认值7):记录数
  • start:开始日期过滤器(ISO 8601)
  • end:结束日期过滤器(ISO 8601)

whoop_get_sleep

获取详细的睡眠数据,包括睡眠阶段、表现和效率。

参数:

  • limit (1-25,默认值7):记录数
  • start:开始日期过滤器(ISO 8601)
  • end:结束日期过滤器(ISO 8601)

whoop_get_workouts

获取锻炼数据,包括压力、卡路里、心率区域。

参数:

  • limit (1-25,默认10):记录数
  • start:开始日期过滤器(ISO 8601)
  • end:结束日期过滤器(ISO 8601)

whoop_get_cycles

获取每日生理周期数据(压力、卡路里、心率)。

参数:

  • limit (1-25,默认值7):记录数
  • start:开始日期过滤器(ISO 8601)
  • end:结束日期过滤器(ISO 8601)

whoop_get_health_overview

获得全面的健康概述,将恢复、睡眠和压力数据与个性化建议相结合。

Claude使用示例

配置后,您可以向Claude询问以下问题:

  • “我今天恢复得怎么样了?”
  • “让我看看上周的睡眠情况”
  • “我最近做了什么锻炼?”
  • “给我一个健康概述”
  • “根据我的Whoop数据,我今天应该努力训练吗?”
  • “我的HRV本周走势如何?”
  • “我昨晚的睡眠质量怎么样?”

故障排除

“没有可用令牌”错误

跑 node get-tokens.mjs 获取初始令牌,或检查 tokens.json 存在。

“缺少WHOOP_LIENT_ID或WHOOP_CLIENT_SECRET”错误

这些必须始终在您的Claude Desktop配置中-它们永远不会过期。

“刷新令牌失败”错误

您的刷新令牌已过期(通常在30-90天未使用后)。跑 node get-tokens.mjs 重新验证。

未返回数据

  • 确保您已佩戴Whoop设备,并且数据已同步
  • 检查您的应用程序是否具有授权的所需范围

查看当前持久令牌

cat tokens.json

强制重新身份验证

rm tokens.json
# Then run get-tokens.mjs or add tokens back to Claude config

安全考虑

令牌存储

  • 代币存储在 tokens.json 具有受限权限(模式0600-仅限所有者读/写)
  • Windows用户: 文件权限在Windows上的工作方式不同,可能无法提供同等的保护。考虑额外的访问控制。
  • 令牌以未加密的方式存储;确保您的系统具有适当的访问控制

配置安全

  • 你的 claude_desktop_config.json 以纯文本形式包含您的客户端机密
  • 不要承诺 此配置文件用于版本控制
  • 考虑限制配置文件的文件权限:
    • macOS/Linux: chmod 600 ~/Library/Application\ Support/Claude/claude_desktop_config.json

最佳实践

  • 定期轮换您的Whoop开发者应用程序凭据
  • 监控您的Whoop帐户是否存在未经授权的访问
  • 跑 npm audit 定期检查依赖性漏洞
  • 初始设置后,删除 WHOOP_ACCESS_TOKEN 和 WHOOP_REFRESH_TOKEN 从您的配置中(它们被持久化在 tokens.json)

可选:自定义令牌位置

集 WHOOP_TOKEN_PATH 用于在特定位置存储令牌的环境变量:

"env": {
  "WHOOP_TOKEN_PATH": "/path/to/secure/tokens.json",
  "WHOOP_CLIENT_ID": "your-client-id",
  "WHOOP_CLIENT_SECRET": "your-client-secret"
}

api参考

此服务器使用 Whoop API v2。有关数据模型和端点的更多详细信息,请参阅官方文档。

许可证

麻省理工学院