使用说明
WHOOP MCP服务器
MCP(模型上下文协议)服务器,通过Claude和其他MCP客户端无缝访问您的WHOOP健康和恢复数据。
专为 世界卫生组织API v2.
特性
通过对话自然地访问您的WHOOP数据:
- 身体尺寸:身高、体重和最大心率
- 生理周期:应变评分和心率指标
- 恢复数据:恢复评分、心率变异性、静息心率、血氧饱和度和皮肤温度
- 睡眠分析:睡眠阶段、效率、表现评分和睡眠质量
- 训练跟踪:运动类型、强度、持续时间、心率区域和距离的活动
- 自动令牌刷新:无需手动重新身份验证-刷新令牌处理一切
先决条件
- Python 3.12+
- 具有活跃会员资格的WHOOP帐户
- 访问 WHOOP开发人员仪表板 -只需使用您的WHOOP帐户登录!
快速开始
1.安装依赖项
此项目使用 uv 用于依赖性管理。如果您没有安装它:
# macOS/Linux
curl -LsSf https://astral.sh/uv/install.sh | sh
# Windows
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"
然后同步依赖关系:
uv sync
2.创建WHOOP OAuth应用程序
- 访问 WHOOP开发人员仪表板
- 创建新应用程序(或使用现有应用程序)
- 配置重定向URI:
http://localhost:8080/callback - 对于联系人,请添加您的电子邮件地址和隐私政策URL,只需使用https://example.com/privacy,仅供您使用!
- 选择所有范围
- 注意你的 客户端ID 和 客户端密钥
3.运行Bootstrap脚本
创建 .env 包含OAuth应用程序凭据的文件:
cp .env.example .env
编辑 .env 并添加您的凭据:
WHOOP_CLIENT_ID=your_client_id_here
WHOOP_CLIENT_SECRET=your_client_secret_here
运行引导脚本:
python bootstrap.py
这将:
- 打开浏览器以授权应用程序
- 启动本地web服务器以接收OAuth回调
- 交换访问和刷新令牌的授权码
- 输出完整的MCP服务器配置 准备复制
4.添加到您的MCP客户端
引导脚本输出一个配置块。复制它并将其添加到您的MCP客户端:
对于Claude Desktop:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - 窗户:
%APPDATA%\Claude\claude_desktop_config.json
配置如下:
{
"mcpServers": {
"whoop": {
"command": "uv",
"args": [
"--directory",
"/absolute/path/to/whoop-mcp",
"run",
"main.py"
]
}
}
}
注: 令牌被安全地存储(操作系统密钥链或加密文件)-不需要环境变量!
重新启动克劳德桌面 您已经准备好使用WHOOP MCP服务器了!
高级配置
手动测试(无MCP客户端)
要独立运行服务器进行测试,请执行以下操作:
uv run main.py
手动OAuth流
如果您更喜欢手动处理OAuth而不是使用引导脚本:
授权URL: https://api.prod.whoop.com/oauth/oauth2/auth
令牌URL: https://api.prod.whoop.com/oauth/oauth2/token
所需范围: read:profile read:cycles read:recovery read:sleep read:workout offline
有关OAuth设置的详细信息,请参阅 WHOOP OAuth文档.
你能问什么?
配置后,您可以通过Claude自然地与您的WHOOP数据交互:
- “今天早上我的康复分数是多少?”
- “显示我上周的睡眠数据”
- “这个月我做了多少次锻炼?”
- “过去30天我的平均HRV是多少?”
你甚至可以问更复杂的问题,比如:
- “分析我过去两周的睡眠和锻炼数据。我的恢复模式是什么?”
或者结合谷歌日历等其他工具的数据,看看你的锻炼和恢复是如何与你的日程安排相一致的。
可用工具
get_user_profile()
获取经过身份验证的用户的身体测量数据,包括:
- 高度(米)
- 重量(公斤)
- 最大心率(bpm)
get_recent_cycles(天数=7)
获取过去N天的生理周期(默认值7)。
参数:
days(int):回顾的天数
退货: 周期数据,包括应变、心率和恢复评分
get_recent_recovery(天数=7)
获取过去N天的恢复数据。
参数:
days(int):回顾的天数
退货: 恢复评分、心率变异性、静息心率、血氧饱和度和皮肤温度
get_recent_sleep(天数=7)
获取过去N天的睡眠数据。
参数:
days(int):回顾的天数
退货: 睡眠阶段、效率、表现、睡眠需求和呼吸频率
get_recent_workouts(天数=7)
获取过去N天的锻炼数据。
参数:
days(int):回顾的天数
退货: 具有运动类型、压力、持续时间和心率区域的锻炼活动
get_cycles_for_date_range(开始日期、结束日期、限制=25)
获取特定日期范围的周期。
参数:
start_date(str):ISO 8601格式的日期(例如,“2024-01-01T00:00:00.000Z”)end_date(str):ISO 8601格式化日期limit(int):要返回的最大记录数(默认值25,最大值50)
get_sleep_for_date_range(起始日期、结束日期、限制=25)
获取特定日期范围的睡眠数据。
参数:
start_date(str):ISO 8601格式化日期end_date(str):ISO 8601格式化日期limit(int):要返回的最大记录数(默认值25,最大值50)
get_workout_for_date_range(开始日期、结束日期、限制=25)
获取特定日期范围的锻炼数据。
参数:
start_date(str):ISO 8601格式化日期end_date(str):ISO 8601格式化日期limit(int):要返回的最大记录数(默认值25,最大值50)
API版本
此服务器使用 世界卫生组织API v2.请注意,WHOOP API的v1将于 2025年10月1日.
数据类型
循环
表示生理周期(不是日历日),包括:
- 开始和结束时间
- 应变分数和千焦
- 平均和最大心率
- 恢复数据(如果可用)
恢复
日常准备指标包括:
- 恢复百分比(0-100)
- HRV RMSSD(毫秒)
- 静息心率(bpm)
- 血氧饱和度百分比(仅WHOOP 4.0)
- 皮肤温度(摄氏度)
睡眠
睡眠会话数据包括:
- 睡眠阶段(浅波、深波/慢波、REM、清醒)
- 睡眠表现和效率百分比
- 睡眠需求计算
- 呼吸频率
- 干扰计数
锻炼
锻炼活动数据包括:
- 运动名称和ID(100+支持的活动)
- 应变评分
- 持续时间和距离
- 心率区域(5个级别)
- 海拔高度和千焦
安全功能
此服务器遵循MCP安全最佳实践,并使用行业标准的安全存储:
安全令牌存储
令牌是使用您平台的最佳可用方法存储的:
- macOS:存储在macOS钥匙串中的令牌
- 视窗:存储在Windows凭据锁中的令牌
- Linux:存储在GNOME Keyring/KWallet中的令牌
- 后备方案:使用Fernet对称加密的加密文件存储
您的客户端机密从未包含在MCP配置中 -它仅存储在安全存储中,并在内部用于令牌刷新操作。
OAuth 2.0/2.1合规性
此服务器使用 authlib,一个经过充分测试的OAuth库,遵循MCP的指导:
不要自己实现令牌验证或授权逻辑。使用现成的、经过良好测试的、安全的库
优点:
- ✅ 符合标准的OAuth 2.0/2.1实现
- ✅ 自动令牌到期跟踪
- ✅ 主动令牌刷新(令牌在到期前刷新,而不是在失败后刷新)
- ✅ 无自定义加密或验证逻辑
令牌存储位置
- OS钥匙扣:服务名称
whoop-mcp-tokens - 目标文件:
~/.whoop_mcp/tokens.enc(回退)
自动令牌刷新
WHOOP访问令牌是短暂的(通常为几个小时)。此服务器自动处理令牌刷新:
- 主动刷新 -令牌在到期之前刷新,而不是在到期之后
- 自动持久化 -更新的令牌会自动保存到安全存储中
- 服务器重启后仍能存活 -启动时从安全存储加载令牌
- 无人工干预 -一切都是透明的
如果令牌刷新失败(例如,刷新令牌在数月不活动后过期),您需要使用 python bootstrap.py.
错误处理
服务器包括全面的错误处理:
- 缺少访问令牌将引发一条明确的错误消息
- 过期的令牌将使用刷新令牌自动刷新
- 来自WHOOP API的HTTP错误将与有用的消息一起传播
- 明确识别速率限制错误(429)
- 捕获并报告网络错误
- 无效的日期范围将由API处理
速率限制
世卫组织API有费率限制。如果遇到速率限制错误:
- 减少请求的频率
- 使用日期范围查询,而不是多个最近的查询
- 对频繁访问的数据实施缓存
- 服务器将清楚地报告速率限制错误
贡献
欢迎投稿!请确保:
- 代码遵循现有样式
- 新功能包括文档字符串
- 错误处理是适当的
许可证
本项目按原样提供,供WHOOP API v2使用。
