| name | oura |
| description | Query Oura Ring health data — sleep, readiness, activity, workouts, HR, stress, SpO2, sessions, and trends |
| argument-hint | [sleep | readiness | activity | workouts | stress | spo2 | sessions | trends | hr <start> <end> | summary] |
| allowed-tools | mcp__oura__oura_daily_summary, mcp__oura__oura_sleep, mcp__oura__oura_readiness, mcp__oura__oura_activity, mcp__oura__oura_workouts, mcp__oura__oura_heart_rate, mcp__oura__oura_stress, mcp__oura__oura_spo2, mcp__oura__oura_sessions, mcp__oura__oura_trends |
/oura — Oura Ring Health Data
Query and present Oura Ring health data in a conversational, insight-driven format.
First-Time Setup
If any tool call returns an auth error:
- Tell the user: "Oura isn't connected yet. Run
npx @daveremy/oura-mcp config set-token YOUR_TOKEN with a personal access token from https://cloud.ouraring.com/personal-access-tokens"
- Do not retry until the user confirms they've set it up.
When to Use
Trigger on phrases like:
- "How did I sleep?" / "sleep score" / "sleep data"
- "How's my readiness?" / "am I recovered?"
- "Show my activity" / "steps today"
- "Any workouts?" / "workout data"
- "Heart rate during..." / "HR data"
- "Stress levels" / "how stressed am I?"
- "Blood oxygen" / "SpO2"
- "Meditation sessions" / "breathing sessions"
- "Health trends" / "how have I been doing this week?"
- "Oura summary" / "health briefing"
Arguments
Parse from $ARGUMENTS:
| Argument | Action |
|---|
| (empty) | Daily health briefing for today |
sleep | Detailed sleep data |
readiness | Readiness score and contributors |
activity | Activity data (steps, calories, distance) |
workouts | Auto-detected workouts |
hr <start> <end> | Heart rate for a time window (ISO 8601 datetimes) |
stress | Daily stress and recovery |
spo2 | Blood oxygen percentage |
sessions | Meditation, breathing, relaxation sessions |
trends or trends <days> | Multi-day sleep + readiness trends (default 7 days) |
summary | Full daily summary (same as empty) |
Dates default to today. If the user mentions a specific date (e.g., "yesterday", "last Tuesday"), convert it to YYYY-MM-DD format.
Workflows
Default / Summary (no args or summary)
- Call
oura_daily_summary (no args — defaults to today)
- Present as a health briefing:
- Lead with sleep score and readiness score as headline numbers
- Highlight anything notable (low scores, high HRV, unusual patterns)
- Include key activity metrics (steps, calories)
- Keep it conversational — 3-5 sentences max for the overview
- Offer: "Want me to dig into sleep details, trends, or anything specific?"
Sleep (sleep)
- Call
oura_sleep
- Present insights:
- Sleep score and total sleep time
- Sleep stage breakdown (deep, REM, light, awake)
- Average HR and HRV during sleep
- Notable patterns (e.g., high awake time, low deep sleep)
- Compare to typical ranges if data suggests anything unusual
Readiness (readiness)
- Call
oura_readiness
- Present:
- Readiness score as headline
- Top contributing factors (positive and negative)
- Actionable insight (e.g., "Recovery looks good — solid day for a hard workout" or "Below baseline — consider taking it easy")
Activity (activity)
- Call
oura_activity
- Present:
- Steps, active calories, total calories
- Activity score if available
- Distance, movement metrics
Workouts (workouts)
- Call
oura_workouts
- Present each workout:
- Type, duration, calories burned
- Average and max HR if available
- Intensity level
- If no workouts found, say so and suggest checking the date
Heart Rate (hr <start> <end>)
- Parse start and end datetimes from arguments
- Call
oura_heart_rate with start_datetime and end_datetime
- Present:
- HR range (min, max, average) over the window
- Notable spikes or drops
- If the window overlaps a workout, note the correlation
- If args are missing, ask: "I need a time window — e.g.,
/oura hr 2026-03-11T08:00:00+00:00 2026-03-11T09:00:00+00:00"
Stress (stress)
- Call
oura_stress
- Present:
- Stress level and recovery balance
- Context on what the numbers mean
SpO2 (spo2)
- Call
oura_spo2
- Present:
- SpO2 percentage
- Note if it's in normal range (95-100%) or worth attention
Sessions (sessions)
- Call
oura_sessions
- Present each session:
- Type (meditation, breathing, etc.), duration
- HR data if available
- If no sessions, say "No sessions recorded today."
Trends (trends or trends <days>)
- Parse optional days count from arguments (default 7)
- Call
oura_trends with days parameter
- Present:
- Sleep and readiness scores over the period
- Use a simple text table or aligned format for readability
- Highlight best/worst days
- Note any patterns (improving, declining, consistent)
- Calculate averages
Presentation Style
- Lead with numbers: "Sleep: 85 | Readiness: 78" — scores first, details after
- Conversational tone: Brief insights, not raw JSON dumps
- Highlight anomalies: Flag anything notably high, low, or different from recent patterns
- Offer next steps: End with a suggestion for what else to explore
- Keep it concise: Default to a brief overview; go deeper only when asked or when the specific endpoint is requested
- Dates: Show dates in a human-friendly format (e.g., "Monday Mar 10") alongside scores