WHOOP健身数据查询服务

通过Model Context Protocol (MCP)将WHOOP健身数据连接到Claude Desktop,实现自然语言查询健身数据的功能。

  • by RomanEvstigneev
  • Python
  • 本地部署
  • 27 星标
  • 更新于
在 GitHub 查看 RomanEvstigneev/whoop-mcp-server

使用说明

🏃 WHOOP MCP服务器

通过模型上下文协议(MCP)将您的WHOOP健身数据连接到Claude Desktop

通过Claude Desktop中的自然语言查询,将您的WHOOP健身数据转化为可操作的见解。询问有关你的锻炼、恢复、睡眠模式等问题,同时确保你的数据安全和私密。

🚀 新:试试 Smithery托管版本 用于零设置部署!

✨ 特性

🔐 安全OAuth集成 -与加密本地存储的安全WHOOP帐户连接
🏃 完成数据访问 -锻炼、恢复、睡眠、周期和个人资料信息
🤖 自然语言查询 -用简单的英语向克劳德询问你的健身数据
⚡ 智能缓存 -通过智能数据缓存优化性能
🛡️ 隐私第一 -所有数据都保留在您的计算机上,从不发送给第三方
🔄 自动令牌刷新 -自动身份验证续订的无缝体验

🚀 快速开始

🎯 选择部署方法

选项A:Smithery托管(推荐给初学者)

选项B:本地安装(高级用户)

  • ✅ 完全控制和隐私
  • ✅ 无外部依赖关系
  • ✅ 自定义和扩展
  • ➡️ 继续下面的本地设置

📦 本地安装

1.先决条件

  • Python 3.8+
  • 克劳德桌面
  • 活跃的WHOOP帐户

2.安装

git clone https://github.com/romanevstigneev/whoop-mcp-server.git
cd whoop-mcp-server
pip install -r requirements.txt

3.设置

选项A:交互式设置(推荐)

运行交互式安装程序:

python setup.py

这将:

  • 打开浏览器进行WHOOP OAuth授权
  • 在本地安全地保存您的代币
  • 提供Claude桌面配置

选项B:手动WHOOP OAuth设置

如果交互式设置不起作用,您可以手动获取WHOOP令牌:

  1. 打开WHOOP OAuth页面: 👉 点击此处授权WHOOP访问

  2. 授权您的帐户:

    • 使用您的WHOOP凭据登录
    • 为请求的作用域授予权限:
      • read:profile -访问您的个人资料信息
      • read:workout -访问锻炼数据
      • read:recovery -访问恢复数据
      • read:sleep -访问睡眠数据
      • offline -刷新令牌以继续访问
  3. 复制授权码:

    • 授权后,您将看到一个成功页面
    • 复制整个授权码 (以字母/数字开头的长字符串)
    • 它看起来像: ABC123...XYZ789 (更长)
  4. 代币交换代码:

    python -c "
    import sys
    sys.path.insert(0, './src')
    from auth_manager import TokenManager
    import requests
    
    # Paste your authorization code here
    auth_code = 'YOUR_AUTHORIZATION_CODE_HERE'
    
    # Exchange for tokens
    url = f'https://personal-integrations-462307.uc.r.appspot.com/api/get-tokens/{auth_code}'
    response = requests.get(url, timeout=30)
    
    if response.status_code == 200:
        token_data = response.json()
        if token_data.get('success'):
            # Save tokens
            token_manager = TokenManager()
            token_manager.save_tokens(token_data)
            print('✅ Tokens saved successfully!')
        else:
            print('❌ Token exchange failed')
    else:
        print(f'❌ HTTP Error: {response.status_code}')
    "
    
  5. 验证设置:

    python -c "
    import sys
    sys.path.insert(0, './src')
    from whoop_client import WhoopClient
    client = WhoopClient()
    print(f'✅ Auth status: {client.get_auth_status()}')
    "
    

4.配置克劳德桌面

添加到您的Claude桌面设置:

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

{
  "mcpServers": {
    "whoop": {
      "command": "/opt/miniconda3/bin/python",
      "args": ["/path/to/whoop-mcp-server/src/whoop_mcp_server.py"],
      "env": {
        "PYTHONPATH": "/path/to/whoop-mcp-server/src"
      }
    }
  }
}

⚠️ 重要:使用完整的Python路径(使用 which python3)

5.重新启动克劳德桌面

添加配置后,重新启动Claude Desktop以加载WHOOP服务器。

💡 使用示例

配置后,您可以询问Claude:

  • “显示我的WHOOP个人资料”
  • “我这周锻炼了什么?”
  • “我的康复趋势如何?”
  • “显示我过去7天的睡眠数据”
  • “我的HRV是什么样子的?”
  • “将我的恢复情况与上个月进行比较”

🛠️ 可用工具

get_whoop_profile

获取您的WHOOP用户资料信息。

get_whoop_workouts

