关于 Oura Ring (read-only)
Oura Ring (read-only) 是用于查询 Oura 健康和活动数据的 MCP 服务,适合希望通过 MCP 客户端分析戒指指标的人。它提供每日汇总和趋势,同时强制只读访问,并将 OAuth 令牌保存在本机。
主要功能
- 01每日准备度、睡眠和活动概览
- 02最长 90 天的趋势与均值
- 03睡眠阶段和心率曲线
- 04活动、锻炼、训练会话和标签
- 05本地 OAuth 令牌存储与刷新
- 06公开样例数据沙盒
适用场景
- 01查看某日的睡眠阶段和准备度
- 02比较一个月内的 HRV 与最低心率
- 03分析活动、压力和睡眠趋势
- 04查看带标签日期与准备度的关联
MCP 相关
向 MCP 客户端提供只读 Oura 数据工具,包括每日汇总、趋势表、睡眠详情和心率数据。服务通过 stdio 运行,不提供修改 Oura 数据的工具。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
14收录的工具列表 · 更新于 1 周前
此工具无需参数。
详细介绍
Oura Ring MCP 服务(只读)
向 Claude、Cursor、VS Code 或任何 MCP 客户端询问你的 Oura Ring 准备度、睡眠、HRV、活动、压力和心率信息,同时不会赋予它修改数据的能力。
“我昨晚睡得怎么样?为什么准备度只有 64?” “比较一下过去 30 天的 HRV 和最低心率。” “显示昨晚的睡眠阶段和心率曲线。” “标记饮酒的日子之后,我的准备度会下降吗?”
(安装前或安装后,先运行一次 auth 步骤。)
为什么选择此服务
- 强制只读。 Oura 的 API 没有用于写入你数据的端点,而此客户端的限制更严格:它只能发送
GET请求,拒绝/v2/usercollection/以外的任何 URL,不会触及 webhook API,并且每个工具都带有readOnlyHint: true。否则测试会导致构建失败。 - 一次调用回答完整问题。
get_daily_overview会同时返回某一天的准备度、睡眠、小睡、活动、压力、韧性、SpO2、锻炼和标签。get_trends会返回每日数据表,以及最多 90 天的平均值和准备度区间。 - 适合模型处理的输出。 使用小时、分钟、千米和本地时间,而非秒和米,输出紧凑 JSON;睡眠图以阶段片段表示;心率汇总为多个区间。传入
raw: true可获取 Oura 的原始对象。 - 优雅降级。 如果你在 Oura 的授权页面取消勾选某种数据类型,组合工具会将其列在
unavailable下,而不会报错。 - 令牌留在你的设备上。 使用你自己的 Oura API 应用、基于 PKCE 的 OAuth、权限为
0600的令牌文件,并安全处理 Oura 的一次性刷新令牌。没有第三方服务,也没有遥测。 - 无需账户即可试用。 设置
OURA_SANDBOX=1即可提供 Oura 的公开示例数据。
快速开始
你需要 Node.js 20.11+ 和一个 Oura 账户。(Oura 已于 2025 年 12 月停用个人访问令牌,因此只能通过 OAuth 访问。)
1. 创建 Oura API 应用(2 分钟)
- 打开 cloud.ouraring.com/oauth/applications 并创建一个新应用。
- 将 Redirect URI 设为
http://localhost:8787/callback。 - 复制 Client ID 和 Client Secret。
无需 Oura 批准,应用最多可供 10 位用户使用,个人使用绰绰有余。
2. 连接你的 Oura 账户
npx -y @royreznik/oura-ring-mcp auth
根据提示粘贴你的 Client ID 和 Client Secret(输入密钥时不会显示)。浏览器会打开 Oura 的授权页面;保留所有数据类型的勾选状态并批准。令牌会保存到 ~/.config/oura-ring-mcp/tokens.json,之后会自动刷新。
(对于脚本,请设置 OURA_CLIENT_ID 和 OURA_CLIENT_SECRET,而不是回答提示。)
3. 将其添加到你的 MCP 客户端
Claude Code
作为插件安装(添加服务和 /oura:auth 技能,引导你完成连接):
/plugin marketplace add royreznik/oura-ring-mcp
/plugin install oura@oura-ring-mcp
或者只添加 MCP 服务:
claude mcp add oura --scope user -- npx -y @royreznik/oura-ring-mcp
Claude Desktop、Cursor、Windsurf
添加到客户端的 MCP 配置中(Claude Desktop:Settings → Developer → Edit Config;Cursor:~/.cursor/mcp.json;Windsurf:~/.codeium/windsurf/mcp_config.json):
{
"mcpServers": {
"oura": {
"command": "npx",
"args": ["-y", "@royreznik/oura-ring-mcp"]
}
}
}
对于 Claude Desktop,你也可以从最新版本安装 .mcpb bundle。
VS Code(GitHub Copilot)
.vscode/mcp.json(或你的用户级 mcp.json):
{
"servers": {
"oura": { "type": "stdio", "command": "npx", "args": ["-y", "@royreznik/oura-ring-mcp"] }
}
}
OpenAI Codex CLI
~/.codex/config.toml:
[mcp_servers.oura]
command = "npx"
args = ["-y", "@royreznik/oura-ring-mcp"]
Docker
先在主机上运行 auth,然后挂载令牌目录:
docker build -t oura-ring-mcp https://github.com/royreznik/oura-ring-mcp.git
docker run -i --rm -v ~/.config/oura-ring-mcp:/home/node/.config/oura-ring-mcp oura-ring-mcp
然后询问:“给我看看今天的 Oura 概览。”
无需账户即可试用
claude mcp add oura-sandbox --env OURA_SANDBOX=1 -- npx -y @royreznik/oura-ring-mcp
沙盒模式会提供 Oura 的公开示例数据。无需授权,也不会使用个人数据。
工具
| 工具 | 返回内容 |
|---|---|
get_daily_overview | 单日数据:准备度、睡眠评分和主要睡眠、午睡、活动、压力、恢复力、SpO2、心血管年龄、VO2 max、就寝时间建议、锻炼、时段、标签(默认为最近一个有评分的日期) |
get_trends | 逐日表格,以及准备度、睡眠和活动评分、睡眠阶段、HRV、最低心率、体温、步数、卡路里和压力的平均值/最小值/最大值,覆盖 1–90 天 |
get_profile | 年龄、身高、体重、性别、电子邮件;戒指型号、尺寸、颜色、固件;电池电量 |
list_daily_readiness | 准备度评分、影响因素、体温偏差 |
list_daily_sleep | 睡眠评分和影响因素 |
list_sleep_periods / get_sleep_period | 夜间睡眠和午睡:阶段、入睡潜伏期、效率、HR、HRV、呼吸;某一晚的睡眠结构图和 HR/HRV 曲线 |
list_daily_activity | 活动评分、步数、卡路里、活动分钟数、久坐时间 |
list_workouts | 活动、强度、时长、卡路里、距离(可按活动筛选) |
list_sessions | 包含心情、HR 和 HRV 的冥想/呼吸/放松时段 |
list_daily_health | 压力、恢复力、SpO2 和呼吸紊乱、心血管年龄、VO2 max、就寝时间窗口,按日期汇总 |
list_tags | Oura 应用中的标签和备注(酒精、咖啡因、疾病、自定义等) |
list_rest_mode_periods | 休息模式时段及其症状标签 |
get_heart_rate | 聚合为 5 分钟/15 分钟/小时/天(或原始数据)的心率时间序列,以及按来源统计的数据;每次调用最多 30 天 |
列表工具接受 start / end(YYYY-MM-DD,含首尾日期)、days 快捷参数和 next_token。详情请参阅**工具参考**。
配置
| 变量 | 默认值 | 用途 |
|---|---|---|
OURA_CLIENT_ID | 来自令牌文件 | 你的应用客户端 ID(未设置时,auth 会询问) |
OURA_CLIENT_SECRET | 来自令牌文件 | 你的应用客户端密钥(未设置时,auth 会询问,且不会回显) |
OURA_REDIRECT_URI | http://localhost:8787/callback | 必须与应用上注册的重定向 URI 完全一致 |
OURA_TOKEN_PATH | ~/.config/oura-ring-mcp/tokens.json | 凭据的存储位置。必须是绝对路径(会展开 ~/)。遵循 XDG_CONFIG_HOME。 |
OURA_SANDBOX | 未设置 | 设置为 1 时,提供 Oura 的公开示例数据,而非你的账户数据 |
oura-ring-mcp Start the MCP server on stdio (what your MCP client runs)
oura-ring-mcp auth Connect your Oura account (opens your browser)
oura-ring-mcp status Check the stored connection
oura-ring-mcp logout Delete the locally stored tokens
oura-ring-mcp --version
“今天”根据你电脑的时区计算,该时区应与 Oura 应用使用的时区一致。
隐私与安全
- oura-ring-mcp 只会与
api.ouraring.com通信(以及在auth期间通过浏览器访问cloud.ouraring.com)。不收集遥测数据,也不使用中间服务。 - 令牌和客户端密钥仅存储在一个只有你的用户才能读取的文件中(
0600)。它们绝不会被记录日志或由工具返回。 - **你的 MCP 客户端会将工具结果发送给其大模型。**你询问的健康数据会根据该模型提供商的条款与其共享。
- 如需断开连接,请运行
oura-ring-mcp logout。如需彻底撤销访问权限,请在 cloud.ouraring.com/oauth/applications 删除应用,或在你的 Oura 账户中撤销访问权限。
身份验证的工作原理
- 使用 OAuth 2 授权码流程,配合 PKCE(S256)和随机
state,由仅监听回环地址的回调服务捕获。 - Oura 刷新令牌只能使用一次。oura-ring-mcp 会在令牌过期前不久刷新(收到 401 时也会刷新),并通过锁文件确保同一台设备上的多个客户端(例如 Claude Desktop 和 Claude Code)不会同时刷新,一次只进行一个刷新操作,同时以原子方式写入新令牌。如果写入失败,新令牌会保留在内存中,因此磁盘空间用尽也不会导致你被注销。
- 对速率限制(429,并遵循
Retry-After)、服务器错误、超时(30s)和网络错误进行退避重试。在客户端取消请求会停止其发出的 Oura 请求。
故障排除
| 症状 | 解决方法 |
|---|---|
| Oura 显示重定向 URI 错误 | 应用的重定向 URI 必须与 OURA_REDIRECT_URI 完全一致,包括 http://、端口和 /callback。 |
Port 8787 is in use | 在应用上注册其他 URI(例如 http://localhost:9876/callback),并设置 OURA_REDIRECT_URI 后运行 auth。 |
Not connected to Oura | 运行 auth。如果客户端以其他用户身份运行,或使用不同的 HOME,请在客户端配置中设置 OURA_TOKEN_PATH。 |
Oura rejected the refresh token | 重新运行 auth(应用密钥已轮换、访问权限已撤销,或令牌文件已复制到另一台设备)。 |
某种数据类型显示在 unavailable 下(403) | 你在 Oura 授权页面取消了该项勾选,或需要有效的 Oura 会员资格。请重新运行 auth 并授权该项。 |
426 错误 | 更新手机上的 Oura 应用并打开应用,使其同步。 |
| 缺少今天的数据 | Oura 只有在戒指通过 Oura 应用同步后才会有数据。请打开应用,然后再次询问。 |
npx -y @royreznik/oura-ring-mcp status
开发
npm install
npm test # unit, MCP integration, end-to-end and packaging tests (no network)
npm run smoke:sandbox # every tool against Oura's live sandbox API
npm run smoke:live # every tool against your account (after auth); prints only counts
npm run inspect # MCP Inspector
请参阅 CONTRIBUTING.md。唯一不可妥协的规则:oura-ring-mcp 始终保持只读。
致谢与法律声明
架构、身份验证和测试方法改编自 Oryan Omer 的 whoop-mcp(MIT)。
MIT © Roy Reznik。非官方项目,与 Oura Health Oy 无关,也未获得其认可。“Oura”是 Oura Health Oy 的商标。本文内容不构成医疗建议。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。