Oura MCP server
Oura MCP server
Claude.ai와 Claude Code에서 Oura 링 데이터를 읽어보세요. 수면 점수 뒤에 숨은 전체 수면 주기(periods), 준비도, 활동, 운동, 심박수, 스트레스, SpO2, 회복 탄력성, 심혈관 나이, VO2max, 취침 추천, 태그와 휴식 모드를 확인할 수 있습니다. 이 서버는 문서화된 Oura API v2와 통신하며, OAuth 2.1 로그인을 앞에 두어 Claude.ai에 사용자 지정 커넥터로 추가할 수 있게 해줍니다. Claude Code에서는 일반 토큰을 대신 사용할 수 있습니다.
npm 패키지를 쓰지 않는 이유
이 프로젝트는 @daveramey/oura-mcp를 감싸는 래퍼로 시작했다가, 그 패키지가 요청한 것 대부분에 대해 아무것도 반환하지 않아 대체했습니다. 그 패키지는 단일 일 범위를 start_date == end_date로 조회하는데, Oura API는 그 이름이 암시하는 방식으로 응답하지 않습니다:
sleep는 UTC의bedtime_start로 필터링하므로, 현지 시각(UTC+3) 00:31에 시작하는 밤은 이전 UTC 날짜에 해당하여 해당 날짜의 창 밖으로 빠집니다.daily_activity와workout는end_date를 배타적으로 처리하여, 같은 날짜만으로 구성된 범위는 폭이 0이 됩니다.
그 결과는 조용히 넘어갑니다. oura_sleep은 빈 periods 배열을 가진 점수를, oura_activity는 null을, oura_workouts는 []를 단일 날짜 호출 때마다 반환합니다. 아무 오류도 발생하지 않으므로, "쿼리가 잘못되었다"기보다 "기록된 데이터가 없다"로 읽힙니다. 이 서버는 범위를 양쪽으로 늘리고 각 레코드의 자체 day 필드를 기준으로 다시 걸러내므로 시간대가 맞고, 조용히 한 페이지만 반환하는 대신 next_token을 소진할 때까지 따라갑니다.
도구
Tool | What you get |
| 하루의 수면 점수, 준비도 점수, 수면 구간과 활동을 한 번의 호출로 제공 |
| 기여 요인과 함께 일일 점수, 그리고 기간별 원시 데이터: 시간, 수면 단계, 심박수, HRV |
| Oura가 권장하는 취침 시간대와 실제 취침 시간을 비교 |
| 준비도 점수와 그 기여 요인 |
| 수면 및 낮 회복 기여 요인을 포함한 장기 회복탄력성 수준 |
| 추정 혈관 연령과 맥파 전파 속도 |
| 추정 VO2 max |
| 점수, 걸음 수, 칼로리, 거리 및 활동 시간 세부 내역 |
| 심박수, 칼로리, 시간, 강도가 포함된 운동 정보 |
| 특정 시간 창에 대한 연속 심박수 샘플 |
| 일일 스트레스와 회복 시간 |
| 야간 평균 혈중 산소 |
| 명상, 호흡, 이완 세션 |
| 하루 동안 기록된 태그(기존 방식과 혁신 방식 모두) |
| 하루를 포함하는 휴식 모드 기간 |
| 지금까지 연동된 모든 링과 배터리 수치 |
| 나이, 체중, 키, 생물학적 성별, 이메일 |
| 일정 기간의 수면, 준비도, 활동, 스트레스 점수 추이 |
날짜를 사용하는 모든 도구는 선택적으로 YYYY-MM-DD 형식의 date를 받고, 기본값은 오늘입니다. 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.com8440-8442의 포트는 이 호스트의 다른 MCP들과 겹치지 않습니다. :8440에서 실행되는 서버는 자체 로그인이 없고 루프백 외의 주기에는 바인딩을 거부하므로, 항상 로그인 계층을 통해서만 접근됩니다.
설정
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/tokenOura 토큰은 cloud.ouraring.com에서 받으세요.
그런 다음 systemd/*.service와 nginx/oura-mcp.conf에서 YOUR_USER와 호스트명을 채우고:
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 nginx127.0.0.1:8441을 가리키는 터널 또는 HTTPS 프록시를 연결하세요. OAuth에는 HTTPS가 필요합니다.
외부에서 확인하세요. 디스커버리가 메타데이터를 반환해야 하고, 토큰 없이 /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, 클라이언트 ID와 시크릿은 비워 둡니다.
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에서 나왔습니다.
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