mcp-oura
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., "@mcp-ouraHow did I sleep last night compared with my 30-day average?"
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.
mcp-oura
A Model Context Protocol server that gives Claude, or any MCP client, read-only access to your Oura Ring data through the Oura API v2. It runs on your computer and talks only to Oura's API.
mcp-oura is an independent, unofficial project. It is not made, endorsed or supported by Ōura Health Oy; "Oura" is their trademark, used here only to name the service this connects to. The numbers are Oura's estimates, and an AI model's reading of them can be wrong. Neither is medical advice.
Ask things like:
"How did I sleep last night compared with my 30-day average?"
"Has my VO2 max improved over the past year?"
"What was my heart rate during yesterday's workout?"
"Which weekdays do I sleep worst, by month, since January?"
Tools
Every tool is read-only. Dates are YYYY-MM-DD in your local timezone. Oura files a night's sleep
under the morning you woke up, so "last night" is today's date. Tools that take a range default to
the 7 days ending today.
Tool | Returns | Range |
| Everything for one day: sleep score and contributors, the night in detail, naps, readiness, activity, stress, SpO2, resilience, cardiovascular age, latest VO2 max, workouts | One day; by default the latest day with data in the past 14 days |
| One row of headline numbers per day, VO2 max included | Up to 400 days |
| Weekly, monthly, quarterly or yearly averages, with how many days and VO2 max readings each rests on | Any length |
| Each sleep period with stages, efficiency, latency, heart rate, HRV and breathing | Up to 400 days |
| Heart rate in time buckets: average, minimum, maximum and number of readings | Up to 30 days (Oura's limit) and 1,500 buckets |
| Workouts with activity, intensity, duration, calories and distance | Any length |
| Raw records from 17 Oura collections, for anything the others leave out: tags, sessions, rest mode, bedtime guidance, ring details, personal info | Up to 400 days and 500 records |
Tool | Parameters |
|
|
|
|
|
|
|
|
|
|
|
|
The server evens out the API's quirks, so every tool covers exactly the dates asked for. docs/design.md lists them.
Related MCP server: Oura MCP Server
Requirements
An Oura Ring and an active Oura Membership. Without a membership, Oura's API answers 403.
macOS or Linux, with uv, which installs Python 3.12 or newer if needed.
Setup
1. Install
uv tool install git+https://github.com/lyzetam/mcp-ouraThis puts mcp-oura in ~/.local/bin. If your shell can't find it, run uv tool update-shell and
open a new terminal. To work on the code instead, see CONTRIBUTING.md.
2. Create an Oura API application
Oura grants API access through OAuth applications. Its API reference says personal access tokens were retired in December 2025. You create your own application: only you use it, and its secret stays on your computer.
Sign in at developer.ouraring.com with your Oura account and choose Create New.
Fill in the form. Oura asks for a display name, a description, a contact email, and website, privacy policy and terms of service addresses; for a personal application, a link to this repository serves for all three addresses.
Add the redirect URI
http://localhost:8765/callback, exactly as written.Tick every scope except Email, accept the Oura API Agreement, and create the application.
Copy the client ID and client secret it shows you.
3. Sign in
mcp-oura login --client-id <client id>It asks for the client secret without echoing it, then opens Oura in your browser. Approve access,
and the saved credentials refresh themselves from then on. mcp-oura logout revokes both tokens
with Oura and deletes the saved credentials.
mcp-oura login also reads OURA_CLIENT_ID and OURA_CLIENT_SECRET, but typing the secret at the
prompt keeps it out of your shell history. The sign-in address is also printed in the terminal.
Oura sends your browser back to localhost on the computer the browser runs on. To sign in on a
remote machine, forward the port from your own computer first:
ssh -L 8765:localhost:8765 <host>
mcp-oura login --no-browser --client-id <client id> # on the remote machineThen open the printed address in your local browser.
A personal access token issued before Oura retired them may still work. Skip steps 2 and 3 and
pass it in the client's configuration, for example
claude mcp add --scope user oura -e OURA_ACCESS_TOKEN=<token> -- mcp-oura, but expect Oura to
refuse it at some point.
4. Connect Claude
Claude Code:
claude mcp add --scope user oura -- mcp-ouraClaude Desktop: quit the app first, because a running Desktop can write its own copy of the
configuration back over your edit. Add the server to claude_desktop_config.json (Settings,
Developer, Edit Config) with the full path that which mcp-oura prints, then start the app:
{
"mcpServers": {
"oura": { "command": "/Users/you/.local/bin/mcp-oura" }
}
}Other MCP clients start mcp-oura the same way: a stdio server with no arguments.
5. Check it works
claude mcp list should show oura as connected. Then ask Claude "How did I sleep last night?".
Configuration
Every setting is optional. Claude Desktop does not see your shell's environment, and other clients
may not either, so set variables in the client's server configuration:
claude mcp add --scope user oura -e OURA_TIMEZONE=Europe/London -- mcp-oura for Claude Code, or an
"env": { ... } object next to "command" for Claude Desktop.
Variable | Default | Purpose |
| your computer's timezone, else UTC | IANA name, such as |
|
| Where |
| unset | A legacy personal access token, used instead of the saved credentials |
| unset | Read by |
Updating and uninstalling
uv tool upgrade mcp-oura # update
mcp-oura logout # uninstall: revoke and delete the saved credentials,
uv tool uninstall mcp-oura
claude mcp remove --scope user oura # remove it from Claude,
rm -r ~/.config/mcp-oura # and remove the lock file logout leavesPrivacy and security
The server sends your data only to the MCP client that started it, and keeps no copy. The client passes tool results to its language model: with Claude, they go to Anthropic as part of the conversation, under your Claude account's privacy settings.
It writes two files, both in
~/.config/mcp-oura/(created with mode0700).credentials.jsonholds your client ID, client secret, access token and refresh token. It has mode0600and is replaced atomically on each refresh. An emptycredentials.json.lockcoordinates refreshes between servers and stays after logout.Tokens and the client secret never appear in logs, error messages or tool results.
Sign-in uses PKCE and a state check, and listens for Oura's redirect only on this computer's loopback addresses (
127.0.0.1and::1).If the credentials file ever leaks, run
mcp-oura logout, which revokes both tokens with Oura. The file also holds your application's client secret: reset it on the application's page at developer.ouraring.com (Reset Secret), then runmcp-oura loginagain with the new secret.
Report vulnerabilities as described in SECURITY.md.
Troubleshooting
If a client shows the server as failed, run mcp-oura in a terminal with the same environment
variables the client sets. It either prints the problem and exits, or waits silently, which means it
started; the first tool call is what tests the sign-in. Press Ctrl-D to stop it.
Message or symptom | Cause and fix |
| The ring has not synced that day yet. Open the Oura app on your phone near the ring, then ask again |
| The ring has not synced in two weeks, or the account has no ring data |
Today's scores appear but heart rate stops days earlier | Oura's heart-rate series can lag the daily scores after a long gap between syncs, and fills in later |
| Run |
| Your Oura Membership has expired, or you unticked a permission when approving. Renew, or run |
| The application's access was removed, or the credentials expired. Run |
| Oura no longer accepts your legacy personal access token. Unset it and run |
| The redirect URI on your Oura application must be exactly |
| Another program uses the port. Add a second redirect URI to your Oura application and pass it with |
Claude Desktop forgets the server | It was edited while Desktop was running. Quit Desktop, add it again, then start Desktop |
Development
git clone https://github.com/lyzetam/mcp-oura && cd mcp-oura
uv sync
uv run pytest --cov # runs against an in-memory fake of the Oura API; no account needed
uv run ruff check . && uv run ruff format --check . && uv run mypyCONTRIBUTING.md covers the workflow, and docs/design.md explains how the server is put together. Changes are listed in CHANGELOG.md.
License
This server cannot be deployed
Maintenance
Related MCP Connectors
Multi-tenant hosted MCP server for Oura Ring — 21 read-only tools, OAuth per user.
WHOOP recovery, strain, sleep and workouts in Claude via official WHOOP OAuth. Free, open source.
Pace is a remote MCP server that exposes wearable and fitness data to Claude via the Model Context Protocol. It connects to Garmin, Oura, Whoop, Polar, Fitbit and 20+ devices and provides 15 tools for querying sleep, activity, recovery, and training data. Hosted on Google Cloud Run, OAuth 2.1 authentication, Streamable HTTP transport. Instructions: First you need to create an account at: https://pacetraining.co and connect your wearables. After that you can connect the remote Server via Custom Connector in Claude and OAuth 2.1 Flow startet.
Hosted MCP server with managed OAuth for 15+ toolkits: Google Workspace, Fitbit, Oura, Kalshi, etc.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceProvides natural-language access to Oura health data through Claude, with a local SQLite mirror and MCP tools for analyzing patterns with personal annotations.85 npm3MIT
- FlicenseNot gradedqualityDmaintenanceEnables Claude and other MCP clients to access Oura Ring data, including daily activity, sleep, readiness, stress, and more, via a remote Streamable HTTP server.32 npm-
- 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.5 npmMIT
- AlicenseNot gradedqualityBmaintenanceMCP server that exposes personal device data from sources like Oura into a unified SQLite store, allowing Claude to answer questions across metrics (sleep, activity, etc.) with a set of read-only tools.MIT