mcpField
O
Oura Ring

Oura Ring

本地服务
oura-ring-python-mcp.readthedocs.io健康医疗05 周前更新

关于 Oura Ring

这是一个只读 MCP 服务,通过 OAuth2 访问 Oura API v2 中的 Oura Ring 数据。Oura 用户和 MCP 客户端可读取睡眠、准备度、活动、压力、血氧、韧性、锻炼、会话及心率信息。

主要功能

  1. 01每日睡眠和准备度评分
  2. 02活动、压力、SpO2 与韧性数据
  3. 03锻炼及冥想或休息会话
  4. 04含最小值、最大值和平均值的心率样本
  5. 05按日期范围查询每日数据

适用场景

  1. 01按日期范围查看睡眠和准备度
  2. 02检查活动、压力及恢复指标
  3. 03查看指定时间段的心率
  4. 04获取锻炼和会话记录

MCP 相关

通过 MCP 工具向客户端提供 Oura API v2 数据,需先完成 OAuth2 授权。工具涵盖个人信息及按日或按时间范围查询的健康与活动记录。

配置

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

mcp.json · 通用配置
{
"mcpServers": {
"osjayaprakash-oura-ring-python": {
"command": "uvx",
"args": [
"oura-ring-python-mcp"
],
"env": {
"OURA_CLIENT_ID": "<OURA_CLIENT_ID>",
"OURA_CLIENT_SECRET": "<OURA_CLIENT_SECRET>",
"OURA_TOKEN_FILE": "<OURA_TOKEN_FILE>",
"OURA_TIMEZONE": "<OURA_TIMEZONE>"
}
}
}
}
启动命令uvx oura-ring-python-mcp
需要配置的环境变量
OURA_CLIENT_IDClient ID of your Oura API application
OURA_CLIENT_SECRET密钥Client secret of your Oura API application
OURA_TOKEN_FILE密钥Where `oura-ring-python-mcp auth` saved the OAuth tokens
OURA_TIMEZONEYour IANA time zone (e.g. Europe/London), so "today" is your day; defaults to the machine's

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

安装包
pypioura-ring-python-mcp0.1.0
ocighcr.io/osjayaprakash/oura-ring-python-mcp:0.1.0

工具

还没有获取到工具列表

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

详细介绍

oura-ring-python-mcp

CI PyPI Python Docker License: MIT

一个 MCP 服务,为 Claude(或任何 MCP 客户端)提供对 Oura Ring 数据的只读访问权限:睡眠、准备度、活动、压力、SpO2、韧性、锻炼、训练课程和心率。它通过自己的轻量级异步客户端(oura_ring_mcp.core)调用 Oura API v2。

工具

工具返回内容
get_personal_info年龄、体重、身高、生理性别、电子邮件
get_daily_sleep每日睡眠评分及其影响因素
get_sleep_periods每晚睡眠和小睡:阶段、效率、心率、HRV
get_daily_readiness每日准备度评分、影响因素、温度偏差
get_daily_activity每日活动评分、步数、卡路里、各活动强度等级的时长
get_daily_stress每日处于高压力状态和恢复状态的时长
get_daily_spo2每晚平均 SpO2 和呼吸干扰指数
get_daily_resilience每日韧性等级及其影响因素
get_workouts锻炼的类型、强度、卡路里、距离
get_sessions冥想、呼吸和休息课程
get_heart_rate心率采样值,包括最小值、最大值和平均 bpm

每日工具接受可选的 start_date 和 end_date(YYYY-MM-DD,包含起止日期)。未指定时,查询范围为截至今天的 7 天;日期范围最长为 90 天。每条结果都会注明所覆盖的日期范围,因此模型始终知道“今天”指什么。

get_heart_rate 接受可选的 start_datetime 和 end_datetime(ISO 8601)。未指定时,查询范围为最近 24 小时;时间窗口最长为 7 天。

为缩小结果体积,不包含按时间间隔划分的序列数据(5 分钟活动类别、MET、睡眠阶段、睡眠期间的心率和 HRV 曲线);但会保留评分、总量和平均值。

设置

如需分步指南(包括创建 Oura 应用和排查问题),请参阅安装指南。 完整文档请访问 https://oura-ring-python-mcp.readthedocs.io。

由于 Oura 已弃用个人访问令牌,服务端使用 OAuth2 登录。你需要一个 Oura API 应用(包含客户端 ID 和密钥),其重定向 URI 必须包含 http://localhost:47651/callback,并允许使用以下作用域:email、personal、daily、 heartrate、workout、session、spo2 和 stress(resilience 需要 stress)。Gen3 和 Oura Ring 4 用户需要有效的 Oura 会员资格,API 才会返回数据。

git clone https://github.com/osjayaprakash/oura-ring-python-mcp.git && cd oura-ring-python-mcp
uv sync

登录一次。此操作会打开浏览器,在 localhost 上捕获 Oura 的重定向,并将令牌保存到 ~/.config/oura-ring-mcp/tokens.json(仅你本人可读取):

