mcpField
W
WHOOP MCP

WHOOP MCP

本地服务
github.com/cunicopia-dev健康医疗06 周前更新

关于 WHOOP MCP

WHOOP MCP 将 WHOOP 健康数据同步到 Postgres,并通过 MCP 工具提供查询。它将 API 同步与仅查数据库的操作分开,已同步数据无需再次请求 WHOOP 即可读取。

主要功能

  1. 01同步恢复、睡眠、锻炼和周期数据
  2. 02在 Postgres 保存结构化记录及原始 JSON
  3. 03通过 MCP 工具查询健康数据
  4. 04将近期生命体征与 30 天基线比较
  5. 05跟踪同步状态和各类错误

适用场景

  1. 01查看近期恢复和睡眠趋势
  2. 02将每周 HRV 与基线比较
  3. 03检查锻炼负荷和心率数据
  4. 04离线查询已同步的数据

MCP 相关

stdio MCP 服务提供 WHOOP 身份验证与同步工具,以及针对 Postgres 的只读查询工具。只有连接和同步工具会调用 WHOOP;查询工具仅访问数据库。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"cunicopia-dev-whoop-postgres": {
"command": "uvx",
"args": [
"whoop-postgres-mcp"
],
"env": {
"WHOOP_CLIENT_ID": "<WHOOP_CLIENT_ID>",
"WHOOP_CLIENT_SECRET": "<WHOOP_CLIENT_SECRET>",
"WHOOP_REDIRECT_URI": "<WHOOP_REDIRECT_URI>",
"WHOOP_DB_URL": "<WHOOP_DB_URL>"
}
}
}
}
启动命令uvx whoop-postgres-mcp
需要配置的环境变量
WHOOP_CLIENT_ID密钥Client ID of your WHOOP developer app (developer.whoop.com).
WHOOP_CLIENT_SECRET密钥Client secret of your WHOOP developer app.
WHOOP_REDIRECT_URIOAuth redirect URI, exactly as registered on the WHOOP app (e.g. http://localhost:8765/callback).
WHOOP_DB_URL密钥Postgres DSN the server syncs into and reads from (e.g. postgresql://user:pass@localhost:5432/whoop). Tokens are stored in this database.

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypiwhoop-postgres-mcp0.1.0

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

whoop-mcp

Python License: MIT storage: Postgres MCP

一个 MCP 服务,可将你的 WHOOP 数据同步到 Postgres,并让 AI Agent 查询这些数据。

WHOOP 的公共 API 有速率限制,使用游标分页,并且每次只返回一条记录。这对于同步任务来说没问题,但如果 Agent 想回答“我本周的 HRV 与基线相比如何?”之类的问题,就很不方便。因此,这个服务将工作分为两部分:

  • 同步路径:从 WHOOP API 拉取周期、恢复、睡眠、锻炼和身体测量数据,存入有文档说明的 Postgres 架构,并在类型化列旁保留每条记录的原始 JSON;
  • 查询路径:一组只读取 Postgres 的 MCP 工具。它们速度快,不会触及 WHOOP 的速率限制,并且数据同步后即使离线也能继续工作。

你的数据会存入由你掌控的数据库,并采用可通过任何 SQL 客户端读取的架构。除调用 WHOOP 外,不会有任何数据离开你的设备。

Python 3.12+ · MIT · stdio MCP 服务 + CLI · Postgres 存储


目录


工具

两个写入端工具会与 WHOOP API 通信;其他工具都只读取 Postgres。

工具参数功能
whoop_auth_url无返回可在浏览器中打开的 OAuth 授权 URL。
whoop_connectcode使用 OAuth code 换取令牌,保存令牌,并返回已连接的用户。
whoop_syncdays=7、full=false将 WHOOP 数据拉取到 Postgres。返回各数据集合的记录数和错误。
whoop_status无各数据集合的同步状态:上次同步时间、水位标记、行数和上次错误。
whoop_overviewdays=7最新恢复状况和生命体征与 30 天基线的对比、昨夜睡眠、近期锻炼和负荷。
whoop_recoverydays=7、limit=50近期恢复评分、静息心率、HRV、SpO2、皮肤温度。
whoop_sleepdays=7、limit=50近期睡眠和小睡,包含阶段明细、睡眠需求、表现和效率。
whoop_workoutsdays=14、limit=50近期锻炼,包括负荷、心率、能量、距离和各心率区间分钟数。
whoop_cyclesdays=7、limit=50近期生理周期(WHOOP 日),包括每日负荷和心率。
whoop_baseline无各项生命体征的 30 天均值和标准差。

days 上限为 365,limit 上限为 200。所有工具均返回 JSON 文本。

安装

uv tool install whoop-postgres-mcp      # or: pipx install whoop-postgres-mcp

也可以不安装,直接运行:

uvx whoop-postgres-mcp --help

你还需要一个 Postgres 数据库(任意近期版本均可;14+ 即可)和一个 WHOOP 开发者应用。docs/SETUP.md 介绍了两者的配置步骤。

快速开始

export WHOOP_CLIENT_ID=...
export WHOOP_CLIENT_SECRET=...
export WHOOP_REDIRECT_URI=http://localhost:8765/callback
export WHOOP_DB_URL=postgresql://whoop:whoop@localhost:5432/whoop

whoop-mcp init-db          # create the `whoop` schema (idempotent)
whoop-mcp auth-url         # print the URL to visit; approve access in a browser
whoop-mcp connect <code>   # paste the `code` from the redirect URL
whoop-mcp sync --all       # first backfill; later runs: whoop-mcp sync --days 7
whoop-mcp                  # serve MCP over stdio

也可以使用 MCP 工具(whoop_auth_url、whoop_connect、whoop_sync)执行相同流程,让 Agent 完成整个设置过程。

配置

所有配置均通过环境变量完成。服务会在启动时验证每个变量,并在退出时显示缺少的变量名称。

变量必填含义
WHOOP_CLIENT_ID是WHOOP 开发者应用的客户端 ID。
WHOOP_CLIENT_SECRET是WHOOP 开发者应用的客户端密钥。
WHOOP_REDIRECT_URI是重定向 URI,必须与应用中注册的地址完全一致。任何 URL 均可;服务不会监听该地址。你需要从地址栏复制 code。
WHOOP_DB_URL是Postgres DSN,例如 postgresql://user:pass@host:5432/db。令牌和数据均存储在此处。

向 MCP 客户端注册

Claude Code:

claude mcp add whoop -e WHOOP_CLIENT_ID=... -e WHOOP_CLIENT_SECRET=... \
  -e WHOOP_REDIRECT_URI=http://localhost:8765/callback \
  -e WHOOP_DB_URL=postgresql://whoop:whoop@localhost:5432/whoop \
  -- uvx whoop-postgres-mcp

Claude Desktop(claude_desktop_config.json)或任何接受 stdio 命令的客户端:

{
  "mcpServers": {
    "whoop": {
      "command": "uvx",
      "args": ["whoop-postgres-mcp"],
      "env": {
        "WHOOP_CLIENT_ID": "...",
        "WHOOP_CLIENT_SECRET": "...",
        "WHOOP_REDIRECT_URI": "http://localhost:8765/callback",
        "WHOOP_DB_URL": "postgresql://whoop:whoop@localhost:5432/whoop"
      }
    }
  }
}

同步工作原理

WHOOP 的集合端点会按记录的发生时间筛选,而非最后修改时间;记录在创建后也会发生变化(睡眠记录创建时的状态为 PENDING_SCORE,之后才会评分)。因此,同步会:

  1. 始终重新获取最近 days 天的数据,以捕获延迟评分的记录;
  2. 跟踪每个集合的水位线(whoop_sync_state 中的 newest_updated_at)。如果距上次同步已超过 days 天,则将时间窗口向前扩展至水位线之前两天,确保间隔不会造成数据缺失;
  3. 按自然键(id,恢复数据则使用 cycle_id)对每条记录执行 upsert,因此窗口重叠不会造成问题,重复运行也安全;
  4. 在 whoop_sync_state 中记录每个集合的错误,并继续处理其他集合,而不是中止本次运行。

full=true(或 whoop-mcp sync --all)会取消时间下限,并遍历账户的全部历史记录。身体测量数据只有一条当前记录,每次同步都会刷新。

令牌会主动刷新(在过期前五分钟),并通过 Postgres 咨询锁进行串行处理,因此 MCP 服务和由 cron 驱动的 whoop-mcp sync 可以共用一行令牌记录而不会发生竞争。

完整的数据模型见 docs/SCHEMA.md。

安全模型

  • 数据库访问等同于令牌访问。 OAuth 令牌以明文存储在 whoop.whoop_tokens 中。任何能够读取该表的人,都可以代表你调用 WHOOP API,直到刷新令牌被撤销。请相应限制数据库授权,并将 WHOOP_DB_URL 视为机密。
  • 读取工具不会访问网络。 只有 whoop_connect 和 whoop_sync 会与 WHOOP 通信。其他所有操作都是针对你的数据库执行的 SQL 查询。
  • Postgres 之外不会写入任何内容。 不写入文件,不使用缓存,也不收集遥测数据。
  • 权限范围仅限读取。 应用会请求 read:* 权限范围,以及用于刷新令牌的 offline。它无法修改 WHOOP 账户中的任何内容。
  • 要撤销访问权限,请从 whoop_tokens 中删除该行,并从 WHOOP 账户设置中移除该应用。

开发

git clone https://github.com/cunicopia-dev/whoop-mcp
cd whoop-mcp
uv venv && source .venv/bin/activate
uv pip install -e ".[dev]"

ruff check .
mypy src
pytest                       # pure-logic tests
WHOOP_TEST_DB_URL=postgresql://whoop:whoop@localhost:5432/whoop pytest   # + live DB tests

实时测试会应用架构,并在每项测试前清空目标数据库中的所有表。请使用临时数据库运行这些测试。

用于本地测试的临时 Postgres:

docker run -d --rm --name whoop-pg -e POSTGRES_USER=whoop -e POSTGRES_PASSWORD=whoop \
  -e POSTGRES_DB=whoop -p 5432:5432 postgres:16-alpine

项目结构

src/whoop_mcp/
  config.py     environment variables, validated at startup
  auth.py       OAuth2 flow, token persistence, locked refresh
  client.py     httpx client: pagination, backoff, Retry-After
  schema.sql    the Postgres DDL (applied by `whoop-mcp init-db`)
  db.py         connection + schema helpers
  sync.py       incremental sync with per-collection watermarks
  queries.py    read-side SQL behind the MCP tools
  server.py     MCP server over stdio + CLI entry point
docs/
  SETUP.md      WHOOP app registration, OAuth walkthrough, DB init, first sync
  SCHEMA.md     column-by-column data model
tests/          config, schema, client, auth, sync, and stdio protocol tests

许可证

MIT。参见 LICENSE。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。