Oura MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| OURA_MCP_HOST | No | Listen address for HTTP transport. | 127.0.0.1 |
| OURA_MCP_PORT | No | Listen port for HTTP transport. | 8000 |
| OURA_MCP_SANDBOX | No | Set to '1' to serve Oura's sample data with no sign in. | |
| OURA_MCP_TRANSPORT | No | Transport mode: stdio or http. | stdio |
| OURA_MCP_SESSION_DIR | No | Directory for the file session fallback. | ~/.oura-mcp-server |
| OURA_MCP_ALLOWED_HOSTS | No | Comma-separated additional allowed Host headers. | |
| OURA_MCP_ALLOWED_ORIGINS | No | Comma-separated additional allowed browser Origins. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_daily_activityA | Get daily activity: activity score (0-100) and contributors, steps, active and total calories (kcal), equivalent walking distance (meters), time in high, medium and low activity and sedentary (seconds), MET minutes, and inactivity alerts. |
| get_workoutsB | Get workouts, auto detected or entered by the user: activity type, start and end time, calories, distance (meters), intensity, and source. |
| get_sessionsA | Get guided and unguided sessions from the Oura app (breathing, meditation, rest, etc.): type, start and end time, and mood. Set include_time_series for the heart rate, HRV and motion recorded during each session. |
| setup_authenticationB | Get instructions for connecting this server to an Oura account. |
| check_auth_statusA | Report whether an Oura session is stored, which scopes it has, and when it expires. Never returns token values. The access token refreshes automatically, so an expired access token with a stored refresh token is still a working session. |
| get_documentA | Get one Oura document by id, with every field including embedded time series. Use it to drill into a single sleep period, workout or session from a list result. |
| get_heart_rateB | Get heart rate samples (bpm) at roughly 5 minute intervals, each tagged with its source: awake, rest, sleep, workout, session or live. Defaults to the last 24 hours. |
| get_daily_stressA | Get daytime stress: seconds spent in high stress and in high recovery each day, and a day summary of restored, normal or stressful. |
| get_daily_spo2B | Get average blood oxygen saturation (SpO2 %) during sleep and the breathing disturbance index. Requires a Gen 3 or later ring. |
| get_daily_cardiovascular_ageB | Get cardiovascular age: Oura's estimate of vascular age in years, from pulse wave velocity, to compare against actual age. |
| get_vo2_maxA | Get VO2 max (cardio capacity) estimates in ml/kg/min. Updated infrequently. |
| get_personal_infoA | Get the signed in user's profile: age, weight, height, biological sex and email. Fields the user did not grant a scope for come back null. |
| get_ring_configurationA | Get the user's ring(s): hardware generation, color, design, size, firmware and setup date. |
| get_ring_battery_levelA | Get ring battery level (%) and charging state. Returns the latest reading by default; set latest to false for readings over a window. |
| get_enhanced_tagsA | Get tags the user logged in the Oura app (caffeine, alcohol, illness, travel, custom tags, etc.) with start and end times and comments. Useful for explaining changes in sleep or readiness. |
| get_rest_mode_periodsC | Get rest mode periods (when the user turned on rest mode, typically for illness or recovery), with start and end times and logged episodes. |
| get_daily_readinessA | Get daily readiness scores (0-100) with contributors (activity balance, body temperature, HRV balance, previous day activity, previous night, recovery index, resting heart rate, sleep balance, sleep regularity) and body temperature deviation from baseline in degrees Celsius. |
| get_daily_resilienceA | Get daily resilience: an estimate of the ability to withstand and recover from physiological stress, as a level (limited, adequate, solid, strong, exceptional) with sleep recovery, daytime recovery and stress contributors. |
| get_daily_sleepA | Get daily sleep scores (0-100) with their contributors: deep sleep, efficiency, latency, REM sleep, restfulness, timing and total sleep. For durations, stages, heart rate and HRV use get_sleep_periods. |
| get_sleep_periodsA | Get detailed sleep periods: bedtime start and end, total, deep, REM and light sleep durations (seconds), awake time, latency, efficiency, average and lowest heart rate, average HRV, breathing rate, and the readiness computed from that sleep. A day can have several periods. type 'long_sleep' is the main sleep; naps and short rests appear as 'sleep', 'late_nap' or 'rest'. |
| get_sleep_timeA | Get Oura's recommended bedtime window for each day, calculated from recent sleep. |
| get_daily_summaryA | Get one record per day combining the headline numbers: sleep, readiness and activity scores, steps and calories, stress and recovery time, SpO2, resilience level, temperature deviation, and the main sleep period (bedtime, durations, efficiency, HRV, heart rate). Durations are in seconds. The best starting point for questions like "how have I been sleeping" or "how was my week". Collections the session has no scope for are listed under 'unavailable' and the rest are still returned. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| weekly_health_review | Review recent sleep, readiness, activity and recovery trends. |
| sleep_deep_dive | Analyze a single night's sleep against recent nights. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 22 tools
Every tool targets a distinct data resource or lifecycle step. Overlaps like get_daily_sleep, get_sleep_periods, get_sleep_time, and get_daily_summary are clearly differentiated by their descriptions (scores vs. detailed periods vs. recommended bedtime vs. combined summary). No two tools appear to serve the same purpose.
All tools follow a consistent verb_noun pattern using lowercase with underscores, predominantly 'get_' for data retrieval, with setup_authentication and check_auth_status as logical exceptions for auth flows. The pattern is predictable and uniform.
22 tools is on the higher end but appropriate for a comprehensive health/activity API covering many distinct data types (sleep, activity, readiness, stress, HR, etc.). Each tool maps to a unique resource, and the count feels justified rather than bloated.
The server covers a wide range of Oura data: daily scores and contributors, detailed periods, workouts, sessions, tags, rest mode, personal info, ring hardware, and auth status. It also includes a convenient summary tool and a generic document retriever. For a read-focused API, there are no obvious gaps for typical agent use cases.