OURA_CLIENT_ID=... OURA_CLIENT_SECRET=... uv run oura-ring-python-mcp auth

之后,服务端会自动刷新访问令牌(Oura 签发的令牌有效期为 30 天), 并保存每个新的单次使用刷新令牌。只有在撤销访问权限或已保存的刷新令牌丢失时,才需要再次运行 auth。

变量必填默认值含义
OURA_CLIENT_ID是Oura API 应用的客户端 ID
OURA_CLIENT_SECRET是Oura API 应用的客户端密钥
OURA_TOKEN_FILE否~/.config/oura-ring-mcp/tokens.json(如果已设置,则位于 $XDG_CONFIG_HOME 下)auth 保存令牌以及服务端读取令牌的位置
OURA_TIMEZONE否机器的时区你的 IANA 时区,例如 Europe/London,以便“今天”与 Oura 的日期一致。在 Docker 中运行时请设置此项,因为默认值为 UTC
OURA_REDIRECT_URI否http://localhost:47651/callback必须与应用中的某个重定向 URI 完全一致
OURA_SCOPES否email personal daily heartrate workout session spo2 stress要请求的作用域

如果重定向 URI 不是 http://localhost:<port>/...(或者你通过 SSH 登录或在 Docker 中运行),auth 会要求你粘贴浏览器最终打开的 URL;使用 auth --paste 可强制启用此方式。

从 PyPI 运行

无需克隆;uv 会获取并运行已发布的软件包:

OURA_CLIENT_ID=... OURA_CLIENT_SECRET=... uvx oura-ring-python-mcp auth   # once
uvx oura-ring-python-mcp

在客户端配置中,使用 "command": "uvx", "args": ["oura-ring-python-mcp"]。

使用 Docker 运行

先在主机上登录(如上所述),然后挂载令牌文件夹,以便容器读取令牌并保存刷新后的令牌。服务端通过 stdio 使用 MCP 通信,因此请保留 -i:

docker run -i --rm --user "$(id -u):$(id -g)" \
  -e OURA_CLIENT_ID -e OURA_CLIENT_SECRET -e OURA_TIMEZONE=Europe/London \
  -v ~/.config/oura-ring-mcp:/tokens \
  ghcr.io/osjayaprakash/oura-ring-python-mcp:latest

镜像从 /tokens/tokens.json 读取令牌。在 Linux 上,--user 可让容器读取并更新你的令牌文件;macOS 和 Windows 上的 Docker Desktop 无需此选项。 若要改为从容器中登录,请使用 -it 运行容器,并执行命令 auth --paste。

在客户端配置中,使用 "command": "docker" 并传入相应参数,同时通过客户端的 env 块传递变量。

Claude Desktop

添加到 claude_desktop_config.json:

{
  "mcpServers": {
    "oura": {
      "command": "uv",
      "args": ["--directory", "/absolute/path/to/oura-ring-python-mcp", "run", "oura-ring-python-mcp"],
      "env": {
        "OURA_CLIENT_ID": "your-client-id",
        "OURA_CLIENT_SECRET": "your-client-secret"
      }
    }
  }
}
Claude Code
claude mcp add oura \
  -e OURA_CLIENT_ID=your-client-id \
  -e OURA_CLIENT_SECRET=your-client-secret \
  -- uv --directory /absolute/path/to/oura-ring-python-mcp run oura-ring-python-mcp

Langfuse 跟踪(可选)

每次工具调用都会生成一个 Langfuse 跟踪,每次 Oura API 调用都会生成一个子跨度。 安装附加项并设置密钥:

uv sync --extra langfuse

在服务端命令中,使用 run --extra langfuse oura-ring-python-mcp,而不是 run oura-ring-python-mcp。

变量含义
LANGFUSE_PUBLIC_KEY、LANGFUSE_SECRET_KEY仅当两者都已设置时才启用跟踪
LANGFUSE_BASE_URL用于可自托管或区域实例的 Langfuse URL(默认:Langfuse Cloud)
LANGFUSE_CAPTURE_DATA设为 true 可包含工具输入、输出和错误消息。默认值为 false

**隐私:**睡眠、心率和活动数据属于健康数据。默认情况下,跟踪仅保存工具名称、耗时和错误类别名称。设置 LANGFUSE_CAPTURE_DATA=true 会将你的数据发送到 Langfuse 实例;仅在信任该实例时才这样做,例如使用可自托管的实例。

开发

uv sync
uv run pytest            # offline suite
uv run pytest -m live    # hits the real API; needs `auth` first
uv run ruff check src tests && uv run ruff format --check src tests

发布

更新 pyproject.toml 中的 version 以及 server.json 中的两个版本号(测试会检查它们是否一致),提交更改,然后推送标签:

git tag v0.1.0 && git push origin v0.1.0

该标签会将项目发布到 PyPI(pypi.yml,需要 PYPI_API_TOKEN 密钥)、ghcr.io/osjayaprakash/oura-ring-python-mcp(docker.yml),然后发布到 MCP Registry(mcp-registry.yml)。

许可证

MIT

评论

支持 Markdown

第一次接触 MCP?

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

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