Oura MCP server
Oura MCP server
Lies deine deinen Oura-Ring über Claude.ai und Claude Code aus: Schlaf mit den vollständigen Perioden hinter dem Score, Readiness, Aktivität, Workouts, Herzfrequenz, Stress, SpO2, Resilienz, kardiovaskuläres Alter, Blutdruck, VO2max, Empfehlungen zur Schlafenszeit, Tags und Ruhemodus. Er spricht mit der dokumentierten Oura-API v2 und schaltet ein OAuth-2.1-Login vor, damit du sie als benutzerdefinierten Connector in Claude.ai hinzufügen kannst. Claude Code kann stattdessen ein einfaches Token verwenden.
Warum nicht das npm-Paket
Die Geschichte begann als Wrapper um einen @daver/oura-mcp und hat ihn ersetzt, weil dieses Paket bei den meisten Anfragen nichts zurückgibt. Es fragt Tagesbereiche als start_date == end_date ab, und Oura antwortet darauf nicht so, wie die Begriffe es nahelegen:
sleepfiltert nachbedtime_startin UTC; eine Nacht, die um 00:31 Ortszeit (UTC+3) beginnt, landet auf dem vorherigen UTC-Tag und fällt aus dem Tagesfenster ihres eigenen Tages heraus. Auch.daily_activityundworkoutbehandelnend_dateals exklusiv, wodurch ein gleitender Zeitraum am selben Tag die Breite null hat.
Das Ergebnis ist stillschweigend falsch: Bei jedem Einzel-Tagesaufruf liefert oura_sleep einen Score mit einem leeren periods-Array, oura_activity liefert null und oura_workouts liefert []. Nichts gibt einen Fehler zurück, sodass es wie „keine Daten aufgezeichnet“ wirkt statt „die Frische war falsch“. Dieser Server erweitert den Zeitraum auf beiden Seiten und filtert anhand des day-Felds des jeweiligen Datensatzes zurück, was zeitzonzenkorrekt ist. Er folgt außerdem next_token, bis alle Seiten durchlaufen sind, statt stillschweigend nur eine Seite zurückzugeben.
Werkzeuge
Tool | Das bekommst du |
| Schlaf-Score, Readiness-Score, Schlafperioden und Aktivität für einen Tag, in einem Aufruf |
| Der Tages-Score mit den Einfl ieß faktoren, plus die rohen Perioden: Dauer, Dauer, Schlafphasen, Herzfrequenz, HRV |
| Oura empfohlenes Schlafenszeitfenster und wie die tatsächliche Schlafenszeit im Vergleich ausfiel |
| Readiness-Score und seine Einflussfaktoren |
| Langfristiges Resilience-Level mit Schlaf- und tagsess erholungsfaktoren |
| Geschätztes Gefäßalter und Pulswellengeschwindigkeit |
| Geschätzter VO2max-Wert |
| Score, Schritte, Kalorien, Distanz und der Verteilung der Aktivitätszeit |
| Workoutuits inkl. Herzfrequenz, Kalorien, Dauer und Intensität |
| Kontinuierliche Herzfrequenzmesswerte für ein Zeitfenster |
| Tagesstress und Erholungszeit |
| Mittlere nächtliche Blut Sauerstoffssättigung |
| Meditation, Atemübungen und Entspannungssitzungen |
| Pro Tag erfasste Tags, sowohl klassische als auch erweiterte Art |
| Ruhemodus-Zeiträume, die einen Tag abdecken |
| Jeder jemals verbundene Ring, zusätzlich mit Batteriestand |
| Alter, Gewicht, Größe, biologisches Geschlecht, E-Mail |
| Schlaf-, Readiness-, Aktivitäts- und Stress-Scores über einen mehrte-Tenter Zeitraum |
Jedes datumsbezogene Tool nimmt eine optionale date im Format YYYY-MM-DD an und standardmäßig ist der heutige Tages. Oura verbucht eine Nacht unter dem Tag, an dem du aufwachtst.
Für dich oura_vo2_max, oura_sleep_time und oura_kardiovaskulär_age sind spärlich von Natur: Oura berechnet man periodisch, nicht täglich, fällt daher ist ein leeres Ergebnis normal und kein Synchronisierungsfehler.
Wie alles zusammenspielt
Claude.ai / Claude Code
| HTTPS
Cloudflare Tunnel, or any proxy that gives you HTTPS
|
nginx 127.0.0.1:8441
|
auth-server.js :8442 handles the login and the tokens
|
oura-mcp :8440 streamable HTTP, local only
|
api.ouraring.comDie Ports 8440-8442 liegen so, dass sie die anderen MCPs auf diesem Host nicht behindern. Der Server :8440 hat kein eigenes Login und weigert sich, an etwas anderes als Loopback zu binden, sodass er nur über die Login-Schicht erreichbar ist.
Einrichtung
Das braucht Python 3.12 oder neuer und Node für die Login-Schicht.
python3 -m venv .venv
.venv/bin/pip install -e .
npm install --omit=dev
mkdir -p ~/.config/oura-mcp && chmod 700 ~/.config/oura-mcp
echo "OURA_TOKEN=your-personal-access-token" > ~/.config/oura-mcp/env
chmod 600 ~/.config/oura-mcp/env
CONFIG_DIR=~/.config/oura-mcp node set-password.js 'your-password-here'
openssl rand -hex 32 > ~/.config/oura-mcp/token
chmod 600 ~/.config/oura-mcp/tokenHole deinen Oura-Token von cloud.ouraring.com.
Dann fülle in systemd/*.service und in den nginx/oura-mcp.confdie WerteYOUR_USER` und den Hostname aus, und:
sudo cp systemd/*.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable --now oura-mcp oura-mcp-auth
sudo cp nginx/oura-mcp.conf /etc/nginx/sites-enabled/oura-mcp
sudo nginx -t && sudo systemctl reload nginxRichte einen Tunnel oder einen HTTPS-Proxy auf 127.0.0.1:8441 aus. OAuth braucht HTTPS.
Teste nach außen: Die Discovery sollte Metadaten zurückgeben, und /mcp ohne Token muss 401 liefern.
curl https://your-host/.well-known/oauth-authorization-server
curl -o /dev/null -w '%{http_code}\n' -X POST https://your-host/mcpVerbinden
Claude.ai: Einstellungen, Connectors, Benutzerdefinierten Connector hinzufügen, https://your-host/mcp, Client-ID und Secret leer lassen.
Claude Code:
claude mcp add --transport http oura https://your-host/mcp \
--header "Authorization: Bearer $(cat ~/.config/oura-mcp/token)" --scope userAlternativ über stdio entnehmen, ohne die Login-Schicht:
OURA_TOKEN=your-token .venv/bin/oura-mcpDanksagungen
Die Login-Schicht stammt von stellecode/obsidian-remote-mcp.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
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…
Garmin data in Claude & ChatGPT via the Garmin Health API. OAuth sign-in, no password sharing.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/rollecode/oura-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server