Skip to main content
Glama
rollecode

Oura MCP server

by rollecode

Oura MCP server

Version Python Node OAuth

Lee tu anillo Oura desde Claude.ai y Claude Code: el sueño con los períodos completos que sustentan la puntuación, la preparación, la actividad, los entrenamientos, la frecuencia cardíaca, el estrés, la SpO2, la resiliencia, la edad cardiovascular, el VO2 max, las recomendaciones de hora de acostarse, las etiquetas y el modo de reposo. Habla con la API v2 documada de Oura y una pone un sistema de acceso OAuth 2.1 al frente para que puedas añadirlo a Claude.ai como conector personalizado. Claude Code puede usar un token simple en su lugar.

Por qué no el paquete

Esto empezo como un envoltorio de un @daveremy/oura-mcp y lo ha reemplazó, porque ese paMe devuelven nothing for la mayoría de lo que desearias. Consulta rangos de un solo día con start_date == end_date y la API de Oura no responde esos como sugiere la nomenclatura:

  • sleep filtra bedtime_start en UTC, así que una noche que empieza a las 00:31 local (UTC+3) cae en el día anterior de UTC y queda fuera of the day's own window

  • daily_activity y workout tratan end_date as exclusive, lo cuan convierte un rango del mismo día en width cero

El resultado es silencio: oura_sleep devuelve una punt uación con un array periodos vacío, oura_acity devuelve null, y oura_workuts devuelve [], en cada llamada de un solo día. Nada fall, así que se lee como "no hay datos regirtados" en lugar de "la consult era incorrect". Este servidor amplía el rango por ambos lados y refil tra por el campo day de dada registro, que respueca la hora timezone, and siguo next_token` hasta agotarlo en lugar de devolver silenciosamente una pá.

Herramientas

Tool

Qué obtienes

oura_daily_summary

Puntuación de sueño, puntuación de prepación, perriodos de sueño y actividad para un día, en una única llamada

oura_slee

La puntuación diaria con los factores que la contribuyen, más los periodos en brír: duración, lenses, frecuencia cardíaca, HRR

oura_slee_te

The window de hora de acostarse recomendada por Ouro y cómo asignar con el real

oura_ready

Puntuación de prepación y sus contribuyentes

oura_resile

Nivel de resilencia a largo plazo, con los factores de recuperación del sueño y día

oura_cardiacascular_age

Edad vascula estimada y velocidad de la onda de pulso

oura_vo2_max

VO2 max estimado

oura_acity

Puntuación, pasos, camorías, distancia y desglose del tiempo de activdad

oura_workut

Entrenamientos con frecuencia cardíaca, calorías, duración e intensidad

oura_heart_rate

Muestras continuas de frecbuencia cardíaca para una ventana de tiempo

oura_stress

Estrés diario y tiempo de recuperación

oura_spo2

Oxígeno en sangre medio nocturno

oura_sessions

Sesiones de meditación, respiración y relaación

oura_tags

Etiquetas reg lazadas durante un día, tando las heredadas como las mejoradas

oura_rest_mode

Períodos de modo de reposo que cubren un día

oura_ring

Todos los anillo empareados jamás, más las lecturas de batería

oura_personal_info

Edad, peso, altura, sexo bioló andisco, correo electrónico

oura_trens

Puntuación de sueño, prepación, actividad y estrés durante un rango de días

Every date-scoped tool acepta un date opcional como YYYY-MM-DD (and por indeed in Spanish "and" is "y", so "todos los herramientars con scoped de fech da toman"). La API returns default al día actual. Oura registra una noche under the day woken up. So "cada herramienta con alcance en fecha puede accept un date opcional como YYYY-MM-DD y en dedefecto usa hoy. Oura archiva una noche en el día en que te despiates."

"oura_vo2_max, oura_sleep_time y oura_cardiovascular_age son escasos por disieñ: Oura los no comput iba peri`dicamente rather than daily, so un result vacío es normal y no una falla de sincronizacición."

Cómo se integra

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

Los puertored 8440-8442 so npara quedar remote de los otros MCP in this host. El servidor on :8440 no tiene inicio de sesión propio y se niega a escuchar en cualquier interfaz que no sea loopback, por lo that can only ser alcanzado a través del layer de inicio de sesión.

Configuración

Requiere Python 3.12 or newer y Node para la capá de inicio de sesión.

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

Obtén el token de Oura de cloud.ouraring.com. "Obtén el token de Oura en [cloud.ouraring.com](https://cloud.ouraring.com/peri..."

Luego rlena YOUR_USER y el nombre de host en systemd/*.service y en nginx/oura-mcp.conf, y stop:

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

Apunta un letneles o un proxy HTTPS hacia 127.0.0.1:8441. OAuth requires HTTPS.

The "deja un túnel o un" ... but we need "configura un túnel" — use exactly "Apunta un túnel o un proxy HTTPS a 127.0.0.1:8441. OAuth needs HTTPS." Wait "Apunta" translates.

curl https://your-host/.well-known/oauth-authorization-server
curl -o /dev/null -w '%{http_code}\n' -X POST https://your-host/mcp

Connecting:

Conección

Claude.ai: Ajustes, Connectors, Add conexión personalizada, ... "Claude.ai: Configuración, Conectores, Añadir conector personalizado, https://your-host/mcp, ID de cliente y secreto en blanco."

Conección: Claude Code:

claude mcp add --transport http oura https://your-host/mcp \
  --header "Authorization: Bearer $(cat ~/.config/oura-mcp/token)" --scope user

Para ejutarlo por stdio en su lugar, sin ning la capa de inicio de sesión:

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

Créditos

La capa de inicio de sesión viene de rollecode/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