使用可选过滤器获取锻炼数据:

  • start_date (年-月-日)
  • end_date (年-月-日)
  • limit (结果数量)

get_whoop_recovery

使用可选筛选器获取恢复数据:

  • start_date (年-月-日)
  • end_date (年-月-日)
  • limit (结果数量)

get_whoop_sleep

使用可选过滤器获取睡眠数据:

  • start_date (年-月-日)
  • end_date (年-月-日)
  • limit (结果数量)

get_whoop_cycles

使用可选过滤器获取生理周期(每日数据):

  • start_date (年-月-日)
  • end_date (年-月-日)
  • limit (结果数量)

get_whoop_auth_status

检查身份验证状态和令牌信息。

clear_whoop_cache

清除缓存的数据以强制执行新的API调用。

🔐 安全

  • 令牌加密:所有令牌在静止时都使用AES加密进行加密
  • 本地存储:代币存储在您的机器上,从不发送给第三方
  • 安全权限:令牌文件具有受限权限(600)
  • 自动刷新:令牌过期时会自动刷新

📊 数据缓存

  • 智能缓存:API响应缓存5分钟以提高性能
  • 速率限制:遵守WHOOP API限制的内置速率限制
  • 高速缓存控制:可手动清除缓存

🔧 配置

环境变量(可选):

  • LOG_LEVEL:日志记录级别(调试、信息、警告、错误)
  • LOG_FILE:日志文件路径(默认:仅控制台)

🆚 部署比较

特点 Smithery主办 本地安装
设置时间 ⚡ 2分钟 ⏱️ 10-15分钟
复杂性 🟢 初学者友好 🟡 需要技术设置
维护 ✅ 零(自动更新) 🔧 需要手动更新
演出 🚀 优化托管 💻 取决于本地设置
隐私 🌐 托管平台 🔒 完全本地化
依赖项 ❌ 无 🐍 Python、包、OAuth
故障排除 📞 平台支持 🛠️ 自助服务

📁 文件结构

whoop-mcp-server/
├── src/                       # Python local installation
│   ├── whoop_mcp_server.py    # Main MCP server
│   ├── whoop_client.py        # WHOOP API client
│   ├── auth_manager.py        # Token management
│   └── config.py              # Configuration
├── smithery/                  # TypeScript source files
│   └── src/
│       ├── index.ts           # Smithery MCP server
│       ├── whoop-client.ts    # TypeScript WHOOP client
│       └── types.ts           # Type definitions
├── storage/                   # Local installation only
│   ├── tokens.json            # Encrypted tokens (auto-generated)
│   └── .encryption_key        # Encryption key (auto-generated)
├── package.json               # Node.js dependencies (Smithery)
├── smithery.yaml              # Smithery configuration (root required)
├── tsconfig.json              # TypeScript configuration
├── setup.py                   # Interactive setup script
└── requirements.txt           # Python dependencies

🐛 故障排除

“没有可用的有效访问令牌”

  • 跑 python setup.py 重新授权
  • 检查您的WHOOP帐户是否处于活动状态

“身份验证失败”

  • 您的令牌可能已过期,无法刷新
  • 跑 python setup.py 获取新代币

“超出费率限制”

  • 请稍等片刻,然后再提出更多请求
  • 考虑使用缓存数据或降低请求频率

Claude Desktop看不到服务器

  • 使用完整的Python路径:更改 "command": "python" 向 "command": "/opt/miniconda3/bin/python" (使用 which python3 找到你的)
  • 检查配置文件是否正确:编辑 ~/Library/Application Support/Claude/claude_desktop_config.json (不是 .claude.json)
  • 使用绝对路径:完整路径如 /Users/username/whoop-mcp-server/src/whoop_mcp_server.py
  • 检查日志: tail -f ~/Library/Logs/Claude/mcp-server-whoop.log
  • 配置更改后重新启动Claude Desktop

🔄 令牌刷新

服务器使用刷新令牌自动刷新过期的令牌。如果失败,您需要重新授权:

python setup.py

📝 日志记录

默认情况下,日志会写入控制台。要登录到文件,请执行以下操作:

export LOG_FILE="/path/to/whoop-mcp.log"
export LOG_LEVEL="INFO"

🤝 贡献

  1. 分叉存储库
  2. 创建要素分支
  3. 进行更改
  4. 如果适用,添加测试
  5. 提交拉取请求

📄 许可证

此项目根据MIT许可证获得许可-有关详细信息,请参阅许可证文件。

⚠️ 免责声明

这是与WHOOP的非官方集成。它使用官方的WHOOP API,但未得到WHOOP的认可。

📞 支持

  • 检查上面的故障排除部分
  • 在GitHub上打开一个问题
  • 查阅WHOOP API文件,网址:https://developer.whoop.com/

🎯 路线图

  • []历史数据分析
  • []自定义日期范围查询
  • []数据导出功能
  • []Webhook支持实时更新
  • []高级分析和见解