使用说明
Oura环MCP服务器
A. .NET 10 MCP服务器 这暴露了 欧拉戒指 健康和保健数据 模型上下文协议 AI助手的工具。
免责声明: 这是一个独立开发的开源项目。它不隶属于大浦健康公司,也不由其认可或赞助。“Oura”和“Oura Ring”是大浦健康株式会社的商标。该项目使用 Oura API v2 但Oura不维护或支持。如需Oura官方支持,请访问 ouraring.com.
概述
此服务器连接到 Oura API v2 随着MCP工具的使用,表面会显示睡眠、活动、准备状态、心率等数据 STDIO传输。身份验证是 首次发射时自动:服务器在首次启动时打开您的浏览器进行Oura授权,令牌在本地持久化,以便静默重用和刷新。一个明确的 oura-mcp login 命令也可用于无头或提前设置。
入门指南
先决条件
- .NET 10 SDK
- Oura API应用程序注册于 https://developer.ouraring.com/ (重定向URI:
http://localhost:8742/callback/)
1.安装
dotnet tool install -g gjlumsden.OuraMcp
无安装选项
或者在不安装的情况下运行(需要.NET 10):
dnx -y gjlumsden.OuraMcp
2.配置您的MCP客户端
将服务器添加到MCP客户端配置中。客户端通过STDIO启动服务器进程,并将Oura凭据作为环境变量注入。 服务器第一次启动时,它会自动打开您的浏览器,使用Oura进行授权 --不需要单独的登录步骤。然后将令牌保存到 ~/.oura-mcp/tokens.json 并在后续启动时重复使用/刷新。
VS代码(GitHub副本) --添加到 .vscode/mcp.json 或用户设置:
{
"mcpServers": {
"oura": {
"command": "oura-mcp",
"env": {
"OURA_CLIENT_ID": "<your-client-id>",
"OURA_CLIENT_SECRET": "<your-client-secret>"
}
}
}
}
克劳德桌面版 --添加到 claude_desktop_config.json:
{
"mcpServers": {
"oura": {
"command": "oura-mcp",
"env": {
"OURA_CLIENT_ID": "<your-client-id>",
"OURA_CLIENT_SECRET": "<your-client-secret>"
}
}
}
}
Using the no-install (dnx) option?
将服务器条目替换为:
{
"mcpServers": {
"oura": {
"command": "dnx",
"args": ["-y", "gjlumsden.OuraMcp"],
"env": {
"OURA_CLIENT_ID": "<your-client-id>",
"OURA_CLIENT_SECRET": "<your-client-secret>"
}
}
}
}
Prefer to log in ahead of time (headless / CI)?
在将服务器连接到MCP客户端之前,您可以通过运行 login 子命令:
$env:OURA_CLIENT_ID = "<your-client-id>"
$env:OURA_CLIENT_SECRET = "<your-client-secret>"
oura-mcp login # or: dnx -y gjlumsden.OuraMcp -- login
令牌保存到 ~/.oura-mcp/tokens.json;后续服务器启动将跳过浏览器提示。你也可以通过 --no-login 到 oura-mcp 抑制启动时的自动登录提示(如果令牌在带外配置,则很有用)。
3.开始使用
配置后,您的MCP客户端将自动发现Oura工具。尝试以下提示:
- “我昨晚睡得怎么样?”
- “显示我过去一周的准备状态得分”
- “这个月我的静息心率趋势是什么?”
- “比较过去两周我的深度睡眠和快速眼动睡眠”
- “我的最大摄氧量和心血管年龄是多少?”
- “这周我压力有多大?”
- “显示我的SpO2趋势——有什么问题吗?”
- “我这周什么时候锻炼的,燃烧了多少卡路里?”
与其他MCP工具结合
真正的力量来自将Oura数据与其他MCP服务器相结合。例如,与 工作智商 (微软365复制品):
- “看看我上周的会议,并将其与我的压力水平联系起来”
- “我哪天开会最多?这对我的睡眠有什么影响?”
- “我周五压力很大——那天我的日历上有什么会议?”
- “比较我在会议繁忙日和集中注意力日的准备程度得分”
随着 Azure MCP服务器:
- “我本周随叫随到——展示我的睡眠质量和准备情况,这样我就知道我是否适合应对事故”
使用GitHub MCP:
- “在我的日常活动分数旁边显示我的提交活动——我在高能量的日子里编码得更多吗?”
任何与MCP兼容的工具都可以组合在一起——AI助手会自动连接数据源中的点。
可用工具
| 工具 | 说明 |
|---|---|
get_personal_info |
从Oura Ring帐户检索个人信息。 |
get_ring_configuration |
从Oura ring检索环配置详细信息 |
get_daily_sleep |
从Oura Ring检索每日睡眠评分和总结 |
get_sleep_periods |
从Oura Ring检索详细的睡眠期数据 |
get_sleep_time |
从Oura Ring检索推荐的睡眠时间窗口 |
get_daily_activity |
从Oura Ring检索每日活动分数和步数 |
get_workouts |
从Oura Ring检索训练数据 |
get_sessions |
从Oura Ring检索冥想和呼吸练习等会话数据 |
get_daily_readiness |
从奥拉戒指中检索每日准备得分 |
get_daily_stress |
从Oura Ring检索每日压力数据 |
get_daily_resilience |
从Oura Ring检索每日弹性数据 |
get_rest_mode_periods |
从Oura Ring检索休息模式时段数据 |
get_heart_rate |
从Oura Ring检索心率数据 |
get_daily_spo2 |
从Oura Ring检索每日SpO2血氧数据 |
get_vo2_max |
从Oura Ring检索VO2最大估计值 |
get_cardiovascular_age |
从Oura Ring检索心血管年龄估计值 |
get_tags |
从Oura Ring中检索标签 |
get_enhanced_tags |
从Oura Ring检索增强标签 |
大多数日期范围工具接受可选 startDate 和 endDate 参数(格式: YYYY-MM-DD).
注: HRV(心率变异性)数据嵌入
get_sleep_periods响应-在Oura API v2中没有单独的HRV端点。
身份验证流程
此服务器使用 az login-样式OAuth身份验证 模式,类似于 Azure MCP服务器,融入主MCP体验:
- 自动首次启动: 当服务器启动且没有令牌时,它会将您的浏览器打开到Oura OAuth同意屏幕,作为其正常启动的一部分——不需要单独的命令。通过
--no-login如果您在带外配置令牌,请抑制此行为。 - 显式登录(可选): 你仍然可以跑
oura-mcp login(或dnx -y gjlumsden.OuraMcp -- login对于“不安装”选项,或dotnet run --project src/OuraMcp -- login来自源)以提前进行身份验证(例如,无头设置、CI)。 - 代币兑换: 授权后,本地回调服务器
http://localhost:8742/callback/接收授权码并将其交换为访问/刷新令牌。 - 永久存储: 令牌保存到
~/.oura-mcp/tokens.json(文件权限仅限于Unix上的所有者)。 - 自动刷新: 在后续的启动中,服务器加载保存的令牌,并在过期时自动刷新。
OAuth凭据(OURA_CLIENT_ID, OURA_CLIENT_SECRET)从环境变量中读取,从不存储在源代码中。
无头/CI: OURA_MCP_DISABLE_BROWSER
对于完全无头环境(CI代理、没有显示器的容器),您可以设置 OURA_MCP_DISABLE_BROWSER 环境变量。设置时:
- 服务器跳过启动系统浏览器,跳过在上绑定本地OAuth回调侦听器
http://localhost:8742/callback/. - 在此模式下,交互式登录流程无法完成,因此服务器 快速失败 有一个明显的错误,而不是挂起等待回调。
对 OURA_MCP_DISABLE_BROWSER 随着 --no-login 并在带外提供令牌(例如,复制 tokens.json 在另一台机器上生成到令牌目录中)。运行交互式 oura-mcp login 流动,离开 OURA_MCP_DISABLE_BROWSER 未设置。
发展
贡献或从源代码运行:
git clone https://github.com/gjlumsden/oura-mcp.git
cd oura-mcp
dotnet build
dotnet test
# Set OAuth credentials
$env:OURA_CLIENT_ID = "<your-client-id>"
$env:OURA_CLIENT_SECRET = "<your-client-secret>"
# Run the MCP server locally (STDIO) — opens the browser automatically on first launch
dotnet run --project src/OuraMcp
# Or authenticate explicitly first (optional; useful for headless scenarios)
dotnet run --project src/OuraMcp -- login
缓存
服务器包括 内存缓存 以减少会话中多余的Oura API调用。当人工智能助手使用相同的参数调用相同的工具时,缓存的数据将被返回,而不是再次点击API。
缓存是 仅在内存中 --当服务器进程重新启动时,它会自动清除。不同的日期范围被独立缓存。
| TTL | 端点 | 基本原理 |
|---|---|---|
| 60分钟 | 个人信息、戒指配置 | 很少更改 |
| 15分钟 | 睡眠、准备状态、睡眠时间、睡眠时间 | 可以改变(例如小睡),但不经常改变 |
| 10分钟 | 活动、压力、恢复力、锻炼、会话、SpO2、最大摄氧量、心血管年龄、标签、休息模式 | 记录后稳定的日锚数据 |
| 1 分钟 | 心率 | 高频流数据 |
韧性
所有Oura API请求都受 标准弹性管道 由...驱动 波莉 通过 Microsoft.Extensions.Http.Resilience:
| 策略 | 配置 | 目的 |
|---|---|---|
| 重试 | 3次尝试,指数回退+抖动 | 处理429(速率限制)、500+、408和网络错误 |
| 断路器 | 以10%的故障率打开,中断5秒 | 防止敲打故障的API |
| 尝试超时 | 每个请求10秒 | 限制单个请求持续时间 |
| 总超时时间 | 30秒(包括重试次数) | 限制端到端请求持续时间 |
韧性处理者尊重 Retry-After 从速率受限的响应中提取标头。认证错误(401)和权限错误(403)由客户端单独处理,不会重试。
技术栈
- .NET 10 /C#中可以为null的引用类型
- 模型上下文协议 NuGet包(MCP C#SDK)--STDIO传输
- 系统。文本。JSON 用于序列化
- IHttpClientFactory 用于HTTP客户端生命周期管理
- IMemoryCache 用于具有分层TTL的内存中响应缓存
- 微软。扩展。Http。韧性 (Polly)用于重试、断路器和超时策略
许可证
麻省理工学院