Oura MCP Server

Oura MCP Server

Provides read-only access to Oura ring biometrics via the Oura API, enabling Claude to query daily summaries, sleep, readiness, stress, workouts, baselines, and heart rate data. Designed to complement a Strava connector for joint analysis of training and recovery.

Category
访问服务器

README

Oura MCP server

A Model Context Protocol (MCP) server that gives Claude read-only access to your Oura ring biometrics via the Oura API v2.

It's designed to sit alongside a Strava connector: every tool is namespaced oura_* and keyed by ISO date (YYYY-MM-DD), so Claude can join Oura recovery data against Strava training load on date and answer questions like "how did last week's hard sessions affect my sleep, stress, and next-day readiness?" in one reasoning step.

Claude running the Oura connector — daily summary with an overreach day highlighted

<sub>Illustrative example using sample data, not real biometrics.</sub>

Tools

Tool What it returns Default window
oura_get_daily_summary Start here. One row/day: readiness, sleep & activity scores, total sleep, resting HR, HRV, temp deviation, steps, active calories, daytime stress. The cross-source join table. 30 days
oura_get_sleep_detail Per-night architecture: bedtime, sleep stages (deep/REM/light), efficiency, latency, avg/lowest HR, HRV, respiratory rate. 14 days
oura_get_readiness_detail Readiness with every contributor (hrv_balance, resting HR, recovery index, body temp, previous-day activity, sleep balance…) — explains why readiness moved. 30 days
oura_get_stress_resilience Daytime stress vs. recovery minutes, day summary, and long-term resilience level + contributors. 30 days
oura_get_workouts Workouts as logged by Oura — reconcile against Strava, catch missed sessions, see intensity labels. 30 days
oura_get_baselines Slow-moving baselines: overnight SpO2, breathing disturbance, cardiovascular/vascular age, VO2 max. 90 days
oura_get_heart_rate Fine-grained HR timeseries, tagged by source (awake/rest/sleep/workout). Aggregated stats by default. 24 hours

All output is compact CSV with units stated in the column names.

Setup

python -m venv .venv && source .venv/bin/activate   # Windows: .venv\Scripts\activate
pip install -e .

New here? The full setup & configuration guide walks through install, token creation, the Claude Desktop config, common mistakes, and troubleshooting.

Authentication

This server uses an Oura Personal Access Token (PAT):

  1. Go to https://cloud.ouraring.com/personal-access-tokens and create a token.
  2. Copy .env.example to .env and paste the token into OURA_PERSONAL_ACCESS_TOKEN (for local dev), or set it in the Claude Desktop env block below.

Never commit your real token — .env is gitignored.

Run / test

fastmcp dev server.py     # opens the MCP Inspector to exercise each tool manually

Install in Claude Desktop

Edit claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\) and add:

{
  "mcpServers": {
    "oura": {
      "command": "/Users/ericcarr/Documents/GitHub/oura-mcp-server/.venv/bin/python",
      "args": ["/Users/ericcarr/Documents/GitHub/oura-mcp-server/server.py"],
      "env": {
        "OURA_PERSONAL_ACCESS_TOKEN": "your-token-here"
      }
    }
  }
}

Use the venv's Python interpreter and an absolute path to server.py. Fully quit and reopen Claude Desktop after editing. The oura_* tools then appear in the tools/connectors menu, ready to use alongside your Strava tools.

Usage & examples

Once the server is connected, just ask Claude in plain language — it picks the right tool(s) and date ranges. A few patterns that work well:

Oura on its own

  • "Pull my Oura daily summary for the last two weeks."
  • "Did my readiness drop after any night this month? Show me why." → oura_get_readiness_detail
  • "Break down last night's sleep stages and compare them to my 14-day average." → oura_get_sleep_detail
  • "Which days this month were most stressful, and how's my resilience trending?" → oura_get_stress_resilience
  • "How's my VO2 max and SpO2 trending over the last 90 days?" → oura_get_baselines
  • "What was my heart rate during yesterday's workout vs. overnight?" → oura_get_heart_rate

The headline use case — Oura + Strava together

Because both connectors are date-keyed, Claude can join them on date in one step:

  • "Compare last month's Strava training load against my Oura readiness and sleep. Flag any days I overreached (readiness or HRV dropped the morning after a hard session)."
  • "After my long runs, how much does my resting heart rate rise the next morning, and how long until it recovers to baseline?"
  • "Do my hardest training days hurt that night's deep sleep? Show the correlation."
  • "Reconcile my Strava activities with Oura's logged workouts for the past month — did Oura catch anything Strava missed?" → oura_get_workouts
  • "Build me a weekly table: Strava distance & suffer score next to Oura sleep score, avg HRV, and next-day readiness, so I can see if my training plan is sustainable."

What the data looks like

Tools return compact CSV with units in the column names — easy for Claude to reason over and join. For example, oura_get_daily_summary returns rows like:

date,readiness_score,sleep_score,activity_score,total_sleep_h,resting_hr_bpm,avg_hrv_ms,temp_deviation_c,steps,active_cal,stress_high_min,day_summary
2026-06-05,78,84,95,8.31,52,79,-0.16,8122,1211,360,stressful
2026-06-06,63,60,97,5.14,74,12,-0.19,7667,941,240,stressful
2026-06-07,85,87,96,7.95,60,37,0.13,7768,919,30,normal

Here the high-load, high-stress day (Jun 5: 1,211 active cal, 360 stressful min) is followed by a readiness crash (84→63), a resting-HR spike (52→74 bpm), and an HRV collapse (79→12 ms) — exactly the training-to-recovery signal this server is built to surface.

Tip: start broad with oura_get_daily_summary, then drill into a specific day or signal with the detail tools (oura_get_readiness_detail, oura_get_sleep_detail). Keep date ranges modest to stay fast and within Oura's rate limit.

Notes & limits

  • Read-only. No tool writes to your Oura account.
  • Dates are ISO YYYY-MM-DD and the range is inclusive. Heart rate uses ISO 8601 datetimes.
  • Some metrics are sparse or ring/firmware-dependent (VO2 max, cardiovascular age, resilience need enough history); rows show blanks where a metric wasn't measured.
  • Oura's rate limit is ~5000 requests/day; tools default to modest windows and paginate automatically.

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选