Skip to main content
Glama
rollecode

Oura MCP server

by rollecode

Oura MCP server

Version Python Node OAuth

Получайте данные кольца Oura из Claude.ai и Claude Code: сон — с полными периодами, из которых складывается оценка, готовность, активность, тренировки, пульс, стресс, SpO2, устойчивость, сердечно-сосудистый возраст, VO2 max, рекомендации по времени сна, теги и режим отдыха. Сервер работает с документированным Oura API v2, а перед ним находится вход через OAuth 2.1, так что вы можете добавить его в Claude.ai как кастомный коннектор. Claude Code может использовать обычный токен.

Почему не npm-пакет

Сначала это было обёрткой над @daveremy/oura-mcp, а затем она заменила исходный пакет, потому что тот не возвращает ничего на большую часть запросов. Такие пакеты запрашивают диапазон из одного дня как start_date == end_date, а Oura API отвечает на такие запросы не так, как можно было бы ожидать по названию:

  • sleep фильтрует по bedtime_start в UTC, поэтому ночь, начавшаяся в 00:31 по местному времени (UTC+3), попадает на предыдущий UTC-день и выпадает из окна собственного дня;

  • daily_activity и workout считают end_date исключительным, поэтому диапазон одного дня становится нулевой ширины.

Результат оказывается молчаливым: oura_sleep возвращает оценку с пустым массивом periods, oura_activity возвращает null, а oura_workouts возвращает [] при каждом запросе за один день. Ошибок не возникает, поэтому это выглядит как «данные не записаны», а не как «неверный запрос». Этот сервер расширяет диапазон на один день в обе стороны и затем фильтрует лишние записи по полю day каждой записи — такой подход корректен с учётом часовых поясов, — а также перебирает next_token до исчерпания, а не молча отдаёт одну страницу.

Инструменты

Tool

What you get

oura_daily_summary

Оценка сна, оценка готовности, периоды сна и активность за день — одним вызовом

oura_sleep

Оценка с её составляющими и исходные периоды: длительность, стадии сна, пульс, HRV

oura_sleep_time

Рекомендованное Oura окно для отхода ко сну и то, как фактическое время отбоя в него ложилось

oura_readiness

Оценка готовности и её составляющие

oura_resilience

Долгосрочная устойчивость и факторы восстановления во сне и в течение дня

oura_cardiovascular_age

Оценочный сосудистый возраст и скорость пульсовой волны

oura_vo2_max

Оценочный VO2 max

oura_activity

Оценка, шаги, калории, дистанция и разбивка по времени активности

oura_workouts

Тренировки с пульсом, калориями, длительностью и интенсивностью

oura_heart_rate

Непрерывные замеры пульса за временное окно

oura_stress

Дневной стресс и время восстановления

oura_spo2

Средний ночной уровень кислорода в крови

oura_sessions

Сеансы медитации, дыхательных упражнений и расслабления

oura_tags

Теги, внесённые за день, — как старые, так и улучшенные

oura_rest_mode

Периоды режима отдыха, покрывающие день

oura_ring

Каждое кольцевое устройство, когда-либо связанное с аккаунтом, и показания заряда батареи

oura_personal_info

Возраст, вес, рост, биологический пол, email

oura_trends

Оценки сна, готовности, активности и стресса за период дней

Каждый инструмент с датой принимает необязательный аргумент date в формате YYYY-MM-DD; по умолчанию это сегодня. Oura относит ночь к тому дню, когда вы проснулись.

oura_vo2_max, oura_sleep_time и oura_cardiovascular_age по замыслу редкие данные: Oura вычисляет их периодически, а не ежедневно, поэтому пустой результат — это нормально, а не сбой синхронизации.

Как это устроено

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

Порты — 8440-8442, чтобы не пересекаться с другими MCP-серверами на этом хосте. Сервер на :8440 не имеет собственного входа и не привязывается никуда, кроме loopback, поэтому до него доступ только через слой входа.

Установка

Нужны Python 3.12 или новее и Node для слоя входа.

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

Получите токен Oura на странице cloud.ouraring.com.

Затем подставьте YOUR_USER и имя хоста в systemd/*.service и nginx/oura-mcp.conf, и:

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

Направьте туннель или HTTPS-прокси на 127.0.0.1:8441. OAuth требует HTTPS.

Проверьте снаружи: discovery должен возвращать метаданные, а /mcp без токена — 401.

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

Подключение

Claude.ai: Настройки, Коннекторы, Добавить кастомный коннектор, https://your-host/mcp, client ID и secret оставьте пустыми.

Claude Code:

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

Запуск через stdio вместо этого — безо всякого слоя входа:

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

Благодарности

Слой входа взят из 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