Oura MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| OURA_PERSONAL_ACCESS_TOKEN | Yes | Your Oura Personal Access Token from https://cloud.ouraring.com/personal-access-tokens |
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": true
} |
| logging | {} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| extensions | {
"io.modelcontextprotocol/ui": {}
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| oura_get_daily_summaryA | One row per day joining readiness, sleep, activity, and recovery signals. THIS IS THE CROSS-SOURCE JOIN TABLE. Use it first for almost any question about
how training/activity relates to recovery — it lets you join Oura against a Strava
connector on CSV columns (units in the name): date, readiness_score(0-100), sleep_score(0-100), activity_score(0-100), total_sleep_h, bedtime (HH:MM local, when sleep started), resting_hr_bpm (lowest nightly HR, a resting-HR proxy), avg_hrv_ms, resp_rate_brpm (overnight respiratory rate), temp_deviation_c (body temp vs baseline), breathing_disturbance_idx, steps, active_cal, stress_high_min (stressful daytime minutes), day_summary Defaults to the last 30 days. Higher readiness/sleep/activity scores are better; a rising resting_hr or positive temp_deviation often signals incomplete recovery. resp_rate_brpm and breathing_disturbance_idx are leading illness/strain flags — a sustained rise in either often precedes a subjective sense of getting sick. bedtime is included because sleep timing (not just duration) drives next-day recovery, and it anchors any analysis of late meals/alcohol relative to sleep. |
| oura_get_sleep_detailA | Per-night sleep architecture for drilling into specific nights. Use after oura_get_daily_summary when you need stage breakdown or sleep timing. One row per sleep period (a day may have a nap plus the main sleep). Concise CSV columns: date, type, bedtime_start, bedtime_end, total_sleep_h, time_in_bed_h, deep_h, rem_h, light_h, awake_h, efficiency_pct, latency_min, avg_hr_bpm, lowest_hr_bpm, avg_hrv_ms, resp_rate_brpm Defaults to the last 14 days. Use 'detailed' for raw fields and 5-min hypnogram. |
| oura_get_sleep_timeA | Oura's own bedtime guidance: the optimal bedtime window and what it recommends. Use to answer "am I going to bed at the right time?" — distinct from
oura_get_daily_summary's CSV columns: date, optimal_bedtime_start, optimal_bedtime_end (local HH:MM; blank when Oura couldn't compute a window), recommendation, status recommendation is one of: follow_optimal_bedtime — you're aligned; keep the current window earlier_bedtime — go to bed earlier later_bedtime — go to bed later earlier_wake_up_time / later_wake_up_time — adjust the wake side instead status is one of: optimal_found — a concrete window was computed (times populated) only_recommended_found — Oura has a direction but NOT enough data for a window, so the time columns are blank. This is normal, not an error. not_enough_nights / no_data — insufficient history in the range. Note: Oura returns these times as raw second-offsets from local midnight; this tool
decodes them to HH:MM. A run of identical |
| oura_get_readiness_detailA | Daily readiness with every contributor broken out — explains WHY readiness moved. Use when oura_get_daily_summary shows a readiness change and you want the driver. Each contributor is a 0-100 sub-score (higher = better). A low hrv_balance or resting_heart_rate contributor the morning after a hard session points to load. CSV columns: date, score, temp_deviation_c, activity_balance, body_temperature, hrv_balance, previous_day_activity, previous_night, recovery_index, resting_heart_rate, sleep_balance Defaults to the last 30 days. |
| oura_get_stress_resilienceA | Daytime stress load plus long-term resilience — the daytime side of recovery. Combines the daily_stress and daily_resilience collections into one table so you can see whether high-load days accumulate physiological stress and erode resilience. CSV columns: date, stress_high_min (stressful daytime minutes), recovery_high_min (restorative minutes), day_summary (restored|normal|stressful), resilience_level (limited|adequate|solid|strong|exceptional), sleep_recovery, daytime_recovery, stress (the last three are 0-100 resilience contributors). Defaults to the last 30 days. Resilience needs ~weeks of data to populate. |
| oura_get_workoutsA | Workouts as logged by Oura — cross-check or supplement Strava activities. Oura auto-detects and lets you tag workouts. Use this to reconcile against a Strava
connector (match on date/time), catch sessions Strava missed, or see Oura's intensity
label. CSV columns: date, activity, intensity (easy|moderate|hard), start_time, end_time, duration_min, distance_km, calories, source, label Defaults to the last 30 days. |
| oura_get_baselinesA | Slow-moving health baselines: SpO2, breathing, arterial stiffness, VO2 max. These trend over weeks/months, so the default window is 90 days. Use to track long-term vascular and aerobic health alongside training history. CSV columns: date, spo2_avg_pct (overnight blood-oxygen %), breathing_disturbance_index, pulse_wave_velocity_m_s, vascular_age_years, vo2_max_ml_kg_min pulse_wave_velocity_m_s (meters/second) is the RAW arterial-stiffness measurement and the most clinically meaningful vascular metric here — lower is better/more elastic; it is the same class of measure (PWV) used in hypertension research. vascular_age_years is a derived presentation of it, so prefer PWV when tracking real change. IMPORTANT — sparsity: vo2_max is a measurement EVENT, not a daily value (often only a handful of readings per quarter), so most rows will be blank for it. Blank does NOT mean "no VO2 data" — read the footer, which reports the most recent reading in the window. cardiovascular_age/VO2 also require a compatible ring/firmware. |
| oura_get_heart_rateA | Fine-grained heart-rate timeseries (one sample every few minutes). This is high-volume data, so default to a SHORT window (<= ~2 days) and the 'summary'
format. Oura tags each sample with a summary -> CSV with one row per source: source, samples, min_bpm, avg_bpm, max_bpm,
plus a final 'all' row.
raw -> CSV: timestamp, bpm, source (capped at |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
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/echocharlie/oura-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server