Skip to main content
Glama
rollecode

Oura MCP server

by rollecode

Oura MCP server

Version Python Node OAuth

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:

  • sleep filtert nach bedtime_start in 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_activity und workout behandeln end_date als 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

oura_daliy_summary

Schlaf-Score, Readiness-Score, Schlafperioden und Aktivität für einen Tag, in einem Aufruf

oura_sleep

Der Tages-Score mit den Einfl ieß faktoren, plus die rohen Perioden: Dauer, Dauer, Schlafphasen, Herzfrequenz, HRV

oura_sleep_time

Oura empfohlenes Schlafenszeitfenster und wie die tatsächliche Schlafenszeit im Vergleich ausfiel

oura_readiness

Readiness-Score und seine Einflussfaktoren

oura_resilience

Langfristiges Resilience-Level mit Schlaf- und tagsess erholungsfaktoren

oura_cardiovascular_age

Geschätztes Gefäßalter und Pulswellengeschwindigkeit

oura_vo2_max

Geschätzter VO2max-Wert

oura_activity

Score, Schritte, Kalorien, Distanz und der Verteilung der Aktivitätszeit

oura_workouts

Workoutuits inkl. Herzfrequenz, Kalorien, Dauer und Intensität

oura_heart_rate

Kontinuierliche Herzfrequenzmesswerte für ein Zeitfenster

oura_stress

Tagesstress und Erholungszeit

oura_spo2

Mittlere nächtliche Blut Sauerstoffssättigung

oura_sessions

Meditation, Atemübungen und Entspannungssitzungen

oura_tags

Pro Tag erfasste Tags, sowohl klassische als auch erweiterte Art

oura_rest_mode

Ruhemodus-Zeiträume, die einen Tag abdecken

oura_ring

Jeder jemals verbundene Ring, zusätzlich mit Batteriestand

oura_personal_info

Alter, Gewicht, Größe, biologisches Geschlecht, E-Mail

oura_trends

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.com

Die 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/token

Hole 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 nginx

Richte 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/mcp

Verbinden

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 user

Alternativ über stdio entnehmen, ohne die Login-Schicht:

OURA_TOKEN=your-token .venv/bin/oura-mcp

Danksagungen

Die Login-Schicht stammt von stellecode/obsidian-remote-mcp.

-
license - not tested
Not graded
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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.

View all MCP Connectors

Latest Blog Posts

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