oura-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@oura-mcpHow did I sleep this week, and what's dragging my readiness down?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
A remote MCP server that plugs your Oura Ring data into Claude, running on Cloudflare Workers. No laptop left on. No server to babysit. Free to host.
✨ What you get
"How did I sleep this week, and what is dragging my readiness down?"
Ask in plain language. Claude pulls the numbers straight from your ring and answers.
🗣️ You ask | 🔍 It reads |
"Show my sleep and readiness for the last 7 days" |
|
"How much sleep debt do I have?" |
|
"Am I doing better than last week?" |
|
"Is my HRV trending up or down this month?" |
|
"Why is my readiness lower than usual?" |
|
"Did that late workout hurt my sleep?" |
|
"What was my resting heart rate last night?" |
|
"How stressed was I on Monday?" |
|
"What is my VO2 max and cardiovascular age?" |
|
"How much battery does my ring have left?" |
|
Related MCP server: Oura MCP Server
🧠 How it works
flowchart LR
A["🤖 Claude<br/>web, desktop, mobile"] -- "MCP over HTTPS" --> B["☁️ Your Cloudflare Worker<br/>oura-mcp"]
B -- "OAuth2 bearer token" --> C["💍 Oura API v2"]
B <-- "rotating tokens" --> D[("🔐 Durable Object")]🏠 Your own deployment. It runs in your Cloudflare account with your Oura API app. Your health data never passes through anyone else's server.
🔒 Read only. The server never writes anything to your Oura account.
🔁 Safe token rotation. Oura refresh tokens are single use. One Durable Object rotates them, so concurrent requests cannot break your login.
🧰 Raw data plus smart tools.
oura_datareads 19 collections, and four analysis tools do the maths for you.✅ Tested. The analysis code is pure functions with a unit test suite that runs in CI on every push.
📸 See it in action
Illustrative examples with sample data. Your own numbers come live from your ring.
🧠 Smart tools
You do not have to ask Claude to crunch raw JSON. These tools return ready-made answers:
Tool | What it answers |
| Night by night score, hours, efficiency, HRV and lowest heart rate, with averages, best and worst night, and sleep debt against your target (default 7.5 h) |
| This week vs last week for sleep, readiness, activity and steps, with change and percent change |
| Nightly HRV, rolling average, min and max, and whether you are trending up, down or flat |
| What is helping or dragging today's readiness: the three weakest and three strongest contributors |
Group | Collections |
😴 Sleep |
|
⚡ Readiness and stress |
|
🏃 Activity |
|
❤️ Heart and body |
|
🏷️ Context |
|
💍 Device and profile |
|
Daily collections take start_date and end_date. Time series (heartrate, ring_battery_level) take start_datetime and end_datetime. Any record can be fetched with document_id, and large results page with next_token.
🚀 Setup in 6 steps
You need: a free Cloudflare account, an Oura account, and Node.js 18 or newer.
1. Create an Oura API app at developer.ouraring.com. You will add the redirect URI in step 4.
2. Deploy (or use the button above)
git clone https://github.com/mehmetaktug/oura-mcp && cd oura-mcp
npm install
npx wrangler login
npx wrangler deployWrangler prints your URL, for example https://oura-mcp.<your-subdomain>.workers.dev.
3. Set your secrets
npx wrangler secret put OURA_CLIENT_ID
npx wrangler secret put OURA_CLIENT_SECRET
npx wrangler secret put MCP_SECRET # long random string: openssl rand -hex 244. Add the redirect URI to your Oura app:
https://<your-worker-host>/callback5. Connect your ring. Open this in a browser and approve access:
https://<your-worker-host>/<MCP_SECRET>/login6. Add the connector. In claude.ai open Settings → Connectors → Add custom connector, paste the URL below and choose No sign-in:
https://<your-worker-host>/<MCP_SECRET>/mcpThat is it. Start a new chat and ask about your sleep. 🎉
🛡️ Security model
🔑 Secret URL | The path contains |
🔄 Rotate anytime | Run |
🧱 Want more? | Put the Worker behind Cloudflare Access for real authentication. |
👀 Read only | No tool can modify your Oura account. |
🧪 Local development
cp .dev.vars.example .dev.vars # fill in the values
npx wrangler dev
npm test # run the unit testsUse http://localhost:8787/callback as an extra redirect URI in your Oura app while testing.
🩹 Troubleshooting
Symptom | Fix |
| Do step 5 once. |
| Your Oura access was revoked or expired. Repeat step 5. |
Oura shows | The redirect URI in your Oura app must match |
Want your own domain | Add a |
🗺️ Ideas for contributions
More analysis tools: correlations with tags, anomaly detection, stress and recovery balance
Optional API key header authentication
Webhook support for push updates
Response trimming for token efficiency
PRs and issues are welcome. ⭐ If this is useful to you, a star helps others find it.
⚖️ Disclaimer
Unofficial community project. Not affiliated with or endorsed by Oura. Your data is yours: use at your own risk and never share your secret URL.
You run your own copy with your own Oura API app, so you are responsible for following the Oura API and MCP Agreement and applicable privacy laws.
📄 License
Related MCP Connectors
Read sleep, readiness, activity, stress, heart rate and workouts from the Oura Ring.
WHOOP recovery, strain, sleep and workouts in Claude via official WHOOP OAuth. Free, open source.
Connect your Oura Ring account securely in minutes. Enable authorized access to your sleep, activi…
Connect your Oura Ring account and enable access to your wellness data in apps and automations. In…
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceIntegrates Oura Ring health data with Claude Desktop, providing resources, tools, and advanced analytics for sleep, activity, readiness, and health trends.1-
- AlicenseAqualityCmaintenanceProvides 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.8MIT
- AlicenseNot gradedqualityDmaintenanceEnables Claude to access and query Oura Ring health data including sleep, activity, readiness, heart rate, and more via the Oura API.MIT
- AlicenseNot gradedqualityDmaintenanceEnables Claude Desktop and Claude Code to access your personal Oura Ring health data—including sleep, readiness, activity, heart rate, and workouts—through local MCP tools.6 npmMIT